
    ը	f                        d Z ddlZddlZddlZddlmc mc mZ ddl	m
Z
 ddl	mZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZ dd
l ddlmZ ddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$  G d de      Z% G d dejL                        Z' G d dejL                        Z( G d dejL                        Z) G d de)      Z* G d de)      Z+ G d de"ejX                  ejZ                        Z. G d de.      Z/ G d de.      Z0 G d d e0e$      Z1y)!aQ  
@package gmodeler.dialogs

@brief wxGUI Graphical Modeler - dialogs

Classes:
 - dialogs::ModelDataDialog
 - dialogs::ModelSearchDialog
 - dialogs::ModelRelationDialog
 - dialogs::ModelItemDialog
 - dialogs::ModelLoopDialog
 - dialogs::ModelConditionDialog
 - dialogs::ModelListCtrl
 - dialogs::ValiableListCtrl
 - dialogs::ItemListCtrl
 - dialogs::ItemCheckListCtrl

(C) 2010-2016 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>
    N)	globalvar)utils)SearchModuleWidgetSimpleValidator)GError)SimpleDialogMapLayersDialogForModeler)
GPromptSTC)SelectElementSelect)*)LayerManagerMenuData)Button
StaticText	StaticBoxTextCtrlMenuListCtrlNewIdCheckListCtrlMixinc                   J    e Zd ZdZ ed      fdZd Zd Zd Zd Z	d Z
d	 Zy
)ModelDataDialogzData item properties dialogzData propertiesc                 R   || _         || _        | j                         \  }}|| _        t	        j
                  | ||       t        | j                  | j                  j                         t        | j                              | _        |j                         r)| j                  j                  |j                                | j                  t        j                   | j"                  | j$                         | j                  t        j                   | j&                  | j(                         | j                  rt+        | j                  g dt,        j.                        | _        | j0                  j                  t        j2                  | j4                         | j0                  j7                  d       | j                  j9                  d       |j                         r| j$                  j;                          | j=                          | j?                  | jA                                y )N)callback)parenttype	validator)raster	raster_3dvector)r   elementssizer   r   )!r   shape	_getLabeletyper   __init__r   panel	GetPromptr   ValidatorCallbackelementGetValueSetValueBindwx
EVT_BUTTONOnOKbtnOKOnCancel	btnCancelr   r   DIALOG_GSELECT_SIZE
typeSelect
EVT_CHOICEOnTypeSetSelectionSetTypeEnable_layout
SetMinSizeGetSize)selfr   r#   titlelabelr%   s         1/usr/lib/grass83/gui/wxpython/gmodeler/dialogs.pyr&   zModelDataDialog.__init__8   sd   
~~'u
dFE2::%%'%t/E/EF

 >>LL!!%.."23		"--DJJ7		"--?::+zz:22DO
 OO  <OO((+LL  *>>JJ'    c                     d}| j                   j                         }|dk(  rt        d      }||fS |dk(  rt        d      }||fS d}t        d      }||fS )NFr   zName of raster map:r    zName of vector map:TName of element:)r#   r(   _)r>   r%   promptr@   s       rA   r$   zModelDataDialog._getLabelZ   su    %%'X+,E e| x+,E
 e| E()Ee|rB   c           	         | j                   r| j                  j                  t        | j                  t
        j                  t        d            dt
        j                  d       | j                  j                  | j                  dt
        j                  d       | j                  j                  t        | j                  t
        j                  t        d            dt
        j                  d       | j                  j                  | j                  dt
        j                  t
        j                  z  d       | j                  j                  | j                         | j                  j                  |        y)	Do layoutzType of element:r   idr@   r      
proportionflagborderrD   N)r%   	dataSizerAddr   r'   r.   ID_ANYrE   ALLr5   r*   EXPANDSetSizersizerFitr>   s    rA   r;   zModelDataDialog._layoutg   s   ::NN::"))1=O;P VV   NNt1266RSTdjjRYYa@R>ST	 	 	
 	LLQRYY-? 	 	
 	

DJJ'

trB   c                 d    | j                   sy| j                  j                  j                         S )zGet element typeN)r%   r*   tcpGetTyperX   s    rA   r[   zModelDataDialog.GetType   s%    zz||''))rB   c                     | j                   j                  |j                               }| j                  j	                  |       y)zSelect element typeN)r5   r+   	GetStringr*   r9   )r>   eventevalues      rA   r7   zModelDataDialog.OnType   s/    ))%//*;<V$rB   c                 ~   | j                   j                  | j                  j                                | j                  rr| j                         }|dk(  r| j                   j                  d       nA|dk(  r| j                   j                  d       n |dk(  r| j                   j                  d       | j                  j                  j                          | j                  j                  dd       | j                   j                  d       | j                         r|j                          y| j                          y)z
Ok pressedr   r    r    r   N)r#   r,   r*   r+   r%   r[   	SetPromptr   canvasRefreshSetStatusTextSetPropDialogIsModalSkipDestroy)r>   r^   elems      rA   r0   zModelDataDialog.OnOK   s    

DLL1134::<<>Dx

$$X.!

$$X.$

$$[1""$!!"a(

  &<<>JJLLLNrB   c                     | j                   j                  d       | j                         r|j                          y| j	                          y)zCancel pressedN)r#   rf   rg   rh   ri   r>   r^   s     rA   r2   zModelDataDialog.OnCancel   s/    

  &<<>JJLLLNrB   N)__name__
