
    ը	f^}                     0   d Z ddlZddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddl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 m!Z! ddl"m#Z# ddl$m%Z%m&Z&  G d de      Z' G d dee'      Z( G d dejR                        Z*y)ad  
@package mapswipe.frame

@brief Map Swipe Frame

Classes:
 - frame::SwipeMapPanel
 - frame::SwipeMapDisplay
 - frame::MapSplitter

(C) 2012 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 Anna Kratochvilova <kratochanna gmail.com>
    N)DoubleMapPanel
FrameMixin)GetImageHandlers)Slider)Map)	statusbar)Debug)GErrorGMessage)LayerListToRendererConverter)	globalvar)QueryDialogPrepareQueryResults)SwipeMapToolbarSwipeMainToolbarSwipeMiscToolbar)SwipeBufferedWindow)SwipeMapDialogPreferencesDialogc                   $    e Zd Zdd ed      dfdZd Zd+ fd	Zd+ fd	Zd Zd	 Z	d
 Z
d Zd Zd Zd Z 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* xZ+S ),SwipeMapPanelNz	Map Swipeswipec           	      l	    t        j                   f|||t               t               d| t        j                  dd       dD ]  } j                  |         j                  j                          | _        t         t        j                         _        t         t        j                  t        j                         _        t         t        j                  t        j                          _         j$                  j&                  j)                   j*                         t-         j                   j                   j$                   j.                         _        t-         j                   j                   j$                   j2                         _         j0                  j6                  j)                   j8                          j4                  j6                  j)                   j8                          j0                  j;                  t        j<                   fd        j4                  j;                  t        j<                   fd	        j0                   _         j4                  j@                   j0                  _          jC                  d
       d _"        tF        jH                  tF        jJ                  tF        jL                  tF        jN                  tF        jP                  tF        jR                  g} jU                  |       _+         jY                           j[                           j]                   j0                          j]                   j4                          j                  j_                  d      ja                           j                  j_                  d      jc                           j                   _2         j;                  t        jf                   jh                          j;                  t        jj                   jl                          jo                  d        j                  j                          d d d _8        d  _9        d  _:        d  _;         jy                         j{                          d _>        t        j~                   j                         y )N)parenttitlenamefirstMap	secondMap   zSwipeMapPanel.__init__())	swipeMainswipeMap	swipeMisc)r   id)r#   style)r   giface
