
    ը	f                     ~   d Z ddlZddlZddlmZ ddlZddlZddlmZm	Z	 ddl
mZ ddlmZ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mZ ddlmZmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z7 ddl8m9Z: ddl;m<Z<  G d de      Z= G d dee=      Z>y)a  
@package mapdisp.frame

@brief Map display with toolbar for various display management
functions, and additional toolbars (vector digitizer, 3d view).

Can be used either from Layer Manager or as d.mon backend.

Classes:
 - mapdisp::MapPanel

(C) 2006-2016 by the GRASS Development Team

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

@author Michael Barton
@author Jachym Cepicky
@author Martin Landa <landa.martin gmail.com>
@author Vaclav Petras <wenzeslaus gmail.com> (SingleMapPanel, handlers support)
@author Anna Kratochvilova <kratochanna gmail.com> (SingleMapPanel)
@author Stepan Turek <stepan.turek seznam.cz> (handlers support)
    N)	globalvar)
MapToolbar	NvizIcons)PrintOptions)GErrorGMessage
RunCommand)ListOfCatsToRangeGetLayerNameFromCmd)GetImageHandlersImageSizeDialog)Debug)UserSettings)SingleMapPanel
FrameMixin)QueryDialogPrepareQueryResults)BufferedMapWindow)LegendControllerBarscaleControllerArrowControllerDtextControllerLegendVectController)ProfileControllerMeasureDistanceControllerMeasureAreaController)GUI)Notification)VectorSelectBaseVectorSelectHighlighter)Menu)	statusbar)Signalc                        e Zd ZdZ ed      dgddddddfdZd Zd	 Zd
 Zd Z	d Z
d Zd ZdLdZdL fd	Zd Zd Zd Zd Zd Zd Zd Zd ZdMdZd Zd Zd Zd Zd Zd ZdNd Zd! Zd" Z d# Z!d$ Z"dOd%Z#d& Z$d' Z%dPd(Z&d) Z'd* Z(d+ Z)d, Z*dMd-Z+d. Z,d/ Z-d0 Z.d1 Z/d2 Z0dMd3Z1dMd4Z2dQd5Z3dMd6Z4dMd7Z5d8 Z6d9 Z7d: Z8d; Z9d< Z:d= Z;d> Z<d? Z=d@ Z>dA Z?	 	 	 	 	 	 dRdBZ@dC ZAdD ZBdE ZCdF ZDdG ZEdH ZFdI ZGdJ ZHdK ZI xZJS )SMapPanelzhMain panel for map display window. Drawing takes place in
    child double buffered drawing window.
    zMap DisplaymapTN	MapWindowc           	      n    t        j                   f||||	|
d| | _        | _        | _        d _        t        d       _        t        d       _        t        d       _	        t        d       _
        t        d       _        |D ]  } j                  |        d _        d _        |rt        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g}t        j&                  t        j(                  f _         j/                  |       _         j0                  j3                         j4                  j7                   j                  j8                          j0                  j3                         j:                  j7                   fd       i  _        i  _         j@                  jB                  j7                   fd	       tE          j                   j0                   j@                   j<                  
       _#         jF                  jH                  j7                   jJ                          jF                  jL                  j7                   jN                          jF                  jP                  j7                   jR                          jU                   jF                          jF                  jV                  j7                   jX                          jF                  j[                           jF                  j\                  j7                   j^                          j                  r ja                           j                  jb                  j7                   jF                  jd                          jF                   _3         jf                  ji                  d       d _5        d _6        d jn                  v r jn                  d   jq                           js                  tt        jv                   jx                          jz                  j}                   jf                  tt        j~                  j                         j                         j                  d      j                  d      j                  d      j                  d      j                  d      j                  d              j                  r j                           jz                  j                          t          jf                         _K        i  _L        d j                  d<   d j                  d<   d j                  d<   d j                  d<   d j                  d<   g  _M        g  _N        d _O        d _P         j                          y)a  Main map display window with toolbars, statusbar and
        2D map window, 3D map window and digitizer.

        :param toolbars: array of activated toolbars, e.g. ['map', 'digit']
        :param statusbar: True to add statusbar
        :param tree: reference to layer tree
        :param lmgr: Layer Manager
        :param map: instance of render.Map
        :param auimgr: AUI manager
        :param name: panel name
        :param kwargs: wx.Panel attributes
        )parenttitleMapauimgrnameNzMapPanel.onFocuszMapPanel.starting3dModezMapPanel.ending3dModezMapPanel.closingDisplayzMapPanel.closingVNETDialogc                     j                   j                  t        d      t        dj	                  |       |      z        S )Nz7Failed to run command '%(command)s'. Details:
