
    ը	f                    B   d Z ddlZddlZddlZddlZej
                  j                  dk\  reZddl	m
Z ddlZddlZ	 ddlmc mc mZ ddlmc mZ ddlmc mc 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% dd
l&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZCmDZDmEZE  G d dej                        ZG G d de:      ZH G d dej                        ZI G d dej                        ZJ G d dej                        ZK G d dej                        ZM G d dej                        ZN G d d ej                        ZO G d! d"e2ej                  ej                        ZRy# e$ r ddlmc mZ Y Tw xY w)#a  
@package vnet.dialogs

@brief Dialogs for vector network analysis front-end

Classes:
 - dialogs::VNETDialog
 - dialogs::PtsList
 - dialogs::SettingsDialog
 - dialogs::CreateTtbDialog
 - dialogs::OutputVectorDialog
 - dialogs::VnetStatusbar
 - dialogs::DefIntesectionTurnCostDialog
 - dialogs::DefGlobalTurnsDialog
 - dialogs::TurnAnglesList

(C) 2012-2013 by the GRASS Development Team

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

@author Stepan Turek <stepan.turek seznam.cz> (GSoC 2012, mentor: Martin Landa)
@author Lukas Bocan <silent_bob centrum.cz> (turn costs support)
@author Eliska Kyzlikova <eliska.kyzlikova gmail.com> (turn costs support)
    N   )core)	globalvar)
RunCommandGMessage)UserSettings)	DbMgrBase)	GNotebook)GConsoleWindow)SelectLayerSelectColumnSelect)BitmapButtonBitmapFromImageButtonCheckBoxComboBoxListCtrlPanelScrolledPanelSpinCtrl	StaticBox
StaticTextTextCtrl)
PointsList)MainToolbarPointListToolbarAnalysisToolbar)VNETManager)DegreesToRadiansRadiansToDegreesGetNearestNodeCatParseMapStrc                   t   e Zd Zej                   ed      ej                  ej                  z  fdZd Z	d Z
d Zd Zd Zd Zd	 Zd
 Zd0d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%d0d!Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4y)1
VNETDialogzVector Network Analysis Toolc                 	   t        j                  j                  | ||f||d| | j                  t        j                  t
        j                  j                  t        j                  d      t         j                               || _        |j                         | _        || _        d| _        d| _        ddg| _        t%        | |      | _        | j&                  j(                  j+                  | j,                         | j&                  j.                  j+                  | j0                         | j&                  j2                  j+                  | j4                         | j&                  j6                  j+                  | j8                         | j&                  j;                  d      \  | _        }i | _        tA        | | j&                        | j>                  d	<   tC        | | j&                        | j>                  d
<   t         jD                  jG                  |       | _$        tK        |       | _&        tO        | jL                  t        jP                        | _)        ddd| _*        tW        | jL                  d      | _,        | jX                  j[                  d       d| _.        i | _/        | ja                          i | _1        | je                          | jg                          i | _4        | jk                          i | _6        | j                  r(| j                  jo                         | jl                  d<   nd| jl                  d<   | jR                  jq                  tr        jt                  | jv                         | jq                  t         jx                  | jz                         | j}                          | j                          | jH                  j                          | j                  d       | j                  d       | j                  r8| j                  j                  t        | j                         d   dz               | j                  d       | jR                  j                  d       | j>                  d
   j                  d| j>                  d	   j                         d   f       | j>                  d	   j                  dd       y)z"Dialog for vector network analysisstyletitlez	grass.icoNFintegerzdouble precisionanalysisparentvnet_mgrmainToolbaranalysisToolbarr-   )r-   r(         )	important
iformationr   )numberinput)r  i&  )r8   i  g      ?
parameters)JwxDialog__init__SetIconIconospathjoinr   ICONDIRBITMAP_TYPE_ICOr-   GetMapWindowmapWingiface
tmp_resultdefIsecTurnsHndlrRegcolumnTypesr   r.   analysisDoneconnectAnalysisDone
ttbCreated
TtbCreatedsnappingSnappingpointsChangedPointsChangedGetParamcurrAnModuletoolbarsr   r   aui
AuiManager_mgrr   	mainPanelr
   FNPageDStylenotebookstPrioritiesVnetStatusbarstBarSetFieldsCountdef_isec_turns
anSettings_createPointsPage	inputData_createParametersPage_createOutputPageinpDbMgrData_checkSelectedVectorMapresultDbMgrDataGetVectMapNameBindFNEVT_FLATNOTEBOOK_PAGE_CHANGEDOnPageChanged	EVT_CLOSEOnCloseDialog	_addPanes_doVnetDialogLayoutUpdateSetSize
SetMinSizegwindowSetSashPositionintGetSizeOnAnalysisChangedSetSelectionByNameUpdateUndoRedo)selfr-   rG   idr)   r(   kwargsvalids           -/usr/lib/grass83/gui/wxpython/vnet/dialogs.pyr=   zVNETDialog.__init__X   s    			4P5PPGGBGGLL!2!2K@"BTBTU	
 ))+ $)! &'9:#D&1""**4+<+<=  ((9&&t}}5##++D,>,>?#'==#9#9*#E 5 '2$'Wm$+:$--,
'( FF%%d+	d+!y?U?UV +,1="$..B


!!!+"   ""$ 	  $$&  "??,0OO,J,J,LD  ),0D  )2;;T=O=OP		",, 2 23  "		Z 
# <<LL((T\\^A->-E)FGt$((6'(33}-557:;	
 	m$33Aq9    c                 L   | j                   j                  | j                  d   t        j                  j                         j                  d      j                  t        d            j                         j                         j                  d      j                  d      j                  d      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                   j                  | j                  t        j                  j                         j                  d
      j!                  d      j#                         j                  d      j                  d      j                  d             y)z$Adds toolbar pane and pane with tabsr/   pointlisttoolszPoint list toolbarr   Fr0   analysisToolszAnalysis toolbarr3   tabs)visibleN)rY   AddPanerV   r;   rW   AuiPaneInfoNameCaption_ToolbarPaneTopRowDockableCloseButtonLayerrZ   CaptionVisibleCenterr}   s    r   rq   zVNETDialog._addPanes   s_   		MM-(FF T"#WQ+,-[]SUSVXe_[U1X	
 			MM+,FF T/"WQ)*+[]SUSVXe_[U1X	
 			NNFF T&\^E^*VXXe_[U1X		
r   c                 r   t        j                  t         j                        }|j                  | j                  dt         j
                         |j                  | j                  dt         j
                         | j                  j                  |       |j                  |        | j                          y )Nr3   
proportionflagr   )r;   BoxSizerVERTICALAddr\   EXPANDr_   rZ   SetSizerFitLayoutr}   sizers     r   rr   zVNETDialog._doVnetDialogLayout   sn    BKK(		$--ABII	>		$**	;&		$r   c                 
    t               }t        |      }t        |      }d}t        |t        j                  dt	        d      z        }t        j
                  |t        j                        }t        |t        j                  dt	        d      z        }t        j
                  |t        j                        } j                  j                  |t	        d      d	       t        | j                  
       _         j                  j                         j                         }	t        ||	  j                         j                   d<   t#        |t        j                  t	        d            }