__module____qualname____doc__rE   r&   r$   r;   r[   r7   r0   r2    rB   rA   r   r   5   s2    %,-.?,@  (D2*%
*rB   r   c                       e Zd Z ed      ej
                  ej                  z  fdZd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zy)ModelSearchDialogzAdd GRASS command to the modelc                     | _         t        j                  j                   f|t        j                  |d|  j                  d        j                  t        j                  t        j                  j                  t        j                  d      t        j                               d _        t        j                   t        j                         _        t#         j                   t        j                  dt%        d      z         _        t#         j                   t        j                  dt%        d	      z         _        t+               }t-         ||j/                         
       _         j0                  j2                  j5                   j6                          j0                  j8                  j5                   fd       t;         j                   |j/                         d       _         j<                  j>                  j5                   fd       tA         j                   t        j                         _!        tA         j                   t        j                  t        jD                         _#        tI         j                   t        jJ                         _&        tI         j                   t        jN                         _(         jP                  jS                           jU                  t        jV                   jX                   jP                          jU                  t        jV                   jZ                   jL                          j]                           j_                  d       y)zGraphical modeler tool search window

        :param parent: parent window
        :param id: window id
        :param title: window title
        :param kwargs: wx.Dialogs' arguments
        )r   rJ   r?   ModelerDialog	grass.icoNr   rJ    %s CommandrI   zLabel and comment)r   giface	menuModelc                 :    j                   j                  |       S N)r@   r,   )commandr>   s    rA   <lambda>z,ModelSearchDialog.__init__.<locals>.<lambda>   s    DJJ//8 rB   T)r   modelshowTipc                 v    j                   j                  | dz         j                  j                  |       fS )N )
cmd_promptSetTextr@   r,   )namer>   s    rA   r   z,ModelSearchDialog.__init__.<locals>.<lambda>   s2    ''s
3

##D) rB   )r   rJ   style)  )0r   r.   Dialogr&   rR   SetNameSetIconIconospathjoinr   ICONDIRBITMAP_TYPE_ICO_commandPanelr'   r   rE   cmdBoxlabelBoxr   r
   GetModelr   promptRunCmdconnect	OnCommandcommandSelectedr   searchmoduleSelectedr   r@   TE_MULTILINEcommentr   	ID_CANCELr3   ID_OKbtnOk