%(error)s )commanderror)_giface
WriteError_dictjoin)cmdr1   selfs     ./usr/lib/grass83/gui/wxpython/mapdisp/frame.py<lambda>z#MapPanel.__init__.<locals>.<lambda>   s6    t||66LMsxx}E:;      c                 .    | rj                  d       S d S N)OnRender)valuer8   s    r9   r:   z#MapPanel.__init__.<locals>.<lambda>   s    $--- D r;   )gifacer+   
propertiesoverlaysdefaultr&   FrE   2dTr   
attributescategoryvnetqueryvselect)Rr   __init__r2   _layerManagertreecanCloseDisplayCallbackr#   onFocusstarting3dModeending3dModeclosingDisplayclosingVNETDialog
AddToolbarr"   statusbarManagersbSbCoordinatesSbRegionExtentSbCompRegionExtentSbDisplayGeometry
SbMapScaleSbGoTostatusbarItemsDisabledInNvizCreateStatusbarr+   GetRenderMgrupdateProgressconnectSetProgressrenderingFaileddecorations_decorationWindowsmapWindowPropertiesautoRenderChangedr   MapWindow2D
mapQueriedQueryoverlayActivated_activateOverlayoverlayRemovedRemoveOverlay_setUpMapWindowmouseHandlerUnregisteredResetPointerInitZoomHistoryzoomChangedStatusbarUpdate_registerContextMenuActions	updateMap	UpdateMapr'   SetNamedCursorMapWindowVDigitMapWindow3DtoolbarsSelectDefaultBindwxEVT_SIZEOnSize_mgrAddPaneauiAuiPaneInfo
CentrePaneDockableBestSizeNameCloseButtonDestroyOnCloseLayerAddStatusbarPaneUpdater   printoptdialogs_vectQueryLayers_rastQueryLayers_highlighter_layermeasureController_resize)r8   r)   r@   r*   r|   r"   rN   lmgrr+   r,   r-   kwargstoolbstatusbarItemss   `             r9   rL   zMapPanel.__init__F   s   4 		
	
 	
  " 	'+$ 01 %%>? ##:; %%>? "((D!E
  	#EOOE"	#  $   !!%%$$		N $$1D- "11.ADNHH!!#22::%%11 	//77	
 "$  22::@	
 -<<//%%
 	##++DJJ7))11$2G2GH''//0B0BCT--.1199$:K:KL((*$$,,T-A-AB >>,,.&&t'7'7'A'AB))%%i0#DMM!MM% ..0
 			"++t{{+
 			NNFF Z\Xe_XhT$Z[^D!U1X
	
 >>!!#		
 %T4>>:
 %)\"#'Z #V $W"&Y !# ""&!%r;   c                       fd} fd} j                   j                  d||        fd} fd} j                   j                  d||       y)	z>Register show/hide toolbars and statusbar context menu actionsc                  P     j                         rt        d      S t        d      S )NzHide toolbarszShow toolbars)AreAllToolbarsShownr4   r8   s   r9   show_hide_toolbar_labelzEMapPanel._registerContextMenuActions.<locals>.show_hide_toolbar_label  s(    &*&>&>&@/"FGFXr;   c                 F    j                  j                                 y r=   )ShowAllToolbarsr   eventr8   s    r9   on_show_hide_toolbarzBMapPanel._registerContextMenuActions.<locals>.on_show_hide_toolbar  s      T%=%=%?!?@r;   showAllToolbars)r-   labelactionc                  P     j                         rt        d      S t        d      S )NzHide statusbarzShow statusbar)IsStatusbarShownr4   r   s   r9   show_hide_statusbar_labelzGMapPanel._registerContextMenuActions.<locals>.show_hide_statusbar_label  s*    '+'<'<'>"#DEFVDWr;   c                 F    j                  j                                 y r=   )ShowStatusbarr   r   s    r9   on_show_hide_statusbarzDMapPanel._registerContextMenuActions.<locals>.on_show_hide_statusbar  s    4#8#8#::;r;   showStatusbarN)ri   RegisterContextAction)r8   r   r   r   r   s   `    r9   rv   z$MapPanel._registerContextMenuActions	  s`    	
	A 	..")' 	/ 	
	
	< 	.. +) 	/ 	
r;   c                     | j                   S r=   )r'   r   s    r9   GetMapWindowzMapPanel.GetMapWindow(  s    ~~r;   c           	          ddl m}m} ddlm} |sQddlm}  j                  d   j                  j                  t        d             t        t        d      |z          y	 j                  sdd
lm}  |  j                   j                    j"                   j$                   j&                   j(                         _         j+                   j                          j                  j,                  j/                   fd        j                  j0                  j/                   fd        j                  j3                           j4                  j7                   j                  t8        j:                  j=                         j?                         jA                  d      jC                  d      jE                  d      jG                  d      jI                  d      jK                  d              jM                   j                          j4                  jO                  d      jQ                         r* j4                  jO                  d      jS                          nR j4                  jO                  d      jQ                         r) j4                  jO                  d      jS                           j4                  jO                  d      j3                          d j                  vr |  jT                   jV                  | j                         j                  d<    j                  d   jX                  j/                   jZ                          fd j                  d   j\                  j/                  fd        j"                  j^                  j/                   j`                          j                  jc                   j                  d           j4                  j7                   j                  d   t8        j:                  j=                         jE                  d      je                  t        d            jg                         ji                         jk                  d      jm                  d      jo                  d      jq                  d      js                  d      jG                  d      jK                  d      jC                   j                  d   ju                                      d jV                  jv                  d<   d jV                  _<        t9        jz                  ddt8        j|                         jV                  _?        t9        jz                  ddt8        j|                         jV                  _@        y	) zAdd vector digitizer toolbarr   )
haveVDigitVDigit)VDigitToolbar)errorMsgr&   2D viewz3Unable to start wxGUI vector digitizer.
Details: %s)r)   N)VDigitWindow)r)   r@   rA   r+   rN   r   rB   c                 T    j                   j                  d   j                  |       S NcoordinatesrV   r   SetAdditionalInfotextr8   s    r9   r:   z,MapPanel._addToolbarVDigit.<locals>.<lambda>I  s)    T22AA!##D) r;   c                  T     j                   j                  d   j                  d       S r   r   r   s   r9   r:   z,MapPanel._addToolbarVDigit.<locals>.<lambda>N  s)    --<<!##D) r;   FrD   vdigitTrF   3d)r)   toolSwitcherr'   
digitClassr@   c                 @    j                   j                  d |        y )N)	selection)rM   OnShowAttributeTable)r   r8   s    r9   openATMz+MapPanel._addToolbarVDigit.<locals>.openATMp  s    ""77	7Rr;   c                      |       S r=    )r   r   s    r9   r:   z,MapPanel._addToolbarVDigit.<locals>.<lambda>t  s    ')"4 r;   vdigittoolbarzVector Digitizer Toolbar      pointboxred)colourwidthstylegreen)Avdigit.mainr   r   vdigit.toolbarsr   r   r   r|   comboSetValuer4   r   rz   vdigit.mapwindowr   r2   rg   r+   rN   rM   re   rp   digitizingInforb   digitizingInfoUnavailableShowr   r   r   r   r   r   r   r   r   r   r   r   _switchMapWindowGetPaneIsShownHide_toolSwitcherr'   quitDigitizer
QuitVDigitr   
layerAdded_updateVDigitLayers
SetToolbarCaptionToolbarPaneTopRowLeftDockableRightDockableBottomDockableTopDockableGetBestSizemousezoomtypePenSOLIDpenpolypen)r8   r   r   r   r   r   r   s   `     @r9   _addToolbarVDigitzMapPanel._addToolbarVDigit+  s   21'MM% &&//)=KLxW ##5#/||33HHYY''))$D    !5!56  //77*
   ::BB*
   %%'II$$""$%(#hU#%q
 	d22399T"**,IId#((*YYt$,,.IId#((*		(#((*4==(&3!//..!||'DMM(# MM(#1199$//JS MM(#++334 HH''(@(@A''h(?@		MM(#FF T/"WQ123[]SUSV\% ]5!^E"[[U1XXt}}X.::<>	
