
    ը	fE                     6   d Z ddlZddlZddlmZ ddlmc mZ ddl	m
Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZmZ  G d	 d
ej4                        Z G d dej4                        Z G d dej4                        Z G d d      Z G d de      Zy)a  
@package iscatt.dialogs

@brief Dialogs widgets.

Classes:
 - dialogs::AddScattPlotDialog
 - dialogs::ExportCategoryRaster
 - dialogs::SettingsDialog
 - dialogs::ManageBusyCursorMixin
 - dialogs::RenameClassDialog

(C) 2013 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 Stepan Turek <stepan.turek seznam.cz> (mentor: Martin Landa)
    N)Select)	globalvar)GMessage)UserSettings)SimpleDialog)SpinCtrlButton
StaticText	StaticBoxTextCtrlc                   Z    e Zd Zej                  fdZd Zd Zd Zd Z	d Z
d Zd Zd	 Zy
)AddScattPlotDialogc                     t         j                  j                  | |t        d      |       || _        d | _        d | _        || _        g | _        g | _	        | j                          y )NzAdd scatter plots)titleid)wxDialog__init___bandsx_bandy_bandchb_callbackadded_bands_idssel_bands_ids_createWidgets)selfparentr   check_bands_callbackr   s        //usr/lib/grass83/gui/wxpython/iscatt/dialogs.pyr   zAddScattPlotDialog.__init__%   s\    
		4q1D/E"M
0!    c                    i | _         i | _        t        | t        j                  t        d            | _        t        j                  | t        j                  | j                  t        j                  d      | _
        t        | t        j                  t        d            | _        t        j                  | t        j                  | j                  t        j                  d      | _        t        j                  | t        j                  dt        j                  t        j                  z        | _        t#        | t        j$                        | _        t#        | t        j(                        | _        t#        | t        j,                        | _        t#        | t        j0                        | _        | j5                          y )	Nzx axis:r   r   label)i^     )r   r   choicesstylesizezy axis:)   )r   r   r(   r'   r   r   )labelsparamsr
   r   ID_ANYr   band_1_labelComboBoxr   CB_READONLY	band_1_chband_2_label	band_2_chListBoxLB_MULTIPLELB_NEEDED_SB	scattsBoxr	   ID_ADDbtn_add	ID_REMOVE
btn_remove	ID_CANCEL	btn_closeID_OKbtn_ok_layoutr   s    r    r   z!AddScattPlotDialog._createWidgets3   s   &dryy)UyyJJ..
 'dryy)UyyJJ..
 yy..2??2	
 Tbii8 >t=DRXX6r!   c                    t        j                  t         j                        }t        j                  t         j                        }t        j                  t         j                        }|j	                  | j                  | j                  | j                               |j	                  | j                  | j                  | j                               |j	                  | j                  dt         j                  t         j                  z  d       t        | t         j                  dt        d      z        }t        j                   |t         j                        }|j	                  | j"                  dt         j$                  t         j                  z  d       |j	                  | j&                  dt         j                  t         j                  z  d       |j	                  |dt         j$                  t         j                  z  d       t        j                  t         j                  	      | _        | j(                  j	                  | j*                  dt         j,                  t         j.                  z  t         j0                  z  d
       | j(                  j	                  | j2                  dt         j,                  t         j.                  z  t         j0                  z  d
       |j	                  | j(                  dt         j0                  t         j                  z  d       |j	                  |dt         j.                  t         j,                  z  t         j4                  z  d
       | j7                  |       | j9                          | j;                          | j*                  j=                  t         j>                  | j@                         | j2                  j=                  t         j>                  | jB                         | j                  j=                  t         j>                  | jD                         | j&                  j=                  t         j>                  | jF                         y )N)r   selr      
proportionflagborder %s z)Bands of scatter plots to be added (x y):)r   r$      orient
   )$r   BoxSizerVERTICAL
