
    ը	f#                    B   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ ej                  r	 ddlmZ n	ddlmc mZ ddlmZ ddlmZ ddlmZmZmZmZ ddl m!Z! dd	l"m#Z# dd
l$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl)m+Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@mAZA ddlBmCZC ddlD ddlE ddlFmGZGmHZHmIZIm2Z2mJZJmKZKmLZLmMZMmNZNmOZO ddlFm+ZP  e       \  ZQZRddlSmTZT ddlUmZV  G d de	j                        ZX G d dej                        ZZ G d d ej                        Z\ G d! d"e	j                        Z^ G d# d$e	j                        Z_ G d% d&e	j                        Z`y# e$ r ddlmc mc mZ Y Mw xY w)'a  
@package gmodeler.frame

@brief wxGUI Graphical Modeler for creating, editing, and managing models

Classes:
 - frame::ModelFrame
 - frame::ModelCanvas
 - frame::ModelEvtHandler
 - frame::VariablePanel
 - frame::ItemPanel
 - frame::PythonPanel

(C) 2010-2018 by the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Martin Landa <landa.martin gmail.com>
@author Python exports Ondrej Pesek <pesej.ondrek gmail.com>
    N)ogl)	globalvar)NewEvent)	GNotebook)GConsoleEVT_CMD_RUNEVT_CMD_DONEEVT_CMD_PREPARE)GConsoleWindow)Debug)GMessage
GExceptionGWarningGError)GetImageHandlers)TextEntryDialog)ShowAboutDialog)UserSettings)Menu)ModelerMenuData)GUI)PreferencesDialogPropertiesDialog)ModelerToolbar)Notification)PyStcSetDarkMode)GraphicalModelerGrassInterface)*)
ButtonEmptyBitmapImageFromBitmapr   NewId	StaticBox
StaticTextStockCursorTextCtrlIsDark)
try_remove)corec                   Z   e Zd Zej                   ed      fdZd Zd Zd Z	d Z
d Zd2dZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd2dZd Zd3dZd3dZd3dZ d Z!d Z"d2d Z#d! Z$d4d"Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4y)5
ModelFramezGraphical Modelerc                     | _         | _        d _        | _        d _        d _        d _        d _        t        t        j                        t        t        j                        d _        t        j                  j                   f|||d|  j                  d        j!                  t        j"                  t$        j&                  j)                  t*        j,                  d      t        j.                               t1         t3               j5                  d	      
       _         j9                   j6                         t;                _        t>        j@                  dk7  r jC                   j<                          jE                  d       _#        tI         t*        jJ                         _&        tO                _(         jP                  jS                  t        jT                         jW                  t        jX                                jP                  j[                   j                  d          t]         jP                         _/        ta                _1        te                _3        ti                _5        tm                _7        tq         | jn                         _9         jr                  jt                  jw                   fd        jn                  jy                  tz         fd        jn                  jy                  t|         fd        jy                  tz         j~                          jn                  jy                  t|         j                          jy                  t         j                          jy                  t         j                          jL                  j                   jP                  t        d      d        jL                  j                   jf                  t        d      d        jL                  j                   jb                  t        d      d        jL                  j                   jj                  t        d      d        jL                  j                   jr                  t        d      d        t        j                   jL                  j                  d       t        j                   j                  d        jy                  t        j                   j                          jy                  t        j                   j                          jL                  jy                  t        j                   j                          j                           j                  d!        j                  d"        jr                  r9 jr                  j                  t         j                         d   d#z               yy)$zGraphical modeler main window

        :param parent: parent window
        :param id: window id
        :param title: window title

        :param kwargs: wx.Frames' arguments
        NF(   )defaultcross)parentidtitleModelerz	grass.icoT)
separators)r1   modelr1   darwin   )number)r1   styler/   )	guiparent)r1   gifacegconsolec                 &    j                  |       S N)SetStatusText)messageselfs    //usr/lib/grass83/gui/wxpython/gmodeler/frame.py<lambda>z%ModelFrame.__init__.<locals>.<lambda>   s    D..w7     c                 F    j                  | t        j                        S N)eventnotification)_switchPageHandlerr   MAKE_VISIBLErI   rC   s    rD   rE   z%ModelFrame.__init__.<locals>.<lambda>   "    $11,*C*C 2  rF   c                 F    j                  | t        j                        S rH   )rK   r   RAISE_WINDOWrM   s    rD   rE   z%ModelFrame.__init__.<locals>.<lambda>   rN   rF   Modelr6   )pagetextnameItemsitems	Variables	variableszPython editorpythonzCommand outputoutput)i  ,  )i   iX  g      ?)Wr1   _gifacesearchDialog	baseTitle	modelFile
start_timemodelChanged
randomnessr&   wxCURSOR_ARROWCURSOR_CROSScursorsFrame__init__SetNameSetIconIconospathjoinr   ICONDIRBITMAP_TYPE_ICOMenubarr   GetModelmenubar
SetMenuBarr   toolbarsysplatform
SetToolBarCreateStatusBar	statusbarr   FNPageDStylenotebookModelCanvascanvasSetBackgroundColourSystemSettings	GetColourSYS_COLOUR_WINDOW	SetCursorrQ   r6   VariablePanelvariablePanel	ItemPanel	itemPanelPythonPanelpythonPanelr   	_gconsoler   goutputshowNotificationconnectBindr   r	   OnCmdRun	OnCmdDoner
   OnCmdPrepareEVT_MODEL_DONEOnModelDoneAddPage_	CallAfterSetSelectionByNameModelChanged	EVT_CLOSEOnCloseWindowEVT_SIZEOnSizeFNEVT_FLATNOTEBOOK_PAGE_CHANGEDOnPageChanged_layout
SetMinSizeSetSizeSetSashPositionintGetSize)rC   r1   r=   r2   r3   kwargss   `     rD   rh   zModelFrame.__init__U   s7     ! #2??3 1

 	$Lv"ELVLYGGBGGLL!2!2K@"BTBTU	
 099T9J
 	%%T2<<8#OODLL)--Q-7!Y5K5KL!$'''))"*>*>?	
 	dll9564;;'
*$7"$/&d3!D1%
 	%%--7	

 		
 		
 			+t}}-L$..9		/4#4#45		.$"2"234;;QwZgN4>>'
Q##!K.{ 	 	
 	!!/(: 	 	
 	A&6$7h 	 	
 	T]]55w?
T&&.		",, 2 23		"++t{{+2;;T=O=OP
#Z  <<LL((T\\^A->-E)FG rF   c                 (   t        j                  t         j                        }|j                  | j                  dt         j
                         | j                  d       | j                  |       |j                  |        | j                          y)z	Do layoutr9   
proportionflagTN)
rc   BoxSizerVERTICALAddr|   EXPANDSetAutoLayoutSetSizerFitLayout)rC   sizers     rD   r   zModelFrame._layout   s\    BKK(		$--ABII	>4 e		$rF   c                     t        | j                  |       }|j                  |       |j                  |j	                                |j                  |       y)zAdd event to itemN)ModelEvtHandlerrz   SetShapeSetPreviousHandlerGetEventHandlerSetEventHandler)rC   item
evthandlers      rD   	_addEventzModelFrame._addEvent   sE    $T^^T:
D!%%d&:&:&<=Z(rF   c                 X    t        j                  | j                   | j                        S )z$Returns random value to shift layout)randomrandintrb   rC   s    rD   _randomShiftzModelFrame._randomShift   s    ~~t.@@rF   c                     | j                   S )z
Get canvas)r~   r   s    rD   	GetCanvaszModelFrame.GetCanvas   s    {{rF   c                     | j                   S )z	Get model)r6   r   s    rD   rr   zModelFrame.GetModel   s    zzrF   c                    || _         | j                  r| j                   rL| j                  | j                  dz   t        j
                  j                  | j                        z   dz          y| j                  | j                  dz   t        j
                  j                  | j                        z          y| j                  | j                         y)zUpdate window title - r   N)ra   r_   SetTitler^   rl   rm   basename)rC   changeds     rD   r   zModelFrame.ModelChanged   s    #>>  NNU*RWW-=-=dnn-MMPSS dnnu4rww7G7G7WWXMM$..)rF   c                    |j                         }|| j                  j                  d      k(  r| j                  j	                         r| j                  j                          | j                  j                         rI| j                  t        dj                  | j                  j                  j                              d       n| j                  t        dj                  | j                  j                  j                              d       n8|| j                  j                  d      k(  r| j                  j                          |j                          y)zPage in notebook changedrY   z&{} script contains local modificationsr   {} script is up-to-daterV   N)GetSelectionr|   GetPageIndexByNamer   IsEmptyRefreshScript
IsModifiedrA   r   formatbodyscript_typer   UpdateSkip)rC   rI   rR   s      rD   r   zModelFrame.OnPageChanged   s   !!#4==33H=='')  ..0**,""@GG ,,11==
  ""188 ,,11==
  T]]55g>>NN!!#

rF   c                 :    | j                   j                  d       y)zSwitch to variables pagerX   N)r|   r   rC   rI   s     rD   OnVariableszModelFrame.OnVariables  s    ((5rF   c                 @    | j                         j                          yzRemove shapeN)r   RemoveSelectedr   s     rD   OnRemoveItemzModelFrame.OnRemoveItem  s    '')rF   c                     | j                  t        d      d       | j                         j                          | j                  dd       y)zRefresh canvaszRedrawing model...r    N)rA   r   r   Refreshr   s     rD   OnCanvasRefreshzModelFrame.OnCanvasRefresh  s;    112A6  "2q!rF   c                     	 | j                         j                         |j                     }t        |d      r|j	                  d       yy# t
        $ r Y yw xY w)zRun commandtaskTrunningN)rr   GetItemspidhasattrr   
IndexError)rC   rI   actions      rD   r   zModelFrame.OnCmdRun  sS    	]]_--/		:Fvv&d+ ' 		s   A	A 	AAc                 x    |j                   sy|j                  |j                   d   |j                   d          y)zPrepare for running commandNr   params)r   r   )userData	onPreparer   s     rD   r   zModelFrame.OnCmdPrepare'  s.    ~~U^^F3ENN8<TUrF   c           	         d }| j                   j                         j                  d       | j                   j                  dj	                  t        t        j                               t        d       ||j                              |j                         	 | j                         j                         |j                     }t        |d      r|j                  d       |j                  | j                  j                   j#                         d	z
  k(  r| j$                  r| j                   j                  dj	                  t        t        j                               t        d
       || j$                              |j                         t'               }t)        j*                  | |       yyy# t,        $ r Y yw xY w)zCommand done (or aborted)c                    	 t        j                          | z
  }|dk  rt        d      t        |      z  }|S t        |dz        }t        d      |t        ||dz  z
        dz  }	 |S # t        $ r t        d      }Y |S w xY w)N<   z%d secz%(min)d min %(sec)d sec)minsecunknown)timer   r   KeyError)etimectimestimemtimes       rD   time_elapsedz*ModelFrame.OnCmdDone.<locals>.time_elapsed1  s    %		e+2:hK#e*4E L  
OE78$"5EBJ#78< E L	  %)L	%s   3A( .A( (B ?B r   z({}) {} ({})zCommand finishedrJ   r   Tr   r9   zModel computation finishedN)r   GetProgressBarSetValueWriteCmdLogr   strr   r   r   rJ   rr   r   r   r   r   r   	cmdThreadGetIdr`   wxModelDonerc   	PostEventr   )rC   rI   r   r   s       rD   r   zModelFrame.OnCmdDone.  sa   	" 	##%..q1  !!DJJL!1%7#8,uzz:R ++	 	! 	
	]]_--/		:Fvv&d+yyDNN44::<q@@T__(("))DJJL)67$T__5
 "'!3!3 )  $T5) FU@  		s   DF2 2	F>=F>c                    | j                   r@t        j                  ddd      r'| j                  rt	        d      }nt	        d      }t        j                  | |t	        d      t
        j                  t
        j                  z  t
        j                  z  t
        j                  z  t
        j                  z        }|j                         }|t
        j                  k(  r9| j                  s| j                          n@| j                  | j                         n$|t
        j                   k(  r|j#                          y	|j#                          | j#                          y	)
zClose windowmanager	askOnQuitenabled)groupkeysubkeyz)Do you want to save changes in the model?z:Do you want to store current model settings to model file?zQuit Graphical ModelerrB   captionr;   N)ra   r   Getr_   r   rc   MessageDialogYES_NOYES_DEFAULTCANCELICON_QUESTIONCENTRE	ShowModalID_YESOnModelSaveAsWriteModelFile	ID_CANCELDestroy)rC   rI   rB   dlgrets        rD   r   zModelFrame.OnCloseWindow]  s   !1!1Y"
 ~~GHP
 ""23ii..!)) ""# ))			C --/Cbii~~&&(''7$KKMrF   c                 D    | j                          |j                          y)z!Window resized, save to the modelN)r   r   r   s     rD   r   zModelFrame.OnSize  s    