propertiesr   c                 &    j                  |       S NTrackCursorevtselfs    //usr/lib/grass83/gui/wxpython/mapswipe/frame.py<lambda>z(SwipeMapPanel.__init__.<locals>.<lambda>X   s    D<L<LS<Q     c                 &    j                  |       S r(   r)   r+   s    r.   r/   z(SwipeMapPanel.__init__.<locals>.<lambda>Y   s    T=M=Mc=R r0   Tr   sliderVsliderH)i   iX  )firstsecondF)Ar   __init__r   r	   msg
AddToolbar_mgrUpdate_gifaceMapSplitterwxID_ANYsplitterr   SL_HORIZONTALr3   SL_VERTICALr2   mapWindowPropertiesautoRenderChangedconnectOnAutoRenderChangedr   r   firstMapWindowr   secondMapWindow
mapQueriedQueryBind
EVT_MOTION	MapWindowzoomhistorySetBindRegions_modesbSbCoordinatesSbRegionExtentSbCompRegionExtentSbDisplayGeometry
SbMapScaleSbGoToCreateStatusbarr   	_addPanes_bindWindowsActivation_setUpMapWindowGetPaneHideShowsliderEVT_SIZEOnSizeEVT_IDLEOnIdleSetSizerasters_inputDialog_preferencesDialog_queryDialogGetMapToolbarSelectDefaultresize	CallAfterCallAfterInit)r-   r   r%   r   r   kwargsstatusbarItemss   `      r.   r6   zSwipeMapPanel.__init__)   sW    		
Ue	
 	
 			!/0 ; 	"DOOD!	"		 $4BII>dryy8H8HIdryyG  22::4;S;ST1==<<//	
  3==<<//	 
 	&&..tzz:''//

; 	  0QR!!"--1RS,,*.*>*>*J*J'D!
 !!  MMII
 --n=##%T001T112		)$))+		)$))+ll		"++t{{+		"++t{{+Z 		!%6 "&  	**,
T''(r0   c                 L   | j                   dk(  r|j                          y|j                         }|j                         | j                  j                         k(  r| j
                  j                  |       n| j                  j                  |       |j                          y)z_Track cursor in one window and show cross in the other.

        Only for mirror mode.
        r   N)coords)rO   SkipGetPositionGetIdrG   rF   DrawMouseCursor)r-   eventrp   s      r.   r*   zSwipeMapPanel.TrackCursor   s~    
 :: JJL""$;;=D006688//v/>  000?

r0   c                     t         t        |   |       | j                  j	                          | j                  j                          yzSwitch tracking directionN)superr   ActivateFirstMaprF   
ClearLinesRefreshr-   ru   	__class__s     r.   ry   zSwipeMapPanel.ActivateFirstMap   s6    mT3E:&&(##%r0   c                     t         t        |   |       | j                  j	                          | j                  j                          yrw   )rx   r   ActivateSecondMaprG   rz   r{   r|   s     r.   r   zSwipeMapPanel.ActivateSecondMap   s6    mT4U;'')$$&r0   c                    | j                          | j                  j                  | j                  | j                  d       | j                  j                          | j                  d   r| j                  d   s| j                  d        y y )Nr   r4   r5   ru   )InitSliderBindingsr?   SplitVerticallyrF   rG   Initrd   OnSelectLayersr-   s    r.   rl   zSwipeMapPanel.CallAfterInit   so    !%%d&9&94;O;OQRSW%$,,x*@d+ +Ar0   c                 n   | j                   j                         t        j                  k(  r| j                   j	                         d   }n| j                   j	                         d   }| j
                  j                  d|       | j
                  j                  | j                   j                                y )Nr   r   )	r?   GetSplitModer=   SPLIT_VERTICALGetSizer^   SetRangeSetValueGetSashPosition)r-   sizes     r.   ResetSliderzSwipeMapPanel.ResetSlider   s~    ==%%'2+<+<<==((*1-D==((*1-DQ%T]]::<=r0   c                 t   | j                   j                  t        j                  | j                         | j                   j                  t        j
                  | j                         | j                  j                  t        j                  | j                         | j                  j                  t        j
                  | j                         | j                  j                  t        j                  | j                         | j                  j                  t        j                  | j                         y r(   )r3   rJ   r=   EVT_SPINOnSliderPositionChangingEVT_SCROLL_THUMBRELEASEOnSliderPositionChangedr2   r?   EVT_SPLITTER_SASH_POS_CHANGINGOnSashChangingEVT_SPLITTER_SASH_POS_CHANGEDOnSashChangedr   s    r.   r   z SwipeMapPanel.InitSliderBindings   s    "++t'D'DE"44d6R6RS"++t'D'DE"44d6R6RS2<<d>Q>QR2;;T=O=OPr0   c                    t        j                  dd       d| j                         _        d| j	                         _        |j                         }|dkD  r7| j                  j                  |       | j                  j                  d       yy)z4Slider changes its position, sash must be moved too.   z(SwipeMapPanel.OnSliderPositionChanging()Tr   N)	r	   r7   GetFirstWindow
movingSashGetSecondWindowrr   r?   SetSashPositionr   )r-   ru   poss      r.   r   z&SwipeMapPanel.OnSliderPositionChanging   sq    		!?@+/(,0)!7MM))#.MM((. r0   c                     t        j                  dd       | j                  j                  |j	                                | j                  j                  d       y)z0Slider position changed, sash must be moved too.r   z'SwipeMapPanel.OnSliderPositionChanged()N)r	   r7   r?   r   rr   r   r-   ru   s     r.   r   z%SwipeMapPanel.OnSliderPositionChanged   s>    		!>?%%e&7&7&9:##D)r0   c                     t        j                  dd       | j                  j                  | j                  j                                |j                          y)z4Sash position is changing, slider must be moved too.r   zSwipeMapPanel.OnSashChanging()N)r	   r7   r^   r   r?   r   rq   r   s     r.   r   zSwipeMapPanel.OnSashChanging   s9    		!56T]]::<=

r0   c                 r    t        j                  dd       | j                  |       |j                          y)z0Sash position changed, slider must be moved too.r   zSwipeMapPanel.OnSashChanged()N)r	   r7   r   rq   r   s     r.   r   zSwipeMapPanel.OnSashChanged   s(    		!45E"

r0   c                     t        j                  dd       t        j                         | _        t
        t        |   |       y )N   zSwipeMapPanel.OnSize())r	   r7   grassclockrj   rx   r   r`   r|   s     r.   r`   zSwipeMapPanel.OnSize   s.    		!-.kkmmT)%0r0   c                    | j                   rt        j                         | j                   z
  dkD  r| j                         }| j	                         }| j
                  j                         }|j                  |       |j                  |       |j                  |       |j                  |       | j                          d| _         y y y )Ng?F)
rj   r   r   r   r   r?   r   SetClientSizer`   r   )r-   ru   w1w2sizeAlls        r.   rb   zSwipeMapPanel.OnIdle   s    ;;5;;=4;;6<$$&B%%'Bmm++-GW%W%IIeIIeDK =;r0   c                     | j                   j                         }|t        j                  z  }| j                   j	                  |       y)zAuto rendering state changed.N)r?   GetWindowStyler=   SP_LIVE_UPDATESetWindowStyle)r-   valuer$   s      r.   rE   z!SwipeMapPanel.OnAutoRenderChanged   s6    ,,."""$$U+r0   c                     |dk(  rPd| j                   vrt        |       | 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'                  d      j)                  | j                   d   j+                                      |dk(  r[d| j                   vr#t-        | | 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'                  d      j)                  | j                   d   j+                                      |d
k(  rQd
| j                   vrt1        |       | 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'                  d      j)                  | j                   d
   j+                                      yy)zAdd defined toolbar to the window

        Currently known toolbars are:
         - 'swipeMain'         - swipe functionality
         - 'swipeMap'          - basic map toolbar
         - 'swipeMisc'         - misc (settings, help)
        r    zMain ToolbarFT   r   r   r!   zMap Toolbarr"   zMisc ToolbarN)toolbarsr   r9   AddPaner=   auiAuiPaneInfoNameCaption_ToolbarPaneTopLeftDockableRightDockableBottomDockableTopDockableCloseButtonLayerRowPositionBestSizeGetBestSizer   _toolSwitcherr   )r-   r   s     r.   r8   zSwipeMapPanel.AddToolbar   s    ;$--/-=d-Ck*IIk*""$k">*+e$u%&T"U#qQ!4==5AACE$ :.,;D$BTBT,Uj)IIj)""$j!=)*e$u%&T"U#qQ!4==4@@BD$ ;$--/-=d-Ck*IIk*""$k">*+e$u%&T"U#qQ!4==5AACE	 r0   c                 T   | j                   j                  | j                  t        j                  j                         j                  d      j                  d      j                  d      j                  d      j                  d      j                  d      j                         j                  d      j                  | j                  j                                      | j                   j                  | j                   t        j                  j                         j                  d      j                  d      j                  d      j                  d      j#                  d      j%                  d      j'                  d      j)                  d      j+                  d      j-                  d      j/                         j                  d      j                  | j                   j                                      | j                   j                  | j0                  t        j                  j                         j                  d      j                  d      j                  d      j                  d      j#                  d      j%                  d      j'                  d      j)                  d      j+                  d      j-                  d      j3                         j                  d      j                  | j0                  j                                      | j5                          y)z9Add splitter window, sliders and statusbar to aui managerr?   FTr   r3   r2   N)r9   r   r?   r=   r   r   r   CaptionVisible
PaneBorderDockable	Floatabler   Centerr   r   r   r3   Gripper
GripperTopr   r   r   r   Bottomr2   RightAddStatusbarPaner   s    r.   rX   zSwipeMapPanel._addPanesC  s    			MMFF T*^E"ZXe_Yu[VXU1XXt}}0024	
 			LLFF T)_^E"Z[WT]Z^D![\% ]5!VXU1XXt||//13	
$ 			LLFF T)_^E"Z[WT]Z^E"[\$]4 UWU1XXt||//13	
& 	r0   c                 >   g }| j                   d   r|| j                  j                         z  }| j                   d   r|| j                  j                         z  }|rA| j	                         j                  |       | j                         j                  |       yy)zg
        Set display extents to match selected raster (including NULLs)
        or vector map.
        r4   r5   )layersN)rd   r   GetListOfLayersr   r   	ZoomToMapr   )r-   r   s     r.   r   zSwipeMapPanel.ZoomToMap|  s    
 << dmm3355F<<!dnn4466F!++6+:  ",,F,; r0   c                 $    | j                          y)zZoom to mapN)r   r   s     r.   OnZoomToMapzSwipeMapPanel.OnZoomToMap  s    r0   c                     | j                         j                          | j                  j                  | j                  _        | j                  | j                                y r(   )r   ZoomBackr   regionr   Renderr   r   s     r.   
