
    ը	f                         d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	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 ddlmZmZ ddlmZ ddlmZ  G d de      Zy)a  
@package vdigit.toolbars

@brief wxGUI vector digitizer toolbars

List of classes:
 - toolbars::VDigitToolbar

(C) 2007-2015 by the GRASS Development Team

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

@author Martin Landa <landa.martin gmail.com>
@author Stepan Turek <stepan.turek seznam.cz> (handlers support)
    N)script)Signal)BaseToolbar	BaseIcons)CreateNewVectorVectorDialog)PseudoDCMenu)VDigitSettingsDialog)Debug)UserSettings)GError
RunCommand)MetaIcon)Notificationc                   D   e Zd ZdZg fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd4dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd5dZd5dZd Zd6d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/ Z0d0 Z1d7d1Z2d2 Z3d3 Z4y)8VDigitToolbarzToolbar for digitizationc                    || _         |j                         | _        || _        || _        t        j                  | ||       d | _        || _        d | _	        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        | j                  j!                         }|ro| j                  j#                  |j$                         | j                  j#                  |j&                         | j                  j#                  |j(                         | j*                  | j,                  _        | j/                  t0        j2                  | j4                         d | _        g | _        d x| _        | _        d| _        d| _         d | _!        | jE                  | jG                                d| _$        dddd| _%        d | _&        | jO                  d	
       dD ]R  }tQ        | |      r+tS        | |      }| jT                  jW                  d| |       :tY        jZ                  dd|z         T d}	| j                  rd| j                  v r|	dz  }	| j                  rd| j                  v r|	dz  }	| j                  rd| j                  v r|	dz  }	|	dk7  rt| j]                  t_        d            | _0        | jc                  d| j`                        | _2        | j`                  j/                  t0        jf                  | jh                         | jk                          | j<                  r4| j<                  jm                          | j<                  jo                          | j>                  dkD  r| jq                  | j>                  d       | j@                  dkD  r| jq                  | j@                  d       | js                  d       y )NzVDigitToolbar.editingStartedzVDigitToolbar.editingStoppedzVDigitToolbar.editingBgMapzVDigitToolbar.quitDigitizerzVDigitToolbar.openATM desctypeidT
updateTool)addPointaddLineaddBoundaryaddCentroidaddArea	addVertex
deleteLine
deleteAreadisplayAttrdisplayCatseditLinemoveLine
moveVertexremoveVertexadditionalToolsmouseUse)grouptoolbartool   z
%s skippedr   r   r    r!   z"Select area/boundary/centroid tool   Fi   )width):	MapWindowGetMapMaptools
digitClassr   __init__digit_gifacefTyper   editingStartededitingStoppededitingBgMapquitDigitizeropenATMGetLayerTreeconnectStartEditingStopEditingSetBgMapForEditingOnTool
controllerBindwxEVT_SHOWOnShowmapLayerlayerscomboidcomboundoredosettingsDialogInitToolbar_toolbarData_defaultaction_currentAreaActionTypeUpdateListOfLayershasattrgetattrtoolSwitcherAddToolToGroupr   msgCreateSelectionButton_
areaButtonInsertControlareaButtonId
EVT_BUTTONOnAddAreaMenuRealizeHideShow
EnableToolFixSize)
selfparentr\   r4   r8   gifacer7   	layerTreer/   
nAreaToolss
             0/usr/lib/grass83/gui/wxpython/vdigit/toolbars.pyr9   zVDigitToolbar.__init__$   s(   "##%
$T6<8

$%CD$%CD"#?@#$AB56LL--/	''	(>(>?''	(=(=>%%i&B&BC "& 			"++t{{+ $((tz		 # 	**,-!2R8&*# 	40
 	2D" tT"tT*!!00$d 1  		!\D01/	26 
::-4::5!OJ::-4::5!OJ::)tzz1!OJ?"8867DO !% 2 21doo FDOO  0B0BC 	::JJOOJJOO 99q=OODIIu-99q=OODIIu-3    c           
         g }i dt        dt        d      t        d            dt        dt        d      t        d	            d