" '.U#"#VV5J!#warxx!Pr;   c                 `    d| j                   v r | j                   d   j                  d       yy)zUpdate vdigit layersr   T)
updateToolN)r|   UpdateListOfLayers)r8   layers     r9   r   zMapPanel._updateVDigitLayers  s-    t}}$MM(#66$6G %r;   c           	      t   ddl m}m}m} |sK| j                  d   j
                  j                  t        d             t        | t        d|z               y| j                  d   j                  d       | j                  d   j                  d	t        d	   | j                  t        j                  d
ff       | j                  j!                  d| j                  d   | j                  d   j"                         | j                  d   j                  dt        d   | j$                  t        j                  dff       | j                  j!                  d| j                  d   | j                  d   j&                         | j(                  j+                  | j,                         d| j.                  _        | j2                  j5                          | j6                  j9                  t        d      t:        j<                         | j?                  t        d      d       | j@                  sh || | j6                  t        jB                  | | jD                  | jF                  | jH                        | _         | jK                  | j@                         | j@                  jL                  jO                  | jP                         | jS                  | j@                         | j2                  jU                  d       | jV                  jY                  d       | jZ                  j]                  d      j_                          | jZ                  ja                  | j@                  t        jb                  je                         jg                         ji                  d      jk                  d      jm                  d      jo                  d      jq                  d      js                  d             | j@                  ju                          | j@                  jw                          | j@                  jy                  d       | j@                  jz                  jO                  | j|                         | j@                  j~                  jO                  | j                         n$| jS                  | j@                         | jD                  j                  dd      t        j                  d<   | j@                  j                         j                          | j@                  j                          t        j                  d= | jZ                  j]                  d      j_                          | jZ                  j]                  d      ju                          | jV                  jY                  d       | j@                  jw                          | j                  j                         D ]1  }|j                  jO                  | j@                  j                         3 | jD                  j                         j                  jO                  | j@                  j                         | j6                  j                  j                  | j                  j                         | j6                  j                  jO                  | j@                  j                         | j                  j                  | j@                  _R        t        j                  | j@                  j                         | j?                  dd       | jZ                  j                          y)zAdd 3D view mode windowr   )haveNvizGLWindowr   r&   r   zUnable to switch to 3D display mode.
The Nviz python extension was not found or loaded properly.
Switching back to 2D display mode.

Details: %sr)   messageNFrotate   mouseUse)grouptoolbartool
flyThrough   zStarting 3D view mode...notificationzPlease wait, loading data...)r@   idframer+   rN   r   rC   T)	firstTimerF   rD   r   )windreswindres3GRASS_REGION )U	nviz.mainr   r   r   r|   r   r   r4   r   Enable2D
InsertToolr   OnRotater   
ITEM_CHECKr   AddToolToGroupr   OnFlyThroughr  rV   DisableStatusbarItemsByClassr^   rg   sbItemr'   EraseMapr2   WriteCmdLogr   	HIGHLIGHTSetStatusTextr{   ID_ANYr+   rN   rM   rp   rj   rb   rk   r   ry   rQ   emitr   r   r   r   r   r   r   r   r   r   r   r   r   r   ResetViewHistory
UpdateViewrl   rm   rn   ro   	SetRegionosenviron
GetDisplayInitLoadDataLayersre   valuesoverlayChangedUpdateOverlaysr`   
renderDone_onUpdateOverlaysrw   
disconnectri   rx   rB   	CallAfterr   )r8   r   r   r   overlays        r9   AddNvizzMapPanel.AddNviz  su   :: MM% &&//)=HJRS  	e%%e,e''	(+T]]BMM1MO	
 	))MM%(u%,, 	* 	

 	e'' !l+%%MM
	
 	))MM%(u%00 	* 	
 	::--	
 +,  ' 	!  ()8N8N 	! 	
 	1;<a@ '||99HHYY'' D   !1!12''//

;!!$"2"23NN)))4 $$t$4 IId#((*II  ""$%(#dU#%q
 !!#--/''---55d6K6KL++33D4F4FG!!$"2"23)-););DSW);)XBJJ~&'')..0++-

>* IId#((*IId#((* $$u$5--/ ''..0 	LG""**4+;+;+J+JK	L**2243C3C3U3UV))$*:*:*D*DE&&t'7'7'A'AB$($4$4$=$=! 	T%%4452q!		r;   c                     d| j                   d   j                  j                  d      v r)| j                   d   j                  j                  d       yy)z*Disables 3D mode (NVIZ) in user interface.3Dr&   r   N)r|   r   	GetStringDeleter   s    r9   Disable3dModezMapPanel.Disable3dMode  sH     4=='--77::MM% &&--a0 ;r;   c                    | j                  d      sy	 | j                  d   j                  | j                  d   j                         | j                  d   j                  | j                  d   j                         | j                  t        d      d       i | j                  _	        t        j                  ddd	      | j                  _        | j                  j                  t        d
      t         j"                         | j$                  r| j$                  j'                  d       | j(                  j+                  d      j-                          | j(                  j+                  d      j/                          | j1                  | j2                         | j4                  j7                          	 | j$                  j8                  | j2                  _        | j                  j:                  j=                  | j$                  j>                         | j                  j:                  jA                  | j2                  j>                         | jB                  jE                         D ]1  }|jF                  j=                  | j$                  jH                         3 | jJ                  jM                         jN                  j=                  | j$                  jP                         | j$                  jS                          | jT                  j?                          | j(                  jW                          | jY                         j[                          y# t
        $ r Y w xY w# t
        $ r Y w xY w)z8Restore 2D view. Can be called even if 3D is not active.r   Nr&   zPlease wait, unloading data...r   displaystatusbarModer   r  keysubkeyz!Switching back to 2D view mode...r  )r   rF   ).IsPaneShownr|   
RemoveToolr   r  AttributeErrorr  r4   rV   disabledItemsr   Getrg   r  r2   r  r   NO_NOTIFICATIONr{   OnCloser   r   r   r   r   ri   rR   r  rB   rw   r,  rx   rb   re   r'  r(  r)  r+   r`   r*  r+  ClearTexturesr'   r   GetMapToolbarr}   )r8   r.  s     r9   
RemoveNvizzMapPanel.RemoveNviz  s   %	MM% ++DMM%,@,G,GHMM% ++DMM%,@,K,KL
 	1=>B.0+*6*:*:+
  '
 	  12%55 	! 	
 $$4$0		$$$&		$$$&d../ 	(,(8(8(A(AD% 	))$*:*:*D*DE&&t'7'7'A'AB''..0 	OG""--d.>.>.M.MN	O**55..	
 	&&(  "		**,S  		4  		s$   A*M 5%M 	MM	M+*M+c                    |dk(  rYd| j                   vr/t        | | j                  | j                        | j                   d<   | j                  j                  | j                   d   t        j                  j                         j                  d      j                  t        d            j                         j                         j                  d      j                  d      j                  d      j!                  d      j#                  d      j%                  d      j'                  d      j)                  | j                   d   j+                                      n|d	k(  rB| j                   d   j,                  j/                  t        d
             | j1                          n|dk(  rB| j                   d   j,                  j/                  t        d             | j3                          nF|dk(  rA| j                   d   j,                  j/                  t        d             | j5                          |r'| j                   d   j,                  j7                          | j                  j9                          y)zAdd defined toolbar to the window

        Currently recognized toolbars are:
         - 'map'     - basic map toolbar
         - 'vdigit'  - vector digitizer

        :param name: toolbar to add
        :param fixed: fixed toolbar
        r&   )r   r@   
maptoolbarzMap Toolbar
mapToolbarFTr   nvizz3D viewr   zVector digitizerrdigitzRaster digitizerN)r|   r   r   r2   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r/  r   	AddRDigitDisabler   )r8   r-   fixeds      r9   rU   zMapPanel.AddToolbarN  s    5=DMM)'1t'9'9$,,(e$ IIe$""$l#=)*l#e$u%&T"U#q4==/;;=?$ V^MM% &&//)=LLN XMM% &&//2D0EF""$ XMM% &&//2D0EFNNMM% &&..0		r;   c                 z   t         |   ||       |dk(  rm| j                  j                  d      j	                          | j                  j                  d      j                          | j                  | j                         | j                  d   j                  d       | j                  j                          y)zRemoves defined toolbar from the window

        :param name toolbar to remove
        :param destroy True to destroy otherwise toolbar is only hidden
        r   rF   r&   TN)superRemoveToolbarr   r   r   r   r   ri   r|   r  r   )r8   r-   destroy	__class__s      r9   rO  zMapPanel.RemoveToolbar  s     	dG,8IIh',,.IId#((*!!$"2"23e%%d+		r;   c                     | j                         j                  t        j                        }|D ]!  }| j                         j	                  |       # y)z&Removes temporary map layers (queries))r-   N)GetMapGetListOfLayersr   