OnZoomBackzSwipeMapPanel.OnZoomBack  sB    &&( $ 4 4D((*+r0   c                    | j                   t        | | j                  d   | j                  d   d d       }|j                  j	                  | j
                         | j                  |j                         | j                               | _	        | j                  |j                         | j                               | _        || _         |j                          |j                          y | j                   j                         r5| j                   j!                          | j                   j#                          y | j                   j                          y )Nr4   r5   )r4   r5   firstLayerListsecondLayerList)re   r   rd   applyChangesrD   OnApplyInputChanges_connectSimpleLmgrGetFirstSimpleLmgrGetFirstMap_firstConverterGetSecondSimpleLmgrGetSecondMap_secondConverterCentreOnParentr]   IsShownRaiseSetFocusr-   ru   dlgs      r.   r   zSwipeMapPanel.OnSelectLayers  s   $ ll7+||H-# $C $$T%=%=> $(#:#:&&($*:*:*<$D  %)$;$;'')4+<+<+>%D! !$D HHJ  ((*!!'')!!**,!!&&(r0   c                 l   t        |      }|j                  j                  |j                         |j                  j                  |j
                         |j                  j                  |j                         |j                  j                  |j                         |j                  j                  |j                         |j                  j                  |j                         |j                  j                  |j                         |j                   j                  | j"                         |S r(   )r   opacityChangedrD   ChangeLayerOpacity
cmdChangedChangeLayerCmd
layerAddedAddLayerlayerRemovedRemoveLayerlayerActivatedChangeLayerActivelayerMovedUpMoveLayerUplayerMovedDownMoveLayerDown	anyChange_simpleLmgrChanged)r-   lmgrrenderer	converters       r.   r   z SwipeMapPanel._connectSimpleLmgr  s    0:	##I$@$@A	 8 89	 2 23!!)"7"78##I$?$?@!!)"7"78##I$;$;<t667r0   c                 J    | j                         r| j                  d        y y )Nr   )IsAutoRenderedOnRenderr   s    r.   r   z SwipeMapPanel._simpleLmgrChanged  s!     MMM% !r0   c                    | j                   j                         \  }}| j                   j                         r||c| j                  d<   | j                  d<   | j	                  | j                  d         }| j                  | j                  d         }|r|sZ|s|rVd}|r |s|t        d      | j                  d   z  z  }|r |s|t        d      | j                  d   z  z  }|rt        | |       y | j                          nPt        | j                               j                  |       t        | j                               j                  |       | j                          | j                         r| j                  d        y y )	Nr4   r5   )r    zMap <%s> not found. zMap <%s> not found.r   messager   )re   	GetValuesIsSimpleModerd   SetFirstRasterSetSecondRasterr   r
   r   r   r   
ConvertAllr   SetRasterNamesr  r  )r-   r4   r5   res1res2r
  s         r.   r   z!SwipeMapPanel.OnApplyInputChanges  sS   ))335v))+<A69DLL!4<<#9&&DLL,A&BD''T\\(-C'DDTq!784<<;PPPG$q!67$,,x:PPPG$8NN()9)9);<GGN():):)<=HHP MMM% !r0   c                     |r_t        j                  |d      }|j                  d      r7|d   | j                  d<   | j	                  |d   | j                                yy)zSet raster map to first Mapcellr   elementfullnamer4   r   mapInstanceTF)r   	find_filegetrd   SetLayerr   r-   r   rasters      r.   r  zSwipeMapPanel.SetFirstRaster  sX    __$?Fzz*%(.z(:W%6*#54CSCSCUVr0   c                     |r_t        j                  |d      }|j                  d      r7|d   | j                  d<   | j	                  |d   | j                                yy)zSet raster map to second Mapr  r  r  r5   r  TF)r   r  r  rd   r  r   r  s      r.   r  zSwipeMapPanel.SetSecondRaster  sX    __$?Fzz*%)/
);X&6*#54CTCTCVWr0   c           	          t        j                  dd|z         |j                          dd|z  g}|j                  d|d|ddd	       y
)zESets layer in Map.

        :param name: layer (raster) name
           z!SwipeMapPanel.SetLayer(): name=%szd.rastzmap=%sr  TFg      ?)ltypecommandactiver   hiddenopacityrenderN)r	   r7   DeleteAllLayersr   )r-   r   r  cmdlists       r.   r  zSwipeMapPanel.SetLayer  s\    
 			!84?@ 	##%X_- 	 	