t        dt        d      t        d	            dt        dt        d      t        d            dt        dt        d      t        d            dt        dt        d      t        d            dt        dt        d      t        d            dt        dt        d      t        d            dt        dt        d      t        d             d!t        d"t        d#      t        d             d$t        d%t        d&      t        d	            d't        d(t        d)      t        d            d*t        d+t        d,      t        d            d-t        d.t        d/      t        d            d0t        d0   j                  t        d1      2      d3t        d3   j                  t        d4      t        d5      6      d7t        d7   j                  t        d8      t        d9      6      t        d:t        d;      t        d            t        d<t        d=      t        d>            t        d?t        d@      t        dA            dB| _        | j
                  rdC| j
                  v r|j                  dD       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j                  t        j                  f       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j                  t        j                  f       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j                  t        j                  f       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j                  t        j                  f       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j                  t        j                  f       | j
                  rd*| j
                  v rS|j                  d*| j                  d*   j                  f| j                  d*   | j                  t        j                  f       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j                   t        j                  f       | j
                  rd-| j
                  v rS|j                  d-| j                  d-   j                  f| j                  d-   | j"                  t        j                  f       | j
                  rd$| j
                  v rS|j                  d$| j                  d$   j                  f| j                  d$   | j$                  t        j                  f       | j
                  rd'| j
                  v rS|j                  d'| j                  d'   j                  f| j                  d'   | j&                  t        j                  f       | j
                  rd!| j
                  v rS|j                  d!| j                  d!   j                  f| j                  d!   | j(                  t        j                  f       | j
                  rd| j
                  v rS|j                  d| j                  d   j                  f| j                  d   | j*                  t        j                  f       | j
                  rdE| j
                  v rS|j                  dF| j                  dF   j                  f| j                  dF   | j,                  t        j                  f       | j
                  rd<| j
                  v sd?| j
                  v r|j                  dD       | j
                  rd<| j
                  v rD|j                  d<| j                  d<   j                  f| j                  d<   | j.                  f       | j
                  rd?| j
                  v rD|j                  d?| j                  d?   j                  f| j                  d?   | j0                  f       | j
                  r*d0| j
                  v sd7| j
                  v sd3| j
                  v r|j                  dD       | j
                  rd0| j
                  v rD|j                  d0| j                  d0   j                  f| j                  d0   | j2                  f       | j
                  rd7| j
                  v rD|j                  d7| j                  d7   j                  f| j                  d7   | j4                  f       | j
                  rd3| j
                  v rD|j                  d3| j                  d3   j                  f| j                  d3   | j6                  f       | j9                  |      S )GzToolbar datar   zpoint-createzDigitize new point (Ctrl+P)zLeft: new point)imglabelr   r   zline-createzDigitize new line (Ctrl+L)z>Left: new point; Ctrl+Left: undo last point; Right: close liner   zboundary-createzDigitize new boundary (Ctrl+B)r    zcentroid-createzDigitize new centroid (Ctrl+C)r!   zpolygon-createz6Digitize new area (boundary without category) (Ctrl+A)r"   zvertex-createz+Add new vertex to line or boundary (Ctrl+V)z1Left: Select; Ctrl+Left: Unselect; Right: Confirmr#   zline-deletezHDelete selected point(s), line(s), boundary(ies) or centroid(s) (Ctrl+D)r$   zpolygon-deletez Delete selected area(s) (Ctrl+F)r%   zattributes-displayz"Display/update attributes (Ctrl+K)zLeft: Selectr&   zcats-displayz"Display/update categories (Ctrl+J)r'   z	line-editz$Edit selected line/boundary (Ctrl+E)r(   z	line-movezFMove selected point(s), line(s), boundary(ies) or centroid(s) (Ctrl+M)r)   zvertex-movezMove selected vertex (Ctrl+G)r*   zvertex-deletezRemove selected vertex (Ctrl+X)settingszSettings (Ctrl+T))rt   quitzQuit (Ctrl+Q)zQuit digitizer and save changes)rt   r   helpzShow manual (Ctrl+H)zShow Vector Digitizer manualr7   z,Additional tools (copy, flip, connect, etc.)rQ   zUndo (Ctrl+Z)zUndo previous changerR   zRedo (Ctrl+Y)zRedo previous change)r+   rQ   rR   selectorNzadditionalSelf.Toolsr+   )r   r`   r   SetLabeliconsr7   appendrt   
OnAddPointrJ   
ITEM_CHECK	OnAddLineOnAddAreaToolOnDeleteLineOnDeleteAreaOnMoveVertexOnAddVertexOnRemoveVertex
OnEditLine
OnMoveLineOnDisplayCatsOnDisplayAttrOnAdditionalToolMenuOnUndoOnRedo
OnSettingsOnHelpOnExit_getToolbarData)rk   datas     rp   rU   zVDigitToolbar._toolbarData   s	   k
"56()k
 x!45Tk
 8%89Tk