SetDefaultr-   r/   OnOkr2   r;   SetSize)r>   r   rz   r?   r   kwargsr{   s   `      rA   r&   zModelSearchDialog.__init__   s9    
		4T299ETVT_%GGBGGLL!2!2K@"BTBTU	
 XXTbii8
::"))6AiL3H
 "::"))6A>Q<R3R

 )*	$)2D2D2F
 	$$,,T^^<''//8	
 )::Y%7%7%94
 	""**	
 TZZBII>
tzzbiirW

BLL9DJJ1


		"--DJJ7		"--?YrB   c           	      d   t        j                  | j                  t         j                        }|j	                  | j
                  dt         j                         t        j                  | j                  t         j                        }t        j                  dd      }|j	                  t        | j                  t         j                  t        d            t         j                  d       |j	                  | j                  d	t         j                  
       |j	                  t        | j                  t         j                  t        d            t         j                  d       |j	                  | j                  dt         j                  
       |j!                  d       |j#                  d       |j	                  |dt         j                         t        j$                         }|j'                  | j(                         |j'                  | j*                         |j-                          t        j.                  t         j                        }|j	                  | j0                  dt         j                  t         j2                  z  d       |j	                  |dt         j                  t         j4                  z  t         j6                  z  t         j8                  z  d       |j	                  |dt         j                  t         j4                  z  t         j6                  z  t         j8                  z  d       |j	                  |dt         j                  t         j2                  z  d       | j                  j;                  |       |j=                  |        | j?                          y )NrK   rM   rN      hgapvgapzLabel:rI   r   r   rN   posr   rK   )r   rN   zComment:rK   r   rK   rK   r      rL   ) r.   StaticBoxSizerr   VERTICALrQ   r   rT   r   GridBagSizerr   r'   rR   rE   ALIGN_CENTER_VERTICALr@   r   AddGrowableRowAddGrowableColStdDialogButtonSizer	AddButtonr3   r   RealizeBoxSizerr   rS   LEFTRIGHTTOPrU   rW   Layout)r>   cmdSizer
labelSizer	gridSizerbtnSizer	mainSizers         rA   r;   zModelSearchDialog._layout   sn   $$T[["++>T__C&&t}}bkkB
OO3	djjRYYakJ)) 	 	

 	djjf299=djjRYYa
mL)) 	 	

 	dllRYY?  #  #yQRYY?**,4>>*4::&KK,	dkkabii"&&6HQRSRWW$rxx/"&&8	 	 	
 	RWW$rxx/"&&8	 	 	
 	h1299rvv3EaP

I&drB   c                     | j                   S )zGet dialog panel)r'   rX   s    rA   GetPanelzModelSearchDialog.GetPanel      zzrB   c                     | j                   j                         d   j                         }t        |      dk(  rt	               }|S t        j                  t        |            }|S )Nr   )r   
GetCurLinestriplenlistr   splitstr)r>   linecmds      rA   _getCmdzModelSearchDialog._getCmd   sT    ))+A.446t9>&C 
 ++c$i(C
rB   c                     | j                   S )zGet command)r   rX   s    rA   GetCmdzModelSearchDialog.GetCmd(  s    }}rB   c                 j    | j                   j                         | j                  j                         fS )zGet label and comment)r@   r+   r   rX   s    rA   GetLabelzModelSearchDialog.GetLabel,  s'    zz""$dll&;&;&===rB   c                     t        |      dk  rt        | t        d             y|d   t        j                  vrt        | t        d      |d   z         yy)NrK   z<Command not defined.

Unable to add new action to the model.r   messageFr   zA'%s' is not a GRASS tool.

Unable to add new action to the model.T)r   r   rE   r   grassCmdr>   r   s     rA   ValidateCmdzModelSearchDialog.ValidateCmd0  sh    s8a<W q6+++= a&	 rB   c                     | j                  |d         r*|d   | _        | j                  t        j                         yy)zCommand in prompt confirmedr   N)r   r   EndModalr.   r   r   s     rA   r   zModelSearchDialog.OnCommandF  s4    CJ'JDMMM"((# (rB   c                     | j                         }| j                  |      r'|| _        | j                  t        j
                         yy)zButton 'OK' pressedN)r   r   r   r   r.   r   )r>   r^   r   s      rA   r   zModelSearchDialog.OnOkL  s7    llnC DMMM"((# !rB   c                 $    | j                          y)zCancel pressed, close windowN)Hiderl   s     rA   r2   zModelSearchDialog.OnCancelS  s    		rB   c                    | j                   j                          | j                  j                  d       | j                  j                  d       | j
                  j                          | j
                  j                          y)zReset dialogra   N)r   Resetr@   r,   r   r   CmdEraseSetFocusrX   s    rA   r   zModelSearchDialog.ResetW  sV    

Bb!  "  "rB   N)rm   rn   ro   rE   r.   DEFAULT_DIALOG_STYLERESIZE_BORDERr&   r;   r   r   r   r   r   r   r   r2   r   rq   rB   rA   rs   rs      s[    
 01%%(8(88A F-^>,$$#rB   rs   c                       e Zd ZdZej
                   ed      ej                  ej                  z  fdZ	d Z
d Zd Zd Zd Zd	 Zy
)ModelRelationDialogzRelation properties dialogzRelation propertiesc                    || _         || _        | j                         }|sd| _        y d| _        t	        j
                  j                  | |||fd|i| | j                  t	        j                  t        j                  j                  t        j                  d      t        j                               t	        j                  | t        j                         | _        t%        | j"                  t        j                   dt'        d      z        | _        t%        | j"                  t        j                   dt'        d	      z        | _        t	        j,                  | j"                  t        j                   t        j.                  |
      | _        | j0                  j3                  t        j4                  | j6                         t9        | j"                  t        j:                        | _        t9        | j"                  t        j>                        | _         | j@                  jC                  d       | jE                          y )NFTr   rv   rw   rx   FromrI   To)r   rJ   r   choices)#r   r#   _getOptionsvalidr.   r   r&   r   r   r   r   r   r   r   r   r   rR   r'   r   rE   fromBoxtoBoxComboBoxCB_READONLYoptionr-   EVT_COMBOBOXOnOptionr   r   r3   r   r   r:   r;   )r>   r   r#   rJ   r?   r   r   optionss           rA   r&   zModelRelationDialog.__init__c  su    
""$DJ

		4UJ%J6JGGBGGLL!2!2K@"BTBTU	
 XXTbii8
 ::"))6AfI3E
 djjRYYfqQUwFVW
kk::"))2>>7
 	$--8

BLL9DJJ1


% rB   c                    t        j                  t         j                        }t        j                  | j                  t         j                        }| j                  | j                  j                         |       t        j                  | j                  t         j                        }| j                  | j                  j                         |       t        j                         }|j                  | j                         |j                  | j                         |j                          |j                  |dt         j                   t         j"                  z  d       |j                  |dt         j                   t         j$                  z  t         j&                  z  t         j(                  z  d       |j                  |dt         j                   t         j"                  z  t         j*                  z  d       | j,                  j/                  |       |j1                  | j,                         | j3                          | j5                  | j7                                y )N)r#   rV   r   r   rL   )r.   r   r   r   r   _layoutShaper#   GetFromr   GetTor   r   r3   r   r   rQ   rT   rS   r   r   BOTTOMALIGN_CENTERr'   rU   rW   r   r   GetBestSize)r>   r   	fromSizertoSizerr   s        rA   r;   zModelRelationDialog._layout  s   KK,	%%dllBKK@	

 2 2 4IF##DJJ<

 0 0 2'B**,4>>*4::&iABII4FqQRWW$rxx/"));	 	 	
 	RVV);boo)MVW 	 	
 	

I&djj!T%%'(rB   c           	         t        |t              rs|j                  t        | j                  t
        j                  t        d      |j                         z        dt
        j                  t
        j                  z  d       y t        |t              r=t        j                  dd      }|j                  t        | j                  t
        j                  t        d            d	       |j                  t        | j                  t
        j                  |j                               d
	       |j                  t        | j                  t
        j                  t        d            t
        j                  d       |j                  | j                  d	       |j                  |dt
        j                  t
        j                  z  d       y y )NzData: %srI   rK   r   rL   r   zCommand:r   )r   r   zOption:r   r   r   )
isinstance	ModelDatarQ   r   r'   r.   rR   rE   GetLogrT   rS   ModelActionr   r   r   r   )r>   r#   rV   r   s       rA   r   z ModelRelationDialog._layoutShape  sI   eY'II::yyJ-%,,.8
 YY'  	 {+QQ7IMM$**!J-P   MM$**%..BRS   MM$**!I,O--  
 MM$++6M2IIiABII4FqIQ! ,rB   c                 L   g }| j                   j                         }t        |t              s"t	        | j
                  t        d             |S | j                   j                         }t        |t              s"t	        | j
                  t        d             |S |j                         }|j                         }|j                         d   D ]1  }|j                  dd      |k(  sd|v s|j                  |d          3 |s t	        | j
                  t        d             |S )	zGet relevant optionsz>Relation doesn't start with data item.
Unable to add relation.r   z@Relation doesn't point to GRASS command.
Unable to add relation.paramsrF   ra   r   z1No relevant option found.
Unable to add relation.)r#   r   r  r  r   r   rE   r   r  r(   GetTaskget_optionsgetappend)r>   items	fromShapetoShaperF   taskps          rA   r   zModelRelationDialog._getOptions  s   JJ&&(	)Y/{{X L**""$';/{{. L$$& !!#H- 	(AuuXr"f,1QvY'	( {{QR rB   c                 6    | j                   j                         S )zGet selected option)r   GetStringSelectionrX   s    rA   	GetOptionzModelRelationDialog.GetOption  s    {{--//rB   c                     | j                   S )zCheck if relation is valid)r   rX   s    rA   IsValidzModelRelationDialog.IsValid  r   rB   c                     |j                         r| j                  j                          y| j                  j                  d       y)z
Set optionFN)r]   r   r:   rl   s     rA   r   zModelRelationDialog.OnOption  s.    ??JJJJe$rB   N)rm   rn   ro   rp   r.   rR   rE   r   r   r&   r;   r   r   r  r  r   rq   rB   rA   r   r   `  sQ    $ 99%&%%(8(88'R)<R<#J0%rB   r   c                   j    e Zd ZdZej
                  ej                  ej                  z  fdZd Z	d Z
y)ModelItemDialogzAbstract item properties dialogc                 `   || _         || _        t        j                  j                  | ||f||d| t        j
                  | t        j                        | _        t        | j                  t        j                  dt        d      z        | _
        t        | j                  t        j                  |j                               | _        t        | j                  t        d      t        d      g||	      | _        | j                  j!                  | j                   j#                         j%                                t'        | j                  t        j(                        | _        t'        | j                  t        j,                        | _        | j.                  j1                          y )
N)r?   r   rw   rx   	ConditionrI   )r   rJ   valueLabelry   r   columnsr#   frame)r   r#   r.   r   r&   r   rR   r'   r   rE   condBoxr   r   condTextItemCheckListCtrlitemListPopulater   GetItemsr   r   r3   r   r   r   )r>   r   r#   r?   rJ   r   r   s          rA   r&   zModelItemDialog.__init__   s#    

		4P5PPXXTbii8
 ::"))6AkN3J
 !::"))5>>3C
 *::wZ9.	
 	t{{335>>@AtzzbllC4::"((;


rB   c                      y)zDo layout (virtual method)Nrq   rX   s    rA   r;   zModelItemDialog._layout$      rB   c                 6    | j                   j                         S )zGet loop condition)r"  r+   rX   s    rA   GetConditionzModelItemDialog.GetCondition(      }}%%''rB   N)rm   rn   ro   rp   r.   rR   r   r   r&   r;   r*  rq   rB   rA   r  r    s2    ) 99%%(8(88" H(rB   r  c                   ~    e Zd ZdZej
                   ed      ej                  ej                  z  fdZ	d Z
d Zd Zy)ModelLoopDialogzLoop properties dialogzLoop propertiesc                 @   t        j                  | |||fd|i| t        | j                  t        j
                  dt        d      z        | _        t        | j                  t        j
                  t        d            | _	        | j                  j                  t        d             | j                  j                  t        j                  | j                         | j                          | j                  | j!                                | j#                  d       y )Nr   rx   zList of items in looprI   Seriesz+Define map series as condition for the loopr   i  )r  r&   r   r'   r.   rR   rE   listBoxr   	btnSeries
SetToolTipr-   r/   OnSeriesr;   r<   r=   r   r>   r   r#   rJ   r?   r   r   s          rA   r&   zModelLoopDialog.__init__0  s     	  vueS5SFS ::"))6A>U<V3V
  tzzbiiq{S!!!$Q"RSBMM4==9'Z rB   c                    t        j                  t         j                        }t        j                  | j                  t         j
                        }|j                  | j                  dt         j                  d       |j                  | j                  dt         j                         t        j                  | j                  t         j                        }|j                  | j                  dt         j                  t         j                  z  d       t        j                         }|j                  | j                         |j                  | j                          |j#                          |j                  |dt         j                  t         j                  z  d       |j                  |dt         j                  t         j$                  z  t         j&                  z  d       |j                  |dt         j                  t         j                  z  t         j(                  z  d       | j*                  j-                  |       |j/                  | j*                         | j1                          y)rH   rK   r   rL   r   r   r   N)r.   r   r   r   r!  
HORIZONTALrQ   r"  rS   r2  rT   r1  r$  r   r   r3   r   r   r   r   r   r'   rU   rW   r   )r>   rV   	condSizer	listSizerr   s        rA   r;   zModelLoopDialog._layoutG  s   BKK(%%dllBMMB	dmmqIdnnC%%dllBKK@	dmm		BFF8JSTU**,4>>*4::&		)		BFF0B1	M		!"))bgg*=*HQR 	 	
 			RVV);boo)MVW 	 	
 	

E"		$**rB   c                 6    | j                   j                         S )Get list of selected actions)r$  r&  rX   s    rA   r&  zModelLoopDialog.GetItemsd  r+  rB   c           	      z   t        | t        d            }|j                         t        j                  k7  r|j                          y|j                         }|s6dj                  t        t        t        |j                                           }| j                  j                  |       |j                          y)zDefine map series as conditionzDefine series of maps)r   r?   Nz	map in {})r	   rE   	ShowModalr.   r   ri   
GetDSeriesformatr   mapr   GetMapLayersr"  r,   )r>   r^   dialogconds       rA   r4  zModelLoopDialog.OnSeriesh  s    *q!89
 )NN  "%%d3sF4G4G4I+J&KLDt$rB   N)rm   rn   ro   rp   r.   rR   rE   r   r   r&   r;   r&  r4  rq   rB   rA   r-  r-  -  s?      99!"%%(8(88!.:(rB   r-  c                       e Zd ZdZej
                   ed      ej                  ej                  z  fdZ	d Z
d Zd Zd Zy)	ModelConditionDialogzCondition properties dialogzIf-else propertiesc                 
   t        j                  | |||fd|i| t        | j                  t        j
                  dt        d      z        | _        | j                  | _	        | j                  j                  d       t        | j                  t        j
                  dt        d      z        | _        t        | j                  t        d      t        d      g||	      | _        | j                  j                  d
       | j                  j                  | j                  j!                         j#                                | j%                          | j'                  | j)                                | j+                  d       y )Nr   rx   zList of items in 'if' blockrI   IfBlockListzList of items in 'else' blockr  ry   r  ElseBlockListr0  )r  r&   r   r'   r.   rR   rE   	listBoxIfr$  
itemListIfr   listBoxElser#  itemListElser%  r   r   r&  r;   r<   r=   r   r5  s          rA   r&   zModelConditionDialog.__init__}  s%    	  vueS5SFS"::yy1:;;

 --.$::yy1<==

 .::wZ9.	
 	!!/2""4;;#7#7#9#B#B#DE'Z rB   c                    t        j                  t         j                        }t        j                  | j                  t         j                        }|j                  | j                  dt         j                         t        j                  | j                  t         j                        }|j                  | j                  dt         j                         t        j                  | j                  t         j                        }|j                  | j                  dt         j                         t        j                         }|j                  | j                         |j                  | j                         |j!                          |j                  |dt         j                  t         j"                  z  d       |j                  |dt         j                  t         j$                  z  t         j&                  z  d       |j                  |dt         j                  t         j$                  z  t         j&                  z  d       |j                  |dt         j                  t         j"                  z  t         j(                  z  d       | j*                  j-                  |       |j/                  | j*                         | j1                          y)rH   rK   r   r   r   rL   r   N)r.   r   r   r   r!  rQ   r"  rT   rI  rJ  rK  rL  r   r   r3   r   r   rS   r   r   r   r'   rU   rW   r   )r>   rV   r8  listIfSizerlistElseSizerr   s         rA   r;   zModelConditionDialog._layout  s   BKK(%%dllBKK@	dmm		B''DABIIF))$*:*:BKKH$++		J**,4>>*4::&		)		BFF0B1	M		ABII,?"((,JST 	 	
 			abii"''.ABHH.LUV 	 	
 			RVV);boo)MVW 	 	
 	

E"		$**rB   c                     |du ryt        | j                  j                  |d      j                               }|| j                  j                         d   v r| j                  j                  |d       yy)z"Item in if-block checked/uncheckedFNr   checked)intrJ  GetItemGetTextrL  r&  CheckItemByIdr>   indexrN   aIds       rA   OnCheckItemIfz"ModelConditionDialog.OnCheckItemIf  sg    5=$//))%3;;=>$##,,.y99++C7 :rB   c                     |du ryt        | j                  j                  |d      j                               }|| j                  j                         d   v r| j                  j                  |d       yy)z$Item in else-block checked/uncheckedFNr   rQ  )rR  rL  rS  rT  rJ  r&  rU  rV  s       rA   OnCheckItemElsez$ModelConditionDialog.OnCheckItemElse  se    5=$##++E15==?@$//**,Y77OO))#u5 8rB   c                 l    | j                   j                         | j                  j                         dS )z	Get items)ifelse)rJ  r&  rL  rX   s    rA   r&  zModelConditionDialog.GetItems  s)    oo..0$:K:K:T:T:VWWrB   N)rm   rn   ro   rp   r.   rR   rE   r   r   r&   r;   rY  r[  r&  rq   rB   rA   rE  rE  z  sG    % 99$%%%(8(88#!JB86XrB   rE  c                       e Zd Zej                  g ej
                  ej                  z  ej                  z  ej                  z  fdZ	d Z
d Zd Zd Zy)ModelListCtrlc                 :   || _         || _        d| _        || _        || _        t        j                  | |f||d| t        j                  j                  |        t        j                  j                  |        d}|D ]9  }	| j                  ||	       | j                  |t        j                         |dz  }; i | _        d| _        | j!                  t        j"                  | j$                         | j!                  t        j&                  | j(                         | j!                  t        j*                  | j,                         | j!                  t        j.                  | j0                         | j!                  t        j2                  | j0                         y)List of model variablesN)rJ   r   r   rK   )r   r  r#   r   columnNotEditabler   r&   listmixListCtrlAutoWidthMixinTextEditMixinInsertColumnSetColumnWidthr.   LIST_AUTOSIZE_USEHEADERitemDataMap	itemCountr-   EVT_LIST_BEGIN_LABEL_EDITOnBeginEditEVT_LIST_END_LABEL_EDIT	OnEndEditEVT_LIST_COL_CLICK
OnColClickEVT_COMMAND_RIGHT_CLICK	OnRightUpEVT_RIGHT_UP)
r>   r   r  r   rJ   columnsNotEditabler   r   icols
             rA   r&   zModelListCtrl.__init__  s8    

!3$E2UEfE&&//5&&t, 	Ca%2#=#=>FA	
 		"..0@0@A		",,dnn=		"''9		",,dnn=		"//4>>2rB   c                 6   |j                         }| j                  rm|| j                  v r_|j                          | j                  |j	                         t
        j                  t
        j                  t
        j                  z         y|j                          y)zEditing of item startedN)		GetColumnrc  VetoSetItemStateGetIndexr.   LIST_STATE_SELECTEDLIST_STATE_FOCUSEDAllow)r>   r^   columns      rA   rm  zModelListCtrl.OnBeginEdit  sm    "!!f0F0F&FJJL &&&&)>)>> KKMrB   c                      y)Finish editing of itemNrq   rl   s     rA   ro  zModelListCtrl.OnEndEdit  r(  rB   c                     | S )zUsed by ColumnSorterMixinrq   rX   s    rA   GetListCtrlzModelListCtrl.GetListCtrl  s    rB   c                 $    |j                          y)z!Click on column header (order by)N)rh   rl   s     rA   rq  zModelListCtrl.OnColClick      

rB   N)rm   rn   ro   r.   rR   	LC_REPORTBORDER_NONE	LC_HRULES	LC_VRULESr&   rm  ro  r  rq  rq   rB   rA   r`  r`    sJ     99llR^^+bll:R\\I"3HrB   r`  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)VariableListCtrlc                 X    t        j                  | ||fi | | j                  dd       y)rb        N)r`  r&   rh  )r>   r   r  r   s       rA   r&   zVariableListCtrl.__init__  s)    tVW??As#rB   c                     | j                   S zGet list datarj  rX   s    rA   GetDatazVariableListCtrl.GetData!      rB   c                    t               | _        d}t        j                  |      D ]@  \  }}||d   |j	                  dd      |j	                  dd      g| j                  |<   |dz  }B t        | j                  j                               | _        | j                          d}t        j                  | j                        D ]|  \  }}}}| j                  ||      }| j                  |d|       | j                  |d|       | j                  |d|       | j                  |d|       | j                  ||       |dz  }~ y	)
Populate the listr   r   r  ra   descriptionrK   r  r   N)dictrj  six	iteritemsr  r   keysrk  DeleteAllItems
itervalues
InsertItemSetItemSetItemData)	r>   datarv  r   valuesvtyper  descrW  s	            rA   r%  zVariableListCtrl.Populate%  s.   6MM$/ 	LD&v

7B'

="-	#DQ FA	 T--2245(+t7G7G(H 	$D%OOAt,ELL4(LL5)LL5)LL4(UA&FA	rB   c                    t        j                  | j                        D ]  \  }}}}||k(  st        d      |z  c S  | j	                  | j                         |      }	| j                  |	d|       | j                  |	d|       | j                  |	d|       | j                  |	d|       | j                  |	| j                         ||||g| j                  | j                  <   | xj                  dz  c_        y)zdAppend new item to the list

        :return: None on success
        :return: error string
        zBVariable <%s> already exists in the model. Adding variable failed.r   rK   r  r   N)	r  r  rj  rE   r  GetItemCountr  r  rk  )
r>   r   r  r  r  inameivtypeivalueidescrW  s
             rA   AppendzVariableListCtrl.Append>  s     -0NN4;K;K,L 	(E665}2 		  1 1 3T:UAt$UAu%UAu%UAt$/,0%+E(!rB   c                     | j                         }|dk7  r4| j                  |       | j                  |= | j                         }|dk7  r4| j                  j	                          |j                          y)z*Remove selected variable(s) from the modelr   N)GetFirstSelected
DeleteItemrj  r   UpdateModelVariablesrh   )r>   r^   items      rA   OnRemovezVariableListCtrl.OnRemoveZ  sc    $$&bjOOD!  &((*D bj 	((*

rB   c                 2   t        j                  | t        d      t        d      t         j                  t         j                  z        }|t         j
                  k7  ry| j                          t               | _        | j                  j                          y)z%Remove all variable(s) from the modelz3Do you want to delete all variables from the model?zDelete variables)r   r   captionr   N)r.   
MessageBoxrE   YES_NOCENTREYESr  r  rj  r   r  )r>   r^   dlgs      rA   OnRemoveAllzVariableListCtrl.OnRemoveAlle  sk    mmNO()))bii'	
 "&&=6((*rB   c                 "   |j                         }|j                         }| j                  |d      j                         }|dk(  r|j	                          |j                         | j
                  |   |<   | j                  j                          y)r  r   N)r|  ry  rS  rT  rz  rj  r   r  )r>   r^   	itemIndexcolumnIndexnameOlds        rA   ro  zVariableListCtrl.OnEndEditu  so    NN$	oo',,y!,446!JJL38==?#K0((*rB   c                     | j                  | j                  j                  j                         j                                y)zReload list of variablesN)r%  r   r   GetVariablesrl   s     rA   OnReloadzVariableListCtrl.OnReload  s*    dkk((113@@BCrB   c                    t        | d      st               | _        t               | _        t               | _        | j                  t        j                  | j                  | j                         | j                  t        j                  | j                  | j                         | j                  t        j                  | j                  | j                         t               }|j                  | j                  t        d             |j                  | j                  t        d             | j                         dk(  r8|j                  | j                  d       |j                  | j                  d       |j!                          |j                  | j                  t        d             | j#                  |       |j%                          y)	Mouse right button uppopupID1rJ   Delete selectedz
Delete allr   FReloadN)hasattrr   r  popupID2popupID3r-   r.   EVT_MENUr  r  r  r   r  rE   r  r:   AppendSeparator	PopupMenuri   r>   r^   menus      rA   rs  zVariableListCtrl.OnRightUp  s&   tZ(!GDM!GDM!GDMIIbkk4==T]]ICIIbkk4#3#3IFIIbkk4==T]]IC vDMM1%6#78DMM1\?3  "b(KKu-KKu-DMM1X;/trB   N)rm   rn   ro   r&   r  r%  r  r  r  ro  r  rs  rq   rB   rA   r  r    s0    $ 28	+ +DrB   r  c                   @    e Zd Zd
dZd Zd Zd Zd ZddZd Z	d	 Z
y)ItemListCtrlc                     || _         t        j                  | |||fi | t               | _        | j                  dd       | j                  dd       t        | j                        dk\  r| j                  dd       yy)zList of model actionsr   d   rK   K   r   r  N)disablePopupr`  r&   r   	itemIdMaprh  r   r  )r>   r   r  r   r  r   s         rA   r&   zItemListCtrl.__init__  sr    (tVWeFvFAs#Ar"t||!3' "rB   c                     | j                   S r  r  rX   s    rA   r  zItemListCtrl.GetData  r  rB   c                    t               | _        t               | _        | j                  r| j
                  j                         j                  t              }t        | j                  t              rg| j                         dk(  r*t        d | j                  j                  |      d         }n[t        d | j                  j                  |      d         }n1t        d | j                  j                  |            }n
