
    ը	fq                         d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZ ddlm Z m!Z!  G d de      Z"y)aW  
@package vdigit.mapwindow

@brief Map display canvas for wxGUI vector digitizer

Classes:
 - mapwindow::VDigitWindow

(C) 2011-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 Martin Landa <landa.martin gmail.com>
    N)Signal)DisplayAttributesDialog)
RunCommandGMessageGError)Debug)BufferedMapWindow)UserSettings)ListOfCatsToRange)ConvertValue)
QUERYLAYER)VDigitCategoryDialogVDigitZBulkDialogVDigitDuplicatesDialog)gselect)PseudoDCNewIdc                       e Zd ZdZdej
                  dej                  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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)!VDigitWindowz0A Buffered window extended for vector digitizer.Nc	           	         t        j                  | f|||||d|	 || _        || _        t	               | _        | j                  j                  d      | _        d | _	        d| _
        t        d      | _        t        d      | _        t        d      | _        | j                  t         j"                  | j$                         | j&                  j)                  | j*                         y )N)parentgifaceMap
propertiesstylevdigitFzVDigitWindow.digitizingInfo)r	   __init__lmgrtreer   	pdcVectorr   
GetToolbartoolbardigit_digitizingInfor   digitizingInfodigitizingInfoAvailabledigitizingInfoUnavailableBindwxEVT_KEY_DOWN	OnKeyDownmouseMovingconnect_mouseMovingToDigitizingInfo)
selfr   r   r   r   r   idr   r   kwargss
             1/usr/lib/grass83/gui/wxpython/vdigit/mapwindow.pyr   zVDigitWindow.__init__+   s     	""	
!	
 	
 		!{{--h7
$ %%BC'-.K'L$ *00M)N&		"//4>>2  !B!BC    c                 P    | j                   r| j                   j                         S y )N)r#   
GetDisplayr/   s    r2   r5   zVDigitWindow.GetDisplayV   s    ::::((**r3   c                     | j                   S )zGet digit class)r#   r6   s    r2   GetDigitzVDigitWindow.GetDigit[   s    zzr3   c                     || _         y)zSet up related toolbarN)r"   )r/   r"   s     r2   
SetToolbarzVDigitWindow.SetToolbar_   s	    r3   c                    ||}}t        t        j                  ddd            }| j                  j	                         dk7  s5| j                  j	                  d      dvst        | j                        dk(  r.| j                  r!d	| _        | j                  j                          y | j                  s!d
| _        | j                  j                          | j                  | j                  d   ||fd	      d   }|}t        dt        | j                              D ]9  }|| j                  | j                  |dz
     | j                  |   d	      d   z  }; d||||fz  }	| j                  j                  |	       y )N
projectionformat	precisiongroupkeysubkeyaddLinetype)lineboundaryr   FT)screen   zseg: %.*f; tot: %.*f)text)intr
   Getr"   	GetActionlen
polycoordsr$   r'   emitr&   Distanceranger%   )
r/   xyenr>   distance_segdistance_totidxrJ   s
             r2   r.   z)VDigitWindow._mouseMovingToDigitizingInfoc   st   !1<XkR
	 LL""$	1||%%f-5II4??#q( ##',$..335###'D ((--/ }}T__R%81a&}OPQR#C01 	CDMMa($//#*>u *  L	 &	)
 
 	  d +r3   c                 J   |j                         }|j                         }i ddt        d      | j                  j                  dddt        d      | j                  j
                  dddt        d      | j                  j                  dd	d