( 8%89())k
2 x$PQ()3k
< #EFJK=k
F (!^ JKGk
T ($:;JKUk
^ 8(<=~&_k
h 8"<=~&ik
r >?Tsk
@ \ JKAk
N (!78JKOk
X H#9:JKYk
b 	*-66+, 7 ck
h If%..(89 / ik
p If%.../56 / qk
x  (IJJK 
 (-.
 (-.Mk

Z zzZ4::5KK zzZ4::5KKJ!7!=!=>JJz*OOMM	 zzY$**4KK

9 5 ; ;<JJy)NNMM	 zzY$**4KK

9 5 ; ;<JJy)&&MM	 zz\TZZ7KK!4::l#;#A#ABJJ|,%%MM	 zz\TZZ7KK!4::l#;#A#ABJJ|,%%MM	 zz\TZZ7KK!4::l#;#A#ABJJ|,%%MM	 zz[DJJ6KK $**["9"?"?@JJ{+$$MM	 zz^tzz9KK#TZZ%?%E%EFJJ~.''MM	 zzZ4::5KKJ!7!=!=>JJz*OOMM	 zzZ4::5KKJ!7!=!=>JJz*OOMM	 zz]djj8KK"DJJ}$=$C$CDJJ}-&&MM	 zz]djj8KK"DJJ}$=$C$CDJJ}-&&MM	 zz3tzzAKK *

#45;; JJ01--MM
 zzVtzz1Vtzz5IKK zzVtzz1KKTZZ/556JJv&KK zzVtzz1KKTZZ/556JJv&KK 

TZZ'##KK zzZ4::5KKJ!7!=!=>JJz*OO zzVtzz1KKTZZ/556JJv&KK zzVtzz1KKTZZ/556JJv&KK ##D))rq   c                 \    | j                   s t        t        d      | j                         yy)zShow error message dialog if no vector map is open for editing

        :return: True if no vector map is open for editing else None
        zVNo vector map is open for editing. Please select firsta vector map from the combo box.TN)r:   r   r`   rl   rk   s    rp   _noVMapOpenForEditingErrDlgz)VDigitToolbar._noVMapOpenForEditingErrDlg  s3    
 zz7   rq   c                 t   t        j                  dd|r|j                         n|        | j                  r+|r)| j                  j	                  |j                                | j
                  j                  d       d| j
                  j                  d<   d| j
                  j                  d<   | j                  j                  dd	      }| j                  d   |k7  s|d	k(  rg | j
                  _
        | j
                  j                  | j
                  j                  
       | j                  rYt        | j
                  j                  j                         j!                               dkD  r| j
                  j#                  d       | j                  d   d	k(  rddd	d| _        |r|j%                          yy)zETool selected -> untoggles previusly selected tool in
        toolbar   zVDigitToolbar.OnTool(): id = crosspointboxpointeruser   r   )pdcr   Nr   r   )r   r^   GetIdr\   ToolChangedr4   SetNamedCursormouserW   get
polycoords
ClearLinespdcTmpr:   len
GetDisplayGetSelectedOnMiddleDownSkip)rk   eventaIds      rp   rG   zVDigitToolbar.OnTool  sW    			+UEKKM+NO	
 ))%++-8 	%%g.&-U#&/U#kkoodB' ;;t#sby(*DNN%NN%%$..*?*?%@zzc$.."6"6"A"A"C"O"O"QRUVV++D1 ;;t"#%r<DKJJL rq   c                     t        j                  dd       dd| j                  d| _        d| j                  j
                  d<   y)z!Add point to the vector map Laier   zVDigitToolbar.OnAddPoint()r   r   r   r   N)r   r^   r   rW   r4   r   rk   r   s     rp   r}   zVDigitToolbar.OnAddPoint  s7    		!12('O&-U#rq   c                     t        j                  dd       dd| j                  d| _        d| j                  j
                  d<   y)z Add line to the vector map layerr   zVDigitToolbar.OnAddLine()r   liner   r   N)r   r^   r   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnAddLine  s7    		!01(&M&,U#rq   c                     t        j                  dd       | j                          | j                  d   dk7  s| j                  d   dk7  rg | j                  _        | j                  | j                  | j                  d   j                                | j                  | j                  | j                  d   j                                dd| j                  d| _        d	| j                  j                  d
<   d| _        y)z$Add boundary to the vector map layerr   zVDigitToolbar.OnAddBoundary()r   r   r   boundaryr   r   r   r   N)r   r^   _toggleAreaIfNeededrW   r4   r   SetToolNormalBitmapr!   r{   	GetBitmapSetToolShortHelpGetLabelr   rX   r   s     rp   OnAddBoundaryzVDigitToolbar.OnAddBoundary  s    		!45  " ;;v)+t{{6/Bj/P(*DNN% 	  tzz-/H/R/R/TUdllDJJ},E,N,N,PQ  )*DLLQ&,U#&0#rq   c                    t        j                  dd       | j                          | j                  | j                  | j
                  d   j                                | j                  | j                  | j
                  d   j                                dd| j                  d| _	        d| j                  j                  d<   d| _        y	)
z$Add centroid to the vector map layerr   zVDigitToolbar.OnAddCentroid()r    r   centroidr   r   r   Nr   r^   r   r   r!   r{   r   r   r   rW   r4   r   rX   r   s     rp   OnAddCentroidzVDigitToolbar.OnAddCentroid  s    		!45  " 	  tzz-/H/R/R/TUdllDJJ},E,N,N,PQ  )*DLLQ&-U#&0#rq   c                    t        j                  dd       | j                          | j                  | j                  | j
                  d   j                                | j                  | j                  | j
                  d   j                                dd| j                  d| _	        d| j                  j                  d<   d| _        y	)
z Add area to the vector map layerr   zVDigitToolbar.OnAddArea()r!   r   arear   r   r   Nr   r   s     rp   	OnAddAreazVDigitToolbar.OnAddArea  s     			!01  " 	  tzz)/D/N/N/PQdllDJJy,A,J,J,LM  )&M&,U#&,#rq   c                     | j                  | j                        sB| j                  | j                  d       | j                  j	                  | j                         yy)zGIn some cases, the area tool is not toggled, we have to do it manually.TN)GetToolStater!   
ToggleToolr\   r   r   s    rp   r   z!VDigitToolbar._toggleAreaIfNeeded  sC      .OODLL$/))$,,7 /rq   c                    t        j                  dd       | j                  r| j                  dk(  r| j                  |       y| j                  dk(  r| j	                  |       y| j                  dk(  r| j                  |       yy)zArea tool activated.r   zVDigitToolbar.OnAddAreaTool()r   r   r   N)r   r^   rX   r   r   r   r   s     rp   r   zVDigitToolbar.OnAddAreaTool"  sr    		!45 ++t/J/Jf/TNN5!((J6u%((J6u% 7rq   c                    g }| j                   rd| j                   v r*|j                  | j                  d   | j                  f       | j                  s| j                   rd| j                   v r*|j                  | j                  d   | j
                  f       | j                  s| j                   rd| j                   v r*|j                  | j                  d   | j                  f       | j                  |       y)z/Digitize area menu (add area/boundary/centroid)r!   r   r    N)r7   r|   r{   r   r<   r   r   _onMenu)rk   r   	menuItemss      rp   re   zVDigitToolbar.OnAddAreaMenu0  s    	zzY$**4djj3T^^DEzz$**0Kdjj79K9KLMzz$**0Kdjj79K9KLMYrq   Nc                 0   | j                   r| j                          | j                  r| j                  j                  d       | j                  j                         j                          g | j                  _        | j                  j                          y)zQuit digitization toolN)rM   rE   rS   OnCancelrl   GetMapToolbarSelectDefaultr4   r   r@   emitr   s     rp   r   zVDigitToolbar.OnExit<  so     == ((. 	!!#113$&!!rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zMove line vertexr   zDigittoolbar.OnMoveVertex():r)   r   r   r   r   N)r   r^   r)   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnMoveVertexL  s5    		!34+4??C&-U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zAdd line vertexr   zDigittoolbar.OnAddVertex():r"   r   r   r   N)r   r^   r"   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnAddVertexR  s5    		!23*$..A&-U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zRemove line vertexr   zDigittoolbar.OnRemoveVertex():r*   r   r   r   N)r   r^   r*   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnRemoveVertexX  s7    		!56-T5F5FG&-U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)z	Edit liner   zDigittoolbar.OnEditLine():r'   r   r   r   N)r   r^   r'   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnEditLine^  s5    		!12)?&,U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)z	Move liner   zDigittoolbar.OnMoveLine():r(   r   r   N)r   r^   r(   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnMoveLined  s5    		!12)?&+U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zDelete liner   zDigittoolbar.OnDeleteLine():r#   r   r   N)r   r^   r#   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnDeleteLinej  5    		!34+4??C&+U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zDelete Arear   zDigittoolbar.OnDeleteArea():r$   r   r   N)r   r^   r$   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnDeleteAreap  r   rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zDisplay/update categoriesr   zDigittoolbar.OnDisplayCats():r&   r   r   r   N)r   r^   r&   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnDisplayCatsv  s7    		!45,D4D4DE&-U#rq   c                     t        j                  dd       d| j                  d| _        d| j                  j
                  d<   y)zDisplay/update attributesr   zDigittoolbar.OnDisplayAttr():displayAttrsr   r   r   N)r   r^   r%   rW   r4   r   r   s     rp   r   zVDigitToolbar.OnDisplayAttr|  s7    		!45-T5E5EF&-U#rq   c                 v    | j                   r| j                   j                          |r|j                          yy)Undo previous changesNr:   Undor   r   s     rp   r   zVDigitToolbar.OnUndo  s(    ::JJOOJJL rq   c                 z    | j                   r| j                   j                  d       |r|j                          yy)r   r0   )levelNr   r   s     rp   r   zVDigitToolbar.OnRedo  s,    ::JJOO!O$JJL rq   c                 <    | j                  | j                  |       y)zKEnable 'Undo' in toolbar

        :param enable: False for disable
        N)_enableToolrQ   rk   enables     rp   
EnableUndozVDigitToolbar.EnableUndo      
 	F+rq   c                 <    | j                  | j                  |       y)zKEnable 'Redo' in toolbar

        :param enable: False for disable
        N)r   rR   r   s     rp   
EnableRedozVDigitToolbar.EnableRedo  r   rq   c                     | j                  |      sy |r'| j                  |      du r| j                  |d       y y | j                  |      du r| j                  |d       y y )NFT)FindByIdGetToolEnabledri   )rk   r/   r   s      rp   r   zVDigitToolbar._enableTool  sb    }}T"""4(E1d+ 2 ""4(D0e, 1rq   c                 :    | j                   j                  |d      S )zGet current action infor   )rW   r   )rk   r   s     rp   	GetActionzVDigitToolbar.GetAction  s    {{tR((rq   c                    | j                   >	 | j                  | j                  | j                        x| _         | j                  _         | j
                  sAt        | j                  | j                        | _        | j
                  j                          yy# t        $ r dx| _         | j                  _         Y qw xY w)zShow settings dialogNrm   	mapwindow)rl   rm   )	r:   r8   r;   r4   
SystemExitrS   r   rl   rh   r   s     rp   r   zVDigitToolbar.OnSettings  s    ::948OO<<4>> 5D 5 
T^^1 """6{{4<<#D $$&	 #  9488
T^^19s   =B !B=<B=c                 :    | j                   j                  d       y)z'Show digitizer help page in web browserzwxGUI.vdigitN)r;   Helpr   s     rp   r   zVDigitToolbar.OnHelp  s    .)rq   c                    t        j                         }t               }t        d      t         j                  | j
                  dft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d	      t         j                  | j                  d
ft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d      t         j                  | j                  dft        d      t         j                  | j                   dffD ]  \  }}}}t        j"                  |t         j$                  ||      }|j'                  |       | j(                  j+                  t         j,                  ||       | j.                  d   |k(  s~|j1                  d        | j(                  j3                  |       |j5                          | j.                  d   dk(  r| j7                  | j8                  d       yy)zMenu for additional toolsz/Break selected lines/boundaries at intersection	breakLine!Connect selected lines/boundariesconnectLineCopy categoriescopyCatsz*Copy features from (background) vector mapcopyLineCopy attributes	copyAttrszFeature type conversiontypeConvFlip selected lines/boundariesflipLineMerge selected lines/boundaries	mergeLinez.Snap selected lines/boundaries (only to nodes)snapLinezSplit line/boundary	splitLinezQuery features	queryLinezZ bulk-labeling of 3D lines	zbulkLine)
parentMenur   textkindr   Tr   FN)rJ   GetMousePositionr
   r`   r~   OnBreak	OnConnect
OnCopyCatsOnCopyOnCopyAttrbOnTypeConversionOnFlipOnMergeOnSnapOnSplitLineOnQueryOnZBulkMenuItemID_ANY
AppendItemr4   rI   EVT_MENUrW   Check	PopupMenuDestroyr   r+   )	rk   r   r   toolMenurt   itypehandlerr   items	            rp   r   z"VDigitToolbar.OnAdditionalToolMenu  sY   ##%6 CD	 56	  !2==$//:N>?	  !2==$2B2BKP+,%%	 23	 34	 BC	 $%r}}d6F6FT "--{K/0	_5,
 =	!'E5'4n ;;#		ED %NNWd;{{6"d*

4 {=	!B 	  *;;v*,OOD00%8 -rq   c                    | j                         ryt        | j                  t        d      | j                  j                               }|j                         t        j                  k7  r|j                          y|j                  d      }|j                          t        j                  dddd	
      }|r7| j                  j                          | j                  j!                  |d       t        j"                  dddt%        |      d	       | j                  j'                  |       | j                  j!                  |       | j(                  d   dk(  rJ| j+                  | j,                  d       | j+                  | j.                  d       | j1                  |       yt3        j4                  dd       d| j.                  d| _        d| j6                  j8                  d<   y)z3Copy selected features from (background) vector mapNzSelect background vector map)titlern   T)fullvdigitbgmapvalueinternalr-   keysubkeysettings_typemapNameunsetr-   r&  r'  r#  r(  )r*  r   r   Fr   zDigittoolbar.OnCopy():r   r   )r   r   rl   r`   r;   rB   	ShowModalrJ   ID_OKr  GetNamer   Getr:   CloseBackgroundMapr?   r   SetstrOpenBackgroundMaprW   r   r   r+   r}   r   r^   r4   r   )rk   r   dlgr*  bgMaps        rp   r
  zVDigitToolbar.OnCopy  s   ++- KK23ll//1

 ==?bhh&KKM++4+(   z
 JJ))+""5"= 	g,$	
 	

$$W-w/;;v*,OODMM40OOD00%8OOE"		!-.)1E1EF&+U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d
<   y)z
Split liner   r   TFNr   zDigittoolbar.OnSplitLine():r   r   r   	rW   r   r   r+   r}   r   r^   r4   r   r   s     rp   r  zVDigitToolbar.OnSplitLine>  s}    ;;v+-OODMM40OOD00%8OOE"		!23*$2F2FG&-U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d
<   y)r   r   r   TFNr   zDigittoolbar.OnCopyCats():r   r   r   
rW   r   r   r   r}   r   r^   r+   r4   r   r   s     rp   r	  zVDigitToolbar.OnCopyCatsJ  s{    ;;v*,OODMM40OODMM51OOE"		!12)1E1EF&-U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d
<   y)r   r   r   TFNr   zDigittoolbar.OnCopyAttrb():r   r   r   r:  r   s     rp   r  zVDigitToolbar.OnCopyAttrbV  s{    ;;v+-OODMM40OODMM51OOE"		!23*$2F2FG&-U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d	<   y)
r   r   r   TFNr   zDigittoolbar.OnFlip():r   r   r8  r   s     rp   r  zVDigitToolbar.OnFlipb  }    ;;v*,OODMM40OOD00%8OOE"		!-.)1E1EF&+U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d	<   y)
r   r   r   TFNr   zDigittoolbar.OnMerge():r   r   r8  r   s     rp   r  zVDigitToolbar.OnMergen  }    ;;v+-OODMM40OOD00%8OOE"		!./*$2F2FG&+U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d	<   y)
zBreak selected lines/boundariesr   r   TFNr   zDigittoolbar.OnBreak():r   r   r8  r   s     rp   r  zVDigitToolbar.OnBreakz  r?  rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d	<   y)
zSnap selected featuresr   r   TFNr   zDigittoolbar.OnSnap():r   r   r8  r   s     rp   r  zVDigitToolbar.OnSnap  r=  rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d	<   y)
r   r   r   TFNr   zDigittoolbar.OnConnect():r   r   r8  r   s     rp   r  zVDigitToolbar.OnConnect  s}    ;;v-/OODMM40OOD00%8OOE"		!01,D4H4HI&+U#rq   c           	      t   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  ddt        j                  dd	d
      z         d| j                  d| _         d| j                  j                  d<   y)zQuery selected lines/boundariesr   r  TFNr   zDigittoolbar.OnQuery(): %sr!  query	selectionr-   r&  r'  r   r   )rW   r   r   r+   r}   r   r^   r   r0  r4   r   r   s     rp   r  zVDigitToolbar.OnQuery  s    ;;v+-OODMM40OOD00%8OOE"		(X7;OP	

  +$2F2FG&+U#rq   c                    | j                         ry| j                  j                         s!t        | j                  t        d             y| j                  d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j                  |       yt        j                  dd	       d| j                  d