rF   c                     t        | | j                        }|j                          |j                          | j                  j                          y)zOpen preferences dialogr1   r=   N)r   r\   CenterOnParentShowr~   r   rC   rI   r  s      rD   OnPreferenceszModelFrame.OnPreferences  s7    tDLLA
rF   c                 <    | j                   j                  d       y)z	Show helpzwxGUI.gmodeler)entryN)r\   Helpr   s     rD   OnHelpzModelFrame.OnHelp  s     01rF   c                    t        |       }|j                          | j                  j                         }|j	                  |       |j                         t        j                  k(  r| j                          t        j                  |j                               D ]
  \  }}|||<    | j                  j                  t              D ]%  }|j                         j                  d|d          ' |j!                          y)zModel properties dialogr7   objType	overwriteN)r   CentreOnParentr6   GetPropertiesInitr  rc   ID_OKr   six	iteritems	GetValuesr   ModelActionGetTaskset_flagr  )rC   rI   r  
propertiesr	  valuer   s          rD   OnModelPropertieszModelFrame.OnModelProperties  s    d+ZZ--/
==?bhh&!mmCMMO< (
U"'
3(**--k-B P ))+z+7NOP 	rF   c           	         | j                   j                         \  }}}}|r1| j                  j                  dddddj	                  |      z  g       |r1| j                  j                  dddddj	                  |      z  g       |r1| j                  j                  dddddj	                  |      z  g       | j                  t        d      t        t        |      t        |      z   t        |      z         z         y	)
Delete intermediate datazg.removez-fztype=rasterzname=%s,ztype=raster_3dztype=vectorz0%d intermediate maps deleted from current mapsetN)	r6   GetIntermediateDatar   RunCmdrn   rA   r   r   len)rC   rastvectrast3dmsgs        rD   _deleteIntermediateDataz"ModelFrame._deleteIntermediateData  s    "&**"@"@"BdFCNN!!T=)chhtn2LM NN!!T#3Y&AQ5QR NN!!T=)chhtn2LM 	@A#d)c&k)CI567	
rF   c                    | j                   j                         \  }}}}|s|s|st        | t        d             yt	        j
                  | t        d|z        t        d      t        j                  t        j                  z  t        j                  z        }|j                         }|j                          |t        j                  k(  r| j                          yy)r9  zNo intermediate data to delete.r1   rB   Nz)Do you want to permanently delete data?%szDelete intermediate data?r1   rB   r  r;   )r6   r;  r   r   rc   r  r  r  r  r  r  r  rB  )rC   rI   r>  r?  r@  rA  r  r  s           rD   OnDeleteDatazModelFrame.OnDeleteData  s    "&**"@"@"BdFCDD!,M*NOACGH12))bnn,r/?/??	
 mmo"))((* rF   c                 >   t        j                  dd       | j                  r| j                  r| j	                          n$| j                  | j
                  j                         dkD  s&t        | j
                  j                               dkD  rt        j                  | t        d      t        d      t        j                  t        j                  z  t        j                  z  t        j                  z        }|j!                         }|t        j"                  k(  r| j%                          n$|t        j&                  k(  r|j)                          y|j)                          | j*                  j-                         j/                          | j
                  j1                          | j*                  j3                          | j4                  j7                          | j8                  j1                          d| _        d| _        | j;                  | j<                         y)	zCreate new model   zModelFrame.OnModelNew():Nr   PCurrent model is not empty. Do you want to store current settings to model file?Create new model?r  F)r   rA  r_   ra   OnModelSaver6   GetNumItemsr=  GetDatarc   r  r   r  r  r  r  r  r  r  r  r  r~   
GetDiagramDeleteAllShapesResetr   r   r   r   r   r^   rC   rI   r  r  s       rD   
OnModelNewzModelFrame.OnModelNew  sy   		!/0 >>d//^^#JJ""$q(C

0B0B0D,E,I""%
 -.ii"..0299<r?O?OO	C --/Cbii""$$KKM 	 002

  " !dnn%rF   c                     | j                   sy|r| j                   S t        j                  j                  | j                         d   S )zJGet model file

        :param bool ext: False to avoid extension
        r   r   )r_   rl   rm   splitext)rC   exts     rD   GetModelFilezModelFrame.GetModelFile  s9    
 ~~>>!ww/22rF   c                    d}t        j                  | t        d      t        j                         t        d            }|j                         t         j                  k(  r|j                         }|syt        j                  dd|z         | j                          | j                  |       || _        | j                  | j                  dz   t        j                  j!                  | j                        z          | j#                  t        d	      | j$                  j'                         | j$                  j'                  d
      dz  d       y)zLoad model from filer   zChoose model fileGRASS Model File (*.gxm)|*.gxm)r1   rB   