r0   c                     t        j                  dd       | j                  }|j                         |j	                         }}|j                  ||       |j                  ||       |j                  d       y)zSwitch windows position.r!  zSwipeMapPanel.OnSwitchWindows()N)r	   r7   r?   
GetWindow1
GetWindow2ReplaceWindowr   )r-   ru   r?   r   r   s        r.   OnSwitchWindowszSwipeMapPanel.OnSwitchWindows  sc    		!67==$$&(;(;(=Br2&r2&t$r0   c                    	
  j                   j                         } j                   j                         }dt        j                  d      dz   
t        j                  d      dz    j                   j                         \   G 	
 fdd      } |       } j                  dk(  r@|j                         \  |j                  
|       |j                  |       y	|j                         \  	|j                  
	|       |j                         \  }}|j                  |||       y	)
a  Creates composite image by rendering both images and
        pasting them into the new one.

        .. todo::
            specify size of the new image (problem is inaccurate scaling)
        .. todo::
            make dividing line width and color optional
        r   F12c                   >    e Zd ZdZd Zd Z 	
fdZy)*SwipeMapPanel._saveToFile.<locals>._onDonezCallback class that remembers how many times
            it was called. Needs to be called twice because
            we are pasting together 2 rendered images, so
            we need to know when both are finished.c                     d| _         y )Nr   )calledself2s    r.   r6   z3SwipeMapPanel._saveToFile.<locals>._onDone.__init__&  s	     r0   c                 n    | xj                   dz  c_         | j                   dk(  r| j                          y y )Nr   r   )r5  processr6  s    r.   __call__z3SwipeMapPanel._saveToFile.<locals>._onDone.__call__)  s*    !<<1$MMO %r0   c                    t        j                  	      }|j                  dddddd       j                  dk(  rj                  j                         t         j                  k(  rit        j                        j                  dd f      }|j                  |dd       |j                  t        j                          
z          n6t        j                        j                  dd 	f      }|j                  |dd       |j                  t        j                         
z           nΉj                  j                         t         j                  k(  rRt        j                        }|j                  |dd       |j                  t        j                        d
z          nQt        j                        }|j                  |dd       |j                  t        j                        
z   d       |j                         t        j                         t        j                         y )Nr      r   )r=   ImageReplacerO   r?   r   SPLIT_HORIZONTALGetSubImagePasteSaveFiler   
try_remove)r7  imim1fhfileNamefileType	filename1	filename2fwheight	lineWidthr-   widthxys      r.   r9  z2SwipeMapPanel._saveToFile.<locals>._onDone.process.  s   XXeV,