| _        d| j                  j                  d<   y)z)Z bulk-labeling selected lines/boundariesNz)Vector map is not 3D. Operation canceled.rl   messager   r  TFr   zDigittoolbar.OnZBulk():r   r   r   )r   r:   
IsVector3Dr   rl   r`   rW   r   r   r+   r}   r   r^   r4   r   r   s     rp   r  zVDigitToolbar.OnZBulk  s    ++-zz$$&{{EF ;;v+-OODMM40OOD00%8OOE"		!./*$2F2FG&,U#rq   c                 B   | j                   d   dk(  rJ| j                  | j                  d       | j                  | j                  d       | j	                  |       yt        j                  dd       d| j                  d| _         d	| j                  j                  d	<   y)
z{Feature type conversion

        Supported conversions:
         - point <-> centroid
         - line <-> boundary
        r   r   TFNr   z Digittoolbar.OnTypeConversion():r   r   r8  r   s     rp   r  zVDigitToolbar.OnTypeConversion  s     ;;v*,OODMM40OOD00%8OOE"		!78)1E1EF&+U#rq   c                    |j                         dk(  r^| j                  r | j                  j                  d      d   }nd}t        | j                  || j
                  dddid	fd
      }|r|j                         r|j                         dz   t        j                         d   z   }| j
                  j                         j                  d|d
dd|z  g       | j                  d
      }|j                  |      }|j                  d      r| j                  j                  d       |j                          nJ| j                   j#                  t%        d             |r|j                          y|j                         dz
  }| j&                  |   | j                  k(  ry| j                  r| j)                          | j+                  | j&                  |          |j-                          y)zSelect vector map layer for editing

        If there is a vector map layer already edited, this action is
        firstly terminated. The map layer is closed. After this the
        selected map layer activated for editing.
        r   F)fullyQualifiednameNzv.editr/   createmapT)	exceptMaprm   cmd
disableAdd@MAPSETvectorzd.vectzmap=%s)ltyperN  checkedrR  r   table)rE  Select vector mapr0   )GetSelectionrM   r/  r   rl   r;   grassgisenvGetLayerListAddLayerrY   index	IsCheckedrA   r   r  rP   SetValuer`   rN   rE   rD   r   )rk   r   openVectorMapr5  r*  
vectLayersrE  s          rp   OnSelectMapzVDigitToolbar.OnSelectMap  s    1$}} $ 5 5U 5 KF S $!'|| 2E:C s{{}++-#-x0HH))+44"  !8g#56	 5  "444E
&,,W5	 ==) LL%%%8

