
    ը	fԒ                     <   d Z ddlmZ ddlZddl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mZmZmZmZ ddlmZmZ dd	lmZ ddlmZ dd
lm Z   G d d      Z! G d d      Z" G d d      Z# G d d      Z$ G d d      Z% G d d      Z& G d d      Z'y)a5  
@package iscatt.controllers

@brief Controller layer wx.iscatt.

Classes:
 - controllers::ScattsManager
 - controllers::PlotsRenderingManager
 - controllers::CategoriesManager
 - controllers::IMapWinDigitConnection
 - controllers::IClassDigitConnection
 - controllers::IMapDispConnection
 - controllers::IClassConnection

(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)
    )deepcopyN)GErrorGMessage
RunCommandGWarning)UserSettings)gThread)CoreidBandsToidScattGetRasterInfo	GetRegionMAX_SCATT_SIZEWARN_SCATT_SIZE
MAX_NCELLSWARN_NCELLS)AddScattPlotDialogExportCategoryRaster)IClassGroupDialog)Signalc                       e Zd ZdZd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d Zd Zd Zd Zy)ScattsManagerzMain controllerNc                    || _         |j                         | _        |r|| _        n|j	                         | _        || _        d| _        t               | _        t        | | j                        | _
        t        | | j                  | j                        | _        t               | _        i | _        d | _        dd g| _        d| _        t'        d      | _        | j                  j*                  | _        | j                  j,                  | _        t'        d      | _        |r[t1        | | j                  | j                  j3                               | _        t7        | |j8                  | j                        | _        n6t=               | _        t?        | | j                  | j                         | _        | jA                          t'        d      | _!        y )NF)	scatt_mgrcats_mgrcorezScattsManager.cursorPlotMovezScattsManager.computingStarted)r   r   gifacezScattsManager.mondeSet)"r   GetMapDisplaymapDispmapWinGetMapWindow	guiparentshow_add_scatt_plotr
   r   CategoriesManagerr   PlotsRenderingManager
render_mgrr	   threadplots	plot_modepol_sel_modedata_setr   cursorPlotMoverenderingStartedrenderingFinishedcomputingStartedIClassDigitConnectionCatRastUpdater
digit_connIClassConnectionparenticlass_connIMapWinDigitConnectionIMapDispConnection_initSettingsmodeSet)selfr!   r   iclass_mapwins       3/usr/lib/grass83/gui/wxpython/iscatt/controllers.py__init__zScattsManager.__init__3   sn   ++-'DK --/DK"#( F	)$		:/T]]
 i
"DM$%CD $ @ @!%!B!B &'G H3dkk499#;#;#=DO  0m**DMM D 56DO1t{{ D 	67    c                 l    | j                   j                          | j                  j                          y N)r&   	Terminater   CleanUpr9   s    r;   rA   zScattsManager.CleanUph   s$     			r=   c                     | j                   j                         D ]  \  }}|d   s|d   j                            | j                   j                          y )Nscatt)r'   itemsrA   clear)r9   scatt_idrD   s      r;   CleanUpDonezScattsManager.CleanUpDoneo   sK    #zz//1 	)OHeW~g&&(	) 	

r=   c           	          g dg dg dg dg dg dg}|D ]H  }t        j                          t        j                  t         j                  d|d   |d	   |d
   d       J y)z3Initialization of settings (if not already defined))	selectionsel_pol)   rL   r   )rJ   sel_pol_vertex)rL   r   r   )rJ   sel_area)r   rL      )rJ   
snap_tresh
   )rJ   sel_area_opacty2   )ellipsesshow_ellipsTrD   r         F)dictgroupkeysubkeyvalue	overwriteN)r   ReadSettingsFileAppenduserSettings)r9   initSettingsinits      r;   r7   zScattsManager._initSettingsv   sl     483+0-
 ! 		D))+!..GAw1g		r=   c                 l    | j                   j                          | j                  j                          y r?   )r4   SetDatar1   rB   s    r;   rd   zScattsManager.SetData   s$      "!r=   c           	      .    t        j                  t        d             _        d _         j
                  j                   j                  j                   fd        j                  rd}nd}t        t        |dgt        |      z               _        | _        t                _         j                   d    j                   d   z  }|t"        kD  r
 `d _        y |d d   _        i  _        g } j$                  d d  D ]0  }t)        |      }| j&                  |<   | |j+                  |       2 t-        |      D ]  \  }}| j                  |<     j
                  j                   j                  j.                  | j0                  d	|i
       y )NzLoading data...Fc                 $    j                         S r?   )rH   )eventr9   s    r;   <lambda>z(ScattsManager.SetBands.<locals>.<lambda>   s    T=M=M=O r=   )callableondoneTrowscolsshow_add)ri   bandsrj   userdata)wxBusyInfo_busyr*   r&   Runr   rA   r"   rX   ziplenall_bands_to_bands	all_bandsr   regionr   ro   
bands_infor   append	enumeraterd   SetDataDone)r9   ro   rn   ncellsvalid_bandsbis   `      r;   SetBandszScattsManager.SetBands   sy   KK"3 45	YY&&/O 	 	
 ##HH"&s52$U2C'D"EkV$t{{6'::J	 DM1X