t               }d}t        | j                        d	k(  r
t               }|D ]  }t        |t              s|| j                  k(  r$| j                  j!                  |j#                                t        | j                        d	k(  rs|j                         |j%                         g| j                  |<   |j'                         }|j#                         |v rj!                  |       nj!                  d
       n|j'                         }|st)        d      }nt)        d      }|j+                         }	g }
|	d   D ]%  }|
j!                  dj-                  |d                ' |	d   D ]  }|
j!                  |d           |j                         |dj/                  |
      |j%                         g| j                  |<   |dz  } t        | j                  j1                               | _        | j5                          d}t        | j                        d	k(  rt7        j8                  | j                        D ]t  \  }}| j;                  |t=        |            }| j?                  |d|       | j?                  |d|       | jA                  ||       |   r| jC                  |d       |dz  }v y
t7        j8                  | j                        D ]  \  }}}}| j;                  |t=        |            }| j?                  |d|       | j?                  |d|       | j?                  |d	|       | j?                  |d|       | jA                  ||       |dz  } y
)r  objTyperH  c                 "    | j                         S r}   GetIdxs    rA   r   z'ItemListCtrl.Populate.<locals>.<lambda>      !'') rB   r^  c                 "    | j                         S r}   r  r  s    rA   r   z'ItemListCtrl.Populate.<locals>.<lambda>  r  rB   r]  c                 "    | j                         S r}   r  r  s    rA   r   z'ItemListCtrl.Populate.<locals>.<lambda>  s    1779 rB   r   r  NNoYesflagsz-{0}r   r  ,rK   Tr   )"r  rj  r   r  r#   r   r   r&  r  r  ModelConditionr   r@  r   r  r  r  r  r  
GetBlockIdrE   GetParameterizedParamsr?  r   r  rk  r  r  r  r  r   r  r  	CheckItem)r>   r  r  
shapeItemsrv  rQ  actionrX  bIdr   r  fr  r   r  rW  inloopparams                     rA   r%  zItemListCtrl.Populate  s   6::JJ'')22;2GE$**n5==?o5!$+TZZ-@-@-G-O"J "%+TZZ-@-@-G-M"J !!4djj6I6I%6PQ
Jt||!fG !	F&),$**0DNN!!&,,.14<< A%'-'8&--/&J  #'')<<>Z/NN3'NN4('')D'CE(C 779 ) <AMM&--&	":;< * -AMM!F),- OO%HHV$MMO	'  # FAC!	F T--2245t||!!nnT-=-=> 
d3q62UAt,UAt,  *1:NN5$/Q .1^^D<L<L-M )feT3q62UAt,UAv.UAu-UAt,  *QrB   c                    | j                   j                         }| j                   j                         }| j                         }|dk7  r| j	                  |       | j
                  |= |j                  |dz         }|s| j                         }J|j                  |g       | j                   j                          | j                         }|dk7  r|j                          |j                          y)z(Remove selected action(s) from the modelr   rK   N)r   r   	GetCanvasr  r  rj  rS  RemoveShapesModelChangedrd   rh   )r>   r^   r   rc   r  r  s         rA   r  zItemListCtrl.OnRemove  s    