##A&9$:;KKM**,q0I ;;y!T]]2== 	$++i01

rq   c                    |j                         st        j                  |j                               d   dk7  rt	        j
                  | j                  t        d      |j                         z  t        d      t        j                  t        j                  z  t        j                  z  t        j                  z        }|j                         t        j                  k(  rt        d|j                                ny| j                  j!                  |d	       | j                  j#                          |rzt%        j&                  d
ddd      |j                         k(  rt%        j(                  d
dddd       | j*                  j-                  t        d      |j                         z  d       t/               | j                  _        | j3                  | j4                  | j                        x| _        | j                  _        || _        | j6                  j;                  |j                         |j                               d| _        | j=                          y	| j6                  j?                         | _         | jC                          | jE                  d	       | jG                  d	       | j@                  dk(  r\| jH                  | jJ                  | jL                  | jN                  | jP                  | jR                  fD ]  }| jU                  |d	        n| j@                  dk(  r0| jV                  | jJ                  fD ]  }| jU                  |d	        n| j@                  dk(  r0| jV                  | jH                  fD ]  }| jU                  |d	        nr| j@                  rftY        | t        d      | j@                  |j                         dz         | j6                  j[                          d| _        | j=                          y	| j\                  r)| j\                  j_                  |j                                d| j*                  j`                  v r;| j*                  j`                  d   j\                  j_                  t        d             tc        jd                  dd|j                         z         | j                  jf                  d   d k(  r| j                  ji                  d!       | j                  jj                  s| j                  jm                  d"#       |jo                         }|d$k  r8tq        |d%z        }| j6                  js                         ju                  |&       | j4                  jw                         }|r|jy                  d'| j8                        }nd}| jz                  j}                  |j                         | j6                  |(       y"))zaStart editing selected vector map layer.

        :param mapLayer: MapLayer to be edited
        r   r   zTopology for vector map <%s> is not available. Topology is required by digitizer.