defaultDirwildcardNrH  z%ModelFrame.OnModelOpen(): filename=%sr   z7%(items)d items (%(actions)d actions) loaded into modelT)
actionOnly)rV   actionsr   )rc   
FileDialogr   rl   getcwdr  r.  GetPathr   rA  OnModelCloseLoadModelFiler_   r   r^   rm   r   rA   r6   rL  rC   rI   filenamer  s       rD   OnModelOpenzModelFrame.OnModelOpen  s   mm)*yy{78	
 ==?bhh&{{}H		!<xGH 	8$!dnnu,rww/?/?/OOPGH//1::11T1B
 	
rF   Nc                    | j                   rV| j                  rIt        j                  | t	        d      | j                   z  t	        d      t        j
                  t        j                  z  t        j                  z        }|j                         t        j                  k(  r|j                          y	t        j                  dd| j                   z         | j                  | j                          | j                  t	        d      | j                   z  d       | j                  | j                   dz   t"        j$                  j'                  | j                         z          y	| j                   s| j)                          y	y	)
zSave model to fileCModel file <%s> already exists. Do you want to overwrite this file?z
Save modelr  rH  z%ModelFrame.OnModelSave(): filename=%sFile <%s> savedr   r   N)r_   ra   rc   r  r   r  r  r  r  ID_NOr  r   rA  r  rA   r   r^   rl   rm   r   r  r!  s      rD   rK  zModelFrame.OnModelSave  s   >>d//"": ..	!
 ,ii"..023C3CC	C }}"((*		!Dt~~UV##DNN3""1%6#7$..#H!Ldnnu4rww7G7G7WWX   rF   c                    d}t        j                  | t        d      t        j                         t        d      t         j
                        }|j                         t         j                  k(  r|j                         }|sy|dd dk7  r|dz  }t        j                  j                  |      rt        j                  | t        d      |z  t        d	      t         j                  t         j                  z  t         j                  z  
      }|j                         t         j                  k7  r|j!                          yt#        j$                  dd|z         | j'                  |       || _        | j+                  | j,                  dz   t        j                  j/                  | j(                        z          | j1                  t        d      | j(                  z  d       y)zCreate model to file asr   z!Choose file to save current modelrX  )r1   rB   rY  rZ  r;   Nz.gxmrf  zFile already existsrE  rH  z$GMFrame.OnModelSaveAs(): filename=%sr   rg  r   )rc   r]  r   rl   r^  FD_SAVEr  r.  r_  rm   existsr  r  r  r  r  r  r   rA  r  r_   r   r^   r   rA   rb  s       rD   r  zModelFrame.OnModelSaveAs6  sn   mm9:yy{78**
 ==?bhh&{{}H BC=F"H77>>(#"": 	
 /0ii"..023C3CC	C }}"))+		!;hFGH%!dnnu,rww/?/?/OOP1./$..@!DrF   c                    t        j                  dd| j                  z         | j                  r| j                  r| j	                          n$| j                  | j
                  j                         dkD  s&t        | j
                  j                               dkD  rt        j                  | t        d      t        d      t        j                  t        j                  z  t        j                  z  t        j                  z        }|j!                         }|t        j"                  k(  r| j%                          n$|t        j&                  k(  r|j)                          y|j)                          d| _        | j+                  | j,                         | j.                  j1                         j3                          | j
                  j5                          | j.                  j7                          y)zClose model filerH  z"ModelFrame.OnModelClose(): file=%sNr   rI  rJ  r  )r   rA  r_   ra   rK  r6   rL  r=  rM  rc   r  r   r  r  r  r  r  r  r  r  r  r   r^   r~   rN  rO  rP  r   rQ  s       rD   r`  zModelFrame.OnModelClosea  sR   		!9DNNJK>>d//^^#JJ""$q(C

0B0B0D,E,I""%
 -.ii"..0299<r?O?OO	C --/Cbii""$$KKMdnn% 002

rF   c                     t        j                          | _        | j                  j                  | j                  | j
                  |        y)zRun entire modelr7   N)r   r`   r6   Runr   r   r   s     rD   
OnRunModelzModelFrame.OnRunModel  s/    ))+

t~~t'7'7ErF   c                 `   | j                  dd       t        | j                  d      rq| j                  j                  D ]L  }| j                  j                  |   }|st	        |d      }	 |j                  |       |j                          N | j                  `| j                          | j                  j                         D ]  }|j                         s| j                  j                         j                  |j                               }|r0|D ]+  }| j                  j                         j                  |       - | j                  j                         j                  |j!                         |j                         d|j#                                 y# |j                          w xY w)zComputation finishedr   r   	fileInputwTltyperT   checkedcmdN)rA   r   r6   rr  openwritecloserB  rM  
HasDisplayr\   GetLayerListGetLayersByNameGetValueDeleteLayerAddLayer	GetPromptGetDisplayCmd)rC   rI   finputdatafdlayerslayers          rD   r   zModelFrame.OnModelDone  sd   2q! 4::{+**.. 	zz++F3&#&HHTNHHJ	 

$ 	$$& JJ&&( 	D??$ \\..0@@QF# CELL--/;;EBC LL%%'00nn&]]_&&(	 1 	 HHJs   +FF-c                 |   | j                   j                         dk  rt        | t        d             y| j	                  t        d      d       | j                   j                         }| j	                  dd       |r)t        | t        d      d	j                  |      z         yt        | t        d
             y)zValidate entire modelr9   z$Model is empty. Nothing to validate.rD  NzValidating model...r   r   zModel is not valid.

%s
zModel is valid.)r6   rL  r   r   rA   Validater   rn   )rC   rI   showMsgerrLists       rD   OnValidateModelzModelFrame.OnValidateModel  s    ::!!#a'D!,R*ST123Q7**%%'2q!Q'B%CdiiPWFX%X D!,=*>?rF   c           	         d}d}d}d}| j                   j                         j                         D ]r  }|j                         \  }}|j	                         }	|j                         }
|	|dz  z
  }|	|dz  z   }|
|dz  z
  }|
|dz  z   }||k  r|}||kD  r|}||k  r|}||kD  sq|}t t        j                  t        ||z
        dz   t        ||z
        dz         }t        |j                  |j                        }t        t        |            \  }}t        j                  | t        d      dd|t        j                   t        j"                  z        }|j%                         t        j&                  k(  rR|j)                         }|s|j+                          yt,        j.                  j1                  |      \  }}||j3                            d	   }||j3                            d
   }||k7  r|dz   |z   }t        j4                  |      }|j7                  t        j8                         |j;                  t        j<                         | j                   j                         j?                  |       | j                   j                         jA                  |       |jC                  ||       | jE                  t        d      |z         |j+                          y)z%Export model to image (default image)r      2   )widthheightz?Choose a file name to save the image (no need to add extension)r   )r1   rB   rY  defaultFilerZ  r;   NtyperU  .Model exported to <%s>)#r~   rN  GetShapeListGetBoundingBoxMaxGetXGetYrc   Sizer   r!   r  r  r   r"   r]  r   rk  FD_OVERWRITE_PROMPTr  r.  r_  r  rl   rm   rT  GetFilterIndexMemoryDCSetBackgroundWHITE_BRUSHSetBackgroundModeSOLIDClearRedrawSaveFilerA   )rC   rI   xminImgxmaxImgyminImgymaxImgshapers  hxyxminxmaxyminymaxsizebitmapfiletyperu  r  rm   baserU  fileTypeextTypedcs                             rD   OnExportImagezModelFrame.OnExportImage  sz   [[++-::< 	E**,DAq

A

Aq1u9Dq1u9Dq1u9Dq1u9Dg~g~g~g~	  wws7W,-2C'8I4JR4OP4::dkkB*?6+BC%mmQ **r555	
 ==?bhh&;;=D((.ID#S//126:HC..01%8Gg~czG+V$BR^^,  *KK""$**2.KK""$++B/OOD(+q!9:TABrF   c                 v    | j                   j                  d      }| j                  t        d      |z         y)zExport model to Python scriptTforcer  N)r   SaveAsrA   r   )rC   rI   rS   rc  s       rD   OnExportPythonzModelFrame.OnExportPython  s4    ##***6156ABrF   c                 h    | j                   j                  | j                  d          ddd| _        y)z-Define relation between data and action itemsr0   N)fromto)r~   r   rf   defineRelationr   s     rD   OnDefineRelationzModelFrame.OnDefineRelation  s*    dll734'+48rF   c                    | j                          | j                  j                         \  }}t        | |dz  |dz  | j                  j                         dz         }| j                  j                  j                  |       |j                  d       | j                  |       | j                  j                  |       | j                  j                          y)zYDefine new loop in the model

        .. todo::
            move to ModelCanvas?
        r  r9   r  r  r2   TN)r   r~   r   	ModelLoopr6   rL  diagramAddShaper   r   AddItemr   )rC   rI   r  r  loops        rD   OnDefineLoopzModelFrame.OnDefineLoop  s     	++-vEAI!

0F0F0H10L
 	$$T*		$t

4 rF   c                    | j                          | j                  j                         \  }}t        | |dz  |dz  | j                  j                         dz         }| j                  j                  j                  |       |j                  d       | j                  |       | j                  j                  |       | j                  j                          y)z^Define new condition in the model

        .. todo::
            move to ModelCanvas?
        r  r9   r  TN)r   r~   r   ModelConditionr6   rL  r  r  r   r   r  r   )rC   rI   r  r  conds        rD   OnDefineConditionzModelFrame.OnDefineCondition   s     	++-vEAI!

0F0F0H10L
 	$$T*		$t

4 rF   c           	         | j                   7t        | | j                        | _         | j                   j                          n| j                   j	                          | j                   j                         t        j                  k(  r| j                   j                          y| j                   j                         }| j                   j                          | j                          | j                  j                         \  }}| j                   j                         \  }}t        | j                  |||| j                  j!                         ||      }| j                  j#                         j%                  dd      }| |j'                         j)                  d|       | j                  j*                  j-                  |       |j/                  d       | j1                  |       | j                  j3                  |       | j4                  j7                          | j                  j9                          t;        j<                  d       |j?                         }	|	s`tA        | dtC        | j                              }
|
jE                  |jG                  d	      | jH                  ||jK                         f
       n"|	r |	jM                         s|	j/                          |	r|	jO                          yy)zAdd action to modelNr  )rw  r  r  r2   labelcommentr*  Tg?r1   showr=   Fstring	completed)(r]   ModelSearchDialogr\   r+  rP  r  rc   r  HideGetCmdr   r~   GetNewShapePosGetLabelr2  r6   	GetNextIdr,  getr3  r4  r  r  r   r   r  r   r   r   r   sleepGetPropDialogr   r   ParseCommandGetLog
GetOptData	GetParamsIsShownRaise)rC   rI   rw  r  r  r  r  r   r*  wingmodules              rD   OnAddActionzModelFrame.OnAddAction4  sB   $ 1dll SD,,.##%&&(BLL8""$&&(  {{))+1**335wJJzz##%
 JJ,,.22;E	 NN%%k9=$$V,Dv

6"

3 ""$5djjAG
   U+??FF4D4D4FG !  HHJIIK rF   c                    | j                   j                         \  }}t        | |dz  | j                         z   |dz  | j                         z         }t	        | |      }|j                  |       |j                          |j                         }|j                          |t        j                  k7  ry|j                          | j                   j                  j                  |       |j                  d       | j                          | j!                  |       | j"                  j%                  |       | j                   j'                          y)zAdd data item to modelr  )r  r  r1   r  NT)r~   r   	ModelDatar   ModelDataDialogSetPropDialogr+  r  r  rc   r.  r   r  r  r   r   r   r6   r  r   )rC   rI   r  r  r  r  r  s          rD   	OnAddDatazModelFrame.OnAddDatar  s     ++-vEAI 1 1 33vzDDUDUDW7W
 T63mmo"((?$$T*		$t