##%%%'$$&bjOOD!  &]]4!8,F,,.)JJ##%((*D bj 	

rB   c                 v   |j                         }|j                         }|j                         | j                  |   |<   | j                  j                         j                  |dz         }|s|j                          y|j                  |j                                | j                  j                          y)r  rK   N)r@   )
r|  ry  rT  rj  r   r   rS  rz  SetLabelr  )r>   r^   r  r  r  s        rA   ro  zItemListCtrl.OnEndEdit  s    NN$	oo'38==?#K0$$&..y1}=JJLemmo.

!rB   Nc                 ~    | j                  | j                  j                         j                  t                     y)zReload list of actionsr  N)r%  r   r   r&  r  rl   s     rA   r  zItemListCtrl.OnReload&  s)    djj))+44[4IJrB   c                    | j                   ryt        | d      st               | _        t	               | j                  d<   t	               | j                  d<   | j                  t        j                  | j                  | j                  d          | j                  t        j                  | j                  | j                  d          t               }|j                  | j                  d   t        d             | j                         dk(  r|j                  | j                  d   d       |j                          |j                  | j                  d   t        d	             | j!                  |       |j#                          y)
r  NpopupIdremovereloadr  r  r   Fr  )r  r  r  popupIDr   r-   r.   r  r  r  r   r  rE   r  r:   r  r  ri   r  s      rA   rs  zItemListCtrl.OnRightUp*  s   tY'6DL%*WDLL"%*WDLL"IIbkk4==T\\(5KILIIbkk4==T\\(5KIL vDLL*A.?,@A  "b(KKX.6DLL*AhK8trB   c                    t        |      dk  ry|d   dk(  r|r|d= t        |      dk  ry|d   t        | j                  j                               dz
  k(  r|s|d= t        |      dk  ry| j                  j	                         }|j                  t              }t               }t               }|D ]I  }|r|dz
  }n|dz   }|j                  |       |j                  ||         ||j                  ||         <   K |j                  |       |j                          | j                  |j                  t                     |D ]B  }	| j                  |	t        j                   t        j                   t        j"                  z         D y)z~Move items in the list

        :param items: list of items to move
        :param up: True to move up otherwise down
        rK   Nr   r   r  )r   rj  r  r   r   r&  r  r  r   r  GetItemIndexReorderItems	Normalizer%  r{  r.   r}  r~  )