Do you want to rebuild topology (takes some time) and open the vector map for editing?zDigitizer errorrl   rI  captionstylezv.build)rP  NFr!  r"  r#  r$  r%  r   r,  z3Please wait, opening vector map <%s> for editing...r   r   )tmpr   
linestringpolygonzJUnsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>.)r   layerrH  rP  zVector digitizer   z&VDigitToolbar.StartEditing(): layer=%sr   r   r   T)renderg      ?   )alphamaplayer)vectMapr:   	layerItem)?IsHiddenr\  vector_infor/  rJ   MessageDialogr4   r`   YES_NOYES_DEFAULTICON_QUESTIONCENTREr-  ID_YESr   r6   ChangeLayerActiveEraseMapr   r0  r2  rl   SetStatusTextr	   	pdcVectorr8   r;   r:   rM   OpenMaprE   GetFeatureTyper<   	EnableAllr   r   r   r!   r)   r"   r*   r'   ri   r   r   CloseMaprP   rb  toolbarsr   r^   r   r   resize	UpdateMap
GetOpacityintr   UpdateSettingsrB   FindItemByDatar=   r   )rk   rM   r5  r/   opacityrq  rn   r  s           rp   rD   zVDigitToolbar.StartEditing  s    !!#!!("2"2"45g>!C""~~# ""$% +,ii"..023C3CCbiiOC }}"))+9(*:*:*<= 	""8U3 	!   """,	 ##%&   """, KK%%JK""$% $,: ,0OO<<4>> -< -
 	

T^^) ! ::h..0h6G6G6IJR DM ZZ..0
:: !! - e,- ZZ<'5 -e,-ZZ9$5 -e,-ZZ-  ::0@0@0BC	D JJ! DM ::JJ 0 0 23DKK(((KK  '--66q9K7LM 			!=@P@P@RRS >>&)3NN))'2~~$$NN$$D$1 %%'S=#&EJJ!!#222? LL--/	++JFDD  $$&djjD 	! 	
 rq   c                    d}| j                   r$| j                   j                  t        d             | j                  rt	        j
                  dd| j                  j                         z         t        j                  ddd      d	u r| j                  j                         d
kD  rt        j                  | j                  t        d      | j                  j                         z  t        d      t        j                  t        j                  z  t        j                   z        }|j#                         t        j$                  k(  r| j                  j'                  d       |j)                          | j                  j+                  t        d      | j                  j                         z  d       | j                  j-                          t        j                  dddd      }|r7| j                  j/                          | j0                  j3                  |d       | j4                  j7                         j                  d       | j4                  j9                  t        d      | j                  j                         z  t:        j<                         | j4                  j?                         }|rU|jA                  d| j                        }|r7|jC                  |      r&| jD                  jG                  | j                  d       | jH                  jK                  d       d| jH                  _&        dD ]\  }| j                  jN                  |   s| j                  jN                  |   jQ                          d| j                  jN                  |<   ^ d| _	        d| jH                  _	        | jR                  j3                  |       d| _        d| jH                  _*        y)zwStop editing of selected vector map layer.

        :return: True on success
        :return: False on failure
        NrZ  rn  z%VDigitToolbar.StopEditing(): layer=%sr!  
saveOnExitenabledrF  Fr   z/Do you want to save changes in vector map <%s>?zSave changes?rg  r   zBPlease wait, closing and rebuilding topology of vector map <%s>...r"  r#  r$  r%  Tr)  z0Editing of vector map <%s> successfully finished)notificationrr  default)
attributescategory)rt  )+rP   rb  r`   rM   r   r^   r/  r   r0  r:   GetUndoLevelrJ   rw  rl   rx  ry  rz  r-  ID_NOr   r  r  r  r1  r?   r   r;   GetProgressWriteCmdLogr   	HIGHLIGHTrB   r  IsItemCheckedr6   r}  r4   r   r  dialogsCloser>   	redrawAll)rk   r  r5  r6  rn   dialogs         rp   rE   zVDigitToolbar.StopEditing  s    ::JJ"5 67 ==II:T]]=R=R=TT   x\)T ::**,r1**#{{ !"V W--//1!2 !/ 2 ii"..82;K;KKC }}"((2