HORIZONTALAdd_addSelectSizerr/   r2   r3   r4   r:   TOPALIGN_RIGHTr   r.   r   StaticBoxSizerr8   EXPANDr<   btnsizerr>   RIGHTLEFTALIGN_CENTERr@   BOTTOMSetSizerLayoutFitBind
EVT_BUTTONOnCloseOnOkOnAddOnRemoveLayer)r   rI   dialogSizerregionSizerboxsizers         r    rA   zAddScattPlotDialog._layout[   s   R[[)kk"++.kk"--0  t'8'8dnn M	
 	  t'8'8dnn M	
 	LLQRVVbnn-DQ 	 	
 yy1HII

 !!#r{{3		$..QRYY5GPQ	R		$//abffr~~6MVW	X!"))bff2DQO 2==9NNBGG#boo5	 	 	
 	KKBGG#boo5	 	 	
 	MMaboo.Fq 	 	
 	

ABGGbhh,>,JSU 	 	
 	f
 	BMM4<<8		2"--4R]]D,>,>?r!   c                 r    | j                         st        | t        d             y |j                          y )NzNo scatter plots selected.r   message)GetBandsr   r   Skipr   events     r    rc   zAddScattPlotDialog.OnOk   s'    }}D!,H*IJ

r!   c                    t        j                  t         j                        }t        j                  t         j                        }|j	                  |dt         j
                  t         j                  z  d       |j	                  |dt         j                         |j	                  |dt         j                  t         j
                  z  d       |S )zHelper layout function.rL   rK   rE   rF   r   )rG   rH   )r   rO   rP   rQ   rR   rT   rW   )r   r   rD   selSizerselTitleSizers        r    rS   z"AddScattPlotDialog._addSelectSizer   s    ;;bkk2BMM2%ABFFRYY4FqQ]qryyASQRYY-?Jr!   c                     | j                   S )z
Get layers)r   rB   s    r    rm   zAddScattPlotDialog.GetBands   s    !!!r!   c                 d    | j                         s| j                          |j                          y)Close dialogN)IsModalDestroyrn   ro   s     r    rb   zAddScattPlotDialog.OnClose   s    ||~LLN

r!   c                    | j                   j                         ro| j                   j                         d   }| j                   j                  |       | j                  j	                  |       | j                   j                         rnyy)zRemove layer from listboxr   N)r8   GetSelectionsDeleter   pop)r   rp   rD   s      r    re   z AddScattPlotDialog.OnRemoveLayer   sa    nn**,....03CNN!!#&""3' nn**,r!   c                    | j                   j                         }| j                  j                         }|dk  s|dk  rt        | t	        d             y ||k(  rt        | t	        d             y ||g| j
                  v s||g| j
                  v rt        | t	        d             y | j                  ||      sy | j
                  j                  ||g       | j                   j                         }| j                  j                         }|dz   |z   }| j                  j                  |       |j                          y )Nr   zSelect both x and y bands.rk   z!Selected bands must be different.zeScatter plot with same bands combination (regardless x y order) has been already added into the list. )r2   GetSelectionr4   r   r   r   r   appendGetStringSelectionr8   Appendrn   )r   rp   b_xb_yb_x_strb_y_strtexts          r    rd   zAddScattPlotDialog.OnAdd   s   nn))+nn))+7cAgD!,H*IJ#:D!,O*PQ:+++SzT=O=O/O<   c*!!3*-..335..335}w&d#

r!   N)__name__
__module____qualname__r   r.   r   r   rA   rc   rS   rm   rb   re   rd    r!   r    r   r   $   s9    ?Ayy &P?@B"( r!   r   c                   t    e Zd Zdej                  ej
                  ej                  z  fdZd Zd Z	d Z
d Zy)ExportCategoryRasterNc                 &   t        j                  j                  | |||fd|i| || _        t        j                  | t         j
                        | _        t        | j                  t         j                        | _	        t        | j                  t         j                        | _        | j                  j                          | j                  j                  d       | j                  j                  t         j                  | j                          | j#                          | j$                  j                  t         j&                  | j(                         | j)                  d       t        j*                  | j$                  j,                         y)zDialog for export of category raster.

        :param parent: window
        :param str rasterName name of vector layer for export
        :param title: window title
        r'   r+   FN)r   r   r   