4 rF   c                    t        | t        d      t        d      t        j                  d      }|j	                         t        j
                  k(  r|j                         }|st        t        d      |        n| j                  j                         \  }}t        | j                  ||| j                  j                         |      }| j                  j                  j                  |       |j                  d       | j!                  |       | j                  j#                  |       | j                  j%                          | j'                          |j)                          y	)
zAdd comment to the modelComment:zAdd commentr[   K   )r1   rB   r  	textStyletextSizez+Empty comment. Nothing to add to the model.r7   )r  r  r2   r  TN)CustomTextEntryDialogr   rc   TE_MULTILINEr  r.  r~  r   r~   r  ModelCommentr6   r  r  r  r   r   r  r   r   r  )rC   rI   r  r  r  r  
commentObjs          rD   OnAddCommentzModelFrame.OnAddComment  s   #jMm$oo
 ==?bhh&llnGqFGPTU{{1131)JJzz++-!
 ##,,Z8%z*

"":.##%!!#rF   c                 H    | j                  |       |j                          y )Nr   )_switchPager   )rC   rI   rJ   s      rD   rK   zModelFrame._switchPageHandler  s    l3

rF   c                 Z   |t         j                  k(  r| j                  j                  d       |t         j                  k(  r| j                  j                  d       |t         j                  k(  r<| j                  j                  d       | j                          | j                          yy)zBManages @c 'output' notebook page according to event notification.rZ   N)	r   	HIGHLIGHTr|   HighlightPageByNamerL   r   rP   SetFocusr  )rC   rJ   s     rD   r  zModelFrame._switchPage  sy    <111MM--h7<444MM,,X6<444MM,,X6MMOJJL 5rF   c                 0    t        t        d      d       y)zDisplay About windowzwxGUI Graphical Modeler2010)prgName	startYearN)r   r   r   s     rD   OnAboutzModelFrame.OnAbout  s    "; <OrF   c           
      0	   |rEg }|j                         }|j                         }|d   D ]L  }|j                  dd      dvr|j                  dd      s,|j                  dd      dk7  ra|j                  d	d
      dk(  rK|j                  |j                  dd            }	|	r2|	j	                  |j                  dd             |	j                          | j                  j                  |j                  dd      |j                  dd            }	|	r|j                  dd      dk(  r t        | |	||j                  dd            }
nt        | ||	|j                  dd            }
|j                  |
       |	j                  |
       | j                  |
       |	j                          t        | |j                  dd      |j                  dd      ||      }	|j                  |	       | j                  |	       | j                  j                  j                  |	       |	j!                  d       |j                  dd      dk(  r t        | |	||j                  dd            }
nt        | ||	|j                  dd            }
|j                  |
       |	j                  |
       | j                  |
       |	j                          |j                  dd      r|j                  |j                  dd            }	|	s| j                  j#                  |	|      \  }}|D ]7  }| j                  j                  j%                  |       |j'                          9 |D ]  }|j                           O |j)                  |       |rt+        j,                  | j                        }dt/        |      z  }d}dt0        j2                  dz  z  }|D ]q  }	|	j5                  |||t1        j6                  |      z  z   ||t1        j8                  |      z  z          ||t0        j2                  dz  z  z  }|	j!                  d       s |r|j;                  ||       | j                  j=                          | j?                  |jA                         d       y)zProcess action datar   promptr   )rastervector	raster_3ddbtabler6  NageoldrequirednoyesrT   )r1   	fromShapetoShapeparam)r6  r  r  r  Fih     i     Tr   )!r  r  r  FindDatar   r   r6   ModelRelationAddRelationAddLiner  appendr   r~   r  r  r   
RemoveItemRemoveShape__del__SetValidrc   ClientDCr=  mathpiMovesincosSetPropertiesr   rA   r  )rC   dcmdr  r   propwin
data_itemsr  r  pr  relremListupListr   r  ralphas                    rD   r  zModelFrame.GetOptData  s   J

A

AH% R*552& /   55$'EE%'50QUU:t5LPU5U >>!%%*;<DaeeGR&89 ::..quuWb/A155SUCVWD55.%7"/'+*.(-&'eeFB&7	#C #0'+*/(,&'eeFB&7	#C ))#.((-S) $eeGR0 uuXr2D %%d+NN4(KK''006IIe$uuUE*e3+#'&*$)"#%%"3	 ,#'&+$("#%%"3	 %%c*$$S)LL%KKM uuWb) >>!%%*;<D*.***?*?e*L$+ +D KK//;;DA LLN+ %+ *D KKM*cR*j NN6" [[-#j/)tww}-& $DIIb!a$((5/&9"91q488E??R;RSQ$''C-00EIIdO$
 05<<>1-rF   c                    |j                         }|j                         }|j                  |        |j                  t        j
                         |j                  t        j                         |j                  t        j                         |j                         }|j                  d       |r0|D ]+  \  }}|j                  t	        j                  ||             - | j                  |       	 |j!                  ||       | j$                  j&                  j)                  |       |j+                  d       y# t"        $ r Y Bw xY w)zKAdd connection between model objects

        :param rel: relation
        r  pointTN)GetFromGetTo	SetCanvasSetPenrc   	BLACK_PENSetBrushBLACK_BRUSHAddArrowr   ARROW_ARROWGetControlPointsMakeLineControlPointsInsertLineControlPoint	RealPointr   r  	TypeErrorr~   r  r  r   )rC   r+  r  r  pointsr  r  s          rD   r  zModelFrame.AddLine0  s   
 KKM	))+d

2<< R^^$S__%%%'!!!$ E1**a1C*DE 	s	c7+ 	$$S)	  		s   4D= =	E	E	c                    	 | j                   j                  |       || _        | j                  | j                  dz   t        j                  j                  | j
                        z          | j                  t	        d      d       | j                   j                  t              D ]  }| j                  |       | j                  j                   j#                  |       |j%                  d	       |j'                         D ]  }|j)                         |k(  r|j+                         }n|j)                         }| j                  |       | j                  j                   j#                  |       | j-                  |       |j%                  d	         | j                   j                  t.              D ]Z  }| j                  |       | j                  j                   j#                  |       |j%                  d	       | j1                  |       \ | j                   j                  t2              D ]Z  }| j                  |       | j                  j                   j#                  |       |j%                  d	       | j5                  |       \ | j                   j                  t6              D ]I  }| j                  |       | j                  j                   j#                  |       |j%                  d	       K | j8                  j;                          | j<                  j;                          | j                  d
d       | j                   j                  t              D ]1  }|j?                  |jA                                |j;                          3 | j                  jC                  d	       y# t        $ r&}t        | t	        d      ||fz  d       Y d}~yd}~ww xY w)z:Load model definition stored in GRASS Model XML file (gxm)zOReading model file <%s> failed.
Invalid file, unable to parse XML document.

%sF)r1   rB   showTracebackNr   zPlease wait, loading model...r   r(  Tr   )"r6   	LoadModelr   r   r   r_   r   r^   rl   rm   r   rA   r   r2  r   r~   r  r  r   GetRelationsr3  r4  r  r  
DefineLoopr  DefineConditionr  r   r   r   r  r  r   )rC   rc  er   r+  dataItemr   s          rD   ra  zModelFrame.LoadModelFileK  s   	JJ  * "dnnu,rww/?/?/OOP1<=qA JJ'''< 	$DNN4 KK((.IIdO((* $;;=D("yy{H"{{}Hx(##,,X6S!d#$	$  JJ''	': 	"DNN4 KK((.IIdO OOD!	" JJ'''? 	'DNN4 KK((.IIdO   &	' JJ'''= 	DNN4 KK((.IIdO	 	!!#2q! jj))+)> 	FOOF,,./MMO	 	D!G  
	H Q-	 
 $ 
	s   N0 0	O9OOc                 P   | j                  d       t        j                  d      }	 t        || j                         	 t        |d      }|j                  d       |j                         D ]  }|j                  |        	 |j%                          y# t
        $ r t        | t        d             Y yw xY w# t        $ ra t        j                  | t        d	      |z  t        d
      t        j                  t        j                   z  t        j"                  z         Y yw xY w)zSave model to model file, recover original file on error.

        :return: True on success
        :return: False on failure
        Fzw+mode)r  r6   z.Writing current settings to model file failed.rD  rs  r   z%Unable to open file <%s> for writing.ErrorrE  T)r   tempfileTemporaryFiler  r6   	Exceptionr   r   rx  seek	readlinesry  IOErrorrc   