QUERYLAYERDeleteLayer)r8   qlayerr   s      r9   RemoveQueryLayerzMapPanel.RemoveQueryLayer  sD    ..I4H4H.I 	-EKKM%%e,	-r;   c                    | j                          | j                  d      rg| j                  j                  r3| j                  j                  j	                         j                  g        | j                  j                  dd       n| j                  j                  d       | j                  d   r| j                  d   j                          | j                          y)z*Re-render map composition (each map layer)r   TrenderrenderVector)r[  rK   N)
rX  
GetToolbarr'   digitr$  SetSelectedrx   r   Resetru   r8   r   s     r9   r>   zMapPanel.OnRender  s     ??8$~~##$$//1==bANN$$Dt$DNN$$D$1 <<	"LL#))+ 	r;   c                     | j                   j                          | j                  d      r9d| j                  d   j                  d<   d| j                  d   j                  d<   yy)zPointer button clickedr   rE   r	  r  descN)r'   SetModePointerr]  r|   r   ra  s     r9   	OnPointerzMapPanel.OnPointer  sU    %%'??8$35DMM(#**4057DMM(#**62 %r;   c                    | j                   j                         }|j                         }| j                  d   s|t	        t        d             yt        | j                  | j                         | j                  d<   | j                  d   j                  d       | j                  d   j                  j                  | j                         yy)z'Vector feature selection button clickedrK   Nz*No map layer selected. Operation canceled.T)createButton)r2   GetLayerListGetSelectedLayerr   r   r4   r   r)   CreateDialogonCloseDialogrb   _onCloseVectorSelectDialog)r8   r   	layerListlayerSelecteds       r9   OnSelectzMapPanel.OnSelect  s    LL--/	!224||I&$GHI&6t{{DLL&QDLL#LL#00d0CLL#1199// 'r;   c                 "    d | j                   d<   y )NrK   )r   r   s    r9   rl  z#MapPanel._onCloseVectorSelectDialog  s    "&Yr;   c                 l    d| j                   j                  d<   | j                   j                  d       y)zRotate 3D viewr   usehandN)r'   r   ry   ra  s     r9   r  zMapPanel.OnRotate  s*    &.U# 	%%f-r;   c                     d| j                   j                  d<   | j                   j                  d       | j                   j                          y)zFly-through modeflyrr  rs  N)r'   r   ry   SetFocusra  s     r9   r  zMapPanel.OnFlyThrough  s:    &+U# 	%%f-!r;   c                 ,   | j                         \  }}|syt        |       }|j                          |j                         t        j
                  k7  r|j                          y|j                         \  }}|j                          t	        j                  | t        d      |t        j                  t        j                  z        }|j                         t        j
                  k(  r|j                         }|s|j                          yt        j                  j                  |      \  }}	||j!                            d   }
||j!                            d   }|	|k7  r|dz   |z   }| j"                  j%                  ||
||       |j                          y)zSave map to imageNz?Choose a file name to save the image (no need to add extension))r)   r   wildcardr   typeext.)_prepareSaveToFiler   CentreOnParent	ShowModalr   ID_OKDestroy	GetValues
FileDialogr4   FD_SAVEFD_OVERWRITE_PROMPTGetPathr"  pathsplitextGetFilterIndexr'   
SaveToFile)r8   r   filetypeltypedlgr   heightr  baserz  fileTypeextTypes               r9   r  zMapPanel.SaveToFile  sI   113% d#==?bhh&KKMv mmT **r555
 ==?bhh&;;=D((.ID#S//126:HC..01%8Gg~czG+NN%%dHeVDr;   c                    | j                         \  }}|sy| j                  j                         \  }}|dd D ]T  }	 |j                  d      \  }}	|dk(  r| j                  d      rd}
n|	}
|dk(  r|	};|dk(  sA|	j                  d	      \  }}V t        j                  j                        \  }}|s	|d
z   
z   }n|dd 
k7  r|dd }
| j                  d      rd}nt        j                  }|D ]  }|d   |
k(  s|d   } n | j                  j                  ||t        |      t        |      |       y# t        $ r Y 	w xY w)z{Saves map to image by running d.out.file from gui or d.mon.
        Command is expected to be validated by parser.
        Nr   =formatr   ppmoutputsize,r{  rz  ry  )r|  r'   GetClientSizesplit
ValueErrorr;  r"  r  r  r   BITMAP_TYPE_PNGr  int)r8   r0   callbackr  r  r   r  parampvalr  r-   r  rz  
bitmapTypeeachs                   r9   DOutFilezMapPanel.DOutFile   sd    113%446vQR[ 	/ES)3 H}##D)#G!GH}f #		#v	/  GG$$T*	c#:'DW!"gGD!J++J 	DE{g%!&\
	 	!!$
CJFXV7  s   D66	EEc                 ,    |sy| j                  |       y)zDummy function which is called when d.out.file is called
        and returns parsed and validated command which is then passed
        to DOutFile method.N)r  r8   dcmdr   paramspropwins        r9   DOutFileOptDatazMapPanel.DOutFileOptData(  s     dr;   c                    	
 	 
fd} j                  d      r% j                  j                  t        d             ydd|dd D ]  }	 |j	                  d      \  }}|dk(  r|  syd
t        j                  d      dz   	dd	z   dg} j                  ||       y# t
        $ r |j                  d	      rd