rasterNamePanelr.   panelr	   r=   	btnCancelr?   btnOK
SetDefaultEnabler`   ra   OnOK_ExportCategoryRaster__layoutvectorNameCtrlEVT_TEXTOnTextChanged	CallAfterSetFocus)r   r   r   r   r   r'   kwargss          r    r   zExportCategoryRaster.__init__   s     			4UJ%J6J$XXTbii8
tzzbllC4::"((;




% 

tyy1  d.@.@A4 
T((112r!   c                     | j                   j                         }t        |      dkD  r| j                  j	                  d       y| j                  j	                  d       y)zIName of new vector map given.

        Enable/disable OK button.
        r   TFN)r   GetValuelenr   r   )r   rp   files      r    r   z"ExportCategoryRaster.OnTextChanged  sG    
 ""++-t9q=JJd#JJe$r!   c           	         t        j                  t         j                        }t        j                  t         j                        }|j                  t	        | j
                  t         j                  t        d            dt         j                  d       t        | j
                  dt        j                         d   gt        j                        | _        | j                  r%| j                  j!                  | j                         |j                  | j                  dt         j                  t         j"                  z  d       t        j$                         }|j'                  | j(                         |j'                  | j*                         |j-                          |j                  |d	t         j"                  t         j                  z  t         j.                  z  d
       |j                  |dt         j"                  t         j                  z  t         j.                  z  d
       | j
                  j1                  |       |j3                  |        | j5                  | j7                                y)z	Do layoutzEnter name of new vector map:r#   r      rF   rasterMAPSET)r   typemapsetsr(   rK   rE   N)r   rO   rP   rR   r
   r   r.   r   ALLr   grassgisenvr   DIALOG_GSELECT_SIZEr   r   SetValuerW   StdDialogButtonSizer	AddButtonr   r   Realizer[   r]   r_   
SetMinSizeGetSize)r   ri   	dataSizerbtnSizers       r    __layoutzExportCategoryRaster.__layout  s   BKK(KK,	zz9978
  	 		
 %::\\^H-...	
 ??((9ABFFRYY4Fq 	 	

 **,4>>*4::&		!"))bff*<r*NWX 	 	
 			RVV);boo)MVW 	 	
 	

E"		$'r!   c                 6    | j                   j                         S )zReturns vector name)r   r   rB   s    r    GetRasterNamez"ExportCategoryRaster.GetRasterName?  s    ""++--r!   c                    t        j                  ddd      }| j                         }t        j                  |d      }|d   r|du rt        j                  | t        d	|z        t        d
|z        t
        j                  t
        j                  z  t
        j                  z  t
        j                  z        }|j                         t
        j                  k(  r|j                          |j                          y|j                          y)z,Checks if map exists and can be overwritten.cmd	overwriteenabledgroupkeysubkeycell)elementfullnameFz<Raster map <%s> already exists. Do you want to overwrite it?zRaster <%s> exists)r   rl   captionr'   N)r   Getr   r   	find_filer   MessageDialogr   YES_NO
NO_DEFAULTICON_QUESTIONCENTRE	ShowModalID_YESrn   rx   )r   rp   r   	rast_nameresqdlgs         r    r   zExportCategoryRaster.OnOKC  s     $$5k)T	&&(	ooi8z?yE1##46?@ .:;ii"--/"2B2BBRYYND ~~299,

LLNJJLr!   )r   r   r   r   r.   DEFAULT_DIALOG_STYLERESIZE_BORDERr   r   r   r   r   r   r!   r    r   r      s=    
 99%%(8(883@	%-(^.r!   r   c                   n    e Zd Zej                  ej
                  ej                  fdZd Zd Z	d Z
d Zy)SettingsDialogc                    t         j                  j                  | ||||||       || _        d}|| _        i | _        i }	t        j                  | t         j                  t        d            | j
                  d<   t        j                  ddd      }
| j
                  d   j                  |
       dt        d	      gdt        d
      gdt        d      gd| _        t        j                  | j                        D ]  \  }}t        | t         j                  |d         |	|<   t        j                  d|d   |      }t!        j"                  | t         j                  t        j$                  |d   |d   |d   d            | j
                  |<    dt        d      gdt        d      gd| _        t        j                  | j&                        D ]  \  }}t        | t         j                  |d         |	|<   t)        | t         j                  dd      | j
                  |<   t+        t        j                  d|d   |            }| j
                  |   j                  |        t-        | t         j.                        | _        t-        | t         j2                        | _        t-        | t         j6                        | _        | j4                  j;                          | j4                  j=                  t         j>                  | j@                         | j4                  jC                  t        d             | j0                  j=                  t         j>                  | jD                         | j0                  jC                  t        d             | j8                  j=                  t         j>                  | jF                         | j8                  jC                  t        d             | jI                  | jK                                t        jL                  t         jN                        }tQ        | t         j                  dt        d      z        }t        jR                  |t         jN                        }t        jT                  dd      }d}tW               }|jY                  | j                         |jY                  | j&                         g d}|D ]v  }||   }|j[                  |	|   t         j\                  |df       |j[                  | j
                  |   t         j^                  t         j`                  z  d|df        |dz  }x |jc                  d       |j[                  |t         jd                  !       tQ        | t         j                  dt        d"      z        }t        jR                  |t         jN                        }t        jT                  dd      }|   }d}|j[                  | j
                  d   t         j\                  |df       |jc                  d       |j[                  |t         jd                  !       t        jL                  t         jf                        }|j[                  | j4                  t         jh                  t         jj                  z  d#       |j[                  | j0                  t         jh                  t         jj                  z  d#       |j[                  | j8                  t         jh                  t         jj                  z  d#       |j[                  |t         jd                  t         j`                  z  d#       |j[                  |t         jd                  t         j`                  z  d#       |j[                  |t         jd                  t         j`                  z  dd$       | jm                  |       |jo                  |        y%)&zSettings dialogg    חAzShow confidence ellipsesr#   show_ellipsscattellipsesr   	selectionzSelection polygon color:z"Color of selection polygon vertex:zSelected area color:)sel_polsel_pol_vertexsel_arearK   r         )r   r   colourzSnapping threshold in pixels:zSelected area opacity:)
snap_treshsel_area_opactyd   )r   r   minmaxz%Apply changes for the current sessionzHApply and save changes to user settings file (default for next sessions)rv   rJ   zSelection style:)vgaphgap)r   r   r   r   r   )rH   posrE   )rH   rI   r   )rH   zEllipses settings:)rH   rI   )rH   rI   rG   N)8r   r   r   	scatt_mgrr   settingsCheckBoxr.   r   r   r   r   colorsSettssix	iteritemsr
   cselColourSelectColour	sizeSettsr   intr	   ID_SAVEbtnSaveID_APPLYbtnApplyID_CLOSEbtnCloser   r`   ra   OnApply
SetToolTipOnSaverb   r   GetBestSizerO   rP   r   rV   GridBagSizerdictupdaterR   ALIGN_CENTER_VERTICALrU   r   AddGrowableColrW   rQ   rZ   rY   r]   r_   )r   r   r   r   r   r   r(   r'   maxValuesettsLabelsr   settKeysettcolri   sel_pol_boxselPolBoxSizer	gridSizerrowsetts
settsOrderell_boxellPolBoxSizerr   s                           r    r   zSettingsDialog.__init__Z  s    			4UCuE"'){{BIIQ/I-J(
m$ #&&z-
 	m$--k: $Q'A%BC*A.R,ST$a(>&?@
 !]]4+;+;< 	MGT#-TbiitTUw#WK ""d1ggNC%)%6%6		"))CFCFCPQFTW2X&DMM'"	 '*I(JK +Q/G-HI

 !]]4>>: 	2MGT#-TbiitTUw#WK %-TbiiQTW%XDMM'"|''g477STDMM'"++D1		2 dBJJ/tR[[1tR[[1  " 	2==$,,7  #J!KL"--5Z	

 	2==$,,7  >!23
 	((*+BKK(BIIVa8J6K-K
 **;DOO3	T%%&T^^$

 " 	G>DMMG$2+C+C#q   MMg&^^bff,!H	   1HC	 	  #92995BIIVa8L6M-M
 **7BKK@OO3	W~MM-(r/G/GcSTX 	 	
 	  #92995;;r}}-T]]288);AFT\\"(((:1ET]]288);AF		.ryy266'9!	D		.ryy266'9!	D		(RVV!3A!	Le		$r!   c                     | j                          i }t        j                  |       t        j                  d      |d<   t        j                  |       | j                          y)zButton 'Save' pressed)r   r   )r   N)UpdateSettingsr   ReadSettingsFiler   
SaveToFileClose)r   rp   fileSettingss      r    r   zSettingsDialog.OnSave  sM    %%|< , 0 0w ?W-

r!   c                 ~   g }t        j                  | j                        D ]~  \  }}t        | j                  |   j                               }t        j                  d|d   |      }||k7  sMt        j                  d|d   ||       |j                  ||d   g        t        j                  | j                        D ]u  \  }}| j                  |   j                         }t        j                  d|d   |      }||k7  sDt        j                  d|d   ||       |j                  ||d   g       w | j                  d   j                         }t        j                  ddd      }||k7  r,t        j                  ddd|       |j                  ddg       |r| j                  j                  |       y y )Nr   r   r   )r   r   r   valuer   r   )r   r   r   tupler   	GetColourr   r   Setr   r   r   	IsCheckedr   SettingsUpdated)r   chanaged_settsr  r  r  col_svalval_ss           r    r  zSettingsDialog.UpdateSettings  s    ]]4+;+;< 	:MGTg.88:;C $$7QPE|  wDGGSVW%%wQ&89	: !]]4>>: 	:MGT--(113C $$7QPE|  wDGGSVW%%wQ&89	: mmM*446  wJ}U%<:m3 !!:}"=>NN**>: r!   c                 $    | j                          y)zButton 'Apply' pressedN)r  ro   s     r    r   zSettingsDialog.OnApply  s    r!   c                 $    | j                          y)zButton 'Cancel' pressedN)r  ro   s     r    rb   zSettingsDialog.OnClose  s    

r!   N)r   r   r   r   DefaultPositionDefaultSizer   r   r   r  r   rb   r   r!   r    r   r   Y  s8     ^^%%KZ	;:
r!   r   c                   $    e Zd Zd Zd Zd Zd Zy)ManageBusyCursorMixinc                     || _         d| _        d| _        | j                   j                  t        j
                  | j                         | j                   j                  t        j                  | j                         y NF)	winis_busy
cur_insider`   r   EVT_ENTER_WINDOWOnEnterEVT_LEAVE_WINDOWOnLeave)r   windows     r    r   zManageBusyCursorMixin.__init__  sO    b))4<<8b))4<<8r!   c                      d| _         d | _        y r%  )r(  busy_curro   s     r    r,  zManageBusyCursorMixin.OnLeave#  s    r!   c                 ^    d| _         | j                  rt        j                         | _        y y )NT)r(  r'  r   
BusyCursorr/  ro   s     r    r*  zManageBusyCursorMixin.OnEnter'  s"    <<MMODM r!   c                     || _         | j                  r&| j                   rt        j                         | _        y d | _        y N)r'  r(  r   r1  r/  )r   busys     r    	UpdateCurzManageBusyCursorMixin.UpdateCur,  s-    ??t||MMODMr!   N)r   r   r   r   r,  r*  r5  r   r!   r    r#  r#    s    9,
r!   r#  c                       e Zd ZddZd Zy)RenameClassDialogc                    t        j                  | ||       t        | j                  t        j
                        | _        | j                  j                  |       | j                  j                  | j                  dt        j                  t        j                  z  d       | j                  j                  | j                         | j                  j                  d       | j                  j                  |        y )N)r   r   rK   rF   )   r)   )r   r   r   r   r   r.   namer   r   rR   rW   r   r]   ri   r   r_   )r   r   old_namer   s       r    r   zRenameClassDialog.__init__6  s    dFE2TZZBII6			8$499RVV9KTUV

DJJ'		Y'

tr!   c                 6    | j                   j                         S r3  )r:  r   rB   s    r    
GetNewNamezRenameClassDialog.GetNewNameB  s    yy!!##r!   N)zChange class name)r   r   r   r   r=  r   r!   r    r7  r7  5  s    
$r!   r7  ) __doc__r   r   gui_core.gselectr   wx.lib.colourselectlibcolourselectr   grass.scriptscriptr   corer   	core.gcmdr   core.settingsr   gui_core.dialogsr   gui_core.wrapr   r	   r
   r   r   r   r   r   r   r#  r7  r   r!   r    <module>rJ     s   (  	 # " "    & ) K K} }@r299 rj}RYY }@ 8$ $r!   