MessageBoxOK
ICON_ERRORr  rz  )rC   rc  tmpfilemfilelines        rD   r  zModelFrame.WriteModelFile  s     	% ((d3	gTZZ8	3'ELLO))+ "D!" 	-  	Q'W%X 		  	MMABXM'
eebmm+bii7	 	s%   B AB; B87B8;A'D%$D%c                    |}|j                  | j                         j                               }|sy|j                         D ]+  }| j                  j	                         j                  |       - |j                          |D ]  }t        | ||      }|j                         |j                         z
  }|j                         |j                         z
  }|j                  |       |dk7  r^|j                  |j                         |j                         |dz  z   f|j                         |z   |j                         |dz  z   ff       | j                  |       |} |d   }t        | ||      }|j                  |       | j                  |       |j                         |j                         z
  |j                         dz  z   dz   }|j                         dz  dz   }|j                  d       |j!                  t#        j$                  |j                         |j                         dz  z
  |j                                      |j!                  t#        j$                  |j                         |j                         |j                         dz  z                |j!                  t#        j$                  |j                         |j                         |z                |j!                  t#        j$                  |j                         |z
  |j                         |z                |j!                  t#        j$                  |j                         |z
  |j                                      | j                  j'                          y)z$Define loop with given list of itemsNr1   r  r  r   r  r  r1  )r   rr   rE  r~   rN  r  r  r  r  r  r  SetControlPointsr  GetWidth	GetHeightr=  r>  rc   r?  r   )rC   r  r1   rV   r+  r   dxdys           rD   rF  zModelFrame.DefineLoop  s   dmmo6689 $$& 	6CKK""$005	6

 	DtvtLCv{{},Bv{{},BS!Qw$$Q(>?+V[[]R!V-CD LLF	  Ry44FSiikDIIK'4==?Q+>>C^^!B&!!!$"",,tyy{T]]_q-@@$))+N 	# 	
 	"",,tyy{DIIK$..:JQ:N,NO 	# 	
 	""diik499;QSCS)T"U"",,tyy{R/r1AB 	# 	
 	""diikB6F		)T"UrF   c           	         |j                  | j                  j                  t                    }|d   s|d   sy|}|j                         D ]+  }| j                  j                         j                  |       - |j                          |j                         |j                         dz  z   }|j                         |j                         dz  z
  }|j                         }|j                         D ]P  }||   D ]D  }	t        | ||	      }|j                  |       | j                  |       |j                  d       |dk(  r}|j!                  t#        j$                  |	j                         |	j                         dz  z
  |	j                                      |j!                  t#        j$                  ||             n||j!                  t#        j$                  ||             |j!                  t#        j$                  |	j                         |	j                         dz  z
  |	j                                      |	}G S | j                  j'                          y)	z1Define if-else statement with given list of itemsr(  ifelseNr  r[  r   r1  )r   r6   r2  rE  r~   rN  r  r  r  r^  r  keysr  r  r  r=  r>  rc   r?  r   )
rC   	conditionrV   r1   r+  dxIfdxElsera  branchr   s
             rD   rG  zModelFrame.DefineCondition  s   ""4::#6#6{#6#KLT{5= ))+ 	6CKK""$005	6~~)"4"4"6"::!I$6$6$81$<<^^jjl 	Ff #464P%%c*S!))!,T>.. ll IIK$--/A*==tyy{ / 
 ..R\\$5K.L..R\\&"5M.N.. ll IIK$--/A*==tyy{ / 
 '	, 	rF   )Tr@   )NN)5__name__
__module____qualname__rc   ID_ANYr   rh   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r"  r&  r7  rB  rF  rR  rV  rd  rK  r  r`  rp  r   r  r  r  r  r  r  r  r  r  rK   r  r  r  r  ra  r  rF  rG   rF   rD   r,   r,   T   s   !#!4G2HnH`
)A*<6*"V-^"H
2
*+('&R	3
B!.)EV"HF
&P@"=~C
9
((<|6B	Pm.^6G"R D/b%rF   r,   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd
dZ	d Z
y	)r}   zCanvas where model is drawnc                    || _         t        j                          t        j                  j	                  | |       t        j
                         | _        | j                  | j                         | j                  j                  |        | j                  dddd       | j                  t        j                  | j                         | j                  t        j                  | j                         y )N   d   )r1   r   OGLInitializeShapeCanvasrh   Diagramr  
SetDiagramr5  SetScrollbarsr   rc   
EVT_KEY_UPOnKeyUpEVT_LEFT_DOWN
OnLeftDown)rC   r1   s     rD   rh   zModelCanvas.__init__  s      v.{{}%t$2r:z:		"--.		"""DOO4rF   c                 l    |j                         }|t        j                  k(  r| j                          yy)zKey pressedN)
GetKeyCoderc   
WXK_DELETEr   )rC   rI   kcs      rD   ry  zModelCanvas.OnKeyUp   s-    ! rF   c                 D    | j                          |j                          y r@   )r  r   )rC   evts     rD   r{  zModelCanvas.OnLeftDown&  s    
rF   c                     | j                   j                          | j                         }|j                         D cg c]  }|j	                         s| }}| j                  |       yc c}w )zRemove selected shapesN)r1   r   rN  r  SelectedRemoveShapes)rC   r  r  shapess       rD   r   zModelCanvas.RemoveSelected*  sW      "//#%,%9%9%;PEu~~?O%PP&! Qs   A+A+c                    | j                   j                          | j                         }|D ]  }| j                   j                         j	                  |      \  }}|j                  d       |j                  |       |j                          |D ]#  }|j                  |       |j                          % |D ]  }|j                            | j                          y)zRemoves shapesFN)
r1   r   rN  rr   r  Selectr  r  r   r   )rC   r  r  r  r,  r-  r   s          rD   r  zModelCanvas.RemoveShapes2  s      "//# 
	E"kk224??FOGVLL&MMO ##D)  
	 	rF   c                     | j                         }|j                         r8|j                         d   }|j                         |j                         d   z   }nd}| j	                         d   dz  ||z   fS )zPDetermine optimal position for newly added object

        :return: x,y
        r\  r9   rq  r   r  )rN  r  r  GetBoundingBoxMinr   )rC   yoffsetr  lastr  s        rD   r  zModelCanvas.GetNewShapePosD  sq    
 //#!'')"-D		d446q99AAq!Q&G44rF   c                     t               }| j                         }|j                         D ]$  }|j                         s|j	                  |       & |S )zGet list of selected shapes)listrN  r  r  r  )rC   selectedr  r  s       rD   GetShapesSelectedzModelCanvas.GetShapesSelectedR  sJ    6//#))+ 	'E~~&	' rF   N)r  )rj  rk  rl  __doc__rh   ry  r{  r   r  r  r  rn  rF   rD   r}   r}     s(    %5""$5rF   r}   c                       e Zd ZdZd ZddZddZddZddZddZ	d	 Z
dd
Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zy)r   zModel event handler classc                 z    t         j                  j                  |        || _        || _        d x| _        | _        y r@   )r   ShapeEvtHandlerrh   logframer  r  )rC   r  r  s      rD   rh   zModelEvtHandler.__init__`  s2    $$T*
rF   c                     | j                         }|j                         }t        j                  |      }t	        | j
                  d      rU| j
                  j                  }|d   ||d<   n3|d   -||d<   t        | j
                  |d   |d         }	t        | j
                  |	      }
|
j                         r|
j                         }|t        j                  k(  r|
j                         }|	j                  |       |d   j                  |	       |d   j                  |	       |d   j                          d||d   j!                         dgi}|d   j#                  |       | j
                  j%                  |	       |
j'                          | j
                  `| j)                  ||d	k(  rd
nd       t	        |d      r+| j*                  j-                  |j/                         d       y| j*                  j-                  dd       y)z;Left mouse button pressed -> select item & update statusbarr  r  Nr  r[  r  r   )rT   r6  r9   TF)r  r  r   r   )GetShaper   rc   r   r   r  r  r  ModelRelationDialogIsValidr  r.  	GetOptionri   r  r   r~  MergeParamsr  r  _onSelectShaper  rA   r  )rC   r  r  re  
attachmentr  r~   r  drelr+  r  r  optionr   s                 rD   OnLeftClickzModelEvtHandler.OnLeftClickf  s   "[[ 
 4::/0::,,DF|#$Vd#"T
#::ftDz *3G;;=--/Cbhh!$F+V005T
..s3V++-$)/$v,:O:O:Q R'"
 T
..v6

**3/KKMJJ- 	E$!)$G5(#HH""5<<>15HH""2q)rF   c                 $    | j                          y)z;Left mouse button pressed (double-click) -> show propertiesN)OnPropertiesrC   r  r  re  r  s        rD   OnLeftDoubleClickz!ModelEvtHandler.OnLeftDoubleClick  s    rF   Nc                 	   | j                   j                          | j                         }t        |t              rt        | j                   dt        | j                   j                                     }|j                  |j                  d      | j                   j                  ||j                         f       yt        |t              r\|j                         dv rIt        | j                   |      }|j                  |       |j!                          |j#                          yyt        |t$              rt'        | j                   |      }|j!                          |j)                         t*        j,                  k(  r$|j/                  |j1                                | j                   j                         }|j3                         }t5               }|d   D ]-  }|j7                  |t        	      }	|	s|	j9                  |       / |d
   D ]>  }|j7                  |t        	      }	|	s|	j;                  |       |j=                  |       @ |j?                  |       | j                   jA                  |       | j                   jC                  |j                         d       | j                   jE                         jG                          |jI                          yt        |tJ              rtM        | j                   |      }|j!                          |j)                         t*        j,                  k(  r|j/                  |j1                                | j                   j                         }|j3                         }|jO                         D ]  }
t5               }||
   d   D ]*  }|j7                  |t        	      }	|	j9                  |       , ||
   d
   D ]>  }|j7                  |t        	      }	|	j;                  |       |	s.|j=                  |       @ |j?                  ||
        | j                   jQ                  |       | j                   jE                         jG                          |jI                          yy)zShow properties dialogTr  Fr  r  )r	  r
  r  r  	uncheckedr(  rv  r   )ri  N))r  r   r  
isinstancer2  r   r   rr   r  r  r  r  r  r  r  r  r+  r   r  ModelLoopDialogr  rc   r.  SetLabelGetConditionr   r  GetItem
UnSetBlockSetBlockr  SetItemsrF  rA   r   r   r  r  ModelConditionDialogre  rG  )rC   rI   r  r  r  r6   idsalistaIdr   bs              rD   r  zModelEvtHandler.OnProperties  s}   