r>   r  upr   modelActionsidxListitemsToSelectrv  idxr  s
             rA   	MoveItemszItemListCtrl.MoveItemsA  sn    u:>8q=Rau:>9D,,1134q88b	u:>

##%~~k~:& 	A!e!e  %;@;M;MS!<GE&&|A78	 	7#enn[n9: " 	D&&&&)>)>>	rB   )Fr}   )rm   rn   ro   r&   r  r%  r  ro  r  rs  r  rq   rB   rA   r  r    s-    
( Ob0"K.,rB   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)r#  c                     || _         || _        t        j                  | |||fddi| t	        j                  |        | j                  dd       || _        y )Nr  Tr   r  )r   r   r  r&   r   rh  r#   )r>   r   r#   r  r   r   s         rA   r&   zItemCheckListCtrl.__init__q  sT    
dFGUXXQWX##D)As#
rB   c                 $    |j                          y)zDisable editingN)rz  rl   s     rA   rm  zItemCheckListCtrl.OnBeginEdit{  r  rB   c                     | j                         }|dk(  r)| j                  r| j                  j                  ||       y|dk(  r*| j                  r| j                  j                  ||       yyy)zItem checked/uncheckedrG  rH  N)r   windowrY  r[  )r>   rW  rN   r   s       rA   OnCheckItemzItemCheckListCtrl.OnCheckItem  sY    }}= T[[KK%%eT2_$KK''t4 *5$rB   c                    t               t               d}t        | j                               D ]V  }| j                  |      r"|d   j	                  | j
                  |          6|d   j	                  | j
                  |          X |S )r;  )rQ  	uncheckedrQ  r  )r   ranger  IsItemCheckedr  r  )r>   idsrv  s      rA   r&  zItemCheckListCtrl.GetItems  s{    &tv6 t((*+ 	;A!!!$I%%dnnQ&78K ''q(9:		; 
rB   c                     t        | j                               D ]D  }t        | j                  |d      j	                               }||k(  s2| j                  ||        y y)zCheck/uncheck given item by idr   N)r  r  rR  rS  rT  r  )r>   rX  rN   rv  iIds        rA   rU  zItemCheckListCtrl.CheckItemById  sU    t((*+ 	Adll1a(0023Cczq$'		rB   N)rm   rn   ro   r&   rm  r  r&  rU  rq   rB   rA   r#  r#  p  s    5rB   r#  )2rp   r   r  r.   wx.lib.mixins.listctrllibmixinslistctrlrd  corer   r   gui_core.widgetsr   r   	core.gcmdr   gui_core.dialogsr   r	   gui_core.promptr
   gui_core.gselectr   r   gmodeler.modellmgr.menudatar   gui_core.wrapr   r   r   r   r   r   r   r   r   r   rs   r   r  r-  rE  re  rf  r`  r  r  r#  rq   rB   rA   <module>r      s   2 
 
 	 ( (   @  D & 2  .	 	 	ql qht#		 t#nZ%")) Z%z-(bii -(`Jo JZ]X? ]X@=Hg<<g>S>S =@B} BJN= Nb*&8 *rB   