t        d      | j                  j                  ddd
t        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                  dddt        d      | j                  j                   dddt        d      | j                  j"                  dd dt        d!      | j                  j$                  dd"dt        d#      | j                  j&                  dd$dt        d%      | j                  j(                  ddt        d&      | j                  j*                  ddt        d'      | j                  j,                  dd(}i }|D ]  }| j                  j.                  r|| j                  j.                  vr2d)}||   d*   r@t1        | j                  |      r*t3        j4                  t7        | j                  |      +      }|||   d,   d-|||   d.   <    |s>|j9                  |      }|r*| j                  j;                  |d/         } |d,   |       y)y)y))0zKey pressedaddPointTP)evtordtoolrC   LaddAreaAaddBoundaryFBaddCentroidC	addVertexVremoveVertexX
moveVertexG
deleteLineD
deleteAreaFeditLineEmoveLineMdisplayCatsJdisplayAttrKundoZredoYsettingsTHQ)helpquitNr]   )r0   r_   )eventr_   r^   r   )	ShiftDown
GetKeyCoder^   r"   
OnAddPoint	OnAddLine	OnAddAreaOnAddBoundaryOnAddCentroidOnAddVertexOnRemoveVertexOnMoveVertexOnDeleteLineOnDeleteArea
OnEditLine
OnMoveLineOnDisplayCatsOnDisplayAttrOnUndoOnRedo
OnSettingsOnHelpOnExittoolshasattrr)   CommandEventgetattrgetOnTool)r/   r   shiftkcdefault_toolsactual_toolsr_   s          r2   r+   zVDigitWindow.OnKeyDown   s   !`
3x//`
 3x..`
 3x..`
  3x22!`
* 3x22+`
4 3x005`
> 3x33?`
H 3x11I`
R 3x11S`
\ 3x11]`
f 3x//g`
p 3x//q`
z 3x22{`
D 3x22E`
N 3x++O`
X 3x++Y`
b 3x//c`
n 3x++ 3x++w`
F ! 
	D||!!d$,,2D2D&DET"5)gdllD.I74<<+FG%d+F38Lt,U34
	 ##B'D++DM:VU#  r3   c                 t   | j                   r| j                   j                         sy | j                  j                         j	                          | j
                  j                          d }| j                  r5	 | j                  j                  d| j                   j                               }| j                  r)| j                  rL|rJ| j                  j                  |      r/d| _        | j                  j                         j                          | j                   j                         dk(  r{t        | d      rnd| j                  v r_| j                  d   D ]?  }| j                   j#                  || j                  d   d   | j                  d   d          A | j                  d= y y y y # t        $ r Y 	w xY w)	NmaplayerTrs   moveInfo	beginDiffr0   r   rI   )r"   GetLayerr#   r5   UpdateRegionr    	RemoveAllr   FindItemByData	TypeErrorIsItemChecked	redrawAllDrawMaprM   r   r   pdcTmpTranslateId)r/   itemr0   s      r2   
_updateMapzVDigitWindow._updateMap  sh   ||4<<#8#8#: 	

,,.
 	  "99yy//
DLL<Q<Q<ST yyTYY4DII4K4KD4Q!DNJJ!!#++- <<!!#z1gdJ6Odmm+--- BKK++DMM+6q94==;UVW;X MM+. , 7P1  s   94F* *	F76F7c                    	 | j                   j                         j                         }| j                   j                  d      dv r| j	                  | j
                  d         \  }}| j                  j                  | j                   j                  d      ||fg      \  }}|dk  ry| j                  d       t        j                  dd	d
      r|d   t        j                  ddd      t        j                  ddd      fii}| j                  | j
                  d   d   | j                  z   | j
                  d   d   | j                  z   f      }t        | |||dd      }	| j                   j                  d      dk(  r-|D ](  }
| j                  |
|	d       | j                  |
|	d       * |	j                         r|	j!                          |	j#                          yy| j                   j                  d      dv rU| j$                  j'                  | j	                  |j)                                      | j+                  | j,                         yy#  Y yxY w)z+Left mouse button pressed - add new featureNrD   )pointcentroidbeginrI   Frenderr   	addRecordenabledr?   r   layervaluecategoryendaddTr   mapcatsposactionignoreErrorr   area	perimeterrE   rF   r   pdc)r"   r   GetNamerM   
Pixel2Cellmouser#   
AddFeature	UpdateMapr
   rL   ClientToScreendialogOffsetr   
_geomAttrbIsFound	ShowModalDestroyrO   appendGetPosition	DrawLinesr   )r/   r   mapLayereastnorthnfeatfidsr   	posWindowaddRecordDlgfids              r2   OnLeftDownAddLinezVDigitWindow.OnLeftDownAddLine"  s?   	||,,.668H <<!!&)-BB//$**W*=>KD%**//&&v.$KE4 qyNN%N( hK	R G$((xWWU(,,&.JwX !//

5)!,t/@/@@

5)!,t/@/@@	  7 !  $  <<))&1Z?# H\6B\;GH  '') **,$$&G SJ \\##F+/KKOO""4??53D3D3F#GHNNt{{N+ Li	s   (I Ic                    | j                   j                         }| j                  r:| j                  j                  d|      }| j                  j	                  |d      }ndx}}|rd|vs||d   vryd}|dk(  r| j
                  j                  |      }|}nE|dk(  r| j
                  j                  |      }|}n"|d	k(  r| j
                  j                  |      }d}|d
kD  rft        t        j                  ddd            }	|d   |   d   }
t        ||d   |   d         }|j                  |	|
|       |j                          yy)zDefine geometry attributesr   r   rA   NgeomAttrrG   lengthr   r   r   r   r   r?   columnunits)r"   r   r   r   GetLayerInfor#   GetLineLengthGetAreaSizeGetAreaPerimeterrK   r
   rL   UnitsConvertValueSetColumnValueOnReset)r/   r   dialogattrbr   r   r   valrD   r   r   s              r2   r   zVDigitWindow._geomAttrb_  sF   <<((*9999++JADYY++Dh+?F  D661U&BT5TH****3/CDf_**((-CDk!**--c2CD7((xWWUVEJ'.x8F#Cvj/A%/H/QRC!!%5NN r3   c                    | j                   j                  d   j                         }|j                         }| j                  r:| j                  j                  d|      }| j                  j                  |d      }ndx}}|rd|vryt        j                  |      }t        j                  d      }|D ]O  }t        j                  | j                  j                  |            D ]  \  }	}
|j                  |	      }t        j                  |d         D ]  \  }}d}|d	k(  r| j                  j!                  |      }|}nE|d
k(  r| j                  j#                  |      }|}n"|dk(  r| j                  j%                  |      }d	}|dk  rvt'        ||d         }|
D ]-  }|j)                  d||d   ||j+                  |	      |fz         /   |j,                  j/                          t1        ddd|j2                         R y)zgUpdate geometry attributes of currently selected features

        :param fid: list feature id
        r   r   r   Nr   w)moderG   r   r   r   r   r   z%UPDATE %s SET %s = %f WHERE %s = %d;
r   z
db.executeT)r   quietinput)r   toolbarsr   r   r   r   r   r   VectorDBInfotempfileNamedTemporaryFilesix	iteritemsr#   GetLineCatsGetTabler   r   r   r   writeGetKeyColumnfileflushr   name)r/   r   r   
vectorNamer   r   dbInfosqlfiler   r   r   tabler   r   rD   cats                   r2   _geomAttrbUpdatezVDigitWindow._geomAttrbUpdate}  s   
 ;;''1::<%%'
9999++JADYY++Dh+?F  D661%%j1--37  	RC"}}TZZ-C-CC-HI t.#&==
1C#D KE4C("jj66s;$&"jj44S9$+-"jj99#>'Qw +CtG}EC# 
D % $X # & 3 3E : #	
!< LL |DGLLQA 	Rr3   c                 (   | j                   sy| j                  j                         j                         }| j                   j                  d   D ]A  }|j                         }||k(  st        j                  ddd      }|j                  |       C y)zdUpdate open Attribute Table Manager

        .. todo::
            use AddDataRow() instead
        Natmr   r   r   r?   )	r   r"   r   r   dialogsGetVectorNamer
   rL   LoadData)r/   digitVectorr  	atmVectorr   s        r2   
_updateATMzVDigitWindow._updateATM  s     yy ll++-55799$$U+ 	$C))+IK'$((xWWUU#	$r3   c                     | j                   j                  | j                  | j                  d                | j                  d   j                  t                      | j                  | j                         y)zRLeft mouse button pressed - edit linear feature - add new
        vertex.
        r   r0   r   N)rO   r   r   r   r   r   r   r   r/   r   s     r2   OnLeftDownEditLinezVDigitWindow.OnLeftDownEditLine  sS     	ttzz'/BCDd""57+4;;'r3   c                    t               | _        d| j                  d<   t               | j                  d<   | j                  j	                         dv rrt        j                  ddddg	      }t        j                  |d
t        j                        x| _
        | _        | j                  j                  | j                         yy)zfLeft mouse button pressed - vector digitizer move
        feature/vertex, edit linear feature
        Nr   r0   rk   rq   r   symbol	highlightcolorr?      colourwidthr   )dictr   listr"   rM   r
   rL   r)   Pen
SHORT_DASHpenpolypenr   SetPen)r/   r   pcolors      r2   OnLeftDownMoveLinezVDigitWindow.OnLeftDownMoveLine  s     !%g"fd <<!!#'AA!%%Hk75KF ')ffQbmm' DHt| KKt||, Br3   c           	      L
   	 | j                   j                         j                         }| j                  | j                  d         }| j
                  j                         j                  g        i }| j
                  j                         j                  |       | j
                  j                         j                         sdD ]k  }| j                  j                  |   s| j                  j                  |   j                         sE| j                  j                  |   j                          m | j                  dd       yt        j                   ddd	
      r)| j
                  j                         j                         }n,| j
                  j                         j                         d   f}|D ]   }| j
                  j#                  |      ||<   " | j%                  | j                  d   d   | j&                  z   | j                  d   d   | j&                  z   f      }| j                   j)                         dk(  r| j                  j                  d   't+        | ||d      | j                  j                  d<   n)| j                  j                  d   j-                  |       | j                  j                  d   rC| j                  j                  d   j.                  rt1        |j3                               dkD  rQ| j                  j                  d   j                         s| j                  j                  d   j5                          n| j                  j                  d   r| j                  j                  d   j                         rp| j                  j                  d   j                          nG| j                  j                  d   3t7        | |||t9        d            }	|	| j                  j                  d<   n)| j                  j                  d   j-                  |       | j                  j                  d   rt1        |j3                               dkD  rO| j                  j                  d   j                         sv| j                  j                  d   j5                          nN| j                  j                  d   j                         r'| j                  j                  d   j                          | j                  dd       y#  Y yxY w)zeLeft mouse button pressed - vector digitizer display categories
        or attributes action
        Nr   )
attributesr   FTr   renderVectorr   checkForDuplr   r?   r   r   rI   displayAttrsr(  update)r   r   r   r   )r   r   zUpdate categories)r   r  r   r   title)r"   r   r   r   r   r#   r5   SetSelectedSelectLineByPointGetSelectedr   r  IsShownHider   r
   rL   r   r   r   rM   r   UpdateDialog	mapDBInforN   keysShowr   _)
r/   r   r   coordsr   rA   linesrE   r   dlgs
             r2   OnLeftDownDisplayCAz VDigitWindow.OnLeftDownDisplayCA  s   	||,,.668H G!45 	

++B/ 

11&9zz$$&2241 4;;&&s+0C0CC0H0P0P0RKK'',1134 NN%dN;(yQJJ))+779EZZ**,88:1=?E 	6D//5DJ	6 ''

5!!$t'8'88

5!!$t'8'88
	 <<!!#~5{{""<084KXD5##L1
 ##L1>>D>I ##L1KK''5??tyy{#a';;..|<DDF++L9>>@ ++L9 KK//=EEG++L9>>@ {{"":.6*'!/0 36##J/ ##J/<<$<G{{"":.tyy{#a';;..z:BBD++J7<<>{{**:6>>@++J7<<>e$7g	s   (T T#c                 X    t        | d      sg | _        yg | _        d| j                  d<   y)zbLeft mouse button pressed - vector digitizer copy
        categories or attributes action
        copyCatsListboxN)r   r>  copyCatsIdsr   r  s     r2   OnLeftDownCopyCAzVDigitWindow.OnLeftDownCopyCA;  s,     t^, "D!D %DJJur3   c                 :    t        | d      sg | _        d| _        yy)zOLeft mouse button pressed - vector digitizer copy lines
        action
        copyIdsN)r   rC  layerTmpr  s     r2   OnLeftDownCopyLinezVDigitWindow.OnLeftDownCopyLineE  s!     tY'DL DM (r3   c                 J   t        | j                        dkD  r#g | _        | j                  | j                         | j                  j	                  | j                  |j                                      t        | j                        dk(  r=| j                  | j                  d         }| j                  | j                  d         }y| j                  | j                  d         }| j                  | j                  d         }| j                  | j                  ||f       y)zSLeft mouse button pressed - vector digitizer label 3D
        vector lines
        rI   r   rG   r   r   )rO   N)	rN   rO   
ClearLinesr   r   r   r   r   r   )r/   r   r   r   s       r2   OnLeftDownBulkLinezVDigitWindow.OnLeftDownBulkLineM  s     t!# DOOOO,tu/@/@/BCDt1$OODOOB$78E//$**U"34C//$//""56COODJJw$78ENN4;;E3<N@r3   c                 $   | j                   d   dk7  s| j                  sy| j                  j                         }|dk(  r| j                  j                  d      dv s|dk(  r5	 | j                  j	                         }t        j                  dd	|gz         |dk(  rLt        | j                  d
         dkD  r| j                  d
   j	                          | j                  dd       n|dv r| j                  j                         j                  g        |dv rt        | d      r| `nX|dk(  r	 | `| `nM|dk(  rH| `| j$                  r8| j&                  j)                  | j$                         | j                  dd       | `g | _        | j                  d       nG|dk(  rBg | _        | j                  j                         j                  g        | j                  d       d| _        | j                  dd       y#  Y jxY w# t         $ r Y w xY w)zaLeft mouse button pressed with control key - vector
        digitizer undo functionality
        usepointerNrC   rD   r   rq      z0VDigitWindow.OnMiddleDown(): polycoords_poped=%sr0   rI   Fr)  )rm   ro   rs   	splitLinerg   ri   rk   copyCatsflipLine	mergeLinesnapLineconnectLinecopyLine	queryLine	breakLinetypeConvrs   rk   rq   r   rN  rS  Tr   	zbulkLine)r   r"   rM   rO   popr   msgrN   r   r   r#   r5   r/  r   r>  r@  AttributeErrorrC  rD  r   DeleteLayerr   )r/   r   r   removeds       r2   OnLeftDownUndozVDigitWindow.OnLeftDownUndo^  s    ::e	)'')i&&v.2NNz!//--/		F Z4==&'!+d#'')NN%eN< 
 
& JJ!!#//3??GjE M:%)( :%L==HH((7NN$UNCM DONN%N({" DOJJ!!#//3NN%N(e%8yN & s   "4G; -H ;H 	HHc                    	 | j                   j                         j                         }| j                   j                         }|s't        | t	        d             |j                          y|dvrt        j                  t        j                  dddd	g
      dt        j                        | _        t        j                  t        j                  dddd	g
      dt        j                        | _        |dv r)| j                  j!                         j#                  g        |dk(  r| j%                  |       y|dk(  rt'        | d      r| j)                  |       y|dv rt'        | d      s| j+                  |       y|dv r| j-                  |       y|dv r| j/                  |       y|dk(  r| j1                  |       y|dk(  r| j3                  |       yy#  t        | t	        d             |j                          Y yxY w)z9Left mouse button donw - vector digitizer various actions#No vector map selected for editing.r   messageNz>Nothing to do. Choose appropriate tool from digitizer toolbar.)rk   rg   ri   rq   r   r  