!e[)zz5djj6I6I6KLG
   E*::00%9JK ! 
 y) $EE%TZZuE##C(""$
	 F y)!5AC }}"((*s//12

++-lln{+ 1C"]]3]DF))%01 y> *C"]]3]DF.S)	*
 u%

%%e,

((;JJ  "**,KKM~.&djjFC }}"((*s//12

++-lln 
4A FE"1vk2 1!&sK!H))%01  #1vi0 .!&sK!H.!!LL-	.
 NN5N3
4 

**51JJ  "**,KKM+ /rF   c                     | j                   j                          | j                  r| j                  j                  ||||       yy)zDrag shape (beginning)N)r  r   _previousHandlerOnBeginDragLeftr  s        rD   r  zModelEvtHandler.OnBeginDragLeft  s:    

!  !!11!QjI !rF   c                 `   | j                   r| j                   j                  ||||       | j                         }t        |t              r| j
                  j                  |       n+t        |t              r| j
                  j                  |       |j                         D ]Z  }t        |t              r| j
                  j                  |       /t        |t              s@| j
                  j                  |       \ | j                         }|j                         }|j                          y)zDrag shape (end)N)r  OnEndDragLeftr  r  r  r  rF  r  rG  GetBlockr   r   )rC   r  r  re  r  r  mor~   s           rD   r  zModelEvtHandler.OnEndDragLeft  s      !!//1dJGeY'JJ!!%(~.JJ&&u-.." 	/B"i(

%%b)B/

**2.		/ "rF   c                     | j                   j                          | j                  r| j                  j                  ||       yy)zResize shapeN)r  r   r  	OnEndSize)rC   r  r  s      rD   r  zModelEvtHandler.OnEndSize  s6    

!  !!++Aq1 !rF   c                    t        | d      s-t               | _        dD ]  }t               | j                  |<    || _        || _        | j                         }| j                  |       t               }|j                  | j                  d   t        d             | j                  j                  t        j                  | j                  | j                  d          t!        |t"              st!        |t$              r|j'                         rl|j                  | j                  d   t        d             | j                  j                  t        j                  | j(                  | j                  d          nk|j                  | j                  d   t        d             | j                  j                  t        j                  | j*                  | j                  d          t!        |t"              st!        |t,              r|j/                          t!        |t"              rk|j                  | j                  d	   t        d
             | j                  j                  t        j                  | j0                  | j                  d	          t!        |t"              st!        |t,              rk|j                  | j                  d   t        d             | j                  j                  t        j                  | j2                  | j                  d          t!        |t4              r!|j/                          |j                  | j                  d   t        d             | j                  j                  t        j                  | j6                  | j                  d          |j                  | j                  d   t        d             | j                  j                  t        j                  | j8                  | j                  d          t;        |j=                               dk(  r|j?                  | j                  d   d       t!        |t@              r|j/                          d|jC                         vrt;        | j                         jE                  d            dkD  r|j                  | j                  d   t        d      t        jF                         | j                         jI                         r|jK                  | j                  d   d       | j                  j                  t        j                  | jL                  | j                  d          | j                  jN                  jQ                         r|j                  | j                  d   t        d      t        jF                         | j                         jS                         r|jK                  | j                  d   d       | j                  j                  t        j                  | jT                  | j                  d          | j                         jI                         r|j?                  | j                  d   d       t!        |t@              s t!        |t"              st!        |t$              r{|j/                          |j                  | j                  d   t        d             | j                  j                  t        j                  | jV                  | j                  d          | j                  jY                  |       |j[                          y)zRight click -> pop-up menupopupID)
removeenableaddPointdelPointintermediatedisplaypropsr2   r  r  r  Remove)r2   r  DisableEnabler  	Set labelr  Set commentr  Add control pointr  Remove control pointr  F@r  r   r  Intermediate)kindTr  Displayr  
PropertiesN).r   dictr  r#   r  r  r  r  r   Appendr   r  r   rc   EVT_MENUOnRemover  r2  r  	IsEnabled	OnDisableOnEnabler  AppendSeparator
OnSetLabelOnSetCommentr  
OnAddPointOnRemovePointr=  GetLineControlPointsr  r  r~  rE  
ITEM_CHECKIsIntermediateCheckOnIntermediater\   GetMapDisplayr{  OnHasDisplayr  	PopupMenur  )rC   r  r  re  r  r	  r  	popupMenus           rD   OnRightClickzModelEvtHandler.OnRightClick  s   tY'6DL , %*GS!,  E"F	h/8=

T]]t||H7MNe[)Zy-I   h!79F

T^^X@VW  h!78E

T]]t||H?UVe[)Z|-L%%'e[)T\\'2AkNCJJOOBKKT\\'=ROSe[)Z|-LT\\)4a6FGJJOOBKK):):t||I?VOWe]+%%'T\\*5q9L7MNJJOOBKKT\\*=UOVT\\*5q9O7PQJJOOT//DLL4L   5--/0A5  j!95AeY'%%'5>>++44V<=A  LL0!N2C"-- !  ==?113OODLL$@$G

KK!4!4n9U    zz!!//1  LL+Qy\ !  ==?--/OODLL$;TB

KK!2!2t||I7N    ==?113$$T\\)%<eD ui(%-%+%%'T\\'2AlODJJOOBKK):):t||G?TOU

Y'rF   c                 &    | j                  d       y)Disable actionFN	_onEnabler   s     rD   r  zModelEvtHandler.OnDisable`  s    urF   c                 &    | j                  d       y)r  TNr  r   s     rD   r  zModelEvtHandler.OnEnabled  s    trF   c                     | j                         }|j                  |       | j                  j                          | j                  j                  j                          y r@   )r  r  r  r   r~   r   )rC   r  r  s      rD   r  zModelEvtHandler._onEnableh  s?    V

!

!!#rF   c                    | j                         }t        | j                  t        d      t        d      |j	                               }|j                         t        j                  k(  r|j                         }|j                  |       | j                  j                          | j                  j                  j                          | j                  j                  j                          |j                          y )NzLabel:r  )r1   rB   r  r6  )r  wxTextEntryDialogr  r   r  r  rc   r.  r~  r  r   r   r   r~   r   r  )rC   rI   r  r  r  s        rD   r  zModelEvtHandler.OnSetLabeln  s    ::hKkN.."	
 ==?bhh&LLNENN5!JJ##%JJ  '')JJ%%'rF   c                    | j                         }t        | j                  t        d      t        d      |j	                         t
        j                  d      }|j                         t
        j                  k(  r_|j                         }|j                  |       | j                  j                          | j                  j                  j                          |j                          y )Nr  r  r  )r1   rB   r  defaultValuer  r  )r  r  r  r   
GetCommentrc   r  r  r.  r~  
SetCommentr   r~   r   r  )rC   rI   r  r  r  s        rD   r  zModelEvtHandler.OnSetComment~  s    #::jMm$))+oo
 ==?bhh&llnGW%JJ##%JJ%%'rF   c                    |j                         }t        j                  |      }|j                         r|j	                  d|       nd}|j                         j                         }t               }|s)|D ]$  }|j                         s|j                  |       & |j	                  d|       |D ]  }|j	                  d|        |j                  d       y )NFT)
r   rc   r   r  r  rN  r  r  r  r   )	rC   r  r  r~   r  redraw	shapeList
toUnselectss	            rD   r  zModelEvtHandler._onSelectShape  s    "[[ >>LL#F))+88:IJ" -Azz|"))!,- LLr" $#$ 	urF   c                 V   | j                         }|j                  t        j                  | j                  | j
                               |j                          |j                  d       | j                  j                          | j                  j                  j                          y)r  r1  TN)r  r>  rc   r?  r  r  ResetShapesr  r  r   r~   r   rC   rI   r  s      rD   r  zModelEvtHandler.OnAddPoint  so    $$2<<+G$HT

!

!!#rF   c                    | j                         }|j                          |j                  d       |j                  d       | j                  j	                          | j                  j
                  j                          y)r  FTN)r  DeleteLineControlPointr  r  r   r~   r   r  s      rD   r  zModelEvtHandler.OnRemovePoint  sW    $$&UT

!

!!#rF   c                     | j                   j                          | j                         }|j                  |j	                                | j                   j
                  j                          y)zMark data as intermediateN)r  r   r  SetIntermediate	IsCheckedr~   r   r  s      rD   r  zModelEvtHandler.OnIntermediate  sH    

!eoo/0

!!#rF   c                    | j                   j                          | j                         }|j                  |j	                                | j                   j
                  j                          	 |j	                         rb| j                   j                  j                         j                  |j                         |j                         d|j                                y| j                   j                  j                         j                  |j                               }|D ]5  }| j                   j                  j                         j                  |       7 y# t        $ r&}t!        | dj#                  |             Y d}~yd}~ww xY w)zMark data to be displayedTrt  z{}rD  N)r  r   r  SetHasDisplayr   r~   r   r\   r|  r  r  r~  r  r}  r  r   r   r   )rC   rI   r  r  r  rH  s         rD   r  zModelEvtHandler.OnHasDisplay  s*   

!EOO-.

!!#	8 

""//1:://+) ++-	 ;  ++88:JJNN$ $ IEJJ&&335AA%HI  	8$A77	8s    /A1E !A;E 	F&FFc                     | j                   j                         j                  | j                         g       | j                   j                  j                          yr   )r  r   r  r  r   r   r   s     rD   r  zModelEvtHandler.OnRemove  s<    

++T]]_,=>