t%        |t        j                  d|       j&                  d<    j&                  d   j)                  t        j*                   fd        j&                  d   j-                  d        j/                          t        |      }t#        |t        j                  t	        d            }t1        |t        j                         j&                  d<    j&                  d   j)                  t        j2                   fd        j&                  d   j-                  d        j5                          t        j6                  t        j                        }|j9                   j                   d   d       |j9                   j                  dt        j:                         t        j6                  t        j<                        }|j9                  |
t        j>                  d       |j9                   j&                  d   t        j:                  t        j@                  z  dd       |jC                  |       |j9                  |dt        j:                         t        j6                  t        j<                        }|j9                  |t        j>                  d       |j9                   j&                  d   t        j:                  t        j@                  z  dd       |jC                  |       |j9                  |dt        j:                         |j9                  |dt        j:                  t        j@                  z  d       |j9                  |dt        j:                  t        jD                  z  t        jF                  z  t        jH                  z  d       |jC                  |       |jC                  |       y) z*Tab with points list and analysis settingsr1       חA %s zPoints for analysis:r-   r~   labelzAnalysis settings:Pointspointspagetextnamer,   )r-   toolSwitcherdialogr.   
pointsListz)Maximum distance of point to the network:r   r-   r~   minmaxmax_distc                 $    j                         S N)MaxDisteventr}   s    r   <lambda>z.VNETDialog._createPointsPage.<locals>.<lambda>   s     r   i z
Iso lines:r-   r~   	iso_linesc                 $    j                         S r   )IsoLinesr   s    r   r   z.VNETDialog._createPointsPage.<locals>.<lambda>.  s    T]]_ r   z1000,2000,3000)r   r3   r   r   r   r2   r   borderr   r   r   r   N)%r   r   r;   ID_ANYr   StaticBoxSizerr   r\   AddPagePtsListr.   listrG   GetMapDisplayGetToolSwitcherr   rV   r   r   rb   rk   EVT_SPINCTRLSetValuer   r   EVT_TEXTr   r   r   r   
HORIZONTALALIGN_CENTER_VERTICALALLr   RIGHTLEFTBOTTOM)r}   pointsPanelanSettingsPanelmaxDistPanelmaxValuelistBox	listSizeranSettingsBoxanSettingsSizerr   maxDistLabelisoLinesPanelisoLineslabelAnalysisSizermaxDistSizerisoLinesSizers   `               r   rc   zVNETDialog._createPointsPage   s   4({3O4299FQ?U=V4V
 %%gr{{;	!"ryyCWAX8X
 ++M2;;G;Qx[xP;G	{{002BBD&6%]]	'
l# "yy?@

 '/yy	'

# 	
#((:VW
#,,V4 _5" RYYao
 (0}'S$$))"++7TU$--.>? BKK0dmmL1a@diiABII>{{2==1B,D,DQRSOOJ'bii"&&.@WX 	 	
 	l+LQRYYG BMM2-b.F.FSTUOOK(RVV#	 	 	
 	}-MabiiH)		BFF8JSTURXX%/"));	 	 	
 	  1]+r   c                 z    | j                   d   j                         }| j                  j                  d|ii        y )Nr   rb   GetValuer.   	SetParamsr}   vals     r   r   zVNETDialog.MaxDist\  s2    ooj)224S 126r   c                 z    | j                   d   j                         }| j                  j                  d|ii        y )Nr   r   r   s     r   r   zVNETDialog.IsoLines`  s2    ook*335c 2B7r   c                    |j                         }|rR| j                  rF| j                  j                          | j                         }| j                  j                  |       nE| j                  j                          | j                         }| j                  j                  |       | j                  j                  j                  dd       y)zDShows vector map with minimal cut (v.net.flow) - not yet implementedTrenderrenderVectorN)		IsCheckedrH   DeleteRenderLayerGetLayerStylevnetFlowTmpCutAddRenderLayerrG   	updateMapemit)r}   r   r   cmds       r   	OnShowCutzVNETDialog.OnShowCutd  s    oo4??OO--/$$&C..s3113$$&COO**3/""$T"Br   c                    t        |       }| j                  j                  |t        d      d       | j                  j
                  }t        || j                  |      | _        t        j                  t        j                        }|j                  | j                  dt        j                         | j                  j                  d       |j                  |       y	)
zTab with output consoler1   Outputoutputr   )r-   rG   gconsoler3   r   r:   r:   N)r   r\   r   r   r.   goutputr   rG   rv   r;   r   r   r   r   ru   r   )r}   outputPanelr   outputSizers       r   rf   zVNETDialog._createOutputPager  s    4(;Qx[xP--''%t{{W
 kk"++.C)[)r   c                 H
    t               } j                  j                  |t        d      d       i }ddt        gddt
        gd	d
t
        gddt        gddt        gddt        gg}t        |dd      }t        j                  |t        j                        }t        |dd      }t        j                  |t        j                        }i }|D ]  }	t        |      ||	d   <   |	d   dk(  r |	d   ||	d      dd       j                  |	d   <   t        j                  t        j                  j!                  t"        j$                  dd            }
|
j'                  dd       t)        |
      }
t+        ||	d      |
t"        j,                         _         j.                  j1                  t        d              j.                  j3                           j.                  j5                  t        j6                   j8                         n+|	d   dk7  r# |	d   ||	d      d       j                  |	d   <   t;        ||	d      |	d         ||	d   <   ||	d      j=                  |	d            j                  d   j5                  t        j>                   j@                          j                  d   j5                  t        j>                   jB                          j                  d	   j5                  t        j>                   jD                         dD ]2  } j                  |   j5                  t        j>                   fd        4 t        jF                  t        j                        }|jI                  |dt        jJ                  t        jL                  z  t        jN                  z  t        jP                  z  d!"       d#D ]q  }|dk(  r j.                  }nd$}||   jS                   jU                  ||    j                  |   |%             |jI                  ||   dt        jJ                  &       s |jI                  |dt        jJ                  t        jL                  z  t        jN                  z  t        jP                  z  d!"       dD ]\  }||   jS                   jU                  ||    j                  |   '             |jI                  ||   dt        jJ                  &       ^ |jS                  |       |jW                          |jY                  d       y$)(z&Tab for selection of data for analysisr1   
Parametersr9   r   r7   Choose vector map for analysis:	arc_layerzArc layer number or name:
node_layerzNode layer number or name:
arc_column arc_backward_columnnode_columnr:   "Vector map and layers for analysisCostsr      r   vectorr-   sizetypegrasszlayer-vector-add.png   )r-   bitmapr  Add vector map into layer treer-   r  r-   r   r3   r  r  r  c                 $    j                         S r   )_setInputDatar   s    r   r   z2VNETDialog._createParametersPage.<locals>.<lambda>  s    4CUCUCW r   r2   r   )r7   r   r  Nr)   selbtnr   )r)   r  )-r   r\   r   r   r   r   r   r   r;   r   r   r   rd   Imager@   rA   rB   r   rC   Rescaler   r   DIALOG_COLOR_SIZEaddToTreeBtn
SetToolTipDisablerk   
EVT_BUTTONOnToTreeBtnr   SetLabelr   	OnVectSelOnALayerSelOnNLayerSelr   r   r   TOPr   r   r   _doSelLayoutSetupScrollingSetAutoLayout)r}   	dataPanelr   dataSelectsboxbsizerbox2bsizer2	selPanelsdataSeliconparams	mainSizerr  r  s   `              r   re   z VNETDialog._createParametersPage  s   !.	91\?V7@5{C7E 2|,"B5B-	
 	2'KL""34B0##D"++6	" 	3G$)$;Igaj!qzW$-7WQZ$WQZ0xh.wqz* xxGGLL!2!2G=ST R$&t,$0$WQZ0"44%!
 !!,,Q/O-PQ!!))+!!&&r}}d6F6FGw& .8WQZ$WQZ0x.wqz* !+ ,71:!E'!* '!*&&wqz2?	3B 	w$$R[[$..A{#((d6F6FG|$))"++t7G7GH K 	YFNN6"''5WX	Y KK,	qryy266'9BGG'Cbhh'NWX 	 	

 8 	ECg~'' 
 cN##!!c
s8KQT!U JJy~!"))JD	E  	RVV#bgg-8	 	 	
 H 	FCcN##!!c
s8K!L KK	#1299KE		F 	9%  ""r   Nc                 N   t        j                  t         j                        }t        j                  t         j                        }|j	                  |dt         j
                  t         j                  z  t         j                  z  d       |j	                  |dt         j                         |rt        j                  t         j                        }|j	                  |dt         j                  t         j                  z         |j	                  |dt         j                  t         j                  z         |j	                  |dt         j                  t         j                  z  d       |S |j	                  |dt         j                  t         j                  z  d       |S N)orientr3   r2   r   r   r   )	r;   r   r   r   r   r   r%  r   r   r}   r)   r  r  selSizerselTitleSizerselFiledSizers          r   r&  zVNETDialog._doSelLayout  s    ;;bkk2BMM2abgg&6&B1 	 	
 	]qryyAKKr}}=Mcabii"&&6HIcabii"&&6HILL1299rvv;MVWLX  LLRVV1CALNr   c                 H   d}| j                   j                         j                         }|5|j                  dk(  r&|j                  j
                  }| j                          d| j                  d<   |r0| j                  d   j                  |       | j                  d       yy)zCheck selected vector mapNr	  r7   )rG   GetLayerListGetSelectedLayerr  maplayerr   _createInputDbMgrPagerg   rd   r   r"  )r}   
selMapNamelayers      r   rh   z"VNETDialog._checkSelectedVectorMap	  s    
((*;;=x!7,,J&&(%)'"NN7#,,Z8NN4  r   c                     t               | j                  d<   | j                  d   j                  | j                  d      | j                  d<   y)z2Tab with attribute tables of analysis input layersdbMgrbrowser-   pageNameN)r	   rg   CreateDbMgrPager\   r   s    r   r?  z VNETDialog._createInputDbMgrPage  sI    %.['"&*&7&7&@&P&P==8 'Q '
(#r   c                    |rS| j                   j                  d      dk(  r5| j                   j                  | j                  d   t	        d      d       y|s6| j                   j                  | j                   j                  d             yy)zShow or hide input tables tab
inputDbMgrr:   rD  zInput tablesr   r   N)r\   GetPageIndexByNamer   rg   r   
RemovePage)r}   shows     r   _updateInputDbMgrPagez VNETDialog._updateInputDbMgrPage  s~    DMM44\BbHMM!!&&x0~&! " 
 MM$$]]55lC %  r   c                     t               | j                  d<   | j                  d   j                  | j                  d      | j                  d<   y)z3Tab with attribute tables of analysis result layersrC  rD  rE  N)r	   ri   rG  r\   r   s    r   _createResultDbMgrPagez!VNETDialog._createResultDbMgrPage,  sI    (1W%)-)=)=g)F)V)V==8 *W *
X&r   c                    | j                   d   }| j                  j                  |      d   d   }|rc| j                  j	                  d      dk(  rE| j                          | j                  j                  | j                   d   t        d      d       y
|s>| j                  j	                  d      }|dk7  r| j                  j                  |	       y
y
y
)zShow or Hide Result tables tabr+   resultPropsrC  resultDbMgrr:   rD  zResult tablesr   rJ  N)	ri   r.   GetAnalysisPropertiesr\   rK  rP  r   r   rL  )r}   r+   	haveDbMgrr   s       r   _updateResultDbMgrPagez!VNETDialog._updateResultDbMgrPage3  s     ''
3 MM77A-P
	 99-HBN'')MM!!))(3'" " 
 ==33MBDrz((d(3  r   c                    |j                         | j                  k(  r+g }|j                  | j                  j                  d             |j                  | j                  j                  d             | j                  j	                         |v ra| j
                  j                  t        d      d| j                  d          | j                          | j
                  j                  d       nX| j                  j	                         | j                  j                  d      k(  r"| j                  d	       | j                  d	       | j                          y	)
zTab switchedrI  rS  zLoading tables...rC  r4   r   keypriorityrY  r9   N)GetEventObjectr\   appendrK  GetSelectionr_   AddStatusItemr   r]   _updateDbMgrDataRemoveStatusItemr#  r$  r   )r}   r   
dbMgrIndxss      r   rn   zVNETDialog.OnPageChangedI  s   !T]]2Jdmm>>|LMdmm>>}MN}}))+z9

((./!..{; ) 
 %%'

+++8 ++-1Q1Q2    &  &r   c                 V   | j                   j                         | j                   j                  d      k(  r| j                          y| j                   j                         | j                   j                  d      k(  r| j	                          y| j
                  j                  d       y)z Updates input/result tables pagerI  rS  managerN)r\   r^  rK  _updateInputDbMgrData_updateResultDbMgrDatar_   ra  r   s    r   r`  zVNETDialog._updateDbMgrDataa  s    ==%%'4==+K+K,
 
 &&(]]'')T]]-M-M.
 
 '')JJ''	2r   c                    | j                   d   j                         j                         }| j                  d   |k7  rt	        j
                          | j                  d   j                  |       || j                  d<   dD ]G  }	 t        | j                   |   j                               }| j                  d   j                  |       I t	        j                          yg }| j                  d   j                         }dD ]  }	 t        | j                   |   j                               }||v r|j                  |       @t	        j
                          | j                  d   j                  |       t	        j                          |j                  |        |D ]%  }||vs| j                  d   j                  |       ' y# t        $ r Y Pw xY w# t        $ r Y w xY w)z9Loads data according to selected layers in Parameters tabr7   rC  