Y yw xY w)z=Saves currently loaded composition of layers as a raster map.c            
      $   t        dddd      \  } }| dk(  s(j                  j                  t        d      |z          y t	        j
                          t        ddz   dd	      \  } }| dk(  s<t	        j                          j                  j                  t        d      |z          y t        d
dz   dz   dz   dd      \  } }t	        j                          t        dddddz   dz   dz   g       | dk(  s=j                  j                  t        d      |z          t	        j                         y j                         j                         j                         }j                         j                          j                         j                         j                         }j                         j                  j                  |       t        d|d   |d   |d   |d   d       t	        j                         y )Nz	r.in.gdaloT)flagsinputr  quiet	overwritegetErrorMsgr   zFailed to run d.to.rast:
zg.regionz.red)rasterr  r  zr.compositez.greenz.blue)r   r   bluer  r  r  r  zg.remover  f)ry  r  r  r-   zr.regionnsew)r&   r  r  r  r  r  )r	   r2   r3   r4   grassuse_temp_regiondel_temp_region
try_removerS  GetCurrentRegioncopyAlignExtentFromDisplayregionupdate)	
returncodemessages	oldRegionr  outputRasterr  pngFiler8   tmpNames	       r9   _DToRastDonez&MapPanel.DToRast.<locals>._DToRastDone4  s   #-# $ J ?''*F(G((RS!!##-7V#34T$ J ?%%'''*F(G((RS#-f$(w&## 	$ J !!#&((:Gg<MN ?''*F(G((RS  ) 668==?IKKM002[[]335::<FKKM  ''	2 ++++ W%r;   r   z&d.to.rast can be used only in 2D mode.NFr   r  r  z--overwriteTd_to_rast_tmp)createz.pngz
d.out.filezoutput=z
format=png)r  )
r;  r2   r3   r4   r  r  
startswithr  tempfiler  )r8   r0   r  r  r  r  dOutFileCmdr  r  r  r  s   `      @@@@r9   DToRastzMapPanel.DToRast1  s    =	& =	&~ D!LL##A&N$OP	QR[ 	%E%S)3=#&L		% !...7#Y%8,GkL9  %##M2 $I%s   B))CCc                 ,    |sy| j                  |       y)zDummy function which is called when d.to.rast is called
        and returns parsed and validated command which is then passed
        to DToRast method.N)r  r  s        r9   DToRastOptDatazMapPanel.DToRastOptData  s     Tr;   c                     | j                  d      rd}ddddddg}||fS | j                  j                  }|st        | t	        d             yt        |      \  }}||fS )	z$Get wildcards and format extensions.r   z-TIF file (*.tif)|*.tif|PPM file (*.ppm)|*.ppmtif)rz  ry  r  z2Nothing to render (empty map). Operation canceled.r   NN)r;  r'   imgr   r4   r   )r8   r  r  r  s       r9   r|  zMapPanel._prepareSaveToFile  sz    D!FH"E2E54QRE  ..$$CRS ".s3OHer;   c                    t               }t        j                  |t        j                  t	        d            }|j                  |       | j                  t        j                  | j                  j                  |       t        j                  |t        j                  t	        d            }|j                  |       | j                  t        j                  | j                  j                  |       t        j                  |t        j                  t	        d            }|j                  |       | j                  t        j                  | j                  j                  |       | j                  |       |j                          y)z?
        Print options and output menu for map display
        z
Page setupzPrint previewzPrint displayN)r!   r   MenuItemr  r4   
AppendItemr~   EVT_MENUr   OnPageSetupOnPrintPreview	OnDoPrint	PopupMenur  )r8   r   	printmenusetuppreviewdoprints         r9   	PrintMenuzMapPanel.PrintMenu  s     F	Iryy!L/BU#		"++t}}88%@++iAo4FGW%		"++t}};;WE++iAo4FGW%		"++t}}66@ 	y!r;   c                    t        j                  dd       | j                  j                          | j	                  d      r<| j
                  d   j                         }|r| j
                  d   j                          | j                          t        | d      r&| j                  r| j                  j                          | j                  d   r| j                  j                          | j                  j!                          y)z@Clean up before closing map display.
        End digitizer/nviz.r   zMapPanel.CleanUp()r   rI  rI   N)r   msgr+   Cleanr]  r|   GetLayerOnExitrD  hasattrrI  CleanUpr   rT   r  r   UnInit)r8   maplayers     r9   r  zMapPanel.CleanUp  s     			!)*??8$}}X.779Hh'..04"t{{KK!<<""'')		r;   c                    t        j                  dd       | j                  rK| j                  |      }|6| j                          |d   dkD  r| j                  j                  |       yyy| j                          | j                          y)zEWindow closed.
        Also close associated layer tree page
        r   zMapPanel.OnCloseWindow())askIfSaveWorkspaceNlayersrE   )
pgnum_dict)r   r  rO   r  rS   r  r  )r8   r   r  r  s       r9   OnCloseWindowzMapPanel.OnCloseWindow  s     			!/0''55#5 6 J %h'",'',,
,C - & LLNLLNr;   c                    | j                   s| j                  r| j                  }| j                   }nK| j                  j                         j	                  d      }g }g }|D ]  }|j
                  dk(  rt        |j                        \  }}|s.|j                  j                         }	|	dk(  r|j                  |       _|	dv r(|j                  d      D ]  }
|j                  |
        |	dv s|j                  |        |rv| j                  d      }|rc|j                         j                         }|D ]@  }||k(  s	| j                  j                  t!        d	      |z         |j#                  |       B ||z   st%        | t!        d
             yd| j&                  j(                  d   | j&                  j(                  d   z
  | j&                  j*                  z  z  }	 | j,                  j/                  ||f      \  }}| j3                  d      s| j5                  |||||       y|r| j,                  j7                  ||       |r| j5                  |||g |       yy# t0        $ r Y yw xY w)z@Query selected layers.

        :param x,y: coordinates
        F)checkedOnlyr0   r  )rgbhis
)vectorthememap
themechartr   z-Vector map <%s> opened for editing - skipped.z4No raster or vector map layer selected for querying.r   Ng      $@r  r  r   )rastvect)r   r   r2   rh  GetSelectedLayersry  r   r7   r  GetTypeappendr  r]  r  GetNameWriteWarningr4   remover   r+   r  r   r'   
Pixel2Cell	TypeErrorr;  QueryMapQuerySurface)r8   xyr  r  r  r   r-   foundr  inamedigitToolbarlmapqdisteastnorths                   r9   rk   zMapPanel.Query  sN   
   D$9$9((D((D\\..0BBuBUFDD &::*1%))<e..0H$KK%n,!%D!1 +E*+BBKK%& #x8'002::<D $ .4< LL55 !"T U"&!' !KK-. tPQ  -0DDVW	..33QF;KD% %MM$udD9++Aq1dE5rE   		s   ( I' '	I32I3c                     | j                   d   j                  | j                   d   j                         |dk(  r|| _        y|dk(  r|| _        yy)zuActivate query mode and set layers to query.
        This method is used for querying in d.mon using d.what.rast/vectr&   r  r  N)r|   
SelectToolrJ   r   r   )r8   r  mapss      r9   SetQueryLayersAndActivatez"MapPanel.SetQueryLayersAndActivate  sO     	e''e(<(B(BCH$(D!h$(D! r;   c           	      *   t        j                  dddj                  |      ddj                  |             | j                  4t	        | j
                  j                         | j
                        | _        g }g }t        j                  j                         }|D ]9  }	t        j                  |	      |d<   |t        j                  |	||fd	|
      z  }; |r5t        j                  ddd      }
	 t        j                  |||f||
d	      }| j                  j)                          |rd|d   v r| j+                  |       ||z   }t-        ||f|      }| j.                  d   r<| j.                  d   j1                          | j.                  d   j3                  |       yt5        | |      | j.                  d<   | j.                  d   j7                  t8        j:                  | j<                         | j.                  d   j>                  jA                  | jB                         | j.                  d   jE                          y# t        j                   $ r9 t#        | t%        d      j'                  dj                  |                   Y w xY w)zQuery raster or vector map layers by r/v.what

        :param east,north: coordinates
        :param qdist: query distance
        :param rast: raster map names
        :param vect: vector map names
        r   zQueryMap(): raster=r  z vector=N)mapdispr@   )r  r  T)r&   coord	localizedenvatmencodingr?   r8  )r&   r  distancer  multiplezMFailed to query vector map(s) <{maps}>. Check database settings and topology.)r  r   Categoryr   )r   resultrJ   )r)   data)#r   r  r6   r   r    r2   GetMapDisplayr"  r#  r  r  
region_envraster_whatr   r?  vector_whatScriptErrorr   r4   r  Clear_queryHighlightr   r   RaiseSetDatar   r~   r   	EVT_CLOSE_oncloseQueryDialogredirectOutputrb   _onRedirectQueryOutputr   )r8   r  r  r
  r  r  	rastQuery	vectQueryr  r  r  r  s               r9   r  zMapPanel.QueryMap%  s=    			CHHTNCHHTNS	
 ""*&=224T\\'D# 		jjoo 	F"'"2"2&"AC**4-4S I	
 #''eGTH!---"%!	  	%%'y|3  +Y&$$vN<< LL!'')LL!))&1$/t&$IDLL!LL!&&r||T5M5MNLL!00889T9TULL!&&(- $$ @ f#((4.f1 s   6I AJJc                     d | j                   d<   g | _        g | _        | j                  j	                          d | _        |j                          y )NrJ   )r   r   r   r   r"  Skipra  s     r9   r'  zMapPanel._oncloseQueryDialog_  sC     $W " "%%'"&

r;   c                     |dk(  r,| j                   j                  |t        j                         y|dk(  r| j                   j	                  |       yy)z Writes query output into consolelogr  r7   N)r2   WriteLogr   MAKE_VISIBLEr  )r8   r  r   s      r9   r)  zMapPanel._onRedirectQueryOutputg  sD    E>LL!!&|7P7P!Qe^LL$$V, r;   c                 r   t        |      dkD  r| j                  j                  |d   d          | j                  j                  |d   d   dz   |d   d   z          t	               }|D ]  }|j                  |d           | j                  j                  |       | j                  j                          yy)zHighlight category from query.r   r   r+   @Mapsetr  N)lenr   SetLayerSetMaplistr  SetCatsDrawSelected)r8   r+  tmpis       r9   r#  zMapPanel._queryHighlightn  s    y>A##,,Yq\'-BC##**!U#c)IaL,BB &C *

1Z=)* ##++C0##002 r;   c                     d| j                   j                  d<   d| j                   j                  d<   d| j                   _        | j                   j                  d       y)zQuery tools menurJ   rr  r   r   r   crossN)r'   r   r   ry   ra  s     r9   OnQueryzMapPanel.OnQuery|  sJ    &-U#&-U#"# 	%%g.r;   c           
         t        j                  ddd      }t        |d         dz   t        |d         z   dz   t        |d         z   }d	}d}| j                  j	                         j                         }	|	sy
|	j                  }
|
D ]5  }d|v s|j                  dd      \  }}|dk(  r|}%|dk(  s+t        |      }7 dd|z  d|z  d|z  dt        j                  ddd      z  g}|d	k7  r|j                  d|z         |dkD  r|j                  d|z         |r1|}|j                  d       |j                  dt        |      z         nwg }|j                         D ]b  }|j                  t        j                  |             ||   }|d   j                  d|z         |d   j                  dt        |      z         d |r@i }|rd|d<   nd|d<    | j                  j                  d t        j                   |ddddd|S |S )!zAdd temporal vector map layer to map composition

        :param name: name of map layer
        :param useId: use feature id instead of category
        r  	highlightcolorr8  r   :r   r   r  Nr  iconr  zd.vectzmap=%szcolor=%szfill_color=%szwidth=%dr   zicon=%szsize=%iz-izcats=%srE   zlayer=%dr  r  r0   Tg      ?)r-   r0   activehiddenopacityr[  r   )r   r?  strr2   rh  ri  r7   r  floatr  keysr  r
   r+   AddLayerr   rU  )r8   r-   catsuseIdaddLayerrB  colorStrrD  r  rn  vparamr  pargpvalpatternr7   r   lcatsargss                      r9   AddTmpVectorMapLayerzMapPanel.AddTmpVectorMapLayer  s+      u+gNuQx=3&U1X6<s58}L 113DDF"" 	'AaxWWS!_
d6>DV^ ;D	' tO!h&));wWW
 2:NN9t+,!8NN9t+,CJJtJJy3t9,-C E

499W-.UBzE12By+<U+CCD	E D (W )W$488$$ ))   Jr;   c                 .    | j                  t               y r=   )
_onMeasurer   ra  s     r9   OnMeasureDistancezMapPanel.OnMeasureDistance  s    12r;   c                 .    | j                  t               y r=   )rX  r   ra  s     r9   OnMeasureAreazMapPanel.OnMeasureArea  s    -.r;   c                       | j                    j                                _         j                  j                  j                   fd        j                  j                          y)zStarts measurement mode.

        :param controller: measurement class (MeasureDistanceController, MeasureAreaController)
        	mapWindowc                  8     j                   j                         S r=   )r   Stopr   s   r9   r:   z%MapPanel._onMeasure.<locals>.<lambda>  s    D**//1 r;   N)r2   r   r   r   toggleToolChangedrb   Start)r8   
controllers   ` r9   rX  zMapPanel._onMeasure  sT    
 ",DLLDDUDUDW!X 	,,441	
 	$$&r;   c                     g }| j                   j                         j                         }|D ]7  }|j                  dk(  s|j	                  |j
                  j                         9 | j                  |       y)Launch profile toolr  rastersN)r2   rh  r  ry  r  r  r-   Profile)r8   r   rg  r  r   s        r9   	OnProfilezMapPanel.OnProfile  sc    **,>>@ 	4EzzX%u~~223	4 	W%r;   c                    ddl m} t        | j                  | j	                               | _         || | j                  || j                  j                  d   | j
                        }|j                          |j                  d       y)re  r   )ProfileFramer]  units)r)   r@   