1aCc2 ::(}}113r7J7JJ hhy1==q!UQB>OPa+)!4qb1"y.I hhy1==q!aR>PQa+)!4qb9nqbI}}113r7J7JJ hhy1a+)!4aiH hhy1a+)!4b9naHHh/   +  +r0   N)__name__
__module____qualname____doc__r6   r:  r9  )rF  rG  rH  rI  rJ  rK  rL  rM  r-   rN  rO  rP  s   r.   _onDoner3     s!    7
!$
, , ,r0   rU  r   )callbackN)	r?   r+  r,  r   tempfileGetClientSizerO   GetImageCoords
SaveToFile)r-   rG  rH  r   r   rU  rV  swshrF  rI  rJ  rK  rL  rM  rN  rO  rP  s   ```      @@@@@@@@@r.   _saveToFilezSwipeMapPanel._saveToFile  s    ]]%%']]%%'	NN5)C/	NN5)C/	335v*	, *	, *	,X 9:: $$&DAqMM)XufxMPMM)XufxMP%%'FBMM)Xr2MI%%'FBMM)Xr2MIr0   c                    | j                   j                  xs | j                  j                  }|st        | t	        d             yt        |      \  }}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                          y)	zSave map to imagez2Nothing to render (empty map). Operation canceled.r	  Nz?Choose a file name to save the image (no need to add extension))r   r
  wildcardr$   typeext.)rF   imgrG   r   r   r   r=   
FileDialogFD_SAVEFD_OVERWRITE_PROMPT	ShowModalID_OKGetPathDestroyospathsplitextGetFilterIndexr]  )r-   ru   rc  filetyper"  r   rl  basera  rH  extTypes              r.   rZ  zSwipeMapPanel.SaveToFileW  s'   !!%%A)=)=)A)ANO *3/% mmT **r555
 ==?bhh&;;=D((.ID#S//126:HC..01%8Gg~czG+T8,r0   c                    t        j                  dd       | j                  }|j                          |j	                         t
        j                  k(  r|j                  | j                  | j                  d       | j                  | _        | j                  dk(  r| j                  j                  d      j                          | j                  j                  d      j!                          n|j#                  | j                  | j                  d       | j$                  | _        | j                  dk(  rR| j                  j                  d      j                          | j                  j                  d      j!                          | j                  j'                          |j)                  d       | j+                  d       | j-                          y)zSwitch orientation of the sash.r!  z#SwipeMapPanel.OnSwitchOrientation()r   r   r3   r2   N)r	   r7   r?   Unsplitr   r=   r?  r   rF   rG   r3   r^   rO   r9   r[   r]   r\   SplitHorizontallyr2   r:   r   r`   r  )r-   ru   r?   s      r.   OnSwitchOrientationz!SwipeMapPanel.OnSwitchOrientation|  sK   		!:;==  "b&9&99$$T%8%8$:N:NPQR,,DKzzW$		!!),113		!!),113&&t':':D<P<PRST,,DKzzW$		!!),113		!!),113		t$Dr0   c                      y)zFDouble click on text overlay

        So far not implemented.
        N r   s     r.   	OnAddTextzSwipeMapPanel.OnAddText  s    
 	r0   c                    | j                   |k(  ry|| _         | j                  d   j                  |       | j                         j                  |       | j	                         j                  |       | j
                  j                         t        j                  k(  rN| j                  j                  d      j                  |dk(         | j
                  j                         d   dz  }nM| j                  j                  d      j                  |dk(         | j
                  j                         d   dz  }| j
                  j                  |       | j                  j                  |       | j                  j!                          | j
                  j#                  |dk(         | j
                  j%                  d       | j'                          y)	zLSets view mode.

        :param mode: view mode ('swipe', 'mirror')
        Nr    r2   r   r   r   r3   r   )rO   r   SetModer   r   r?   r   r=   r?  r9   r[   r]   r   r   r^   r   r:   
EnableSashr   SendSizeEvent)r-   moder   s      r.   SetViewModezSwipeMapPanel.SetViewMode  s\   
 ::