vectorNamer   r  rD  N)rd   r   striprg   r;   BeginBusyCursorChangeVectorMaprx   
ValueErrorAddLayerEndBusyCursorGetAddedLayersr]  
DeletePage)r}   inpSel	layerNamerA  
needLayersbrowseLayersinpLayers          r   re  z VNETDialog._updateInputDbMgrDatan  s   (11399;W%/ g&66&6I)/Dg&8 <	y 9 B B DEE !!(+44U;<  J,,X6EEGL8 0	"4>>)#<#E#E#GHH |+%%h/&&(%%h/88B$$&%%h/0 & B
*%%h/::5AB/ "  " s$   &G&G	GG	G"!G"c                    | j                   sy| j                   j                         }| j                  d   |k7  rt        j                          | j                  d   }|j                  |       |j                         D ]   }| j                  d   j                  |       " || j                  d<   t        j                          yy)z#Loads data from analysis result mapNr7   rC  rh  rD  )	rH   rj   ri   r;   rl  rm  GetVectorLayersro  rp  )r}   vectNamerC  rA  s       r   rf  z!VNETDialog._updateResultDbMgrData  s    ??113(H4 ((1E!!X!6..0 ?$$X.77>? -5D  ) 5r   c                    | j                   d   j                         }t        |      \  }}|dz   |z   }t        j                  |d|      }|d   sydd|z   g}	 | j
                  j                         j                  d||d	
       y)r  r7   @r	  )r   elementmapsetr   Nzd.vectzmap=T)ltyper   r   checked)rd   r   r#   r  	find_filerG   r<  ro  )r}   r   	vectorMapvectMapNamemapSet	existsMapr   s          r   r   zVNETDialog.OnToTreeBtn  s    NN7+446	))4V#%.	OOhvV	 )+,KK$$&//Ci 0 r   c                 .   | j                   j                         rv| j                  d   j                         j	                          | j                  d   j                         j	                          | j
                  j                  i ddi       nu| j                  d   j                         j                          | j                  d   j                         j                          | j
                  j                  i ddi       | j                          y )N
turn_layerturn_cat_layertT)r2  flagsF)	useTurnsr   rd   	GetParentShowr.   r   Hider   r   s    r   UseTurnszVNETDialog.UseTurns  s    ==""$NN<(22499;NN+,668==?MM##2c4[#ANN<(22499;NN+,668==?MM##2c5\#Br   c                    |dk(  r7|d   s2| j                   d   }|r!|j                  |j                  d      d       |dk(  r7|d   r2| j                   d   }|r!|j                  |j                  d      d       |dk(  rAd|j                         v sd	|j                         v r| j                  j                  d
       y y y )NEditMode	activatedr   insertPointFTSetPointDataenr   )rV   
ToggleTool	GetToolIdkeysr\   r{   )r}   methodr   ptListToolbars       r   rS   zVNETDialog.PointsChanged  s    Z{(; MM,7M(()@)@)OQVWZF;$7 MM,7M(()@)@)OQUV^#)=AUMM,,X6 BV#r   c                    | j                   j                         \  }}}t        | |      }|j                         t        j
                  k(  rz| j                  j                  t        d      d| j                  d          |j                         }| j                   j                  |      s| j                  j                  d       |j                          y )N)r-   	init_datazCreating turntable...ttbr4   rX  )r.   	GetParamsCreateTtbDialog	ShowModalr;   ID_OKr_   r_  r   r]   GetData