rasterListrl  rc  N)
wxplot.profilerk  r   r2   r   profileControllerr+   projinfor   OnSelectRaster)r8   rg  rk  wins       r9   rh  zMapPanel.Profile  ss    /!2LLD$5$5$7"
 <<((##G,--
 	
 	4 r;   c                 f   g }| j                   j                         j                         D ]I  }|j                  j	                         dk(  s!|j                  |j                  j                                K ddlm}  || | j                   |      }|j                          |j                          y)z.Init PyPlot histogram display canvas and toolsr  r   )HistogramPlotFramer)   r@   rm  N)r2   rh  r  r  r  r  r  wxplot.histogramrt  r}  r   )r8   r   r  r   rt  rr  s         r9   OnHistogramPyPlotzMapPanel.OnHistogramPyPlot  s    \\..0BBD 	8E~~%%'83enn4467	8 	8 T\\fU
r;   c                    g }| j                   j                         j                         D ]I  }|j                  j	                         dk(  s!|j                  |j                  j                                K ddlm}  || | j                   |      }|j                          |j                          |j                  d       y)z0Init PyPlot scatterplot display canvas and toolsr  r   )ScatterFrameru  N)r2   rh  r  r  r  r  r  wxplot.scatterry  r}  r   rq  )r8   r   r  r   ry  rr  s         r9   OnScatterplotzMapPanel.OnScatterplot  s    \\..0BBD 	8E~~%%'83enn4467	8 	0$t||O
 	4 r;   c                     ddl m}  || | j                        }|j                          |j	                          |j                          |j                          y)z'Init histogram display canvas and toolsr   )HistogramFrame)r@   N)modules.histogramr}  r2   r}  r   Refreshr   )r8   r   r}  rr  s       r9   OnHistogramzMapPanel.OnHistogram  s<    4T$,,7


r;   c                     || j                   v r[| j                   |   j                  }|j                         r!|j                          |j	                          y|j                          yy)zcLaunch decoration dialog according to overlay id.

        :param overlayId: id of overlay
        N)re   dialogr   rv  r$  r   )r8   	overlayIdr  s      r9   rm   zMapPanel._activateOverlay%  sQ    
 (((""9-44C{{}		
 )r;   c                     | j                   | j                  |   j                  = | j                  |   j                          | j                  |= y)z?Hide overlay.

        :param overlayId: id of overlay
        N)rf   re   r  Remove)r8   r  s     r9   ro   zMapPanel.RemoveOverlay2  sH    
 ##D$4$4Y$?$F$FG#**,Y'r;   c                    | j                  d      r| j                  j                  d       y|rd}nd}dg}t        | | j                  |d      j                  || j                  ddf       d	| j                  j                  d
<   y)z4Handler for scale bar map decoration menu selection.r   F   r  NFT
d.barscaler)   r@   showmodal	completedpointerrr  )	r;  r{   SetDrawScalebarr   r2   ParseCommand
GetOptDatar'   r   r8   r7   r  s      r9   AddBarscalezMapPanel.AddBarscale;  s    D!,,X6DD.C 	44uERRDOOT48 	S 	
 '0U#r;   c                    |rd}nzd}dg}| j                   j                         j                         }|D ]H  }|j                  dk(  s|j	                  dj                  |j                  j                                n t        | | j                   |d      j                  || j                  ddf	       d
| j                  j                  d<   y)z8Handler for legend raster map decoration menu selection.FTd.legendr  zraster={rast})r  r  Nr  r  rr  )r2   rh  r  ry  r  r  r  r-   r   r  r  r'   r   )r8   r7   r  r  r   s        r9   AddLegendRastzMapPanel.AddLegendRastN  s     DD,C\\..0BBDF ::)JJ555>>;N;N5OP
 	44uERRDOOT48 	S 	
 '0U#r;   c                     |rd}nd}dg}t        | | j                  |d      j                  || j                  ddf       d| j                  j
                  d<   y)	z8Handler for legend vector map decoration menu selection.FTd.legend.vectr  Nr  r  rr  r   r2   r  r  r'   r   )r8   r7   