A 	&Aa A!"DOOA}""1%	& k* 	+DAq *+D##A&	+
 	YY&&## (+	 	 	
r=   c                    | ` d| _        |j                  }|j                  | _        | j                  j                         }|j                  | _        | j                  j                          |j                  d   r| j                          y y )NTrn   )rt   r*   ret	bad_bandsr   GetBands	bad_rastsr   rd   rp   AddScattPlot)r9   rg   todoro   s       r;   r~   zScattsManager.SetDataDone   sl    Iyy		""$>>*% &r=   c                 6    | j                   j                         S r?   )r   r   rB   s    r;   r   zScattsManager.GetBands   s    yy!!##r=   c           
      n   | j                   s5| j                  r)d| _        | j                  j                          d| _        y | j                   st	        t        d             y | j                  j                          | j                  j                         }| j                  j                          | j                  d   | j                  d   z  }|t        kD  r3t	        t        | j                  t        d|t        fz                     y |t        kD  rt!        j"                  | j                  t        d|t        fz        t         j$                  t         j&                  z  t         j(                  z  	      }|j+                         }|t         j,                  k7  ry t/        | j                  | j0                  | j2                  
      }|j+                         t         j4                  k(  rg }|j                         }|D ]  \  }}d}	||kD  rd}	|}
|}|
}| j6                  | j0                  |      }| j6                  | j0                  |      }t9        ||t;        |            }|| j<                  v rr|	d d| j<                  |<   |j?                  |        | jA                  |       |jC                          y )NTFzNo data set.rl   rm   zInteractive Scatter Plot Tool can not be used.
Number of cells (rows*cols) <%d> in current regionis higher than maximum limit <%d>.

You can reduce number of cells in current region using <g.region> command.)r3   mmessagea1  Number of cells (rows*cols) <%d> in current region is higher than recommended threshold <%d>.
It is strongly advised to reduce number of cells in current region below recommend threshold.
 It can be done by <g.region> command.

Do you want to continue using Interactive Scatter Plot Tool with this region?r3   messagestyle)r3   ro   check_bands_callback)	transposerD   )"r*   r4   r"   rd   r   rs   r.   emitr   r   r1   Updaterz   r   r!   r   rq   MessageDialogYES_NO
NO_DEFAULTICON_WARNING	ShowModalID_YESr   ry   
CheckBandsID_OKrx   r   rw   r'   r|   _addScattPlotDestroy)r9   ro   r   dlgr   	scatt_ids	sel_bandsb_1b_2r   tmp_bandb_1_idb_2_idrG   s                 r;   r   zScattsManager.AddScattPlot   sV   }}!1!1'+D$$$&',D$}}1^$%""$		""$ 	 V$t{{6'::J>>e ":.	/	 k!""~~F {+,	 ii"--/"//AC --/Cbii >>..!%
 ==?bhh&II% +S!	9 $I"HC"C001DE001DE+FFCJGtzz)5>'N

8$  *!+$ y)r=   c                 4   | j                   j                         }| j                  j                         }| j                  | j
                  |      }| j                  | j
                  |      }t        ||t        |            }||v r!t        | j                  t        d             y| j
                  |   }| j
                  |   }	| j                  |   }
| j                  |	   }d}||	fD ]#  }| j                  |   |t        d|z        z  }% |r$t        | j                  t        d|z                y|
d   |d   z  }|t        kD  r4t        | j                  t        d||
d   ||d   |t        fz               y|t        kD  rt        j                   | j                  t        d	||
d   ||d   |t        fz        t        j"                  t        j$                  z  t        j&                  z  
      }|j)                         }|t        j*                  k7  ryy)NzTScatter plot with same band combination (regardless x y order) is already displayed.)r3   r   F z&Band <%s> is not CELL (integer) type.
zScatter plot cannot be added.
rangezoScatter plot cannot be added.
Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than maximum limit <%d>.
zMultiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended limit <%d>.
It is strongly advised to reduce range extend of bands(e. g. using r.rescale) below recommended threshold.

Do you really want to add this scatter plot?r   T)r   r   r'   keysrx   ry   r   rw   r   r!   rs   r{   r   r   r   rq   r   r   r   r   r   r   )r9   r   r   ro   added_scatts_idsr   r   rG   b_1_nameb_2_nameb_1_ib_2_ierrr   mranger   r   s                    r;   r   zScattsManager.CheckBands%  s   		""$::??,(()<=(()<=#FFCJ?''~~, >>#&>>#&))H% 	HAq!)qBQFGG	H ~~;cAB w%.0N"~~; !g g&
  o%""~~C !g g' ii"--/"//A#C& --/Cbiir=   c                     | j                   j                          | j                  j                  | j                  j
                  || j                         y )N)ri   r   rj   )r%   NewRunningProcessr&   ru   r   AddScattPlotsAddScattPlotDone)r9   r   s     r;   r   zScattsManager._addScattPlotv  s@    ))+YY,,(( 	 	
r=   c                 t     j                   sy |j                  d   }|D ]  } j                  |   d   } j                  j	                  ||       j                  |   d<    j                  |   d   j
                  j                   j                          j                  |   d   j                  j                   fd        j                  s j                  |   d   j                   j                          j                  |   d   j                            j                  j                          y )Nr   r   )rG   r   rD   c                 @    j                   j                  | ||      S )N)xyrG   )r+   r   )r   r   rG   r9   s      r;   rh   z0ScattsManager.AddScattPlotDone.<locals>.<lambda>  s%    t':':'?'?1x (@ ( r=   )r*   kwdsr'   r!   NewScatterPlot
plotClosedconnect
PlotClosed
cursorMover(   SetModeZoomToExtendr%   RunningProcessDone)r9   rg   r   s_idtranss   `    r;   r   zScattsManager.AddScattPlotDone~  s   }}JJ{+	 	9DJJt$[1E(,(E(E )F )DJJtW% JJtW%0088IJJtW%0088 ~~

4 )11$..A

4 )668!	9$ 	**,r=   c                     | j                   |= y r?   )r'   )r9   rG   s     r;   r   zScattsManager.PlotClosed  s    JJx r=   c                     || _         t        j                  | j                        D ]  }|d   s	|d   j	                  |        | j
                  j                  |       y )NrD   )mode)r(   six
itervaluesr'   r   r8   r   )r9   r   rD   s      r;   SetPlotsModezScattsManager.SetPlotsMode  sU    ^^DJJ/ 	-EW~g&&t,	- 	t$r=   c                    || j                   d<   t        j                  | j                        D ]?  }|d   s	|d   j	                  |       |r | j
                  dvs/| j                  d        A | j                  j                          |S )Nr   rD   )zoompanzoom_extend)	r)   r   r   r'   SetSelectionPolygonModer(   r   r%   r   )r9   activaterD   s      r;   ActivateSelectionPolygonModez*ScattsManager.ActivateSelectionPolygonMode  s~    '!^^DJJ/ 	(E>'N228<6T T!!$'	( 	**,r=   c                    i }t        j                  | j                        D ]&  \  }}|d   s|d   j                         }|"|||<   ( |sy d}|dk(  rd}| j                  j                         }|s~t        j                  | j                  t        d      t        d      t        j                        }|j                         t        j                  k(  r| j                  j                          | j                  j                         }|sy t        j                  | j                        D ]  }|d   s	|d   j!                           | j"                  j%                          | j&                  j)                          | j&                  j+                  |g       | j&                  j-                  |g       | j.                  j1                  | j2                  j4                  |||| j6                  	       y )