k"**40%%d+&&t,==%%'2+>+>>IIi(--dgo>==((*1-2DIIi(--dgo>==((*1-2D%%d+T"		  1##D)r0   c                    | j                   r| j                   j                         rz| j                  d   r-| j                         j	                  | j                  d   d       | j                  d   r.| j                         j	                  | j                  d   d       y y | j                         j	                  dd       | j                         j	                  dd       y )Nr4   e   r5   f   r  )re   r  rd   r   SetRasterNameTextr   r   s    r.   r  zSwipeMapPanel.SetRasterNames  s      D$5$5$B$B$D||G$##%77W8MsS||H%$$&88h9OQTU & !33B<  "44R=r0   c           	      j     j                         j                  dd      D cg c]  }|j                          c} j                         j                  dd      D cg c]  }|j                          c}f} j                         j                  dd      D cg c]  }|j                          c} j                         j                  dd      D cg c]  }|j                          c}f}|d   |d   z   |d   z   |d   z   st	         t        d             y	d
 j                         j                  d    j                         j                  d   z
   j                         j                  z  z  } j                         j                  ||f      \  }}g }	t        j                  j                         }
|d   rM|d   D ]E  }t        j                  |      |
d<   |	j                  t        j                   |||fd|
             G |d   r,|	j                  t        j"                  |d   ||f|             |d   rM|d   D ]E  }t        j                  |      |