*KKMKK%%)
 --'')*  JJ! !$$GG:E 

--/!!&&uD&ALL$$&//2LL$$DE--'')*)33 %  113I //
DMMJI33D9HH..t}}dC 	%%i0#'  1 	3F{{""6*##F+113.2##F+	3
 
#  4 0#' rq   c                    t        j                  dd|z         d}| j                  r| j                  j                         }g }| j                  j                  dt        j                         d         | _        | j                  D ]0  }|j                  |vs|j                  |j                                2 |r"| j                  st        d      }n|}| j                  s| j                  rd| j                  v rt        j                  | t        j                   |t        d	      g|z   d
t        j"                        | _        | j'                  d| j$                        | _        | j(                  j+                  t        j,                  | j.                  | j                         n(| j$                  j1                  t        d	      g|z          | j3                          |S )zUpdate list of available vector map layers.
        This list consists only editable layers (in the current mapset)

        :param updateTool: True to update also toolbar
        :type updateTool: bool
        rn  z1VDigitToolbar.UpdateListOfLayers(): updateTool=%dNrV  rU  )rW  mapsetrZ  rx   zNew vector map)P   r   )r   r#  choicessizeri  r   )r   r^   rM   r/  r6   GetListOfLayersr\  r]  rN   rN  r|   r`   rO   r7   rJ   ComboBoxr  CB_READONLYrP   rb   rl   rI   EVT_COMBOBOXre  SetItemsrf   )rk   r   layerNameSelectedlayerNameListrm  r#  s         rp   rY   z VDigitToolbar.UpdateListOfLayers  s    			!H:UV == $ 5 5 7 hh..5<<>(#; / 
 [[ 	6Ezz.$$U]]_5	6 ==-.)<<zzZ4::%=!#99#./! (!( & nn