##%rF   r   r   r@   F)rj  rk  rl  r  rh   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rn  rF   rD   r   r   ]  sj    #,*\CJJ*2`D$ ".$$$86&rF   r   c                   N    e Zd Zej                  fdZd Zd Zd Zd Z	d Z
d Zy)	r   c                 f   || _         t        j                  j                  | f||d| t	        | t        j
                  dt        d      z        | _        t        | t        d      t        d      t        d      t        d      g| j                   	      | _	        t	        | t        j
                  dt        d
      z        | _
        t        | t        j
                        | _        t        j                  | j                  j                         t        j                  | t        j
                  t        d      t        d      t        d      t        d      t        d      t        d      t        d      t        d      t        d      g	      | _        | j                   j#                  d       t        | t        j
                        | _        t        | t        j
                        | _        t)        | t        j*                        | _        | j,                  j/                  t        d             | j,                  j1                  d       | j                  j3                  t        j4                  | j6                         | j$                  j3                  t        j4                  | j6                         | j&                  j3                  t        j4                  | j6                         | j,                  j3                  t        j8                  | j:                         | j=                          y)zManage model variables panelr1   r2    %s z)List of variables - right-click to deleter1   r2   r  Name	Data typeDefault valueDescription)r1   columnsr  zAdd new variableintegerfloatr  r	  r
  regionmapsetfiledirr1   r2   choicesr  zAdd new variable to the modelFN)r1   rc   Panelrh   r$   rm  r   listBoxVariableListCtrlr  addBoxr'   rT   r   r  Choicer  SetSelectionr6  descr    ID_ADDbtnAdd
SetToolTipr  r   EVT_TEXTOnText
EVT_BUTTONOnAddr   rC   r1   r2   r   s       rD   rh   zVariablePanel.__init__  s   
$?v"?? yy1HII
 %vY+/0BAmDTU++
	  BIIVa8J6K-K
 DRYY7	
TYY''(IIyy)'
(((((&	%

	 			q!Tbii8
DRYY7	 DRYY7q!@AB5! 			r{{DKK0

T[[1		r{{DKK0

3rF   c           
      F   t        j                  | j                  t         j                        }|j	                  | j
                  dt         j                         t        j                  | j                  t         j                        }t        j                  dd      }|j	                  t        | t         j                  dt        d      z        t         j                  d	       |j	                  | j                  d
t         j                         |j	                  t        | t         j                  dt        d      z        t         j                  d	       |j	                  | j                  d       |j	                  t        | t         j                  dt        d      z        t         j                  d	       |j	                  | j                  ddt         j                         |j	                  t        | t         j                  dt        d      z        t         j                  d	       |j	                  | j                   ddt         j                         |j#                  d       |j	                  |t         j                         |j	                  | j$                  dt         j&                  t         j(                  z  d       t        j*                  t         j                        }|j	                  |dt         j                  t         j,                  z  d       |j	                  |dt         j                  t         j.                  z  t         j0                  z  t         j2                  z  d       | j5                  |       |j7                  |        y)Layout dialogr9   r      )hgapvgap%s:r  r
  r  )r   pos)r   r9   )r-  r   r  )r   r  )r      )r-  r  )r9   r   )r9   r9   )r9   r.  )r-  spanr   r  )r  r   )r  r9   r   r   r   r   borderN)rc   StaticBoxSizerr  r   r   r  r   r  GridBagSizerr%   rm  r   ALIGN_CENTER_VERTICALrT   r  r6  r  AddGrowableColr   TOPALIGN_RIGHTr   ALLLEFTRIGHTBOTTOMr   r   )rC   	listSizeraddSizer	gridSizer	mainSizers        rD   r   zVariablePanel._layout  sy   %%dllBKK@	diiABII>$$T[["++>OO3	dryy&	8IJ)) 	 	

 	diiV"))<dryy+8NO)) 	 	

 	diiV,dryy/@R8RS)) 	 	

 	djjf6		Jdryy-@P8PQ)) 	 	

 	diiV&ryyI  #YRYY/T[[QRVVbnn5LUVWKK,	iABII4FqQRWW$rxx/"));	 	 	
 	i drF   c                     | j                   j                         r| j                  j                          y| j                  j                  d       y)zText enteredFN)rT   r~  r   r  r   s     rD   r#  zVariablePanel.OnTextH  s4    99KK KKu%rF   c                 L   | j                   j                  | j                  j                         | j                  j                         | j                  j                         | j                  j                               }| j                  j                  d       | j                  j                          |rt        | |       y| j                  j                  d       | j                  j                  d       | j                  j                  d       | j                          y)zAdd new variable to the listr   rD  r  N)r  r  rT   r~  r  GetStringSelectionr6  r  r   r  r   r  UpdateModelVariables)rC   rI   rA  s      rD   r%  zVariablePanel.OnAddO  s    iiII II((*JJ!II 	
 			2		$,II""1%JJ#IIr"%%'rF   c                 t   t               }t        j                  | j                  j	                               D ];  }|d   }dt        |d         i||<   |d   r|d   ||   d<   |d   s1|d   ||   d<   = | j                  j                         j                  |       | j                  j                          y)	zUpdate model variablesr   r  r9   r  r6  r.  descriptionN)
r  r/  
itervaluesr  rM  r   r1   rr   SetVariablesr   )rC   rX   valuesrT   s       rD   rD  z"VariablePanel.UpdateModelVariablesb  s    F	nnTYY%6%6%89 	;F!9D%s6!9~6IdOay+1!9	$(ay17	$.	; 	++I6  "rF   c                 :    | j                   j                  d       yzReload list of variablesNr  OnReloadr   s    rD   r   zVariablePanel.Updatep      		4 rF   c                     | j                   j                          | j                  j                         j	                  g        y)zRemove all variablesN)r  DeleteAllItemsr1   rr   rH  r   s    rD   rP  zVariablePanel.Resett  s-    		  "++B/rF   N)rj  rk  rl  rc   rm  rh   r   r#  r%  rD  r   rP  rn  rF   rD   r   r     s.    "$)) 6p-^&(&#!0rF   r   c                   H    e Zd Zej                  fdZd Zd Zd Zd Z	d Z
y)r   c           	      n   || _         t        j                  j                  | f||d| t	        | t        j
                  dt        d      z        | _        t        | t        d      t        d      t        d      t        d      gg d	| j                   
      | _	        t        | t        j                        | _        t        | t        j                        | _        t        | t        j                        | _        | j                  j#                  t        j$                  | j&                         | j                  j#                  t        j$                  | j(                         | j                   j#                  t        j$                  | j                  j*                         | j-                          y)zManage model itemsr  r	  z%List of items - right-click to deleter
  LabelzIn loopParameterizedCommand)r9   r  r.  )r1   r  columnsNotEditabler  N)r1   rc   r  rh   r$   rm  r   r  ItemListCtrlr  r    ID_UP	btnMoveUpID_DOWNbtnMoveDown
ID_REFRESH
btnRefreshr   r$  OnMoveItemsUpOnMoveItemsDownrM  r   r&  s       rD   rh   zItemPanel.__init__{  s%   
$?v"?? yy1DEE
 !wZ9q/A1Y<P(++	
	  t9!"**= ?BMM4+=+=>bmmT-A-ABR]]DII,>,>?rF   c                    t        j                  | j                  t         j                        }|j	                  | j
                  dt         j                         t        j                  t         j                        }|j	                  | j                  dt         j                         |j	                  | j                  dt         j                  t         j                  z  t         j                  z         |j	                  | j                  dt         j                  t         j                  z         t        j                  t         j                        }|j	                  |dt         j                  t         j                  z  d       |j	                  |dt         j                  t         j                  z  d       | j!                  |       |j#                  |        y)	r(  r9   r   r)  )r2  r   r.  r1  r   N)rc   r3  r  r   r   r  r   r   rY  r9  r[  r:  r;  r<  r]  
HORIZONTALr   r   )rC   r=  manageSizerr@  s       rD   r   zItemPanel._layout  s    %%dllBKK@	diiABII>kk"++.qrvv>((2889Kbii9WX"((8JKKK.	iABII4FqQkabii"&&6HQRSi drF   c                 :    | j                   j                  d       yrK  rL  r   s    rD   r   zItemPanel.Update  rN  rF   c                     g }d}	 | j                   j                  |      }|dk(  rn|j                  |       |}5|st        t	        d      |        |S )z.Get list of selected items, indices start at 0r\  zNo items to selected.r7   )r  GetNextSelectedr  r   r   )rC   rV   currentnexts       rD   _getSelectedItemszItemPanel._getSelectedItems  s]    99,,W5DrzLLG  Q./=rF   c                     | j                         }|sy| j                  j                  |d       | j                  j	                         j                          | j                  j                          y) Item moved up, update action idsNTuprh  r  	MoveItemsr1   r   r   r   rC   rI   rV   s      rD   r^  zItemPanel.OnMoveItemsUp  sV    &&(		Ed+'')  "rF   c                     | j                         }|sy| j                  j                  |d       | j                  j	                         j                          | j                  j                          y)rj  NFrk  rm  ro  s      rD   r_  zItemPanel.OnMoveItemsDown  sV    &&(		Ee,'')  "rF   N)rj  rk  rl  rc   rm  rh   r   r   rh  r^  r_  rn  rF   rD   r   r   z  s'    "$)) :"! ##rF   r   c                   l    e Zd ZdZej
                  fdZd Zd ZddZ	d Z
d Zd Zd	 Zd
 Zd Zd Zy)r   z#Model as a Python script of choice.c                    || _         t        j                  j                  | f||d| d| _        t
        | _        t        | t        j                  dt        d      z        | _
        t        | | j                   j                               | _        t               rt        | j                         t!        | t        j                  t        d            | _        | j"                  j%                  t        d             | j'                  t        j(                  | j*                  | j"                         t!        | t        j,                        | _        | j.                  j%                  t        d	             | j'                  t        j(                  | j0                  | j.                         t!        | t        j2                        | _        | j4                  j%                  t        d
             t        j6                  | t        j                  t        d      t        d      g      | _        | j8                  j;                  d       | j'                  t        j(                  | j<                  | j4                         | j'                  t        j>                  | j@                  | j8                         | jC                          y)zInitialize the panel.r  Nr	  zPython scriptr
  )r1   rz   z&Run