newSegmentr  r?   r  r  newLine)rg   ri   
splitLinesrC   rq   r   rW  displayAttrsdisplayCatsrN  	copyAttrsrS  rX  )r"   r   r   r   r8  SkiprM   r)   r   r
   rL   r!  r"  SOLIDr#  r#   r5   r/  r   r   r  r&  r<  rA  rE  rH  )r/   r   r   r   s       r2   _onLeftDownzVDigitWindow._onLeftDown  s   	||,,.668H '')W JJLPPvv#''",9P mmDH 66#''")W9M hhDL @@JJ!!#//3Y""5)z!gdJ&?##E*==g*G
 ##E*45$$U+00!!%(z!##E*{"##E* #u	D!,Q*RSJJLs   (G (Hc                 B   | j                  | j                  d         }| j                  | j                  d         }d}| j                  j                         }|dv rt	        | j
                  j                         j                               dk(  r<t        | j
                  j                         j                  |      d   dk7        }|dk(  r	 | j
                  j                         j                  |      d   }|r| j
                  j                         j                  d	
      }g | _        |D ]U  }|dz  s	| j                  | j                  j                  |      dd       \  }	}
| j                  j                  |	|
f       W | j
                  j                         j!                  d	       ||d   dz  k  ro| j"                  d   j%                          | j                  j%                          n7| j
                  j                         j'                  g        t)        | d      r| `| j+                  d	       n|dv r<t)        | d      sjt        | j
                  j                         j                  |      d   dk7        }|rA| j
                  j                         j                         | _        n| j
                  j                         j'                  g        | j
                  j                         j/                  ||f      }|dk(  r8t        | j
                  j                         j                  |      d   dk7        }|dkD  r{| j
                  j                         j                         | _        nL|dk(  rY| j
                  j3                  ||f      }t	        |      }|dkD  r| j
                  j                         j'                  |       n|dk(  r7t	        | j
                  j                         j                               dkD  rd}n|dk(  r9t        | j
                  j                         j5                  |      d   dk7        }nt|dk(  rd}nd	}| j
                  j                         j/                  ||f|      }|dk(  r8t        | j
                  j                         j                  |      d   dk7        }|dkD  r|dv rt)        | d      r|dk(  r8| j
                  j                         j                  d	
      | j"                  d<   nz| j
                  j                         j                  |      | j"                  d<   t	        | j"                  d         dk(  r)| j
                  j                         j'                  g        t7        j8                  ddd      r| j
                  j                         j;                         }| j+                  d	       |r| j=                  | j                  d   d   | j>                  z   | j                  d   d   | j>                  z   f      }tA        | ||      }|jC                         tD        jF                  k(  rI| j
                  j                         jI                  |jK                                | j+                  d	       |dk7  r| j+                  d	       yy|dv r't)        | d      rt	        | j"                  d         dkD  s| j+                  d	d	       yy# t        $ r d}Y w xY w) zNLeft mouse button released - vector digitizer various
        actions
        r   r   r   r  rE   rG   rq   NF)grassIdr  r0   r   r   rg  r@  rT  bboxrs   ro   r   T)ro  drawSegrs   rk   r   r+  r   r?   rI   )r   datar   r)  )&r   r   r"   rM   rN   r#   r5   r1  rK   r0  GetSelectedVertex