"DJ $(#5#5a#DDLKK$$R__d6F6FU

##*+ $$ LLNrq   c                     | j                   S )z3Get selected layer for editing -- MapLayer instance)rM   r   s    rp   GetLayerzVDigitToolbar.GetLayer2  s    }}rq   c                 J    |j                         r| j                  d       yy)zShow frame eventTr   N)IsShownrY   r   s     rp   rL   zVDigitToolbar.OnShow6  s!    ==?##t#4 rq   ry   )T)r   )F)5__name__
__module____qualname____doc__r9   rU   r   rG   r}   r   r   r   r   r   r   re   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r	  r  r  r  r  r  r  r  r  r  re  rD   rE   rY   r  rL    rq   rp   r   r   !   s   "RT i V]*~@.-1&1- 8&
 " ...-,,,..,,	-)' *J9X-,^
.
.
.
,
,
,
,
,, -*,";zPdTl7r5rq   r   )r  rJ   r\  r   grass.pydispatch.signalr   gui_core.toolbarsr   r   gui_core.dialogsr   r   gui_core.wrapr	   r
   vdigit.preferencesr   
core.debugr   core.settingsr   	core.gcmdr   r   
icons.iconr   core.gifacer   r   r  rq   rp   <module>r     s>     
 ! * 4 : ( 3  & (  $Y5K Y5rq   