CreateTttbra  Destroy)r}   r   r2  
err_paramsr  dlgs         r   OnCreateTtbBtnzVNETDialog.OnCreateTtbBtn  s    $(MM$;$;$=!
ETV<==?bhh&JJ$$./**;7 %  [[]F==++F3

++E2r   c                     | j                   j                         \  }}}| j                  ||       | j                  j	                  d       y )Nr  )r.   r  _updateParamsTabr_   ra  )r}   r2  r  r  s       r   rO   zVNETDialog.TtbCreated  s=    $(MM$;$;$=!
Efe,

##E*r   c                    | j                   j                         r| j                   j                  d       | j                  | j                  d   j                               \  }}|dz   |z   }dD ]>  }| j                  |   j                          | j                  |   j                  |       @ | j                  d   j                         }t        |      }|dk  r| j                  j                          t        | d	      r| j                  d
       | j                  d   j                  d       | j                  d   j                  d       dD ]   }| j                  |   j                  d       " y|dk(  r=| j                  d   j                  d       | j                  d   j                  d       n|dk\  rt!        d      |v r8|j#                  t!        d            }| j                  d   j                  |       t!        d      |v r8|j#                  t!        d            }| j                  d   j                  |       | j                  j%                          d| j&                  v r| j                  d       n"| j)                          | j                  d       | j+                  |       | j-                  |       | j/                          y)lWhen vector map is selected it populates other comboboxes in Parameters tab (layer selects, columns selects)Tactivater7   r|  rj  r	  r   r3   rg   FrM  r  r  r  Nr   12rD  )r.   IsSnappingActiverQ   _parseMapStrrd   r   ClearInsertLayersGetItemslenr  r  hasattrrN  r   SetSelectionunicodeindexEnablerg   r?  r#  r$  r  )	r}   r   r  r  r  r  itemsitemsLeniItems	            r   r"  zVNETDialog.OnVectSel  sf   ==))+MM""D"1"//w0G0P0P0RSV#%.	 / 	?CNN3%%'NN3,,I,>	? {+446u:a<%%'t^,***6NN;'004NN<(11"5K 1s#,,R01]NN;'44Q7NN<(55a8]s|u$GCL1{+88?s|u$GCL1|,99%@  "t(((&&D&1&&(&&D&1r   c                 T    dD ]#  }| j                   |   j                  ||          % y )N)r7   r   r  r  r  r  )rd   r   )r}   r2  r  ks       r   r  zVNETDialog._updateParamsTab  s0    
 	2A NN1&&vay1	2r   c                    | j                   d   j                  | j                   d   j                         | j                   d   j                         | j                         | j                   d   j                  | j                   d   j                         | j                   d   j                         | j                         | j	                          y)zRWhen arc layer from vector map is selected, populates corespondent columns selectsr  r7   r   r	  rA  r  r  N)rd   InsertColumnsr   rJ   r  r}   r   s     r   r#  zVNETDialog.OnALayerSel%  s    |$22>>'*335..-668!! 	3 	

 	,-;;>>'*335..-668!! 	< 	
 	r   c                 R   | j                   j                         r| j                   j                  d       | j                  d   j	                  | j                  d   j                         | j                  d   j                         | j                         | j                          y)zQWhen node layer from vector map is selected, populates corespondent column selectTr  r  r7   r  r  N)r.   r  rQ   rd   r  r   rJ   r  r  s     r   r$  zVNETDialog.OnNLayerSel4  s    ==))+MM""D"1}%33>>'*335...779!! 	4 	
 	r   c                     i }t        j                  | j                        D ]  \  }}|j                         ||<    i }| j                  j                  ||       y r   )six	iteritemsrd   r   r.   r   )r}   r2  r  vr  s        r   r  zVNETDialog._setInputDataA  sO    MM$..1 	%DAq

F1I	%.r   c                     |j                         j                  d      }t        |      dkD  r|d   }nt        j                         d   }|d   }||fS )zFCreate full map name (add current mapset if it is not present in name)r|  r3   MAPSETr   )rk  splitr  r  gisenv)r}   
vectMapStr	mapValSplr  mapNames        r   r  zVNETDialog._parseMapStrH  sS    $$&,,S1	y>Aq\F\\^H-FA,r   c                 L   | j                   j                          | j                  j                          | j                  j                         j                         }|j                  d| j                  d          d| j                  j                  d<   | j                          y)zCancel dialogmouseUser   Nvnet)r.   CleanUprY   UnInitrG   r   r   RemoveToolbarFromGrouprV   r-   dialogsr  )r}   r   r   s      r   rp   zVNETDialog.OnCloseDialogS  ss    		{{002BBD++Jl8ST&*F#r   c                    | j                   s=| j                  j                  t        j                  | j
                  d       d| _         y| j                  j                  t        j                  | j
                         d| _         y)z3Registers/unregisters mouse handler into map windowcrossTFN)rI   rF   RegisterMouseEventHandlerr;   EVT_LEFT_DOWNOnDefIsecTurnCostUnregisterMouseEventHandlerr  s     r   OnDefIsecTurnCostszVNETDialog.OnDefIsecTurnCosts\  sg    ((KK11  $"8"8' )-D%KK33  $"8"8 ).D%r   c                 n    t        | | j                  j                               }|j                          y )N)data)DefGlobalTurnsDialogr.   GetGlobalTurnsDatar  )r}   r   r   s      r   OnDefGlobalTurnCostszVNETDialog.OnDefGlobalTurnCostsj  s$    %d1Q1Q1STr   c                    |dk(  r;| j                   d   }|r"|j                  |j                  d      d       d| _        y| j                  j                         \  }}t        t        j                  ddd	
            }t        | j                  j                  j                  d   | j                  j                  j                  d         }||z  }| j                  j                         \  }}	}
d|	v rt        | t        d             ddg|	v rt        | d       t!        ||t        |d         ||d         }| j"                  s6t%        | | j&                        | _        | j"                  j)                  d       | j"                  j+                  |d   |d          | j"                  j-                  |       | j"                  j/                          y)z Take coordinates from map windowunregisteredr   isec_turn_editF)r~   toggleNr  other
snap_treshgrouprY  subkeynsresewresr7   z Input vector map does not exist.)r-   messager  r  zUPlease choose existing turntable layer and unique categories layer in Parameters tab.)    )rV   r  r  handlerRegisteredrF   	GetLastENrx   r   Getr   Mapregionr.   r  r   r   r"   ra   DefIntesectionTurnCostDialogr-   rt   SetDataSetIntersectionr  )r}   r   r  r  r  snapTreshPixressnapTreshDistr2  r  r  cats               r   r  zVNETDialog.OnDefIsecTurnCostn  s   N" MM,7M(($../?@ )  &+D"{{$$&1 6w|L
 $++//((14;;??3I3I'3RS$s*$(MM$;$;$=!
Ej D!,N*OP*+z9o
  q#f-./w
 """>tT[["QD''
3##F7OVL5IJ++C0  "r   c                 X   | j                   j                  t        d      d| j                  d          | j                  j                         }| j                  | j                  d<   |dk  r>| j                   j                  d       |dk(  r| j                  j                  d	       y
y
y
)z'Called when network analysis is startedzAnalysing...analyzer4   rX  r+   r   r[  r9   N)r_   r_  r   r]   r.   RunAnalysisrU   ri   ra  r\   r{   )r}   r   rets      r   	OnAnalyzezVNETDialog.OnAnalyze  s     	

  >"&&{3 	! 	
 mm'') ,0+<+<Z(7JJ''I'6by00>  r   c                    | j                   j                         \  }}| j                  d   j                  ||       | j                   j	                         | _        | j                  d   }t        |      d   }|j                  |d       | j                  j                  d       | j                          | j                          | j                  j                  j                  dd       y )Nr/   
showResultTr  r[  r   )r.   GetHistSteprV   r|   
GetResultsrH   varsr  r_   ra  rV  r`  rG   r   r   )r}   	curr_step	steps_numr/   r~   s        r   rM   zVNETDialog.AnalysisDone  s    #}}88:	9m$33IyI--224mmM2+|,r4(

##	#2##%""$T"Br   c                    | j                   d   }t        |      d   }|j                  |      }| j                  s|j	                  |d       y|r| j
                  j                  d       y| j
                  j                  d       y)zShow/hide analysis resultr/   r  FTN)rV   r
  GetToolStaterH   r  r.   
ShowResult)r}   r   r/   r~   toggleStates        r   OnShowResultzVNETDialog.OnShowResult  sm    mmM2+|,!..r2""2u-MM$$T*MM$$U+r   c                     t        |       }|j                          | j                  j                  |j                  j                                |j                          y )Nr1   )OutputVectorDialogr  r.   SaveTmpLayervectSelr   r  r}   r   r  s      r   OnSaveTmpLayerzVNETDialog.OnSaveTmpLayer  s=     -""3;;#7#7#9:r   c                     t        | t        j                  t        d      | j                        }|j                          |j                          y)zDisplays vnet settings dialogSettings)r-   r~   r)   r.   N)SettingsDialogr;   r   r   r.   r  r  r  s      r   
OnSettingszVNETDialog.OnSettings  s5    BIIQz]T]]
 	r   c                    | j                   d   j                  j                         }| j                  j	                         |   | _        | j                  j                  d| j
                  ii        | j
                  dk(  r,| j                  d   j                         j                          n+| j                  d   j                         j                          g }| j                  j                         }g }|d   d   }t        j                  |      D ]  }d||   v r	||   d   }n|}||v r| j                  |   j                         }	|	j                          |	j                  |      j!                  ||   d          ||k7  r|j#                  |       |j#                  |        d	D ]4  }||vs| j                     j                         }	|	j                          6 | j%                          y
)z'Updates dialog when analysis is changedr0   r+   z	v.net.isor   	cmdParamscols
inputFieldr   )r  r  r  N)rV   anChoicer^  r.   GetAnalysesrU   r   rb   r  r  r  rT  r  iterkeysrd   FindWindowByNamer!  r]  r   )
r}   r   iAnskipan_props	used_colsattrColscolcolInptF
inputPanels
             r   rz   zVNETDialog.OnAnalysisChanged  s    mm-.77DDF MM557<T->-> ?D +OOK(22499;OOK(22499; ==668	K(0<<) 	'Cx},#C=6d{1;;=JOO''1::8C=;QRhH%X&	'" H 	"C)#!^^H5??A
!	"
 	r   c                 `   |dk(  rM| j                   j                  d       | j                  d   }|j                  |j	                  d      d       y|dk(  r5| j                   j                  t        d      d| j                  d	   
       y|dk(  r| j                   j                  d       yy)zStart/stop snapping modedeactivatedsnapr[  r   rP   Fcomputing_pointszComputing nodes...r4   rX  computing_points_doneN)r_   ra  rV   r  r  r_  r   r]   )r}   evtr  s      r   rQ   zVNETDialog.Snapping  s     -JJ''F'3 MM,7M$$]%<%<Z%H%P&&JJ$$+,**;7 %  ++JJ''F'3 ,r   c                 <    | j                   j                  d       y)z9Update map window, when map with nodes to snap is createdr.  r[  N)r_   ra  r   s    r   SnapPointsDonezVNETDialog.SnapPointsDone  s    

###/r   c                     | j                   j                         \  }}| j                          | j                  d   j	                  ||       y)zStep back in historyr/   N)r.   Undo_updateDialogrV   r|   r}   r   r  r  s       r   OnUndozVNETDialog.OnUndo!  @      $}}113	9m$33IyIr   c                     | j                   j                         \  }}| j                          | j                  d   j	                  ||       y)zStep forward in historyr/   N)r.   Redor6  rV   r|   r7  s       r   OnRedozVNETDialog.OnRedo(  r9  r   c                 N   | j                   j                         \  }}}| j                  ||       | j                  d   j                  }|j                  | j                   j                         j                  |d                |d   | _        |d   | j                  d<   | j                  d   j                  }|j                  | j                   j                         j                  |d                | j                          | j                          | j                  d        y )Nr0   r+   )r.   r  r  rV   r   r  r!  r  rU   ri   rV  r`  rz   )r}   r2  r  r  r   s        r   r6  zVNETDialog._updateDialog/  s    $(MM$;$;$=!
Efe,==!23<<dmm779??z@RST":.+1*+=Z( ==!23<<dmm779??z@RST##%t$r   r   )5__name__
__module____qualname__r;   r   r   DEFAULT_DIALOG_STYLERESIZE_BORDERr=   rq   rr   rc   r   r   r   rf   re   r&  rh   r?  rN  rP  rV  rn   r`  re  rf  r   r  rS   r  rO   r"  r  r#  r$  r  r  rp   r  r  r  r  rM   r  r  r  rz   rQ   r3  r8  r<  r6   r   r   r%   r%   W   s   
 99./%%(8(88m:^%
N
`,D78C* n#`.!

4,03$BL""7 +-^2/	.)#V?&C",0d4$0JJ%r   r%   c                   T    e Zd Zej                  fdZd Zd Zd Zd Z	d Z
d Zd Zy	)
r   c                    d| _         || _        | j                  j                         | _        | j                  j	                  d      }g }t        |d         D ]2  \  }}|dk(  r|j                  ||d   |   |d   |   |d   |   g       4 t        j                  | |||	       | j                  j                  j                  | j                         | j                  j                  j                  | j                         | j                  j                  d
      \  }}	| j                  |       t!        | j                  j#                               D ]?  }
| j%                          | j                  j'                  |
      }| j)                  |
|       A | j+                  | j                  j-                                y)zList with points for analysisTF)only_relevantr   r   r   r  def_vals)r-   r  r~   r+   N)r   r.   GetPointsManagerpts_data
GetColumns	enumerater]  r   r=   rR   rL   rS   parametersChangedParametersChangedrT   AnalysisChangedrangeGetPointsCountAddItemGetPointDatar  r   GetSelected)r}   r-   r.   r~   pts_data_colsr  i_colr   r+   r   iPtpt_dts               r   r=   zPtsList.__init__C  s    66800u0E$]6%:; 
	KE4zKK!'*51!&)%0!*-e4	
	 	DdrB##++D,>,>?''//0F0FG--00<%X&5578 	%CLLNMM..s3ELLe$	% 	DMM--/0r   c                    | j                   j                         }d|d   v r| j                  d      s| j                  dd       |d   j	                  d      }|d   |   }| j                  d|       | j                  d      }t        | j                        D ]@  \  }}| j                  |d| j                  |   |          |d   r/| j                  |d       B y | j                  d      r| j                  d       y y )Nr  r   r3   F)rI  rJ  IsShown
ShowColumnr  ChangeColEditable_getColumnNumrK  itemDataMapEditCellKeyselIdxs	CheckItem
HideColumn)r}   r+   active_colstype_idxtype_labelscolNumr  items           r   rN  zPtsList.AnalysisChangedg  s    mm..0[((<<'*"6*008H%f-h7K""6;7''/F()9)9: 1t  U0CF0KLAwNN5%0	1 ||F#' $r   c                 `    d|d   j                         v r| j                  |d   d          y y )Nr+   changed_params)r+   )r  rN  )r}   r  r   s      r   rM  zPtsList.ParametersChanged}  s:     016688  &1A*B:*N O 9r   c                     t        j                  | |      \  }}|sy i }| j                  j                         }|d   D ]  }|dk(  r	| j	                  ||      ||<    | j                  j                  ||       y )Nr   use)r   OnItemActivatedrI  rJ  GetCellValuer  )r}   r   changedrY  dt_dictrb  r)  s          r   rk  zPtsList.OnItemActivated  s    !11$>mm..0v& 	7Ce|,,S#6GCL	7
 	""30r   c                    |dk(  r| j                          y |dk(  r| j                          y |dk(  r| j                  |d   |d          y |dk(  r| j                         t        j
                  k7  r2| j                          | j                         t        j
                  k7  r2t        |d         D ]'  \  }}| j                          | j                  ||       ) y |dk(  r$| j                  | j                  |d                y y )	NAddPointDeletePointr  pt_idr  	SetPointsrI  SetSelected)	rQ  
DeleteItemr  rS  r;   	NOT_FOUNDrK  r   
_findIndex)r}   r  r   rV  rW  s        r   rS   zPtsList.PointsChanged  s    ZLLN}$OO~%LL&.9{"""$4! ""$4 (z(:; )
US%() }$KKw89 %r   c                 p   | j                  |      }t        j                  |      D ]  \  }}|dk(  rN|r$| j                  |      s| j	                  |d       1|r4| j                  |      sF| j	                  |d       Yd}| j
                  D ]  }||d   k(  sd} n |s{| j                  |||        y )Nrj  TFr   r3   )rw  r  r  IsItemCheckedr`  colsDatar^  )r}   rY  r  idxr  r  foundr)  s           r   r  zPtsList.SetData  s    ooc"MM$' 	0DAqEzT//4NN3-t11#6NN3.== CCF{ !
 $$S!Q/	0r   c                 |   t        j                  | |       | j                  | j                        | _        | j                  | j
                  j                         k(  ry| j                  t        j                  k(  r| j
                  j                  d       y| j
                  j                  | j                         y)zItem selectedN)
r   OnItemSelectedGetItemDataselectedselectedkeyrI  rS  r;   rv  rt  r  s     r   r~  zPtsList.OnItemSelected  s    !!$.++DMM:t}}88::r||+MM%%d+MM%%d&6&67r   c                     | j                  |      }| j                  j                  |      d   |k7  r| j                  j                  |d|i       yy)z8flag is True if the item was checked, False if uncheckedrj  N)r  rI  rR  r  )r}   r  r   rY  s       r   OnCheckItemzPtsList.OnCheckItem  sK    u%==%%c*51T9MM&&sUDM: :r   N)r>  r?  r@  r;   r   r=   rN  rM  rk  rS   r  r~  r  rC  r   r   r   r   B  s3    ,.II "1H(,P1:*0$8;r   r   c                   n    e Zd Zej                  ej
                  ej                  fdZd Zd Z	d Z
d Zy)r  c                    t         j                  j                  | ||||||       || _        d}|| _        i | _        t        | t         j                  dt        d      z        }	t        j                  |	t         j                        }
t        | t         j                  dt        d      z        }t        j                  |t         j                        }t        | t         j                  dt        d      z        }t        j                  |t         j                        }t        ddd	
      }i }t        | t         j                  t        d      dz        |d<   t        | t         j                  |j                         t         j                  d      | j
                  d<   t!        j"                  ddd      }| j
                  d   j%                  |      }|t         j&                  k7  r| j
                  d   j)                  |       t+        | t         j                  t        d      dz        | j
                  d<   t!        j"                  ddd      }| j
                  d   j-                  |       dt        d      gdt        d      gdt        d      gdt        d      gdt        d      gd| _        t1        j2                  | j.                        D ]  \  }}t        | t         j                  |d         ||<   t!        j"                  d|d   |      }t5        j6                  | t         j                  t        j8                  |d   |d   |d   d             | j
                  |<    dt        d!      gd"t        d#      gd"t        d$      gd%t        d&      gd%t        d'      gd(| _        t1        j2                  | j:                        D ]  \  }}t        | t         j                  |d         ||<   t=        | t         j                  dd)*      | j
                  |<   t?        t!        j"                  d|d   |            }| j
                  |   j-                  |        tA        | t         jB                        | _"        tA        | t         jF                        | _$        tA        | t         jJ                        | _&        | jH                  jO                          | jH                  jQ                  t         jR                  | jT                         | jH                  jW                  t        d+             | jD                  jQ                  t         jR                  | jX                         | jD                  jW                  t        d,             | jL                  jQ                  t         jR                  | jZ                         | jL                  jW                  t        d-             | j]                  | j_                                t        j`                  t         j                        }t        jb                  dd.      }d}|je                  |d/   t         jf                  |df0       |je                  | j
                  d/   t         jh                  t         jj                  z  d1|df2       |dz  }|je                  |d3   t         jf                  |df0       |je                  | j
                  d3   t         jh                  t         jj                  z  d1|df2       |dz  }|je                  |d   t         jf                  |df0       |je                  | j
                  d   t         jh                  t         jj                  z  d1|df2       |dz  }|je                  | j
                  d   t         jf                  |df0       |jm                  d       |je                  |t         jn                  4       t        jb                  dd.      }d}i | j.                  | j:                  }g d5}|D ]v  }||   }|je                  ||   t         jf                  |df0       |je                  | j
                  |   t         jh                  t         jj                  z  d1|df2       |dz  }x |jm                  d       |je                  |t         jn                  4       t        jb                  dd.      }d}d6D ]q  }|je                  ||   t         jf                  |df0       |je                  | j
                  |   t         jh                  t         jj                  z  d1|df2       |dz  }s |jm                  d       |
je                  |t         jn                  4       t        j`                  t         jp                        }|je                  | jH                  t         jr                  t         jt                  z  d17       |je                  | jD                  t         jr                  t         jt                  z  d17       |je                  | jL                  t         jr                  t         jt                  z  d17       |je                  |t         jn                  t         jj                  z  d17       |je                  |t         jn                  t         jj                  z  d17       |je                  |
t         jn                  t         jj                  z  d17       |je                  |t         jn                  t         jj                  z  d1d8       | jw                  |       |jy                  |        y9):zSettings dialogr   r   zOther settingsr   zPoint style:zAnalysis result style:zv.colorsTl)readr  zColor table style %s:z(v.net.flow)color_table)   r:   )r-   r~   choicesr(   r  r  	res_styler  zInvert colors %s:invert_colorszLine color:point_colorszColor for unused point:z'Color for Start/From/Source/Used point:zColor for End/To/Sink point:zColor for selected point:)
line_colorunusedused1catused2catr  r3   r   r     )r-   r~   colourzLine width:point_symbolzPoint size:zPoint width:r  zSnapping threshold in pixels:z%Maximum number of results in history:)
line_width
point_sizepoint_widthr  max_hist_steps2   r   z%Apply changes for the current sessionzHApply and save changes to user settings file (default for next sessions)Close dialog)vgaphgapr  )r   posr2   )r   r   r  r  )r   )r  r  r  r  r  r  )r  r  )r   r   r   N)=r;   r<   r=   r.   r-   settingsr   r   r   r   r   r   r   r   r  CB_READONLYr   r  
FindStringrv  r   r   r   colorsSettsr  r  cselColourSelectColour	sizeSettsr   rx   r   ID_SAVEbtnSaveID_APPLYbtnApplyID_CLOSEbtnClose
SetDefaultrk   r  OnApplyr  OnSaveOnCloseru   GetBestSizer   GridBagSizerr   r   ALIGN_RIGHTr   AddGrowableColr   r   r   r   r   r   )r}   r-   r~   r)   r.   r  r  r(   r   otherBoxotherBoxSizerptsStyleBoxptsStyleBoxSizerstyleBoxstyleBoxSizerrulessettsLabelssetStylei	setInvertsettKeysettr)  r   	gridSizerrowsetts
settsOrderotherSettNamebtnSizers                                 r   r=   zSettingsDialog.__init__  s5	    			4UCuE  BIIVa8H6I-I
 ))(BKK@BIIVa6G-G
 ,,["++FBIIVa8P6Q-Q
 ))(BKK@:D<%/BIIQ/F-G.-X&
M" (0yyKKM..(
m$  ##&k-XMM-(33H=MM-(//2)1BIIQ/B-Cn-T*
o& !$$k/
	 	o&//	: '-(89%q)B'CD'+T)UV'+I)JK'+F)GH
 !]]4+;+;< 	MGT#-TbiitTUw#WK ""T!WWMC%)%6%6		"))CFCFCPQFTW2X&DMM'"	 '-(89)1]+;<*An,=>"A&E$FG&*Q(RS
 !]]4>>: 	2MGT#-TbiitTUw#WK %-TbiiQTV%WDMM'"|''f$q''RSDMM'"++D1		2 dBJJ/tR[[1tR[[1  " 	2==$,,7  #J!KL"--5Z	

 	2==$,,7  >!23
 	((*+BKK(OO3	%B,D,D3PQ( 	 	
 	MM,'"&&(a	 	 	
 	q%B,D,D3PQ( 	 	
 	MM,'"&&(a	 	 	
 	q&R-E-ECQR8 	 	
 	MM-("&&(a	 	 	
 	qMM/*1I1IPSUVx 	 	
 	  #)"))4 OO3	64##6t~~6

 " 	G>DMMG$2+C+C#q   MMg&^^bff,!H	   1HC	 	  #YRYY7 OO3	= 
	MMMM*1I1IPSUVx   MMm,^^bff,!H	   1HC
	 	  #)"))4;;r}}-T]]288);AFT\\"(((:1ET]]288);AF		-bii"&&&8	C		"RVV);A	F		-bii"&&&8	C		(RVV!3A!	Le		$r   c                     | j                          i }t        j                  |       t        j                  d      |d<   t        j                  |       | j                          y)zButton 'Save' pressed)r  r  )r  N)UpdateSettingsr   ReadSettingsFiler  
SaveToFileClose)r}   r   fileSettingss      r   r  zSettingsDialog.OnSave  sM    %%|<+//f=V-

r   c                    t        j                  ddd| j                  d   j                                t	        j
                  | j                        D ]G  \  }}t        | j                  |   j                               }t        j                  d|d   ||       I t	        j
                  | j                        D ]<  \  }}t        j                  d|d   || j                  |   j                                > t        j                  ddd| j                  d   j                                t        j                  ddd| j                  d   j                                | j                  j                          y )Nr  r  r  )r  rY  r  valuer   r  r  )r   Setr  r   r  r  r  tuple	GetColourr  GetStringSelectionr   r.   SettingsUpdated)r}   r  r  r)  s       r   r  zSettingsDialog.UpdateSettings  sH   ---668		
 !]]4+;+;< 	SMGTg.88:;C6tAwwcR	S !]]4>>: 	MGTGmmG,557		 	 --.AAC		
 	"--0::<		
 	%%'r   c                 $    | j                          y)zButton 'Apply' pressedN)r  r  s     r   r  zSettingsDialog.OnApply  s    r   c                 $    | j                          y)zButton 'Cancel' pressedNr  r  s     r   r  zSettingsDialog.OnClose      

r   N)r>  r?  r@  r;   DefaultPositionDefaultSizerA  r=   r  r  r  r  rC  r   r   r  r    s9     ^^%%Yv	"(H
r   r  c                   b    e Zd Zej                   ed      ej                  fdZddZd Z	d Z
y)r  zNew vector map with turntablec                     t         j                  j                   ||t        |      |       t	         dd      }t        j
                  |t         j                        }i }ddt        gddt        gdd	t        gd
dt        gddt        gg}	i  _	        i }
|	D ]  }t               |
|d   <   |d   dv r% |d   |
|d      dd       j                  |d   <   n+|d   dk7  r# |d   |
|d      d       j                  |d   <   t        |
|d      |d         ||d   <   ||d      j                  |d            j                  d   j                  t         j                   fd       t         t         j                          _        t         t         j$                         _         j&                  j)                          t        j*                  t         j                        }|j-                  |dt         j.                  t         j0                  z  t         j2                  z  t         j4                  z  d       d}dD ]]  }|
|   j7                   j9                  ||    j                  |   |             |j-                  |
|   dt         j.                         _ t;        j<                  |      D ]2  \  }}| j                  v s j                  |   j?                  |       4  j                  d   jA                         jC                  d      d   } j                  d   j?                  |d z          t        jD                         }|jG                   j"                         |jG                   j&                         |jI                          |j-                  |dt         jJ                  t         jL                  z  d        j7                  |        jO                          y)!zCreate turntable dialog.r)   r(   r:   r  r7   r   r   z"Name of vector map with turntable:r   z.Arc layer which will be expanded by turntable:r  zLayer with turntable:r  z+Layer with unique categories for turntable:r1   r   )r7   r   r  r   r	  r
  r  r  r3   c                     j                   S r   )InputSelr   s    r   r   z*CreateTtbDialog.__init__.<locals>.<lambda>  s     r   r2   r   N)r7   r   r   r  r  r  r   r|  _ttb)(r;   r<   r=   r   r   r   r   r   r   rd   r   r   r!  rk   r   r   	ID_CANCEL	btnCancelr  btnOkr  r   r   r   r%  r   r   r   r&  r  r  r   r   r  StdDialogButtonSizer	AddButtonRealizer  r   r   )r}   r-   r  r~   r)   r(   r+  r,  r   r*  r/  r0  r3  r  r  r  r  inp_vect_mapr  s   `                  r   r=   zCreateTtbDialog.__init__  s    			41U85Ib"FG""347@;VD@
 2K@ =
  	" 	3G$)$6Igaj!qz00-7WQZ$WQZ0xh.wqz* w&-7WQZ$WQZ0x.wqz* !+ ,71:!E'!* '!*&&wqz2	3  	w$$R[[2MN  bll3D"((+


 KK,	qryy266'9BGG'Cbhh'NWX 	 	
 S 	ECcN##!!c
s8KQT!U JJy~!"))JD		E MM), 	.DAqDNN"q!**1-	. ~~g.779??DQGx )),*?@**,4>>*4::&h12>>BFF3JSTUi 
r   Nc                    t        j                  t         j                        }t        j                  t         j                        }|j	                  |dt         j
                  t         j                  z  t         j                  z  d       |j	                  |dt         j                         |rt        j                  t         j                        }|j	                  |dt         j                  t         j                  z         |j	                  |dt         j                  t         j                  z         |j	                  |dt         j                  t         j                  z  t         j                  z  d       |S |j	                  |dt         j                  t         j                  z  t         j                  z  d       |S r5  )
r;   r   r   r   r   r   r%  r   r   r   r7  s          r   r&  zCreateTtbDialog._doSelLayout9  sE    ;;bkk2BMM2abgg&6&B1 	 	
 	]qryyAKKr}}=Mcabii"&&6HIcabii"&&6HILLYY'"*B*BB	    LLYY'"*B*BB	   r   c                 N   | j                  | j                  d   j                               \  }}|dz   |z   }dD ]>  }| j                  |   j                          | j                  |   j	                  |       @ | j                  d   j                         }t        |      }|dk  rW| j                  j                          t        | d      r| j                  d	       | j                  d   j                  d
       y|dk(  r| j                  d   j                  d       nJ|dk\  rEt        d      |v r8|j                  t        d            }| j                  d   j                  |       | j                  j                          t        | d      r| j                  d	       yy)r  r7   r|  )r   r  r  r  r   r3   rg   Fr  r  Nr   r  T)r  rd   r   r  r  r  r  r  r  r  rN  r   r  r  r  r  )r}   r  r  r  r  r  r  r  s           r   r  zCreateTtbDialog.InputSelZ  sr   "//w0G0P0P0RSV#%.	@ 	?CNN3%%'NN3,,I,>	? {+446u:a<%%'t^,***6NN;'004]NN;'44Q7]s|u$GCL1{+88?  "4(&&D&1 )r   c                 ~    i }t        j                  | j                        D ]  \  }}|j                         ||<    |S r   )r  r  rd   r   )r}   r2  paramr  s       r   r  zCreateTtbDialog.GetDatau  s=    --7 	+JE3LLNF5M	+ r   r   )r>  r?  r@  r;   r   r   rA  r=   r&  r  r  rC  r   r   r  r    s4    
 99/0%%VpB26r   r  c                   T    e Zd Zej                   ed      ej                  fdZd Zy)r  Save analysis resultc                    t         j                  j                  | ||t        |      |       t	        |       | _        t        | j
                  t         j                  d      }t        j                  |t         j                        | _
        t        | j
                  dt        j                         d   gd      | _        t        | j
                  t         j                  t        d	            | _        t#        | j
                  t         j$                        | _        t#        | j
                  t         j(                        | _        | j*                  j-                          | j/                  d
       | j1                          y)r  r  r1   z
Vector mapr   r	  r  r   )r-   r  mapsetsr  zName:)r  r:   N)r;   r<   r=   r   r   panelr   r   r   r   boxSizerr   r  r  r  r   vectSellabelr   r  r  r  r  r  SetInitialSize_layout)r}   r-   r~   r)   r(   r+  s         r   r=   zOutputVectorDialog.__init__~  s    			41U85I$'
tzzbii|L))#r}}= ::\\^H-.	
 '::"))1W:

  

BLL9DJJ1


I&r   c                 6   t        j                  t         j                        }| j                  j	                  | j
                  t         j                  d       | j                  j	                  | j                  dt         j                  t         j                  z  d       |j	                  | j                  dt         j                  t         j                  z  d       t        j                         }|j                  | j                         |j                  | j                         |j                          |j	                  |dt         j                  t         j                  z  d       | j                   j#                  |       |j%                  |        y )Nr   r   r3   r2   r   )r;   r   r   r  r   r  r   r  r   r   r  r  r  r  r  r  r  r   r   )r}   r   r  s      r   r  zOutputVectorDialog._layout  s   BKK(B$<$< 	 	
 	$,,1299rvv;MVWX		$--ABII4Fq	Q**,4>>*4::&		(qr~~/Fq	Q

E"		$r   N)	r>  r?  r@  r;   r   r   rA  r=   r  rC  r   r   r  r  }  s(     99&'%% Dr   r  c                   @    e Zd ZdZej
                  fdZd Zd Zd Z	y)r^   zaExtends wx.StatusBar class with functionality to show multiple messages with the highest priorityc                 f    t        j                  j                  | |||fi | d| _        g | _        y )Nr   )r;   	StatusBarr=   maxPrioritystatusItems)r}   r-   r(   r~   r   s        r   r=   zVnetStatusbar.__init__  s/    
dFB@@r   c                    |||d}| j                   D ])  }|d   |d   k(  s| j                   j                  |       + | j                   j                  |       | j                  |d   k  r
|d   | _        | j	                          y)a  Add new item to show

        :param text: string to show
        :param key: item identifier, if already contains
                    item with same identifier, overwrites this item
        :param priority: only items with highest priority are showed
        rX  rY  rZ  N)r  remover]  r  _updateStatus)r}   r   rY  rZ  statusTextItemrf  s         r   r_  zVnetStatusbar.AddStatusItem  s     #'sI$$ 	.DE{nU33  ''-	. 	/nZ88-j9Dr   c                     d}t        | j                        D ]$  }|d   | j                  k(  s|r|dz  }||d   z  }& t        j                  j                  | |       y )Nr  rZ  z; r   )reversedr  r  r;   r  SetStatusText)r}   currStatusTextrf  s      r   r  zVnetStatusbar._updateStatus  se    T--. 	/DJ4#3#33!"d*N$v,.		/
 	""48r   c                 B   d}t        | j                        D ]=  \  }}|d   |k(  s|d   | j                  k(  rd}| j                  j                  |       ? |rF| j                  D ]&  }d| _        | j                  |d   k  s|d   | _        ( | j	                          yy)z9Remove item

        :param key: item identifier
        FrY  rZ  Tr   N)rK  r  r  popr  )r}   rY  updater  rf  s        r   ra  zVnetStatusbar.RemoveStatusItem  s    
 $T%5%56 	,KE4E{c!
#t'7'77!F  $$U+		,
 (( 8#$ ##d:&66'+J'7D$8   r   N)
r>  r?  r@  __doc__r;   r   r=   r_  r  ra  rC  r   r   r^   r^     s     k)+ $9!r   r^   c                   z    e Zd Zej                  ej
                  z  ej                   ed      fdZd Z	d Z
d Zy)r  zEdit intersection turns costsc                     t        j                  j                  | ||f||d| t        |      | _        | j                  j                  | d      | _        y )Nr'   )
mapdisplayrD  rE  )r;   r<   r=   r	   rC  rG  
browsePage)r}   r-   rF   r(   r~   r)   r   s          r   r=   z%DefIntesectionTurnCostDialog.__init__  sM     			4P5PP&1
**44D84Tr   c                     t        j                  t         j                        }|j                  | j                  dt         j
                         | j                  |       y )Nr3   r   )r;   r   r   r   r	  r   r   r   s     r   layoutz#DefIntesectionTurnCostDialog.layout  s:    BKK(		$//abii	@er   c                    || j                   j                         k7  r| j                   j                  |       n| j                  j	                          | j                  j                  t        |             t        |      | _        | j                  j                  | j                  j                  t        |         d         j                         j                          y )Nrh  sqlNtb)rC  GetVectorNamerm  r	  DeleteAllPagesro  rx   rA  FindWindowById	layerPager  r  )r}   r  rA  s      r   r  z$DefIntesectionTurnCostDialog.SetData  s    $**2244JJ&&+&>OO**,  U,Z
 	&&OO%%c%j1(;	

)+ddfr   c                 X    | j                   j                  | j                  d|z         y )Nz	isec = %d)where)r	  LoadDatarA  )r}   isecs     r   r  z,DefIntesectionTurnCostDialog.SetIntersection  s"      ;$3G Hr   N)r>  r?  r@  r;   rA  rB  r   r   r=   r  r  r  rC  r   r   r  r    s>    
 %%(8(8899/0UIr   r  c                       e Zd Zej                  ej
                  z  ej                   ed      fdZd Z	d Z
d Zd Zd Zd Zy	)
r  zDefine Global Turn Costsc                    t        j                  j                  | |||fd|i| || _        t	        | | j                        | _        t        | t         j                  d      | _        t        | t         j                  d      | _	        t        | t         j                        | _        t        | t         j                  d      | _        | j                  j                  t         j                  | j                          | j                  j                  t         j                  | j"                         | j                  t         j$                  | j&                         | j                  j                  t         j(                  | j*                         | j                  j-                          | j                  j/                  d       | j+                  d        | j1                          | j3                  d	       y )
Nr(   )r-   r  r   r   Remover   zUse U-turnsT)r     )r;   r<   r=   r  TurnAnglesList
angle_listr   r   btnAdd	btnRemover  r  r   	useUTurnsrk   r  OnAddButtonClickOnRemoveButtonClickro   rp   EVT_CHECKBOXOnCheckedUTurnsr  r   r  r  )r}   r-   r  r(   r~   r)   r   s          r   r=   zDefGlobalTurnsDialog.__init__  sF    			4UJ%J6J	(499EDRYYeDt		Jdr{{;!"))=Q(=(=>BMM4+C+CD		",, 2 23BOOT-A-AB  "%T"J'r   c                    t        j                  t         j                        }t        j                  t         j                        }t        j                  t         j                        }t        j                  t         j                        }|j	                  | j
                  dt         j                  d       |j	                  | j                  dt         j                  d       |j	                  | j                  dt         j                  d       |j	                  |dt         j                  d       |j	                  | j                  dt         j                  d       |j	                  | j                  dt         j                  d       |j	                  |dt         j                         |j	                  |dt         j                         | j                  |       y )Nr   
   r   r3   r   )r;   r   r   r   r   r  r  r  r  r   r  
ALIGN_LEFTr  r   )r}   r   
labelSizeraddRemoveSizer
closeSizers        r   r  zDefGlobalTurnsDialog.layout5  s1   BKK([[/
R[[1[[/
4;;12>>RTU4>>abnnUWXt1299RP~!"..QSTt~~!"--PRSt}}PRS		*	;		*	;er   c                    | j                   j                         }|st| j                  j                  | j                  j	                         dz
  d      }| j                  j                  dd      }d||dg}| j                   j                  |       d}|D ]i  }||z  }| j                  j                  |dz
  d      }| j                  j                  |d      }d||dg}| j                   j                  ||       |dz  }k y)z#Add new direction over selected rowr3   r  r   new        N)r  GetSelectedIndices	turn_datar   GetLinesCount	AppendRow	InsertRow)r}   r   selected_indices
from_valueto_valuedefault_row
i_additionr  s           r   r  z%DefGlobalTurnsDialog.OnAddButtonClickI  s    ??==?001M1M1ORS1SUVWJ~~..q!4H *h<KOO%%k2 
! 	AOA00Q:J~~..q!4H *h<KOO%%a5!OJ	r   c                     | j                   j                         }d}|D ]'  }||z  }| j                   j                  |       |dz  }) y)z&Delete one or more selected directionsr   r3   N)r  r,  	DeleteRow)r}   r   r1  i_reductionr  s        r   r   z(DefGlobalTurnsDialog.OnRemoveButtonClick]  sO    ??==?! 	AAOO%%a(1K	r   c                 $    | j                          y)r  Nr  r  s     r   rp   z"DefGlobalTurnsDialog.OnCloseDialogg  r  r   c                 j    | j                   j                  | j                  j                                y)zUse U-turns in analyseN)r  	SetUTurnsr  r   r  s     r   r"  z$DefGlobalTurnsDialog.OnCheckedUTurnsk  s!    		DNN3356r   c                 H    | j                   j                  |       || _        y r   )r  r  r  r}   r  s     r   r  zDefGlobalTurnsDialog.SetDatao  s    %	r   N)r>  r?  r@  r;   rA  rB  r   r   r=   r  r  r   rp   r"  r  rC  r   r   r  r    sK    
 %%(8(8899*+(>((7r   r  c                       e Zd ZdZej
                  ej                  ej                  z  fdZd Z	d Z
d Zd Zd Zd Zd	 Zej                   fd
Zy)r  z(Virtual editable table with global turnsc                 4   t        j                  | ||fd|i| t        j                  j                  |        t        j                  j                  |        | j                          || _        | j                  | j                  j                                y )Nr(   )	r   r=   listmixListCtrlAutoWidthMixinTextEditMixinPopulater  SetItemCountr.  )r}   r-   r  r~   r(   r   s         r   r=   zTurnAnglesList.__init__w  ss     	$B%B6B&&//5&&t,	$))1134r   c                    | j                  ddt        j                         | j                  ddt        j                         | j                  ddt        j                         | j                  dd	t        j                         y
)zColumns definitionr   	Direction)r)  headingformatr3   z
From Angler  zTo Angler   CostN)InsertColumnr;   LIST_FORMAT_LEFTLIST_FORMAT_RIGHTr   s    r   rC  zTurnAnglesList.Populate  su    ;r/B/B 	 	
 	ab>R>RSaB<P<PQa8L8LMr   c                 n    | j                   j                  ||      }|dv rt        |      }t        |      S )Nr3   r  )r  r   r!   str)r}   rf  r)  r   s       r   OnGetItemTextzTurnAnglesList.OnGetItemText  s2    ii  s+&="3'C3xr   c                 Z   |dv r	 t        |      }|dv r7t        |      }|t        j                  kD  rd}n|t        j                   k  rd}| j
                  j                  |||       || _        | j                  d| j
                  j                         dz
         y# t        $ r Y yw xY w)zSet data to table)r3   r  r   NrN  r+  r   r3   )
floatrn  r    mathpir  r   
edited_rowRefreshItemsr.  )r}   r  columnr   s       r   SetVirtualDatazTurnAnglesList.SetVirtualData  s    YT{ V#D)D dgg~		4f-!TYY446:;  s   B 	B*)B*c                     | j                   j                  |       | j                  | j                   j                                y r   )r  r/  rD  r.  )r}   valuess     r   r/  zTurnAnglesList.AppendRow  s/    		F#$))1134r   c                     | j                   j                  ||       | j                  | j                   j                                y r   )r  r0  rD  r.  )r}   linerZ  s      r   r0  zTurnAnglesList.InsertRow  s1    		D&)$))1134r   c                     | j                   j                  |       | j                  | j                   j                                y r   )r  PopRowrD  r.  )r}   r  s     r   r7  zTurnAnglesList.DeleteRow  s/    		$))1134r   c                     || _         | j                  | j                   j                                | j                  d| j                   j                         dz
         y )Nr   r3   )r  rD  r.  rV  r=  s     r   r  zTurnAnglesList.SetData  sF    	$))1134!TYY446:;r   c                     g }d}	 | j                  |t        j                  |      }|dk(  r	 |S |}|j                  |       =)zGet numbers of selected rowsr:   )GetNextItemr;   LIST_NEXT_ALLr]  )r}   stateindices	lastFoundr  s        r   r,  z!TurnAnglesList.GetSelectedIndices  sR    	$$Y0@0@%HE{  "	u% r   N)r>  r?  r@  r  r;   r   	LC_REPORT
LC_VIRTUALr=   rC  rP  rX  r/  r0  r7  r  LIST_STATE_SELECTEDr,  rC  r   r   r  r  t  sV    2  "yyr}}0L	5N<*555<
 (*'='= r   r  )Sr  r@   sysrS  r  version_infomajorrO  r  grass.scriptr   r  r;   wx.auiwx.lib.agw.flatnotebooklibagwflatnotebookrl   ImportErrorwx.lib.flatnotebookwx.lib.colourselectcolourselectr  wx.lib.mixins.listctrlmixinslistctrlr@  r   	core.gcmdr   r   core.settingsr   
dbmgr.baser	   gui_core.widgetsr
   gui_core.goutputr   gui_core.gselectr   r   r   gui_core.wrapr   r   r   r   r   r   r   r   r   r   r   r   vnet.widgetsr   vnet.toolbarsr   r   r   vnet.vnet_corer   vnet.vnet_utilsr    r!   r"   r#   r<   r%   r   r  r  r  r  r^   r  r  rA  rB  r  rC  r   r   <module>r     s]  4 
 
  
QG & 	 %(( # " ( (  * &   & + > >    $ H H & h% h%VF;j F;RRRYY RjZbii Zz6 6r4!BLL 4!n%I299 %IP\299 \~NXw==w?T?T NU:  %$$%s   F FF