IndexErrorrO   r    GetIdBoundsr   DrawSelectedr   reverser/  r   r   r>  SelectLinesByBoxr@  SelectLinesByQuerySelectAreaByPointr
   rL   GetDuplicatesr   r   r   r   r)   ID_OKUnSelectGetUnSelected)r/   r   pos1pos2	nselectedr   	selVertexidsr0   rU   rV   selectedrp  duplr   r;  s                   r2   OnLeftUpVariouszVDigitWindow.OnLeftUpVarious  s     tzz'23tzz%01	'')//4::((*6689Q>JJ))+==dCFKrQ	 Z')$(JJ$9$9$;$M$Md$STU$V	 !"jj335AA%AP*,"% ?B!Av'+$(NN$>$>r$B1Q$G("1 !% 6 61v >? 

--/<<UC$s2w{2 MM$/779 OO335 

--/;;B?"44 $NN%N0004/JJ))+==dCFKrQ	 (,

(=(=(?(K(K(MD% 

%%'33B7 JJ113DDdD\R	> #

--/AA$GOSUU!I q='+zz'<'<'>'J'J'LD${"zz444,4GHHI1}

%%'33H= #DJJ,A,A,C,O,O,Q(RUV(V	\) #

--/AA$GOSUU!I +"&"' $

 5 5 7 H H"D\7 !I !I !A~$' JJ113EEdKFS!"%	
 q=33j8QZ'*.***?*?*A*M*M % +N +DMM$' +/***?*?*A*S*S+DMM$' 4==./14

--/;;B?
 hN9Uzz,,.<<>e, $ 3 3 JJu-a043D3DD JJu-a043D3DD!I 14YWC}}"((2

--/889J9J9LMe4#e, $ 44D*-d+,q0 e%@ 1y & )$(	)s   ,\ \\c                 :   | j                  | j                  d         }| j                  j                         j	                  |      d   }|sy| j
                  j                         dv rH| j                  d       | j                  | j                  | j                  |d   |d   f      d	
       y	 | j                  j                         j                  |      d   }|ro| j                  j                  |      dd \  }}| j                  j                  |       | j                  d       | j                  | j                  ||fd	
       y| j                  j                         j!                  g        | j                  d       y# t        $ r d}Y w xY w)zcLeft mouse button released - vector digitizer split line,
        add/remove vertex action
        r   r   N)rM  rg   Fr   r   rI      )r   r9  sizer  )r   r   r#   r5   r0  r"   rM   r   	DrawCrossr   
Cell2Pixelrs  rt  r    ru  RemoveIdr/  )r/   r   r  pointOnLiner0   rS   rT   s          r2   OnLeftUpModifyLinezVDigitWindow.OnLeftUpModifyLine  sa    tzz'23jj++-??EgN<<!!#'AANN%N(NNKKAA'GH  ZZ**,>>tDQG ~~11"5a:1''+e,4;;1vAF 

%%'33B7e,  s   3,F FFc                 &   | j                  | j                  d         }| j                  | j                  d         }t        j                  dddd      dk(  rW| j                  j                         j                  ||f      }|d	kD  r| j                  d
       y| j                  d
d
       y| j                  j                  ||f      | _	        t        | j                        d	kD  rt        j                  ddddg      }t        |d	         dz   t        |d         z   dz   t        |d         z   }ddt        j                  dddd      z  dt        | j                        z  dd|z  d|z  ddg}| j                  s(| j                  j                  dt         |      | _        nT| j                  j#                  |       n8| j                  r,| j                  j%                  | j                         d| _        | j                  d d        y)!zRLeft mouse button released - vector digitizer copy feature
        action
        r   r   r   bgmapr   internal)r@   rA   rB   settings_type r   Fr   r)  rn  r  r  r  r?   :rI   r  zd.vectzmap=%szcats=%sz-izcolor=%szfill_color=%sz!type=point,line,boundary,centroidzwidth=2vector)ltyper  commandNT)r   r   r
   rL   r#   r5   rx  r   SelectLinesFromBackgroundMaprC  rN   strr   rD  r   AddLayerr   SetCmdr\  )r/   r   r  r  r  r  colorStrdVectTmps           r2   OnLeftUpCopyLinezVDigitWindow.OnLeftUpCopyLine  s    tzz'23tzz%01 GG:  

--/@@$NI1}e,e%@  ::BBtBUDL4<< 1$$(("+w9O uQx=3.U1X>Ds5QR8}T"&&&#&&0	  1$,, ??)#h.7" }}$(HH$5$5&Z %6 %DM MM((2==HH((7$(DMNN$TN:r3   c                 $   | j                   d   }| j                   d   }| j                  j                         j                  ||f      }|dkD  r/| j	                  d       | j                  | j                         y| j	                  dd       y)zQLeft mouse button released - vector digitizer z-bulk line
        action
        r   rI   Fr   r   r)  N)rO   r#   r5   rx  r   r   r   )r/   r   r  r  r  s        r2   OnLeftUpBulkLinezVDigitWindow.OnLeftUpBulkLine  sx    
 q!q!JJ))+<<dD\J	q=NN%N(NNt{{N+NN%eN<r3   c                     t        | j                  j                         j                               dkD  r| j	                  d       yy)zRLeft mouse button released - vector digitizer connect line
        action
        r   Fr   N)rN   r#   r5   r1  r   r  s     r2   OnLeftUpConnectLinez VDigitWindow.OnLeftUpConnectLine  s:     tzz$$&22459NN%N( :r3   c                    |j                         ryt        | d      r{t        | j                  j	                         j                               dk(  r+| j                  | j                  d         | j                  d<   | j                  d   | j                  d<   | j                  j                         }|dv r| j                  |       nr|dv r| j                  |       n\|dk(  r| j                  |       nE|d	k(  r*t        | j                        d
k(  r| j                  |       n|dk(  r| j!                  |       t        | j                  j	                         j                               dkD  rd| _        yy)zLeft mouse button releasedNr   r   r   r   )rm   ro   rs   rk   rN  rh  rq   rO  rP  rQ  rT  rU  rV  rR  )rM  rg   ri   rS  rX  r  rR  )ControlDownr   rN   r#   r5   r1  r   r   r   r"   rM   r  r  r  rO   r  r  r   )r/   r   r   s      r2   	_onLeftUpzVDigitWindow._onLeftUp  sA   4$4::((*6689Q>)-JJw'*g&
 #'**U"3DJJw'') 
 
    'AA##E*z!!!%({"s4??';q'@!!%(}$$$U+tzz$$&22459!DN :r3   c                    | j                   j                         }|dv rt        | d      r| j                  d   }| j	                  |j                               }|d   |d   z
  |d   |d   z
  f}|dk(  r| j                  j                  |      dk  r:y |dk(  r4| j                  j                  ||      }|dk  ry | j                  |g       | `y y y )Nrq  r   r   r   rI   rs   rk   )
r"   rM   r   r   r   r   r#   MoveSelectedLinesMoveSelectedVertexr	  )r/   r   r   pFrompTomover   s          r2   _onRightDownzVDigitWindow._onRightDown,  s    '')//GD*4MMM'*E//%"3"3"56CFU1X%s1va'89D#:://59<'jj33E4@7%% - 5N/r3   c                    | j                   j                         }|dk(  r&| j                   j                  d      dv r	 | j                   j                         j                         }|r| j                   j                  d      dk(  rd}nd	}t        | j                        d
k  ry| j                  j                  | j                   j                  d      | j                        \  }}|dk  ry| j                  | j                  d         }g | _        | j                  d	       d| _        | j                          | j                         r|du s	|s|dkD  r| j                  |d   | j                   z   |d   | j                   z   f      }|d   t#        j$                  ddd      t#        j$                  ddd      fii}	t'        | ||	|dd      }
|D ];  }| j)                  ||
d       | j)                  ||
d       | j)                  ||
d       = |
j+                         r|
j-                          |
j/                          n|dk(  r0| j                  j1                         dk  ry| j3                          n|dk(  r0| j                  j5                         dk  ry| j3                          ni|dk(  r<| j                  j7                  | j9                  | j:                  d               dk  r)y|dk(  r>| j                  j=                  | j9                  | j:                  d               }|dk  ry|dk(  rQ| j                  j?                  | j9                  | j:                  d               }|dk  ry| jA                  |g       n|dv rtC        | d       r|d!k(  r6| j                  jE                  | jF                  | jH                  d	"      dk  r7y| j                  jE                  | jF                  | jH                  d"      dk  ry| `#| `$| j3                          n|d#k(  retC        | d$      rY| j                  jK                         jM                         d   }| j                  jO                  || j                        dk  ry| `(n|d%k(  r| j                  jS                         dk  rky|d&k(  r| j                  jU                         dk  rGy|d'k(  r| j                  jW                         dk  r#y|d(k(  r| j                  jY                         dk  ry|d)k(  rTt        | j                  jK                         jM                               dkD  r| j                  j[                         dk  ry|d*k(  rs| j                  j]                  | j^                        dk  ry| `/| j`                  r8| jb                  je                  | j`                         | j                  dd	+       | `0n-|d,k(  rt        | j                        d
k(  r| j                  d   }| j                  d   }| j                  jK                         jM                         }tg        | t        d-      t        |      .      }|j-                         th        jj                  k(  rR| j                  jm                  |||jn                  jq                         |jr                  jq                               dk  ry| j                  d	       n#|d/k(  r| j                  ju                         dk  ry|dk7  rC| j                  jK                         jw                  g        g | _        | j                  d	       yy#  d}t	        | t        d             Y xY w)0z,Right mouse button released (confirm action)rC   rD   r   Nr`  ra  rE   TFr  r   rG   r   rI   r   r   r   r?   r   r   r   r   r   r   rm   ro   rM  r   rg   ri   rg  r@  rN  )	copyAttrbrq   r   rO  rP  rU  rQ  rR  rS  r)  rX  zZ bulk-labeling dialog)r   r.  r  rV  )<r"   rM   r   r   r   r8  rN   rO   r#   r   r  r   r   Refresh
_addRecordr   r   r
   rL   r   r   r   r   r   DeleteSelectedLinesr  DeleteSelectedAreas	SplitLiner   r   	AddVertexRemoveVertexr	  r   CopyCatsr>  r@  r5   r1  EditLiner   FlipLine	MergeLine	BreakLineSnapLineConnectLineCopyLinerC  rD  r   r\  r   r)   r|  
ZBulkLinesr   GetValuestepTypeConvForSelectedLinesr/  )r/   r   r   mapNamerE   r   r   positionr   r   r   r   r  r  r  r;  s                   r2   
_onRightUpzVDigitWindow._onRightUpG  s   '')Y4<<#9#9&#A F
 $
V,,//199;
 <<))&1V;D Dt'!+"jj33LL**62DOOt 19??4??2+>?"$e,!% ??$$$,tPQ	 $ 3 3$QK$*;*;;$QK$*;*;;!I Q(,,&.GG !- 0 0*2
7!" "
D $;##!%$$($L  $ H\8D\6B\;G	H $++-$..0 ((*|#zz--/!3OO|#zz--/!3OO{"zz##DOODJJw4G$HIAM{"**&&ttzz'7J'KLCQw~%**))$//$**W:M*NOCQw!!
 00WT=5Q#JJ''))4+;+;u (  
  JJ''))4+;+;t (  
 ! OOz!gdJ&?::((*668;Dzz""49A=z!zz""$q({"zz##%){"zz##%)z!zz""$q(}$4::((*6689A=::))+a/z!zz""4<<014}}$$T]]3d?{"s4??';q'@??1%D??1%Dzz,,.::<H#1%=#>#h-C }}"((*JJ))dCII$6$6$8#((:K:K:M 
 NN%N(z! zz224q8YJJ!!#//3 DONN%N(	 ]VdA.S,TUUs    (]# #^ c                    |j                         | j                  d<   t        j                  dd| j                  d   d   | j                  d   d   fz         | j                  j                         }|dk(  rp| j                  j                  d      dv rSt        | j                        dkD  r:| j                  | j                  | j                  | j                  d	         
       y y |dv r)t        | d      r| j                  d   d   | j                  d   d   z
  }| j                  d   d   | j                  d   d   z
  }|dk(  rNt        | j                  d         dkD  r3| j                  d   D ]  }| j                  j                  |||       ! nR|dv rM|dk(  rt        | j                  d         dkD  rg | _        | j                  j                  | j                  d   d          | j                  d   d   dkD  r| j                  | j                  j!                  | j                  d   d         dd       \  }}| j                  j                  | j                  d   d   dz          | j                  j#                  ||f       | j                  j#                  | j                  | j                  d                | j                  d   d   dkD  r| j                  | j                  j!                  | j                  d   d         dd       \  }}| j                  j                  | j                  d   d   dz
         | j                  j#                  ||f       | j%                  | j                         | j'                  | j                         |dk(  rE| j                  r9| j                  | j                  | j                  | j                  d	         
       | j)                          | j                  d   | j                  d<   y |dk(  r5t        | j                        dk(  r| j                  | j                         y y y )Nr   r  z*VDigitWindow.OnMouseMoving(): coords=%f,%fr   rI   rC   rD   r   rG   )r   r   rW  r   r   rs   r0   r  rk   r  r   rq   rX  )r   r   r   rZ  r"   rM   rN   rO   	MouseDrawr   r  r   r   r   r  r   ru  r   rG  r   r  )r/   r   r   dxdyr0   rS   rT   s           r2   _onMouseMovingzVDigitWindow._onMouseMoving  s   !--/

5		8zz% #TZZ%6q%9:;	
 '')Y4<<#9#9&#A F
 $

 4??#a'4??4??2;N+O   (
 =='*C
 E"1%

7(;A(>>BE"1%

7(;A(>>B #DMM$,?(@1(D--- 8BKK++BB7855 \)c$--2E.F.J&(DOKK((t)<Q)?@}}T*1-1# KK33DMM$4G4JKAaP 1 ,,T]]4-@-Ca-GH..1v6OO**4??4::e;L+MN}}T*1-1# KK33DMM$4G4JKAaP 1 ,,T]]4-@-Ca-GH..1v6OOO4NNt{{N3Z' $4??4??SUCV3W '  LLN"&**U"3DJJw{"4??#q(t{{+ ) #r3   c                 
   | j                   d   }| j                  | j                  d         }|d   |d   z
  }|d   |d   z
  }||f| j                  d<   | j                  d   D ]  }| j                  j	                  |        y )Nr   r   r   rI   r   r0   )r   r  r   r   r  )r/   r   tmp1tmp2r  r  r0   s          r2   _zoomzVDigitWindow._zoomN  s    zz% t}}W56!WtAw!WtAw&("Xk"--% 	%BKK  $	%r3   c                 2    t        j                  ddd      S )Nr   r   r   r?   )r
   rL   r6   s    r2   r  zVDigitWindow._addRecordW  s    hK	RRr3   )%__name__
__module____qualname____doc__r)   ID_ANYNO_FULL_REPAINT_ON_RESIZEr   r5   r8   r:   r.   r+   r   r   r   r	  r  r  r&  r<  rA  rE  rH  r^  rk  r  r  r  r  r  r  r  r  r  r  r   r3   r2   r   r   (   s    : 99**)DV
!,Fy$v/B;,z<2Rh$&(-(Y8v&!A"S9j?+BRAh -D9;v= )."`6})~F,P%Sr3   r   )#r  r)   r   r   grass.pydispatch.signalr   dbmgr.dialogsr   	core.gcmdr   r   r   
core.debugr   mapwin.bufferedr	   core.settingsr
   
core.utilsr   
core.unitsr   r   core.globalvarr   vdigit.dialogsr   r   r   gui_corer   gui_core.wrapr   r   r   r  r3   r2   <module>r     sV     
  
 * 1 2 2  - & ( 8 % 
  )pS$ pSr3   