d<   |	j                  t        j                   |||fd|
             G |d   r,|	j                  t        j"                  |d   ||f|             t%        ||f|	      }	 j&                  r6 j&                  j)                           j&                  j+                  |	       y	t-         |	       _         j&                  j/                  t0        j2                   j4                          j&                  j6                  j9                   fd        j&                  j;                          y	c c}w c c}w c c}w c c}w )zSQuery active layers from both mapwindows.

        :param x,y: coordinates
        r  T)r"  r$  vectorr   r   z4No raster or vector map layer selected for querying.r	  Ng      $@ew)r  GRASS_REGION)mapcoord	localizedenv)r  r  distance)coordinatesresult)r   datac                 :    j                   j                  |       S r(   )r;   WriteLog)outputr-   s    r.   r/   z%SwipeMapPanel.Query.<locals>.<lambda>  s    t||44V< r0   )r   r   GetNamer   r   r   r   rN  r   
Pixel2Cellrk  environcopyr   
region_envextendraster_whatvector_whatr   rg   r   SetDatar   rJ   r=   	EVT_CLOSE_oncloseQueryDialogredirectOutputrD   r]   )r-   rO  rP  layerrd   vectorsqdisteastnorthr  r  r  s   `           r.   rI   zSwipeMapPanel.Query  s    "--/??"4 @   "..0@@"4 A  
" "--/??"4 @   "..0@@"4 A  
 
WQZ''!*4wqzAPQ  &&s+d.>.>.@.G.G.LL &&'

 ))+661v>ejjoo1:!!* &+&6&6f&EN#%%"4-4S 1:MM!!gajuPUV 1:!!* &+&6&6f&EN#%%"4-4S 1:MM!!gajuPUV %$vN##%%%f- +4f ED""2<<1I1IJ,,44< ""$cs   N!!N&N+N0c                 2    d | _         |j                          y r(   )rg   rq   r   s     r.   r  z!SwipeMapPanel._oncloseQueryDialog  s     

r0   c                      | j                   d   S )z"Returns toolbar with zooming toolsr!   )r   r   s    r.   rh   zSwipeMapPanel.GetMapToolbar  s    }}Z((r0   c                 <    | j                   j                  d       y )NzwxGUI.mapswipe)entry)r;   Helpr   s     r.   OnHelpzSwipeMapPanel.OnHelp"  s     01r0   c                     | j                   s8t        | | j                        }|| _         | j                   j                          | j                   j	                          y )Nr   r%   )rf   r   r;   CenterOnParentr]   r   s      r.   OnPreferenceszSwipeMapPanel.OnPreferences%  sG    &&#4EC&)D###224$$&r0   c                    | j                         j                          | j                         j                          | j                  j	                          | j
                  r| j
                  j	                          | j                          y r(   )r   Cleanr   r9   UnInitre   rj  r   s     r.   OnCloseWindowzSwipeMapPanel.OnCloseWindow-  s`      "!!#		$$&r0   r(   ),rQ  rR  rS  r   r6   r*   ry   r   rl   r   r   r   r   r   r   r`   rb   rE   r8   rX   r   r   r   r   r   r   r   r  r  r  r.  r]  rZ  ru  rx  r~  r  rI   r  rh   r  r  r  __classcell__)r}   s   @r.   r   r   (   s    $an7^)@ &',>Q