NrD   rV   remover   z|In order to select arrea in scatter plot, you have to select class first.

There is no class yet, do you want to create one?zNo class selected)r3   r   captionr   cat_ids)ri   cat_idscatts_polsr\   rj   )r   	iteritemsr'   	GetCoordsr   GetSelectedCatrq   r   r!   rs   r   r   r   r4   EmptyCategoriesr   SetEmptyr.   r   r%   r   CategoryChangedCategoryCondsChangedr&   ru   r   UpdateCategoryWithPolygonsSetEditCatDataDone)	r9   process_modescatts_polygonsrG   rD   coordsr\   
sel_cat_idr   s	            r;   ProcessSelectionPolygonsz&ScattsManager.ProcessSelectionPolygons  s   "}}TZZ8 	3OHe>7^--/F!,2)	3 8#E]]113
""~~1 -.ii
C }}"))+  002]]113
^^DJJ/ 	*EW~g'')	* 	""$))+'''=,,j\,BYY99'** 	 	
r=   c                     | j                   sy | j                  j                          |j                  r!t	        t        d      | j                  d       |j                  }| j                  j                  |       y )Nz>Error occurred during computation of scatter plot category:
%sF)r3   showTraceback)
r*   r%   r   	exceptionr   rs   r!   r   r4   RenderCatRast)r9   rg   r   s      r;   r   z ScattsManager.SetEditCatDataDone  s]    }}**,??ST~~# &&v.r=   c                 8    | j                   j                          y r?   )r%   RenderRequest)r9   chanaged_settss     r;   SettingsUpdatedzScattsManager.SettingsUpdated  s    %%'r=   c                     | j                   S r?   )r   rB   s    r;   GetCategoriesManagerz"ScattsManager.GetCategoriesManager  s    }}r=   r?   )__name__
__module____qualname____doc__r<   rA   rH   r7   rd   r   r~   r   r   r   r   r   r   r   r   r   r   r   r    r=   r;   r   r   0   sk    38j.",
\ $TlOb
-2!%
4
l/(
r=   r   c                   Z    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
dd
Zd Zd Zd Zd Zy	)r$   z]Manages rendering of scatter plot.

    .. todo::
        still space for optimalization
    c                    || _         || _        || _        | j                  j                         \  | _        | _        d| _        i | _        g | _        g | _	        g | _
        t        d      | _        t        d      | _        y )Nr   zScattsManager.renderingStartedzScattsManager.renderingFinished)r   r   r   GetScattsData	scatts_dtscatt_conds_dtrunningProcessesdata_to_renderrender_queuer   cat_cond_idsr   r,   r-   )r9   r   r   r   s       r;   r<   zPlotsRenderingManager.__init__  sv    " 	.2ii.E.E.G++ !  &'G H!'(I!Jr=   c                     |D ]]  \  }}| j                   j                  |   s|| _         '|D ]2  }|| j                   |   vs| j                   |   j                  |       4 _ y r?   )r   has_keyr|   )r9   scattsrG   r   cs        r;   AddRenderRequestz&PlotsRenderingManager.AddRenderRequest  sq    !' 	@Hg&&..x8&-#  @A 3 3H ==++H5<<Q?@		@r=   c                 .    | xj                   dz  c_         y NrV   )r   rB   s    r;   r   z'PlotsRenderingManager.NewRunningProcess  s    "r=   c                 n    | xj                   dz  c_         | j                   dk  r| j                          y y r  r   RenderScattPltsrB   s    r;   r   z(PlotsRenderingManager.RunningProcessDone   s2    "  A%  " &r=   c                 D    | j                   dk  r| j                          y y r  r  rB   s    r;   r   z#PlotsRenderingManager.RenderRequest%  s!      A%  " &r=   c                 f    |D ],  }|| j                   vs| j                   j                  |       . y r?   )r   r|   r9   r   r  s      r;   r   z%PlotsRenderingManager.CategoryChanged)  s/     	'A$##A&	'r=   c                 f    |D ],  }|| j                   vs| j                   j                  |       . y r?   )r   r|   r  s      r;   r   z*PlotsRenderingManager.CategoryCondsChanged.  s3     	,A)))!!((+	,r=   Nc                    t        | j                        dkD  ry | j                  j                          | j                  j	                  | j
                  j                  j                                t        | j                  j                               }| j                  j                         d d  }| j
                  j                  j                  | j                  |||| j                         y )NrV   )ri   r   cats
cats_attrsrj   )rw   r   r,   r   r|   r   r&   GetIdr   r   GetCategoriesAttrsGetCategoriesru   _renderscattpltsRenderingDone)r9   r   r  r  s       r;   r  z%PlotsRenderingManager.RenderScattPlts3  s    t  !A%""$  !6!6!<!<!>?dmm>>@A
}}**,Q/!!**!%% 	" 	
r=   c                 r   |j                          |j                  dd       | j                  j                  j	                         D ]  \  }}|||vr|d   s| j
                  j                  |      }| j                         r| j
                  j                  ||      }ni }t        j                  |      D ]&  }	 | j                  j                  |       d||   d<   ( | j                  j                  d   r| j                  ||||       |d   j                  ||||        y #  d||   d<   Y }xY w)Nr   rD   TrenderF)
cats_orderr  rT   styles)reverseinsertr   r'   rE   r   GetScatt_showConfEllipsesGetEllipsesr   iterkeysr   r   r)   _getSelectedAreasPlot)	r9   r   r  r  
i_scatt_idrD   scatt_dtellipses_dtr  s	            r;   r  z&PlotsRenderingManager._renderscattpltsD  s2   Aq!%!5!5!;!;!= 	J$9)D>~~..z:H%%'"nn88ZP \\(+ 22LL''*,0HQK)2 ~~**1-&&tZ:N'N$!	   -	 2,1HQK)s   =#D**
D6c                     | j                   j                  |j                         | j                   s| j                  j	                          y y r?   )r   r   pidr-   r   r9   rg   s     r;   r  z#PlotsRenderingManager.RenderingDoned  s:      +  ""'') !r=   c                    | j                   j                         }|sy d}| j                  j                  ||g      }|sy |j	                  |       t        j                  ddd      }dj                  t        t        |            }t        j                  ddd      dz  }	||	d	d
||<   ||   ||<   d||   d<   || j                  v r$d	||   d<   | j                  j                  |       y y )Nrk   rD   rJ   rN   rY   rZ   r[   :rR   g      Y@T)coloropacityshowFr  )r   r   r   r  r|   r   Getjoinmapstrr   r   )
r9   r  rG   r"  r  r   sel_a_cat_idscolopacs
             r;   r  z'PlotsRenderingManager._getSelectedAreasi  s    --/((F8<,'W+jQhhs3}%7DUV 	
 .1T4#P
< !"6+0x(T&&&/3H\"8,$$V, 'r=   c                 2    t        j                  ddd      S )NrD   rT   rU   r(  )r   r-  rB   s    r;   r  z'PlotsRenderingManager._showConfEllipses  s    g:mTTr=   r?   )r   r   r   r   r<   r  r   r   r   r   r   r  r  r  r  r  r   r=   r;   r$   r$     sG    K"@##
#'
,

"@*
-<Ur=   r$   c                   f    e Z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d Zd Zd Zd Zy)r#   z(Manages categories list of scatter plot.c                     || _         || _        i | _        g | _        d | _        d | _        t        d      | _        t        d      | _        t        d      | _	        t        d      | _
        y )NzCategoriesManager.initializedz"CategoriesManager.setCategoryAttrsz!CategoriesManager.deletedCategoryzCategoriesManager.addedCategory)r   r   r  cats_idsr   exportRasterr   initializedsetCategoryAttrsdeletedCategoryaddedCategory)r9   r   r   s      r;   r<   zCategoriesManager.__init__  se    	"	 !"AB &'K L%&IJ#$EFr=   c                 F   |t        | j                        k\  ry	 | j                  j                  |      }||kD  r|dz  }| j                  j                  |       | j                  j	                  ||       | j
                  j                  j                          y#  Y yxY w)NFrV   T)rw   r8  indexr   r  r   r%   r   )r9   r   new_posposs       r;   ChangePositionz CategoriesManager.ChangePosition  s    c$--((	--%%f-C =1HCV$Wf-!!//1	s   B B c                 z    | j                   j                  j                  | j                  j                  |       y Nri   r   )r   r&   ru   r   AddCategoryr9   r   s     r;   _addCategoryzCategoriesManager._addCategory  s)    !!499+@+@!Pr=   c                     | j                   j                  sy | j                  D ]=  }| j                   j                  j	                  | j
                  j                  |       ? y rD  )r   r*   r8  r&   ru   r   rF  rG  s     r;   rd   zCategoriesManager.SetData  sN    ~~&&mm 	UFNN!!%%tyy/D/DV%T	Ur=   Nc                 V   |'| j                   rt        | j                         dz   }nd}| j                  j                  r;| j                  j                  j                  | j                  j                  |       d|z  ddddd| j                  |<   | j                   j                  d|       ||| j                  |   d	<   ||| j                  |   d
<   ||| j                  |   d<   | j                  j                  || j                  |   d	   | j                  |   d
          |S )NrV   rE  zclass_%dz0:0:0g      ?T)namer*  r+  r,  nstdr   rK  r*  rL  )r   rK  r*  )r8  maxr   r*   r&   ru   r   rF  r  r  r=  r   )r9   r   rK  r*  rL  s        r;   rF  zCategoriesManager.AddCategory  s&   >}}T]]+a/>>""NN!!%%tyy/D/DV%T '
		& 	Q'(,DIIff%).DIIfg&(,DIIff%6"6*))F#G, 	  	

 r=   c                    d}g }t        j                  |      D ]4  \  }}|s|dv rd}|dv r|j                  |       || j                  |   |<   6 |rK| j                  j
                  j                  |g       | j                  j
                  j                          |r&| j                  j                  j                  ||       | j                  j                  ||       y )NF)r*  r+  r,  rL  T)r*  rK  r   )r   
attrs_dict)r   r   r|   r  r   r%   r   r   r4   UpdateCategoryRasterr;  r   )r9   r   rO  r  update_cat_rastkvs          r;   SetCategoryAttrsz"CategoriesManager.SetCategoryAttrs  s    MM*- 	%DAqa#GG%%&&q)#$DIIfa 	% NN%%55vh5GNN%%335NN&&;;FOT""&Z"Hr=   c                 .   | j                   j                  r;| j                   j                  j                  | j                  j
                  |       | j                  |= | j                  j                  |       | j                  j                  |       y )NrE  )r   )r   r*   r&   ru   r   DeleteCategoryr  r8  r   r<  r   rG  s     r;   rV  z CategoriesManager.DeleteCategory  sl    >>""NN!!%%tyy/G/GPV%WIIfV$!!!0r=   c                     || _         | j                  j                  d   r%| j                  j                  j	                          y y )Nr   )r   r   r)   r%   r   rG  s     r;   SetSelectedCatz CategoriesManager.SetSelectedCat   s6     >>&&q)NN%%335 *r=   c                     | j                   S r?   )r   rB   s    r;   r   z CategoriesManager.GetSelectedCat  s    r=   c                      | j                   |   S r?   r  rG  s     r;   GetCategoryAttrsz"CategoriesManager.GetCategoryAttrs  s    yy  r=   c                     | j                   S r?   r[  rB   s    r;   r  z$CategoriesManager.GetCategoriesAttrs  s    yyr=   c                      | j                   d d  S r?   )r8  rB   s    r;   r  zCategoriesManager.GetCategories  s    }}Qr=   c                    | j                  |      }t        | j                  j                  | j                  t        d      |d   z        }|j                         t        j                  k(  r}|j                         | _
        |j                          | j                  j                  j                  | j                  j                  d|d   i|| j                  | j                          y y )Nz(Export scatter plot raster of class <%s>rK  )r3   
rasterNametitle)ri   rp   r   	rast_namerj   )r\  r   r   r!   r9  rs   r   rq   r   GetRasterNameexportCatRastr   r&   ru   r   ExportCatRastOnExportCatRastDone)r9   r   	cat_attrsr   s       r;   re  zCategoriesManager.ExportCatRast  s    ))&1	">>++((>?)FBSS
 ==?bhh&!$!2!2!4DKKMNN!!%%00 )F"34,,// & 	 'r=   c                 8   |j                   \  }}|dk(  rR| j                  |j                  d         }t        t	        d      |j
                  d   |j                  d   fz         y t        t	        d      |j
                  d   |j                  d   |fz         y )Nr   r   z>Scatter plot raster of class <%s> exported to raster map <%s>.rK  rb  zBExport of scatter plot raster of class <%s> to map <%s> failed.
%s)r   r\  r   r   rs   rp   )r9   rg   r   r   rg  s        r;   rf  z%CategoriesManager.OnExportCatRastDone(  s    99S!8--ejj.BCIRS>>&)5::k+BCD
 WX>>&)5::k+BCHIr=   )NNNN)r   r   r   r   r<   rB  rH  rd   rF  rT  rV  rX  r   r\  r  r  re  rf  r   r=   r;   r#   r#     sP    2G &QU%NI*16
! *r=   r#   c                       e Zd ZdZd Zd Zy)r5   z^Manage communication of the scatter plot with digitizer in
    mapwindow (does not work).
    c                      y r?   r   rB   s    r;   r   zIMapWinDigitConnection.Update<      r=   c                      y r?   r   rB   s    r;   rd   zIMapWinDigitConnection.SetData?  rk  r=   N)r   r   r   r   r   rd   r   r=   r;   r5   r5   7  s    r=   r5   c                   L    e 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y)r/   zOManages communication of the scatter plot with digitizer in
    wx.iclass.
    c                 @   || _         d | _        || _        || _        |j                  | _        g | _        dg i| _        | j                  j                  | _        | j                   j                  j                  d   j                  j                  | j                         y )Nmapwin_connvdigit)r   vectMapscatt_rast_updaterr   r   cats_to_updatepidsr&   r3   toolbarseditingStartedr   DigitDataChanged)r9   r   r   rr  s       r;   r<   zIClassDigitConnection.__init__H  s    "4"!** "B'	nn++ 	##H-<<DD!!	
r=   c                 d    | j                   j                  | j                  j                         y )N)ri   )r&   ru   rr  SyncWithMaprB   s    r;   r   zIClassDigitConnection.UpdateY  s     !8!8!D!DEr=   c                 $    g | _         dg i| _        y )Nro  )rs  rt  rB   s    r;   rd   zIClassDigitConnection.SetData\  s     "B'	r=   c                    | j                   j                  j                  | j                         | j                   j                  j                  | j
                         | j                   j                  j                  | j
                         | j                   j                  j                  | j                         | j                   j                  j                  | j                         | j                   j                  j                  | j                         | j                   j                  j                  | j                         y r?   )digitfeatureAddedr   
AddFeatureareasDeletedDeleteAreasfeaturesDeletedvertexMovedEditedFeaturevertexRemoved
lineEditedfeaturesMovedrB   s    r;   _connectSignalsz%IClassDigitConnection._connectSignals`  s    

''8

''(8(89

""**4+;+;<

&&t'9'9:

  ((););<

%%d&8&89

  ((););<r=   c                 d   | j                   j                  sy | j                   j                  j                          | j                  d   j                  | j                  j                                | j                  j                  | j                  j                  |g g || j                         y Nro  )ri   	new_bboxs	old_bboxsold_areas_catsnew_areas_catsrj   r   r*   r.   r   rt  r|   r&   r  ru   rr  r  OnDone)r9   r  r  s      r;   r~  z IClassDigitConnection.AddFeaturei  s    ~~&&'',,.		- ''(9(9(;<,,::);; 	 	
r=   c                 d   | j                   j                  sy | j                   j                  j                          | j                  d   j                  | j                  j                                | j                  j                  | j                  j                  g ||g | j                         y r  r  )r9   r  r  s      r;   r  z!IClassDigitConnection.DeleteAreasx  s    ~~&&'',,.		- ''(9(9(;<,,::);; 	 	
r=   c                 d   | j                   j                  sy | j                   j                  j                          | j                  d   j                  | j                  j                                | j                  j                  | j                  j                  ||||| j                         y r  r  )r9   r  r  r  r  s        r;   r  z#IClassDigitConnection.EditedFeature  s    ~~&&'',,.		- ''(9(9(;<,,::));; 	 	
r=   c                     || _         || _        | j                   j                  d       | j                  j	                  |       | j                          y )NT)r   )r|  rq  EmitSignalsrr  
SetVectMapr  )r9   rq  r|  s      r;   rw  z&IClassDigitConnection.DigitDataChanged  sE    


D)**73r=   c                    | j                   j                  sy | j                  d   j                  |j                         |j
                  }|D ],  }|| j                  vs| j                  j                  |       . | j                  d   sc| j                  j                  | j                   j                  j                  | j                  d d  | j                         | j                  d d = y y )Nro  )ri   r8  rj   )r   r*   rt  r   r%  r   rs  r|   r&   ru   r   ComputeCatsScattsRender)r9   rg   updated_catscats       r;   r  zIClassDigitConnection.OnDone  s    ~~&&		- ''		2yy 	0C$---##**3/	0 yy'KKOO,,>>,,Q/{{  
 ##A& (r=   c                 L    | j                   j                  j                          y r?   )r   r%   r  r&  s     r;   r  zIClassDigitConnection.Render  s    !!113r=   N)r   r   r   r   r<   r   rd   r  r~  r  r  rw  r  r  r   r=   r;   r/   r/   C  s:    
"F(=


'"4r=   r/   c                   0    e Zd ZdZd Zd Zd ZddZd Zy)	r6   zFManage communication of the scatter plot with mapdisplay in mapwindow.c                 P    || _         || _        d d d| _        || _        i | _        y )N)rY   subg)r   r   set_gr   added_cats_rasts)r9   r   r   r   s       r;   r<   zIMapDispConnection.__init__  s+    " #T2
 "r=   c                    t        | j                  j                  | j                  d   | j                  d         }g }	 |j	                         t
        j                  k(  rt|j                  | j                  j                        }|rM|j                         \  }}t        j                  |d      }|d   | j                  d<   || j                  d<   nn|j                          i | _        |r| j                  j                  |       y y )NrY   r  )rY   subgroup)r3   )rK  elementrK  )r   r   r!   r  r   rq   r   GetGroupBandsErrGetDatagrass	find_filer   r  r   )r9   r   ro   rK  r2  rY   s         r;   rd   zIMapDispConnection.SetData  s    NN$$**W%ZZ'
 }}"((*,,DNN4L4L,M!kkmGD!!OOwGE*/-DJJw')*DJJv&  	 "NN##E* r=   c                      y r?   r   rB   s    r;   r   z"IMapDispConnection.EmptyCategories  s    r=   c                    | j                   j                  j                  |      }t        j                  |dd      d   sy | j
                  j                  |      }d|v rRt        d|dd|d   z  d	
      \  }}|dk7  rt        d|z         |r$| j                  j                  j                          d|v rJ| j                  j                         j                  j                  | j                  |   |d          |d    y y )Ncell.r  mapsetfiler*  r.colors-1 %sTr/  rulesstdingetErrorMsgr   r.colors failed
%srK  )r   r   
GetCatRastr  r  r   r\  r   r   r   	updateMapr   GetLayerList_treeSetItemTextr  )r9   r   attrsr  cat_rastr  r   err_msgs           r;   rP  z'IMapDispConnection.UpdateCategoryRaster  s    >>&&11&9xDVL]]33F;
e%z'22 LC ax,w67%%**,U?KK$$&,,88%%f-z&/A v r=   c                    |t        j                  | j                        vr| j                  j                  j                  |      }| j                  j                  |      d   }| j                  |dgd       dd|z  g}| j                  j                         j                  j                  d||d	      }|| j                  |<   y | j                  j                  j                          y )
NrK  r*  Fr  zd.rastzmap=%srasterT)ltypelnamelcmdlchecked)r   r  r  r   r   r  r   r\  rP  r   r  r  AddLayerr  r   )r9   r   r  cat_namecmdlayers         r;   r   z IMapDispConnection.RenderCatRast  s    d&;&;<<~~**55f=H}}55f=fEH%%fwi%FX01CKK,,.44==hS4 > E -2D!!&)KK!!&&(r=   NT)	r   r   r   r   r<   rd   r   rP  r   r   r=   r;   r6   r6     s    P#+66)r=   r6   c                   n    e Zd ZdZd ZddZd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zy)r2   zFManage communication of the scatter plot with mapdisplay in wx.iclass.c                    || _         | j                   j                  | _        || _        || _        g | _        | j                  j
                  j                  | j                         | j                  j                  j                  | j                         | j                  j                  j                  | j                         | j                  j                  j                  | j                         | j                   j                  j                  | j                         | j                  j                   j                  | j"                         | j                  j$                  j                  | j&                         | j                  j(                  j                  | j*                         | j                   j,                  j                  | j.                         | j1                          y r?   )iclass_frame
stats_datar   r   r  statisticsAddedr   rF  statisticsDeletedrV  allStatisticsDeletedDeletAllCategoriesstatisticsSetSetCategorygroupSetGroupSetr;  SetStatisticsr<  DeleteStatisticsr=  AddStatisticscategoryChangedr   SyncCats)r9   r   r  r   s       r;   r<   zIClassConnection.__init__  sL   (++66 " "''//0@0@A))11$2E2EF,,44T5L5LM%%--d.>.>?""**4==9&&..t/A/AB%%--d.C.CD##++D,>,>?))11$2F2FGr=   c                 8   | j                   j                  sy | j                   j                  j                  |      }|sy t	        j
                  |dd      d   sy | j                  j                  |      }| j                  j                         \  }}d|v r>t        d|dd|d   z  d	
      \  }}	|dk7  rt        d|	z         |r|j                          d|v rA| j                   j                  j                  |      }|j                  ||d          |d    y y )Nr  r  r  r  r*  r  r  r  Tr  r   r  rK  )originalalias)r   r*   r   r  r  r  r   r\  r  GetMapManagersr   r   r  SetAlias)
r9   r   r  r  r  r  	train_mgrpreview_mgrr   r  s
             r;   rP  z%IClassConnection.UpdateCategoryRaster"  s   ~~&&>>&&11&9xDVL]]33F;
!%!2!2!A!A!C	;e%z'22 LC ax,w67  "U?~~**55f=H
68JKv	 r=   c                    | j                   j                         \  }}|| j                  vr| j                  j                  j                  |      }| j                  j                  |      d   }| j                  |dgd       |j                  ||       | j                  j                  |       y |j                          y )NrK  r*  Fr  )r  )r  r  r  r   r   r  r   r\  rP  r  r|   r  )r9   r   r  r  r  r  s         r;   r   zIClassConnection.RenderCatRastC  s    !%!2!2!A!A!C	;...~~**55f=H}}55f=fEH%%fwi%Fxx8!!((0r=   c                 F    | j                   j                          g | _        y r?   )r  AddBandsr  rB   s    r;   rd   zIClassConnection.SetDataP  s    ""$ "r=   c                 :    | j                   j                  d        y r?   )r  OnCategoryManagerrB   s    r;   r   z IClassConnection.EmptyCategoriesT  s    ++D1r=   Nc                    | j                   j                  j                  | j                         | j                  j                         }|D ]`  }|r||vr
| j                  j                  |      }| j                   j                  ||j                  |j                  |j                         b | j                   j                  j                  | j                         y r?   )r   r=  
disconnectr  r  r  GetStatisticsrF  rK  r*  rL  r   )r9   r8  r  r  statss        r;   r  zIClassConnection.SyncCatsW  s    ##..t/A/AB,,. 	NAAX-OO11!4EMM%%aU[[%**M		N
 	##++D,>,>?r=   c                 :    | j                   j                  |       y r?   )r   rX  r9   r  s     r;   r   z IClassConnection.CategoryChangeda  s    $$S)r=   c                 H   | j                   j                  j                  | j                         | j                  j                  |      }| j                   j                  ||||j                         | j                   j                  j                  | j                         y )N)r   rK  r*  rL  )	r   r=  r  r  r  r  rF  rL  r   )r9   r  rK  r*  r  s        r;   rF  zIClassConnection.AddCategoryd  sq    ##..t/A/AB--c2!!4u5::!V##++D,>,>?r=   c                     | j                   j                  j                  | j                         | j                   j	                  |       | j                   j                  j                  | j                         y r?   )r   r<  r  r  rV  r   r  s     r;   rV  zIClassConnection.DeleteCategoryj  sP    %%001F1FG$$S)%%--d.C.CDr=   c                 8   | j                   j                  j                  | j                         | j                  j                         }|D ]  }| j                   j                  |        | j                   j                  j                  | j                         y r?   )r   r<  r  r  r  r  rV  r   )r9   r  r  s      r;   r  z#IClassConnection.DeletAllCategorieso  sq    %%001F1FG,,. 	,AMM((+	,%%--d.C.CDr=   c                 (   | j                   j                  j                  | j                         i }dD ]  }||v s||   ||<    |r| j                   j	                  ||       | j                   j                  j                  | j                         y )N)rK  r*  rL  )r   r;  r  r  rT  r   )r9   r  r  	cats_attrattrs        r;   r  zIClassConnection.SetCategoryv  s    &&11$2D2DE	- 	.Du}"'+	$	. MM**3	:&&..t/A/ABr=   c                    | j                   j                  j                  | j                         | j                   j	                  |      j                  |       | j                   j                  j                  | j                         y r?   )r  r  r  r  r  r  r   )r9   r   rO  s      r;   r  zIClassConnection.SetStatistics  s[    %%001A1AB%%f-;;JG%%--d.>.>?r=   c                     | j                   j                  j                  | j                         | j                   j	                  |||       | j                   j                  j                  | j                         y r?   )r  r  r  rF  r  r   )r9   r   rK  r*  s       r;   r  zIClassConnection.AddStatistics  sT    ''2243C3CD%%fdE:''//0@0@Ar=   c                     | j                   j                  j                  | j                         | j                   j	                  |       | j                   j                  j                  | j                         y r?   )r  r  r  rV  r  r   rG  s     r;   r  z!IClassConnection.DeleteStatistics  sP    ))44T5H5HI((0))11$2E2EFr=   c                     i }|r||d<   t        dd|dd|j                         }|j                         d   r,|j                         }| j                  j	                  |       y y )Nr  gT)flagsrY   readr   )zi.group)r   strip
splitlinesr   r   )r9   rY   r  kwargsresro   s         r;   r  zIClassConnection.GroupSet  se    !)F:P#UPPVVX>>ANN$ENN##E* r=   r  r?   )r   r   r   r   r<   rP  r   rd   r   r  r   rF  rV  r  r  r  r  r  r  r   r=   r;   r2   r2   	  sY    P,B#2@*@E
E
C@
B
G
	+r=   r2   )(r   copyr   rq   r   	core.gcmdr   r   r   r   core.settingsr   core.gthreadr	   iscatt.iscatt_corer
   r   r   r   r   r   r   r   iscatt.dialogsr   r   iclass.dialogsr   grass.scriptscriptr  grass.pydispatch.signalr   r   r$   r#   r5   r/   r6   r2   r   r=   r;   <module>r     s   *  	 
 = < &  	 	 	 D ,  *I IXLU LU^i iX	 	o4 o4dQ) Q)hQ+ Q+r=   