showDialogr  s       r9   AddLegendVectzMapPanel.AddLegendVectb  sb     DD"#C44uERRDOOT48 	S 	
 '0U#r;   c                    | j                  d      r| j                  j                  d       y|rd}nd}dg}t        | | j                  |d      j                  || j                  ddf       d	| j                  j                  d
<   y)z'Handler for north arrow menu selection.r   r  NFTd.northarrowr  r  r  rr  )	r;  r{   SetDrawArrowr   r2   r  r  r'   r   r  s      r9   AddArrowzMapPanel.AddArrowq  s    D! ))(3DD!"C 	44uERRDOOT48 	S 	
 '0U#r;   c                     |rd}nd}dg}t        | | j                  |d      j                  || j                  ddf       d| j                  j
                  d<   y)	z"Handler for d.text menu selection.FTd.textr  Nr  r  rr  r  r  s      r9   AddDtextzMapPanel.AddDtext  sa    DD*C 	44uERRDOOT48 	S 	
 '0U#r;   c                     |sy| j                   v r j                   |   }nO|d   }|dk(  r!t         j                   j                        }n|dk(  r!t	         j                   j                        }nq|dk(  r!t         j                   j                        }nK|dk(  r!t         j                   j                        }n%|dk(  r t         j                   j                        } j                  |j                  <   |j                  j                   fd        j                  d	      r/|j                  j                   j                  j                         ||_        | j                   |<   ||_        |j#                          y)
zCalled after options are set through module dialog.

        :param dcmd: resulting command
        :param layer: not used
        :param params: module parameters (not used)
        :param propwin: dialog window
        Nr   r  r  r  r  r  c                  >     j                   j                  dd      S )NFrZ  )ri   rx   r   s   r9   r:   z%MapPanel.GetOptData.<locals>.<lambda>  s    ((22%e2T r;   r   )rf   r   r+   r2   r   r   r   r   re   r	  r(  rb   r;  r{   r)  r  r7   r   )r8   r  r   r  r  r.  r7   s   `      r9   r  zMapPanel.GetOptData  s?    d-----g6Gq'Cn$)$((DLLA$,TXXt||D
"*488T\\B'.txxF)$((DLLA+2DWZZ(""**T %&&..t/?/?/N/NO$GN/6D##G,r;   c                 h    t        j                  dd       | j                  j                  d       y)z^Set display extents to match selected raster (including
        NULLs) or vector map.
           zMapPanel.OnZoomToMap()N)r  )r   r  r'   	ZoomToMapra  s     r9   OnZoomToMapzMapPanel.OnZoomToMap  s(     			!-.   -r;   c                 <    | j                   j                  d       y)z?Set display extents to match selected raster map (ignore NULLs)T)ignoreNullsN)r'   r  ra  s     r9   OnZoomToRasterzMapPanel.OnZoomToRaster  s      T 2r;   c                 <    | j                   j                  d       y)zKSet display geometry to match extents in
        saved region file
        TzoomOnlyNr'   r!  ra  s     r9   OnZoomToSavedzMapPanel.OnZoomToSaved  s     	  $ /r;   c                 8    | j                   j                          y)zNSet computational region (WIND file) to match display
        extents
        N)r'   DisplayToWindra  s     r9   OnSetDisplayToWindzMapPanel.OnSetDisplayToWind  s     	$$&r;   c                 <    | j                   j                  d       y)zLSet computational region (WIND file) from named region
        file
        Fr  Nr  ra  s     r9   OnSetWindToRegionzMapPanel.OnSetWindToRegion  s     	  % 0r;   c                 8    | j                   j                          y)z-Set compulational region extent interactivelyN)r'   SetModeDrawRegionra  s     r9   OnSetExtentToWindzMapPanel.OnSetExtentToWind  s    ((*r;   c                 <    | j                   j                  d       y)z*Save display extents to named region file.Tr6  Nr'   
SaveRegionra  s     r9   OnSaveDisplayRegionzMapPanel.OnSaveDisplayRegion  s    !!$!/r;   c                 <    | j                   j                  d       y)z/Save computational region to named region file.Fr  Nr  ra  s     r9   OnSaveWindRegionzMapPanel.OnSaveWindRegion  s    !!%!0r;   c                 z   t               }t        d      | j                  ft        d      | j                  fdt        d      | j                  ft        d      | j
                  ft        d      | j                  fdt        d      | j                  ft        d      | j                  ff	D ]o  \  }}|rXt        j                  |t        j                  |      }|j                  |       | j                  t        j                  ||       `|j                          q | j!                  |       |j#                          y	)
zPopup Zoom menuzZoom to default regionzZoom to saved regionr  z,Set computational region extent from displayz-Set computational region extent interactivelyz*Set computational region from named regionz%Save display geometry to named regionz)Save computational region to named regionN)r!   r4   OnZoomToDefaultr  r  r  r  r  r  r   r  r  r  r~   r  AppendSeparatorr  r  )r8   r   zoommenur   handlermids         r9   
OnZoomMenuzMapPanel.OnZoomMenu  s   6 '($*>*>?%&(:(:;@A''
 AB&& ;<d>T>TU679Q9QR:;T=R=RS
 	+NE7" kk(BIIu=##C(		"++w4((*-	+4 	x r;   c                     || j                   _        | j                  r| j                  j                  |       || j                   _        || j                   _        || j                   _        || j                   _        y)z$Set properties of map display windowN)rg   
autoRenderrV   SetModeuseDefinedProjection
showRegionalignExtent
resolution)r8   r[  modeshowCompExtentconstrainRes
projectionr  s          r9   SetPropertieszMapPanel.SetProperties  sg     /5  +  !!))$/8B  5.<  +/:  ,.:  +r;   c                 @    d| j                   v r| j                   d   S dS )z"Returns toolbar with zooming toolsr&   N)r|   r   s    r9   rC  zMapPanel.GetMapToolbar  s!    ','=t}}U#G4Gr;   c                 :    | j                   j                  |d      S )zGet selected dialog if existN)r   get)r8   r-   s     r9   	GetDialogzMapPanel.GetDialog  s    ||d++r;   c                    | j                   d   r| j                   d   j                          yddlm}  || | j                        | j                   d<   | j
                  j                  | j                   d   j                         | j                   d   j                          | j                   d   j                          y)zDialog for v.net* modulesrI   Nr   )
VNETDialog)r)   r@   )
r   r$  vnet.dialogsr  r2   rT   rb   OnCloseDialogCenterOnScreenr   )r8   r   r  s      r9   OnVNetzMapPanel.OnVNet!  s    <<LL &&(+)dllKV&&t||F';'I'IJV++-V!!#r;   c                 @    | j                         j                          y)zvSets pointer mode.

        Sets pointer and toggles it (e.g. after unregistration of mouse
        handler).
        N)rC  r}   r   s    r9   rr   zMapPanel.ResetPointer.  s     	**,r;   c                 f    | j                   j                          |j                          || _         y)z-Notifies activated and disactivated map_wins.N)r'   DisactivateWinActivateWin)r8   map_wins     r9   r   zMapPanel._switchMapWindow6  s%    %%' r;   c                 l    ddl m}m} ddlm}  | j
                   j                                _         |  j
                   j                   j                         j                  d<    j                  j                  j                   j                  d   j                          j                  j                  j                   fd        j                  j                  j                   j                  d   j                          j                  j                  j                   j                  d   j                          j                  j                   j                   fd        j                  j"                  j                   j$                          j                  j'                  | fd	        j)                         j+                  d