Run scriptzSave the script to a filezIRefresh the script based on the model.
It will discard all local changes.PythonPyWPSr  r   )"r1   rc   r  rh   rc  WritePythonFilewrite_objectr$   rm  r   bodyBoxr   GetStatusBarr   r(   r   r    btnRunr!  r   r$  OnRun	ID_SAVEAS	btnSaveAsOnSaveAsr\  r]  r  script_type_boxr  	OnRefresh
EVT_CHOICEOnChangeScriptTyper   r&  s       rD   rh   zPythonPanel.__init__  s   
$?v"??  , BIIVa6H-H
 1I1I1KL	8		"DRYYaiHq/		"--T[[9t=!!!$?"@A		"--? ?""5	
  "yyyy('
 
 	))!,		"--A		MM##  	
 	rF   c           
         t        j                  t         j                        }t        j                  | j                  t         j
                        }t        j                  t         j
                        }|j                  | j                  dt         j                  t         j                  z  d       |j                  t        | t         j                  dt        d      z        t         j                         |j                  | j                  dt         j                  d	       |j!                          |j                  | j"                  dt         j$                  t         j                  z  d	       |j                  | j&                  dt         j                  d	       |j                  | j(                  dt         j                  d	       |j                  |dt         j                  t         j                  z  d       |j                  |dt         j                  t         j                  z  d       |j+                  |        |j-                  |        | j/                  |       y )
Nr9   r.  r1  r,  zPython script typer
  r0  r   r)  )rc   r   r   r3  rx  ra  r   r   r   r9  r%   rm  r   r5  r  r;  AddStretchSpacerr]  r:  r}  rz  r   SetSizeHintsr   )rC   r   	bodySizerbtnSizers       rD   r   zPythonPanel._layout  s   BKK(%%dllBMMB	;;r}}-diiABII4FqQ		;O9P1P ))	 	 	
 	T))abhhqQ!!#T__2889KTUVT^^KT[[QRXXaH		)		BFF0B1	M		(qryy266/A!	L		$4 erF   c                    t        | j                  j                         j                               dk(  r| j                  j                  d       y| j                  j                  rt        j                  | t        dj                  | j                  j                              t        d      t        j                  t        j                  z  t        j                  z  t        j                  z        }|j!                         }|j#                          |t        j$                  k(  ryt'        j(                  d	      }| j+                  || j                  j                                |j-                  d       | j                  j                  |j/                                |j1                          d| j                  _        y)
zpRefresh the script.

        :return: True on refresh
        :return: False script hasn't been updated
        r   r   Tz`{} script is locally modified. Refresh will discard all changes. Do you really want to continue?r   r  Fzr+rK  )r=  r1   rr   r   r   SetTextmodifiedrc   r  r   r   r   r  
NO_DEFAULTr  r  r  r  rh  rN  rO  rw  rQ  readrz  )rC   r  r  r  s       rD   r   zPythonPanel.RefreshScript  s6    t{{##%..01Q6IIb!99""66<fTYY=R=R6S
 (ii"--/"2B2BBRYYN	C --/CKKMbhh##."dkk2245

		"'')$

"		rF   c           	         d}t        j                  | t        d      t        j                  j                  | j                  j                  d            t        j                         t        d      t         j                        }|j                         t         j                  k(  r|j                         }|sy|dd d	k7  r|d	z  }t        j                  j                  |      rt        j                  | t        d
      |z  t        d      t         j                  t         j                   z  t         j"                  z        }|j                         t         j$                  k(  r|j'                          y|j'                          t)        |d      }	 |r+| j+                  || j                  j-                                n)|j/                  | j0                  j3                                |j5                          t        j6                  |t8        j:                  t8        j<                  z         |S # |j5                          w xY w)z>Save the script to a file.

        :return: filename
        r   zChoose file to saveF)rU  zPython script (*.py)|*.py)r1   rB   r  rY  rZ  r;   Nz.pyz=File <%s> already exists. Do you want to overwrite this file?z	Save filer  rs  )rc   r]  r   rl   rm   r   r1   rV  r^  rk  r  r.  r_  rl  r  r  r  r  rh  r  rx  rw  rr   ry  r   GetTextrz  chmodstatS_IRWXUS_IWUSR)rC   r  rc  r  r  s        rD   r  zPythonPanel.SaveAsD  s   
 mm+,(()A)Ae)A)LMyy{23**
 ==?bhh&{{}H BC=E!H77>>(#""V  +ii"..023C3CCC }}"((*KKM(C 	!!"dkk&:&:&<=**,-HHJ 	4<<$,,67 HHJs   AH1 1Ic                 $   t        j                         | _        	 t        | j                  d      }|j	                  | j
                  j                                	 |j                          t        j                  t        j                  | j                        t        j                           }t        j                   | j                  |t        j"                  z         | j$                  j'                         j)                         D ]~  }t+        |j-                         d         t+        |j-                         d         z   dkD  s@| j$                  j.                  j1                  |j2                  dgd	| j4                  
        n> | j$                  j.                  j1                  |j2                  gd| j4                  
       |j7                          y# t        $ r}t        t        d      |z  |        Y d}~j                          t        j                  t        j                  | j                        t        j                           }t        j                   | j                  |t        j"                  z         yd}~ww xY w# j                          t        j                  t        j                  | j                        t        j                           }t        j                   | j                  |t        j"                  z         w xY w)zRun Python scriptrs  z"Unable to launch Python script. %sr7   Nr   flagsr   z--uiF)skipInterfaceonDoneT)grassrN  rc  rx  ry  r   r  rS  r   r   rz  r  S_IMODErl   lstatST_MODEr  S_IXUSRr1   rr   r   r=  GetParameterizedParamsr   r<  rT   OnDoner   )rC   rI   r  rH  rL  r   s         rD   r{  zPythonPanel.OnRun{  s   (		9dmmS)BHHTYY&&()
 HHJ<< 7 EFDHHT]]D4<<$78KK((*335 	DD//1(;<d113G<=> %%,,WWf%U4;; -  	 KK!!((	dkk )  	

/  	19:Q>tLHHJ<< 7 EFDHHT]]D4<<$78	 HHJ<< 7 EFDHHT]]D4<<$78s*   ?G 	JJ8J	 JJ	 	BLc                 <    t        | j                         d| _        y)zPython script finishedN)r)   rc  r   s     rD   r  zPythonPanel.OnDone  s    4==!rF   c                 6   | j                   j                         }|dk(  rt        | _        n|dk(  rt        | _        | j                         rY|| j                  _        | j                  j                  t        dj                  | j                  j                              d       | j                   j                  | j                  j                         | j                  j                  dk(  rJt        | _        | j                  j                          | j                  j                  t        d             y | j                  j                  dk(  rJt        | _        | j                  j!                          | j                  j                  t        d             y y )Nrt  ru  r   r   rs  z2Run script - enabled only for basic Python scripts)r  rC  rv  rw  WritePyWPSFiler   r   r   r1   rA   r   r   SetStringSelectionrz  r  r!  r  )rC   rI   new_script_types      rD   r  zPythonPanel.OnChangeScriptType  s+   ..AACh& /D' .D$3DII!KK%%+224993H3HIJ
 	//		0E0EF99  H, /DKK KK""1\?3YY""g- .DKK!KK""FG .rF   c                     | j                         rH| j                  j                  t        dj	                  | j
                  j                              d       |j                          y)zRefresh the script.r   r   N)r   r1   rA   r   r   r   r   r   r   s     rD   r  zPythonPanel.OnRefresh  sL    KK%%+224993H3HIJ 	

rF   c                 H    | j                  d       |j                          y)zSave the script to a file.Fr  N)r  r   r   s     rD   r~  zPythonPanel.OnSaveAs  s    % 

rF   c                 .    | j                   j                  S )z&Check if the script has been modified.)r   r  r   s    rD   r   zPythonPanel.IsModified  s    yy!!!rF   c                 N    t        | j                  j                               dk(  S )zCheck if the script is empty.r   )r=  r   r  r   s    rD   r   zPythonPanel.IsEmpty  s    499$$&'1,,rF   Nr  )rj  rk  rl  r  rc   rm  rh   r   r   r  r{  r  r  r  r~  r   r   rn  rF   rD   r   r     sF    -"$)) 0d4#J5n>
6
"-rF   r   )ar  rl   rv   r   r  rN  r   r/  r!  rc   wx.libr   r*   r   wxPythonPhoenixagw.flatnotebookflatnotebookr   ImportErrorwx.lib.agw.flatnotebooklibagwwx.lib.flatnotebookwx.lib.neweventr   gui_core.widgetsr   core.gconsoler   r   r	   r
   gui_core.goutputr   
core.debugr   	core.gcmdr   r   r   r   gui_core.dialogsr   r   r  gui_core.ghelpr   core.settingsr   gui_core.menur   rq   gmodeler.menudatar   gui_core.formsr   gmodeler.preferencesr   r   gmodeler.toolbarsr   core.gifacer   gui_core.pystcr   r   gmodeler.gifacer   gmodeler.modelgmodeler.dialogsgui_core.wrapr    r!   r"   r#   r$   r%   r&   r'   r(   r  r  r   grass.script.utilsr)   grass.scriptr  rg   r,   rt  r}   r  r   r  r   r   r   rn  rF   rD   <module>r     s9  , 
 
     
  	  -% %$ $ & N N +  < < - E * & ) -  D , $ - :     ?&j ^ ) &x xv%K#// K\@&c)) @&FW0BHH W0tS# S#l~-"(( ~-S=  -,,-s    F	 	FF