/*1
 ,IV7 r<,
):
&&0		
*	%FJP#J.:>W%r)2'r0   r   c                       e Zd ZdZd Zy)SwipeMapDisplayz5Map display for wrapping map panel with frame methodsc                    t        j                  | f||d| |j                  t        j                  t
        j                  j                  t        j                  d      t        j                               |j                  t        j                  | j                         | j                  j                  | j                   t        j"                  t        j$                  f       | j'                          t        j(                  t        j*                        }|j-                  | dt        j.                         |j1                  |       |j3                          y )Nr  zgrass_map.icor   )
proportionflag)r   r6   SetIconr=   Iconrk  rl  joinr   ICONDIRBITMAP_TYPE_ICOrJ   r  r  shortcuts_tableappendOnFullScreenACCEL_NORMALWXK_F11_initShortcutsBoxSizerVERTICALAddEXPANDSetSizerLayout)r-   r   r%   rm   sizers        r.   r6   zSwipeMapDisplay.__init__9  s    	
	
 		
 	GGY..@"BTBT	
 	BLL$"4"45 	##T%6%6$TU BKK(		$1299	5r0   N)rQ  rR  rS  rT  r6   rw  r0   r.   r  r  6  s
    ?r0   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	r<   z'Splitter window for displaying two mapsc                 d   t         j                  j                  | ||t         j                         t	        j
                  dd       d| _        d| _        | j                  t         j                  | j                         | j                  t         j                  | j                         d| _        y )N)r   r#   r$   r   zMapSplitter.__init__()r   
   T)r=   SplitterWindowr6   r   r	   r7   sashWidthMinsashWidthMaxrJ   r   r   r   r   	_moveSash)r-   r   r#   s      r.   r6   zMapSplitter.__init__Y  s    
""42REVEV"W		!-.		"22D4F4FG		"33T5H5HIr0   c                     || _         y r(   )r  )r-   enables     r.   r{  zMapSplitter.EnableSashc  s	    r0   c                 J    | j                  d        | j                  d       y )N)r,   r   )r   SetMinimumPaneSizer   s    r.   r   zMapSplitter.Initf  s!    t$"r0   c                     t        j                  dd       | j                  sy | j                         | j	                         }}d|_        d|_        t        j                  | j                         y )Nr   zMapSplitter.OnSashChanged()F)	r	   r7   r  r+  r,  r   r=   rk   SashChanged)r-   r,   r   r   s       r.   r   zMapSplitter.OnSashChanged  sR    		!23~~"DOO$5B
T%%&r0   c                    t        j                  dd       | j                         | j                         }}|j	                  d       | j                         t        j                  k(  r(|j                         d   }|j	                  | df       n'|j                         d   }|j	                  d| f       |j                  dd       |j                  dd       | j                         }|| _        y )Nr   zMapSplitter.SashChanged())r   r   r   r   F)r'  renderVector)r	   r7   r+  r,  SetImageCoordsr   r=   r   r   	UpdateMapr   last)r-   r   r   r  hr   s         r.   r  zMapSplitter.SashChanged  s    		!01"DOO$5B
&!""3"33

QAr1g&

QAq1"g&
E6
E6""$	r0   c                    t        j                  dd       | j                  s|j                  d       y | j	                         t
        j                  z  s|r|j                          y | j                         }|| j                  z
  }|| _	        | j                         t
        j                  k(  r| }d}nd}| }| j                         j                  ||       d| j                         _        d| j                         _        y )Nr   zMapSplitter.OnSashChanging()r   T)r	   r7   r  r   r   r=   r   rq   r   r  r   r   r,  TranslateImager+  r   )r-   ru   r   dposdxdys         r.   r   zMapSplitter.OnSashChanging  s    		!34~~!!"%##%(9(99

""$TYY	""3"33BBBB((R0'+$'+$r0   N)
rQ  rR  rS  rT  r6   r{  r   r   r  r   rw  r0   r.   r<   r<   V  s#    1 #8'$,r0   r<   )+rT  rk  r=   grass.scriptscriptr   gui_core.mapdispr   r   gui_core.dialogsr   gui_core.wrapr   core.renderr   mapdispr   rP   
core.debugr	   	core.gcmdr
   r   core.layerlistr   corer   gui_core.queryr   r   mapswipe.toolbarsr   r   r   mapswipe.mapwindowr   mapswipe.dialogsr   r   r   r  r  r<   rw  r0   r.   <module>r     sq   $ 
 	  7 -    #  & 7  ; Q Q 2 >KN K\j- @^,"## ^,r0   