t-        j.                         d         } j                  d   j1                  |        j                  d   j3                           j)                         j4                  j                   j6                          j)                         j8                  j                   j6                          j)                         j:                  j                   j6                          j<                  j?                   j                  d   t@        jB                  jE                         jG                  d      jI                  tK        d            jM                         jO                         jQ                  d      jS                  d      jU                  d      jW                  d      jY                  d      j[                         j]                  d      j_                  d      ja                         jc                   j                  d   je                                       j<                  jg                           j                  ji                          y)zbAdds raster digitizer: creates toolbar and digitizer controller,
        binds events and signals.r   )RDigitControllerEVT_UPDATE_PROGRESS)RDigitToolbarr]  )r)   r@   rc  r   rI  c                 R    j                   j                  j                  | d      S )Nr  )r-   r  )r2   
mapCreatedr  )r-   r8   s    r9   r:   z$MapPanel.AddRDigit.<locals>.<lambda>M  s!    00554x5P r;   c                 (    j                  | d      S )Nr   )r  r   s    r9   r:   z$MapPanel.AddRDigit.<locals>.<lambda>S  s    $:L:LTST:U r;   c                 z    j                   j                  | j                  | j                  | j                        S r=   )rV   rc   ranger?   r   )evtr8   s    r9   r:   z$MapPanel.AddRDigit.<locals>.<lambda>W  s+    --99		399chh r;   r  MAPSETr  mapsetzrdigit toolbarzRaster Digitizer Toolbarr   FTr   N)5rdigit.controllerr  r  rdigit.toolbarsr  r2   r   rI  r   r|   newRasterCreatedrb   NewRasterAddednewFeatureCreatedUpdateCellValuesuploadMapCategoriesshowNotificationr   
QuitRDigitr~   rS  rT  r  gisenvUpdateRasterLayersr}   r   _updateRDigitLayerslayerRemovedlayerChangedr   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   	Floatabler   r   r   r   r   r   rb  )r8   r  r  r  rg  s   `    r9   rJ  zMapPanel.AddRDigit=  s    	L1&t||t?P?P?RS"/<<{{++	#
h 	$$,,T]]8-D-S-ST$$,,P	
 	%%--dmmH.E.V.VW''//MM(#44	
 	$$,,-UV!!))$//:	
 ++-//5<<>(#; 0 
 	h227;h--/  (()A)AB""**4+C+CD""**4+C+CD		MM(#FF T"#WQ123[]SUSV\% ]5!^E"[Y[[U1X^Xt}}X.::<>!	
$ 			r;   c                     t        j                         d   }| j                  d   j                  | j	                         j                  d|             y )Nr  rI  r  r  rf  )r  r  r|   r  rS  rT  )r8   r   r  s      r9   r  zMapPanel._updateRDigitLayersz  sG    )h22KKM111P 	3 	
r;   c                    | j                   j                          | j                         j                  j	                  | j
                         | j                         j                  j	                  | j
                         | j                         j                  j	                  | j
                         | j                  j                  j	                  | j                  d   j                         | j                  dd       d| _         y)z[Calls digitizer cleanup, removes digitizer object and disconnects
        signals from Map.rI  TrP  N)rI  r  rS  r   r,  r  r  r  r   ra  r|   CheckSelectedToolrO  r   s    r9   r  zMapPanel.QuitRDigit  s     	  ++D,D,DE""--d.F.FG""--d.F.FG,,77MM(#55	
 	8T2r;   c                 *    | j                  dd       y)zQuit VDigitr   Tr  N)rO  r   s    r9   r   zMapPanel.QuitVDigit  s     	8T2r;   )Fr=   )T)r/  )FTr  )Fr   FFFT)K__name__
__module____qualname____doc__r4   rL   rv   r   r   r   r/  r4  rD  rU   rO  rX  r>   re  ro  rl  r  r  r  r  r  r  r  r|  r  r  r  rk   r  r  r'  r)  r#  r?  rV  rY  r[  rX  ri  rh  rw  r{  r  rm   ro   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC  r  r  rr   r   rJ  r  r  r   __classcell__)rQ  s   @r9   r%   r%   A   s    AF
>bQHH
B10-d4l"-&8'."'R&WPV:p ."$>F@)8)t-3/DL3/'&!&!$	(0&0(00,0%N.30'1+01F ;$H,$-!;z
3r;   r%   c                       e Zd ZdZd Zy)
MapDisplayz5Map display for wrapping map panel with frame methodsc	                    t        j                  | f|||||||d|	 |j                  t        j                  t
        j                  j                  t        j                  d      t        j                               t        j                         }
t        j                  ddd      rt        j                  ddd      }d|dz  z   }	 t        t        |j!                  d	      ||d
z          \  }}t        t        |j!                  d	      |d
z   |dz          \  }}|dk(  r|
d   }|dk(  r|
d   }|j#                  ||f       |j%                  ||f       n|j#                  |
d   |
d   f       |j)                  t        j*                  | j,                         | j.                  j1                  | j2                  t        j4                  t        j6                  f       | j9                          t        j:                  t        j<                        }|j?                  | dt        j@                         |jC                  |       |jE                          y # t&        $ r Y w xY w)N)r)   r@   r	  rN   r   r+   r*   zgrass_map.icogeneraldefWindowPosenabledr8  dim   r  r   r   r   )
proportionflag)#r%   rL   SetIconr   Iconr"  r  r6   r   ICONDIRBITMAP_TYPE_ICOClientDisplayRectr   r?  r&   r  r  SetPositionSetSize	Exceptionr~   r&  r  shortcuts_tabler  OnFullScreenACCEL_NORMALWXK_F11_initShortcutsBoxSizerVERTICALAddEXPANDSetSizerLayout)r8   r)   r@   r	  rN   r   idxr+   r*   r   client_dispr  r  r  r  hsizers                    r9   rL   zMapDisplay.__init__  s   
	

	
 
	
 	GGY..@"BTBT	
 **,)	R""uUCcAg+C3		#sS1W =>13		#sQwq AB16#AA6#AA""Aq6*1v&
 AA?@ 	BLL$"4"45 	##T%6%6$TU BKK(		$1299	5#  s   BI 	I#"I#N)r  r  r  r  rL   r   r;   r9   r
  r
    s
    ?4r;   r
  )?r  r"  r  corer   r   wx.auimapdisp.toolbarsr   r   mapdisp.gprintr   	core.gcmdr   r   r	   
core.utilsr
   r   gui_core.dialogsr   r   
core.debugr   core.settingsr   gui_core.mapdispr   r   gui_core.queryr   r   mapwin.bufferedr   mapwin.decorationsr   r   r   r   r   mapwin.analysisr   r   r   gui_core.formsr   core.gifacer   gui_core.vselectr   r    gui_core.wrapr!   r  r"   rW   grass.scriptscriptr  grass.pydispatch.signalr#   r%   r
  r   r;   r9   <module>r?     s   0 
   	  2 ' 2 2 = >  & 7 ; -  
  $ F  #  *Q3~ Q3h27X 7r;   