
    ը	fX1                       d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
Z
ddlmc mc mZ e	j                   r	 ddlmZ n	ddlmc mZ ddlmc 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&m'Z'm(Z( ddl)m*Z* ddl+m,Z, dd	l-m.Z. dd
l/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddl)mFZF ej                  j                  dk\  reIZJ G d d      ZK G d de?ej                  ej                        ZN G d d      ZO G d de.      ZP G d deP      ZQ G d deP      ZR G d de
j                        ZT G d d e?ej                        ZU G d! d"e?ej                        ZV G d# d$e
j                        ZX G d% d&e
j                        ZZy# e$ r ddlmc mc mZ Y lw xY w)'a  
@package dbmgr.base

@brief GRASS Attribute Table Manager base classes

List of classes:
 - base::Log
 - base::VirtualAttributeList
 - base::DbMgrBase
 - base::DbMgrNotebookBase
 - base::DbMgrBrowsePage
 - base::DbMgrTablesPage
 - base::DbMgrLayersPage
 - base::TableListCtrl
 - base::LayerListCtrl
 - base::LayerBook
 - base::FieldStatistics

.. todo::
    Implement giface class

(C) 2007-2014 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 Jachym Cepicky <jachym.cepicky gmail.com>
@author Martin Landa <landa.martin gmail.com>
@author Refactoring by Stepan Turek <stepan.turek seznam.cz> (GSoC 2012, mentor: Martin Landa)
    N)	globalvar)decode)SQLBuilderSelectSQLBuilderUpdate)
RunCommand
GExceptionGErrorGMessageGWarning)ListOfCatsToRange)CreateNewVector)	GNotebook)VectorDBInfoGetUnicodeValueCreateDbInfoDescGetDbEncoding)Debug)ModifyTableRecordAddColumnDialog)UserSettings)
ButtonCheckBoxComboBoxListCtrlMenuNewIdSpinCtrl	StaticBox
StaticTextTextCtrl)cmp   c                       e Zd ZdZd Zd Zy)LogzTThe log output SQL is redirected to the status bar of the
    containing frame.
    c                     || _         y Nparent)selfr(   s     +/usr/lib/grass83/gui/wxpython/dbmgr/base.py__init__zLog.__init__X   s	        c                 p    | j                   r*| j                   j                  |j                                yy)zUpdate status barN)r(   SetStatusTextstrip)r)   text_strings     r*   writez	Log.write[   s)    ;;KK%%k&7&7&9: r,   N)__name__
__module____qualname____doc__r+   r1    r,   r*   r$   r$   S   s    ;r,   r$   c                       e Zd ZdZd ZddZd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efdZd Zd Zd Zd Zd Zy)VirtualAttributeListzDSupport virtual list class for Attribute Table Manager (browse page)c                    || _         || _        || _        | j                  d   | _        || _        || _        d | _        d | _        i | _        i | _	        t        j                  | |t        j                  t        j                  t        j                  z  t        j                   z  t        j"                  z  t        j$                  z         	 | j'                  |      }| j/                          t        j0                  dd      | _        | j2                  j5                  t        j6                  j9                  t        j:                  t        j<                  d            | _        | j2                  j5                  t        j6                  j9                  t        j@                  t        j<                  d            | _!        | jE                  | j2                  t        jF                         tH        jJ                  j                  |        tH        jL                  j                  | tO        | j                               |dkD  r| jQ                  |d       n|r| jQ                  d	d       | jS                  t        jT                  | jV                         | jS                  t        jX                  | jZ                         | jS                  t        j\                  | j^                         | jS                  t        j`                  | jb                         y # t(        $ r!}t+        | |j,                         Y d }~y d }~ww xY w)
N	mapDBInfor(   idstyler(   message   )r@   r@   Tcol	ascendingr   )2r(   log	dbMgrDatar:   layerpages	fieldCalc
fieldStatscolumns	sqlFilterr   r+   wxID_ANY	LC_REPORT	LC_HRULES	LC_VRULES
LC_VIRTUALLC_SORT_ASCENDINGLoadDatar   r	   valueEnableAlternateRowColours	ImageListilAddArtProvider	GetBitmap	ART_GO_UPART_TOOLBARsm_upART_GO_DOWNsm_dnSetImageListIMAGE_LIST_SMALLlistmixListCtrlAutoWidthMixinColumnSorterMixinlenSortListItemsBindEVT_LIST_ITEM_SELECTEDOnItemSelectedEVT_LIST_ITEM_DESELECTEDOnItemDeselectedEVT_LIST_COL_CLICKOnColumnSortEVT_LIST_COL_RIGHT_CLICKOnColumnMenu)r)   r(   rE   rF   rG   rH   	keyColumnes           r*   r+   zVirtualAttributeList.__init__f   sR   "4

yy,,llll mm ""	#			
	e,I
 	&&(,,r2&WW[[NN$$R\\2>>8L

 WW[[NN$$R^^R^^XN

 	$''2#6#67 	&&//5!!**4T\\1BC r>9=15 			"++T-@-@A		"--t/D/DE		"''):):;		"--t/@/@A9  	$0	s   L 	L=L88L=Nc                     |r#|| _         | j                  | j                         y | j                  | j                  fi | j                   y)z/Update list according new mapDBInfo descriptionN)r:   rT   rG   rL   )r)   r:   s     r*   UpdatezVirtualAttributeList.Update   s7    &DNMM$**%DMM$**77r,   c                    | j                   j                  t        d             | j                  j                  |   d   }| j                  j                  |   d   }	 | j                  j
                  |   | _        |s| j                  j                  |      }nD| j                  j                  |      }|D ]$  }||vst        | t        d      ||dz          y 	 |j                  |      }	d
}
t        j                  d      }t        d| d|
      }|r<|j                  t        ||j                   d             t#        d.i |}d|i| _        nr|j                  t        | j                  j&                  |||             d|i| _        |r*|j                  t        dj)                  |                   t#        d/i |}i | _        g | _        i | _        | j1                          t3        | j5                               D ]  }| j7                  d        d}t9        j:                         }t<        j>                  rFt8        j@                  t8        jB                  z  t8        jD                  z  |_#        d	|_$        d|_%        nEt8        j@                  t8        jB                  z  t8        jD                  z  |_&        d	|_'        d|_(        |D ]t  }t<        j>                  r||_)        | jU                  ||       n||_+        | jY                  ||       |dz  }|dk\  sQ| j                   j                  t        d             v d}|j[                  d       t]               }d}	 	 t_        |ja                         |      jc                         je                  dd      }|sn|jm                  |
      }to        |      to        |      k7  rO|d	   }d"}to        |      |kD  r|d| }t        t        d#      jk                  |d$j)                  |      |%            | jq                  ||||	       |dz  }|d&k\  r%| j                   j                  t        d'             n| js                  |       |rJd	}	 | ju                  |      }|d	k(  rn0| jw                  |t8        jx                  t8        jx                         Gd}|D ]=  }| j                  |   d(   d)z  }|d*k  rd*}|d+kD  rd+}| j{                  ||,       |dz  }? | j}                          | j                   j                  t        d-      | j                         z         |	S # t        $ r t        t        d      |z        w xY w#  d	}	Y xY w# tf        $ rt}|ja                         j_                  |d      jc                         je                  dd      }|r(d}ti        | t        d       jk                  |!             Y d}~Ld}~ww xY w)0aG  Load data into list

        :param layer: layer number
        :param columns: list of columns for output (-> v.db.select)
        :param where: where statement (-> v.db.select)
        :param sql: full sql statement (-> db.select)

        :return: id of key column
        :return: -1 if key column is not displayed
        zLoading data...tablekeyzUAttribute table <%s> not found. For creating the table switch to 'Manage layers' tab.z:Column <%(column)s> not found in in the table <%(table)s>.columnrv   r>   NrA   z{_sep_}zw+b)modeTc)quietr(   flags	separator)sqloutput	overwriter   )maprG   wherestdoutr   ,rK   r         zCan display only 256 columns.encoding
 replace)r   errorsFz^Incorrect encoding {enc} used. Set encoding in GUI Settings or set GRASS_DB_ENCODING variable.)encr"   a  Unable to read the table <{table}> from the database due to seemingly inconsistent number of columns in the data transfer. Check row: {row}... Likely, a newline character is present in the attribute value starting with: '{value}' Use the v.db.select module to investigate.z | )rv   rowrU   i zViewing limit: 100000 records.length   <   i,  rC   widthNumber of loaded records: %d)	db.select)v.db.select)@rE   r1   _r:   layerstablesrK   KeyErrorr   
GetColumnsr	   indextempfileNamedTemporaryFiledictupdatenamer   rL   r   joinitemDataMapitemIndexMapitemCatsMapDeleteAllItemsrangeGetColumnCountDeleteColumnrM   ListItemr   wxPythonPhoenixLIST_MASK_TEXTLIST_MASK_IMAGELIST_MASK_FORMATMaskImageFormatm_maskm_imagem_formatTextInsertColumnm_textInsertColumnInfoseekr   r   readliner/   r   UnicodeDecodeErrorr   formatsplitrf   
AddDataRowSetItemCountGetNextItemSetItemStateLIST_STATE_SELECTEDSetColumnWidthSendSizeEventGetItemCount)r)   rG   rK   r   r   	tableNamerq   allrC   keyIdfsoutFile	cmdParamsretiinfory   r   first_wrong_encodingrecordrr   lastshow_maxitemr   s                            r*   rT   zVirtualAttributeList.LoadData   s    	q*+,NN))%09	NN))%07	
	>>00;DL nn//	:G..++I6C 
c># !8! &)9=	!> 
	MM),E --59tDrJ	Tc',,$OP6I6C#S\DN++5gV &u-DN  chhw.?!@A8i8C  t**,- 	!Aa 	! {{}$$))B,>,>>ATATTDIDJDK++b.@.@@2CVCVVDKDLDM 		CF(("	!!!T*$%%a.FACxq!@AB		C Qo#7++-<BBDLLTSUV ( \\"%F7|s6{*bzv;)#IX.F !F f9%**V2DDfQ  OOAvw6FAF{q!ABCq t 	!D''-2:!!$(>(>@V@VW	   	CLL%h/!3Erzs{AU3FA	 	q784;L;L;NNOo  	+
  	:	Eb & $$&VSV;UWWT2&	  (+0(# !B! !&S&/s1   U U) &9U3 !U&)U03	W0<A)W++W0c                    g | j                   |<   | j                  j                  | j                     d   }d}d}|dk(  r+| j                   |   j	                  |dz          |dz  }|dz   }|D ]  }| j
                  ||      d   t        k7  r 	 | j                   |   j	                  |       n(	 | j                   |   j	                  t        |             |s&|d	kD  r!||k(  r	  | j
                  ||      d   |      }|dz  } | j                  j	                  |       |d	kD  r|| j                  |<   yy# t        $ r* | j                   |   j	                  t        d             Y w xY w# t        $ r* | j                   |   j	                  t        d             Y w xY w# t        $ r-}	d	}t        | t        d
      |dz   |||	dz         Y d}	~	d}	~	ww xY w)zAdd row to the data listrw   r   NOGC_FIDr   ctypezUnknown valuezGUnable to decode value. Set encoding in GUI preferences ('Attributes').rA   zError loading attribute data. Record number: %(rec)d. Unable to convert value '%(val)s' in key column (%(key)s) to integer.

Details: %(detail)s)recvalrw   detailr>   )r   r:   r   rG   appendrK   str
ValueErrorr   r   r   r	   r   r   )
r)   r   r   rK   r   rq   jcatrU   rr   s
             r*   r   zVirtualAttributeList.AddDataRowr  s    NN))$**5e<		!Q&&q1u-FAa%C #	E||GAJ'0C7C $$Q'..u5
$$Q'..u/EF 52:%1*;$,,wqz27;EBC FAG#	J 	  #2:"%DQ A " C$$Q'..q/ABC * $$Q'..N " C# !2! #$a%iSTU!V	 	s<   D3,'E) F30E&%E&)0FF	G(#GGc                 $    |j                          y)z+Item selected. Add item to selected cats...NSkipr)   events     r*   rj   z#VirtualAttributeList.OnItemSelected       	

r,   c                 $    |j                          y)z2Item deselected. Remove item from selected cats...Nr   r   s     r*   rl   z%VirtualAttributeList.OnItemDeselected  r   r,   c                     g }| j                         }|dk7  r7|j                  | j                  |             | j                  |      }|dk7  r7|S )z0Return list of selected items (category numbers)rA   )GetFirstSelectedr   GetItemTextGetNextSelectedr)   catsr   s      r*   GetSelectedItemsz%VirtualAttributeList.GetSelectedItems  sS    $$&bjKK((./''-D bj r,   c                     g }t        | j                               D ]"  }|j                  | j                  |             $ |S )z'Return list of items (category numbers))r   r   r   r   r   s      r*   GetItemszVirtualAttributeList.GetItems  sB    $++-. 	0DKK((./	0 r,   c                 F    | j                  ||      }|j                         S )zReturn column text)GetItemGetText)r)   r   rC   r   s       r*   GetColumnTextz"VirtualAttributeList.GetColumnText  s    ||E3'||~r,   c                     | S )zReturt listr6   r)   s    r*   GetListCtrlz VirtualAttributeList.GetListCtrl  s    r,   c                 Z    | j                   |   }| j                  |   |   }t        |      S )zGet item text)r   r   r   )r)   r   rC   r   ss        r*   OnGetItemTextz"VirtualAttributeList.OnGetItemText  s0    !!$'U#C(1vr,   c                 (   |j                         | _        t               }t        | d      s}t	               t	               t	               t	               t	               t	               t	               t	               t	               t	               t	               t	               t	               d| _        |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                          t               }|j                  |t        d            }|j                  | j
                  d   t        d	             |j                          |j                  | j
                  d
   t        d             | j                  d   s}|j                          t	               | j
                  d<   |j                  | j
                  d   t        d             | j                  d   s|j                  | j
                  d   d       | j                  d   s|j                  | j
                  d   d       | j                  d   rE| j                  | j                  | j                        j                            d   t        t         fvr|j                  d       |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                  | j
                  d   t        d             |j                  | j
                  d    t        d!             |j                  | j
                  d"   t        d#             | j#                  t$        j&                  | j(                  | j
                  d   $       | j#                  t$        j&                  | j*                  | j
                  d   $       | j#                  t$        j&                  | j,                  | j
                  d   $       | j#                  t$        j&                  | j.                  | j
                  d
   $       | j                  d   s9| j#                  t$        j&                  | j0                  | j
                  d   $       | j
                  d   | j
                  d   | j
                  d   | j
                  d   | j
                  d   | j
                  d   | j
                  d   | j
                  d    | j
                  d"   f	D ].  }| j#                  t$        j&                  | j2                  |$       0 | j5                  |       |j7                          y%)&z0Column heading right mouse button -> pop-up menupopupID)sortAscsortDescarear   compactfractal	perimeterncatsslopelsinlazimuth
calculatorstatsr   zSort ascendingr   zSort descendingz Calculate (only numeric columns)r  zField calculatorr  
StatisticsmanageTableaddCol
Add columneditableFr   r   z	Area sizer   zLine lengthr   zCompactness of an arear  z0Fractal dimension of boundary defining a polygonr  zPerimeter length of an arear  z$Number of features for each categoryr  zSlope steepness of 3D liner  zLine sinuousityr  zLine azimuthr<   N)	GetColumn_colr   hasattrr   popupIdAppendr   AppendSeparatorAppendSubMenurH   rF   EnablerK   r   intfloatrh   rM   EVT_MENUOnColumnSortAscOnColumnSortDescOnFieldCalculatorOnFieldStatisticsOnAddColumnOnColumnCompute	PopupMenuDestroy)r)   r   	popupMenusubMenusubMenuItemr<   s         r*   rp   z!VirtualAttributeList.OnColumnMenu  s   OO%	F	tY' 7!G' 7 7"W!G#gDL  	i0!4D2EFj115F3GH!!#&--01
 	l3Q7I5JK!!#g.,@zz-(%%'%*WDLL"T\\(3Q|_E>>*-  h!7?~~j)T\\,7?~~j)T\\NN499%--/.

.,.' u%t||F+Q{^<t||H-q/?@t||I.2J0KLLL#@A	
 	t||K0!4Q2RSt||G,a0V.WXt||G,a0L.MNt||F+Q/@-ABt||J/>1BC		"++t33Y8O	P		"++t44j9Q	R		"++t55$,,|:T	U		"++t55$,,w:O	Pzz-(IIbkk4#3#3X8NIO LL LL"LL#LL#LL%LL!LL!LL LL$

 	@B IIbkk4#7#7BI?	@ 	y!r,   c                     |j                         | _        | j                          | j                          |j	                          y)z+Column heading left mouse button -> sortingN)r  r  _updateColSortFlag
ColumnSortr   r   s     r*   rn   z!VirtualAttributeList.OnColumnSort0  s/    OO%	!

r,   c                 ~    | j                          | j                  | j                  d       |j                          y)z*Sort values of selected column (ascending)TrB   Nr&  rg   r  r   r   s     r*   r  z$VirtualAttributeList.OnColumnSortAsc7  s.    !tyyD9

r,   c                 ~    | j                          | j                  | j                  d       |j                          y)z+Sort values of selected column (descending)FrB   Nr)  r   s     r*   r  z%VirtualAttributeList.OnColumnSortDesc=  s.    !tyyE:

r,   c           
         |j                         }d}|| j                  d   k(  rd}n|| j                  d   k(  rd}n|| j                  d   k(  rd}n}|| j                  d   k(  rd}nh|| j                  d   k(  rd}nS|| j                  d   k(  rd	}n>|| j                  d
   k(  rd
}n)|| j                  d   k(  rd}n|| j                  d   k(  rd}|syt        d| j                  | j                  j
                  | j                  || j                  | j                        j                         d       | j                  | j                         y)z!Compute values of selected columnNr   r   r   r  fdr  r  countr  r  sinuousr  azimuthv.to.dbT)r(   r   rG   optionrK   r   )GetIdr  r   r(   r:   r   rG   r  r  r   rT   )r)   r   r<   r1  s       r*   r  z$VirtualAttributeList.OnColumnComputeC  s5   [[]f%%F4<<))F4<<	**F4<<	**F4<<,, F4<<((F4<<((F4<<''F4<<
++F;;""**NN499-557	
 	djj!r,   c                 .   t        j                         }t         j                  t         j                  z  |_        d|_        t        | j                               D ]8  }| j                  |      j                         |_
        | j                  ||       : y)z*Sort values of selected column (self._col)rA   N)rM   r   r   r   r   r   r   r   r  r   r   	SetColumn)r)   r   ry   s      r*   r'  zVirtualAttributeList.ColumnSortj  sr     {{}''"*<*<<D//12 	)F..088:DKNN64(	)r,   c           	      H   | j                   s|t        | t        j                  | j                  d   | j
                  | j                  | j                        j                               | _         | j                   j                          y| j                   j                          y)zCalls SQLBuilderUpdate instancevectName)r(   r<   vectmaprG   ry   N)rI   r   rM   rN   rF   rG   r  r  r   ShowRaiser   s     r*   r  z&VirtualAttributeList.OnFieldCalculatoru  sm    ~~-99z2jj~~dii088:DN NN!NN  "r,   c                    | j                   s;t        | t        j                        | _         | j                   j	                          n| j                   j                          | j                  d   j                  | j                     }| j                   j                  |d   |d   |d   | j                  | j                        j                                y)zCalls FieldStatistics instancer(   r<   r:   driverdatabaserv   )r<  r=  rv   ry   N)rJ   FieldStatisticsrM   rN   r8  r9  rF   r   rG   rt   r  r  r   )r)   r   selLayers      r*   r  z&VirtualAttributeList.OnFieldStatistics  s    -TbiiHDOOO  "OO!!#>>+.55djjAH%j)7#>>$)),446	 	 	
r,   c                 d   | j                   d   j                  | j                     d   }t        | t	        d      |z        }|sy|j                         t        j                  k(  r:|j                         }| j                  d   j                  |d   |d   |d	   
       |j                          y)zAdd column into tabler:   rv   zAdd column to table <%s>)r(   titleNbrowser   r   r   )r   r   r   )rF   r   rG   r   r   	ShowModalrM   ID_OKGetDatarH   	AddColumnr!  )r)   r   rv   dlgdatas        r*   r  z VirtualAttributeList.OnAddColumn  s    {+224::>wGT3M1NQV1VW==?bhh&;;=DJJx **&\gtH~ +  	r,   c                 &   t        j                          t        | j                  j	                               }|j                  t        j                  | j                               || _	        | j                          t        j                          y)z
Sort itemsrw   N)rM   BeginBusyCursorlistr   keyssort	functools
cmp_to_keySorterr   RefreshEndBusyCursor)r)   sorteritemss      r*   	SortItemszVirtualAttributeList.SortItems  sc    
T%%**,-

y++DKK8
9! 	
r,   c                    | j                  | j                        j                         }| j                  | j                     }	  | j                  |   d   | j
                  |   | j                           } | j                  |   d   | j
                  |   | j                           }t        |t              st        |t              r)t        j                  t        |      t        |            }nt        ||      }|dk(  r#t        | j                  | j                  ||       }|r|S | S # t        $ r; | j
                  |   | j                     }| j
                  |   | j                     }Y w xY w)Nr   r   )r  r  r   _colSortFlagrK   r   r   
isinstancer   unicodelocalestrcollr   r!   GetSecondarySortValues)r)   key1key2colNamerD   item1item2cmpVals           r*   rQ  zVirtualAttributeList.Sorter  sE   ..+335%%dii0		62DLL)'243C3CD3I$))3TUE2DLL)'243C3CD3I$))3TUE
 eS!Zw%?^^OE$:OE<RSF&F Q;$55diitLMFM7N#  	6$$T*4995E$$T*4995E	6s   A$D, ,AE0/E0c                 2    | j                   | j                  fS )z<Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py)r`   r^   r   s    r*   GetSortImagesz"VirtualAttributeList.GetSortImages  s    

DJJ''r,   c                      y)NrA   r6   )r)   r   s     r*   OnGetItemImagez#VirtualAttributeList.OnGetItemImage  s    r,   c                     | j                   ryy)zCheck if list if emptyFTr   r   s    r*   IsEmptyzVirtualAttributeList.IsEmpty  s    <<r,   c                     | j                   j                  dgt        | j                        t        | j                         z
  z         y)z
        Update listmix.ColumnSorterMixin class self._colSortFlag list
        private variable for new column which was added (required for
        sorting new added column values)
        r   N)rX  extendrf   rK   r   s    r*   r&  z'VirtualAttributeList._updateColSortFlag  s8     	  !DLL(9C@Q@Q<R(R!STr,   r&   NNN)r2   r3   r4   r5   r+   rt   rT   r   rj   rl   r   r   r   r   r   rp   rn   r  r  r  r'  r  r  r  r!   rV  rQ  re  rg  ri  r&  r6   r,   r*   r8   r8   a   s     O8Bt8HT3&j
Tl%"N	)#
   # 	2(Ur,   r8   c                   T    e Zd Zej                  dddddfdZd ZddZd Zd Z	d Z
y)		DbMgrBaseNc                 B   i | _         || j                   d<   || j                   d<   || _        | j                  r|j                  | _        nd| _        | j                  sn| j                  j                  rq| j                   d   rb| j                   d   sS| j                  j                  }|j                  | j                   d   d      j                         }	|	| j                   d<   d}
| j                   d   r$t        j                  | j                   d   d      }
|
r|
d   t        j                         d	   k7  rd
| j                   d<   nd| j                   d<   || _
        t        |      | _        t        | j                   d         | j                   d<   dddd| _        y)ay  Base class, which enables usage of separate pages of Attribute Table Manager

        :param id: window id
        :param mapdisplay: MapFrame instance
        :param vectorName: name of vector map
        :param item: item from Layer Tree
        :param log: log window
        :param statusbar: widget with statusbar
        :param kwagrs: other wx.Frame's arguments
        r6  treeItemNmaplayerrJ  vectorr   elementmapsetMAPSETFr  Tr:   )rB  r
  manageLayer)rF   
mapdisplayMapr   treeGetLayerInfoGetNamegrass	find_filegisenvgifacer$   rE   r   rH   )r)   r<   rx  
vectorNamer   r  	statusbarkwargsmaptreer   mapInfos              r*   r+   zDbMgrBase.__init__  sf   , %/z"%)z"$??!~~DHDHOO  z*NN:.oo**G''z*
 ( gi  *.DNN:& >>*%oo4>>*+ExXG'(+u||~h/GG).DNN:&)-DNN:& y> '34>>*3M&N{# !%T$O
r,   c                 :   | j                   d   r| j                   d   j                          | j                   d   r| j                   d   j                          || j                  d<   t        | j                  d         | j                  d<   t	        j
                  | j                  d   d      }|r|d   t	        j                         d   k7  rd	| j                  d
<   nd| j                  d
<   | j                   d   r| j                   d   j                          yy)zChange of vector map

        Does not import layers of new vector map into pages.
        For the import use methods addLayer in DbMgrBrowsePage and DbMgrTablesPage
        rB  r
  r6  r:   rr  rs  ru  rv  Fr  Trw  N)rH   DeleteAllPagesrF   r   r}  r~  r  
UpdatePage)r)   r  r  s      r*   ChangeVectorMapzDbMgrBase.ChangeVectorMap  s     ::hJJx //1::m$JJ}%446%/z" '34>>*3M&N{# //t~~j'A8T'(+u||~h/GG).DNN:&)-DNN:& ::m$JJ}%002 %r,   c                 v   |dk(  r9| j                   d   st        || |      | j                   |<   | j                   |   S |dk(  r9| j                   d   st        || |      | j                   |<   | j                   |   S |dk(  r8| j                   d   st        ||       | j                   |<   | j                   |   S y)a  Creates chosen page

        :param pageName: can be 'browse' or 'manageTable' or
                         'manageLayer' which corresponds with pages in
                         Attribute Table Manager
        :return: created instance of page, if the page has been already
                 created returns the previously created instance
        :return: None  if wrong identifier was passed
        rB  )r(   parentDbMgrBase	onlyLayerr
  rw  r(   r  N)rH   DbMgrBrowsePageDbMgrTablesPageDbMgrLayersPage)r)   r(   pageNamer  s       r*   CreateDbMgrPagezDbMgrBase.CreateDbMgrPage;  s     x::h''6!49(

8$ ::h''}$::m,'6!49(

8$ ::h''}$::m,'6!4(

8$ ::h''r,   c                    || j                   d   j                  j                         v rZ| j                  d   r| j                  d   j	                  |       | j                  d   r| j                  d   j	                  |       t        | j                   d         | j                   d<   || j                   d   j                  j                         v rZ| j                  d   r| j                  d   j                  |       | j                  d   r| j                  d   j                  |       | j                  d   r| j                  d   j                          yy)z%Updates dialog layout for given layerr:   rB  r
  r6  rw  N)rF   r   rM  rH   
DeletePager   AddLayerr  r)   rG   s     r*   UpdateDialogzDbMgrBase.UpdateDialogY  s    DNN;/66;;== zz(#

8$//6zz-(

=)44U; '34>>*3M&N{#
 DNN;/66;;==zz(#

8$--e4zz-(

=)2259 ::m$JJ}%002 %r,   c                      | j                   d   S )zGet vector namer6  )rF   r   s    r*   GetVectorNamezDbMgrBase.GetVectorNamey  s    ~~j))r,   c                 P    | j                   d   j                  j                         S )z)Get layers of vector map which have tabler:   )rF   r   rM  r   s    r*   GetVectorLayerszDbMgrBase.GetVectorLayers}  s     ~~k*116688r,   rA   )r2   r3   r4   rM   rN   r+   r  r  r  r  r  r6   r,   r*   rn  rn    s<     99APF38<3@*9r,   rn  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	DbMgrNotebookBasec                 ^   || _         || _        | j                  j                  | _        | j                  j                  | _        | j                  j                  | _        | j                  j
                  | _        g | _        g | _        | j                  j                  | _        | j                  j                  | _	        i | _
        d| _        g | _        t        j                  | | j                   t        j                          | j#                  t$        j&                  | j(                         y)zBase class for notebook with attribute tables in tabs

        :param parent: GUI parent
        :param parentDbMgrBase: instance of DbMgrBase class
        Nr(   r=   )r(   r  rE   r  r   rx  listOfCommandslistOfSQLStatementsrH   rF   	layerPager?  r   r   r+   r   FNPageStylerh   FNEVT_FLATNOTEBOOK_PAGE_CHANGEDOnLayerPageChanged)r)   r(   r  s      r*   r+   zDbMgrNotebookBase.__init__  s     .''++**11''++..99 !#%  ))//
 --77   49;P;PQ		"22D4K4KLr,   c                 R   |j                         | k7  ry| j                         }| j                  |   | _        	 | j                  | j                     d   }	 | j                  j                  t        d      | j                  | j                  | j                     d         j                         z         |rY| j                  |      }| j                  d   j                  | j                     d   }| j                  d   j                  |       yy# t
        $ r d}Y w xY w#  Y qxY w)zLayer tab changedNwhereColumnr   rH  r:   rv   )GetEventObjectGetSelectionr   r?  r  r   rE   r1   r   FindWindowByIdr   rF   r   )r)   r   pageNumidColwinColrv   s         r*   r  z$DbMgrNotebookBase.OnLayerPageChanged  s    !T)##%G,	NN4==1-@E		HHNN01%%NN4==1&9,.! ((/FNN;/66t}}EgNENN;'2259   	E		s   D AD" DD"D&c                 x   t        j                          t        |      dkD  r|D ]  }t        d|d   d| d|d     t	        | j
                  d         | j
                  d<   | j                  d   r(| j                  d   j                  | j                         | j                  d   r(| j                  d   j                  | j                         g }t        |      dkD  r3t               }t        j                  d	      \  }}t        |d
|      5 }|D ]'  }|j                  |dz          |j                  d       ) 	 ddd       | j
                  d   j                  | j                     d   }	| j
                  d   j                  | j                     d   }
t        j                   dddj#                  |D cg c]  }d|z  	 c}      z         t        d| ||	|
       t%        j&                  |       t%        j(                  |       g | _        t        j,                          y# 1 sw Y   xY wc c}w )zaApply changes

        .. todo::
            this part should be _completely_ redesigned
        r   T)progr|   r(   r   r6  r:   r
  rB  textwr   ;r   Nr<  r=  r"   z#AttributeManger.ApplyCommands(): %s%s
db.execute)r(   inputr<  r=  r6   )rM   rK  rf   r   r   rF   rH   r  r?  r   r   mkstempopenr1   r   r   msgr   oscloseremover  rS  )r)   r  r  cmdr   r,  sqlFilePathsqlFiler   r<  r=  r   s               r*   ApplyCommandszDbMgrNotebookBase.ApplyCommands  s    	~"% KJAd4J3q6JK +7t~~j7Q*RDNN;'zz-(

=)44T]]Czz(#

8$//>N "#a'/C&..D9OBk35 (. (CMM#),MM$'((
 ^^K077FxPF~~k299$--HTHII5((.ABD1HBCD !! HHRLIIk"')D$
7( ( Cs   -H+<H7+H4c                 .   || j                   vryt        j                  | | j                   j                  |             | j                   j	                  |       | j
                  |= | j                         dk\  r| j                   d   | _        yd| _        y)zRemoves layer pageFr   rA   NT)r   r   DeleteNBPager   r  r  r  r?  r  s     r*   r  zDbMgrNotebookBase.DeletePage  s    #tT[[%6%6u%=>5!NN5!!# KKODM  !DMr,   c                 X    t        j                  |        i | _        g | _        d| _        y)zRemoves all layer pagesN)r   r  r  r   r?  r   s    r*   r  z DbMgrNotebookBase.DeleteAllPages  s%      &r,   c                 L   | j                   d   j                  | j                     d   }|st        | t	        d             y|dk(  rd}|dk7  rd	}|| j                   d   j                  |      v rDt        | t	        d
      || j                   d   j                  | j                     d   dz         y|dk(  r|d|z  z  }| j                  j                  d| j                   d   | j                  |d|df       | j                  | j                  | j                         y)Add new column to the tabler:   rv   z:Unable to add column to the table. No column name defined.r>   Fdoublezdouble precisionvarcharr   z8Column <%(column)s> already exists in table <%(table)s>.rx   z (%d)zv.db.addcolumnr6   )r   rG   rK   T)
rF   r   r?  r	   r   r   r  r   r  r  )r)   r   r   r   rv   s        r*   rF  zDbMgrNotebookBase.AddColumn  s8   {+224==A'JS  H&EIF 4>>+.99%@@TU"!^^K8??NwW  IWv%%E"" >>*5!]]*.6		
 	4..0H0HIr,   c                      | j                   dd S )zGet list of added layersNr   r   s    r*   GetAddedLayersz DbMgrNotebookBase.GetAddedLayersJ  s    {{1~r,   N)
r2   r3   r4   r+   r  r  r  r  rF  r  r6   r,   r*   r  r    s)    &MP:<6p"/br,   r  c                       e Zd ZddZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd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dZd ZddZy) r  c                    t         j                  | ||       d| _        | j                  d   j                  j                         D ]  }|dkD  r||k7  r| j                  |         | j                  r| j                  d       | j                  d   | _        | j                  j                  t        d      | j                  | j                  | j                     d         j                         z         d| _        d| _        y)zBrowse page class

        :param parent: GUI parent
        :param parentDbMgrBase: instance of DbMgrBase class
        :param onlyLayer: create only tab of given layer, if -1 creates
                          tabs of all layers
        r  Nr:   r   r   rH  )r  r+   sqlBestSizerF   r   rM  r  SetSelectionr?  rE   r1   r   r  r  r   qlayerbuilderr)   r(   r  r  rG   s        r*   r+   zDbMgrBrowsePage.__init__P  s     	""4"X  ^^K077<<> 	!E1})!3MM% 	!
 ;;a  KKNDMHHNN01%%NN4==1&9,.!  r,   c           
      ^   || j                   v s|| j                  j                         vryt        j                  | t        j
                        }t        |t        j
                  dt        d      z        }t        j                  |t        j                        }t        || j                  | j                  || j                        }|j                         r|j                          y| j                   j!                  |       |j#                  t        j$                  | j&                         d|j)                         i| j*                  |<   t        d      }| j                  d   s|t        d	      z  }|d
k(  r| j-                         }| j/                  ||d||| j                  d   j                   |   d   fz         t        j0                  t        j                        }t        j                  |t        j
                        }	t        |	t        j
                  dt        d      z        }
t        j                  |
t        j                        }|j#                  t        j2                  | j4                         |j#                  t        j6                  | j4                         t9        j:                  ddd      dk(  rU|j#                  t        j<                  | j>                         |j#                  t        j@                  | j>                         nT|j#                  t        j<                  | jB                         |j#                  t        j@                  | jB                         |jE                  |dt        jF                  t        jH                  z  d       tK        |	tL        jN                  tL        jP                  z  tL        jR                  z        }t        j                  |t        j
                        }|jU                  |t        d             tW        |t        jX                  d      }|j[                  t        d             |j#                  t        j\                  | j^                         t        j                  |t        j
                  d      }ta        |t        j
                  dt        jb                  | j                  d   je                  | j                  d   j                   |   d                }|jg                  d       t        jh                  |t        j
                  d!g d"#      }|jg                  d       tk        |t        j
                  d$t        jl                  %      }|j[                  t        d&      d'z         to        |t        j
                  d(| j                  d   j                   |   d   z        }t        j                  |t        j
                        }|jU                  |t        d)             tW        |t        j
                  t        d*            }|j#                  t        j\                  | jp                         tk        |t        j
                  d+| j                  d   j                   |   d   z  t        jl                  %      }|j[                  t        d&      d,z         |j#                  t        jr                  | j^                         |j#                  t        jr                  | j^                         t        jt                  d-d-.      }t        j0                  t        jv                        }|jE                  |t        jx                  t        jz                  z  d/       |jE                  |t        jx                  t        jz                  z  d/       |jE                  |dt        jx                  t        jz                  z  d       |j}                  |       |jE                  |d-d0t        jx                  t        j~                  z  t        jz                  z  1       |jE                  |d-d2t        jx                  t        j~                  z  t        jF                  z  1       |jE                  |d-d3t        jx                  t        j~                  z  1       |j                  d       |j}                  |       t        j                  d4d-d-5      }|j                  d       |jE                  |t        jF                  t        jH                  z  d-/       |jE                  |t        j                  t        j~                  z  t        j                  z  t        j                  z  d-/       |jE                  |t        jH                  t        jF                  z  d/       |j}                  |       |jE                  |dt        jH                  t        jF                  z  d-       |	j}                  |       |jE                  |	dt        j                  t        jz                  z  t        j                  z  t        jF                  z  d-       |j}                  |       |j#                  t        j                  | j                  |             |j)                         | j*                  |   d6<   |j)                         | j*                  |   d7<   |j)                         | j*                  |   d8<   |j)                         | j*                  |   d9<   |j)                         | j*                  |   d:<   |j)                         | j*                  |   d;<   |j)                         | j*                  |   d<<   d| j*                  |   d=<   y>)?ae  Adds tab which represents table and enables browse it

        :param layer: vector map layer conntected to table
        :param pos: position of tab, if -1 it is added to end

        :return: True if layer was added
        :return: False if layer was not added - layer has been already
                 added or has empty table or does not exist
        Fr;   %s z3Attribute data - right-click to edit/manage recordsr(   r<   label
browsePageTabler   (read-only)rA    %d / %s %sr:   rv   r   pager  z	SQL QueryatmleftDbClick	selectiongrouprw   subkeyr   r   r"   
proportionflagborderr  Simpler  r  btnApply)r(   r<   r   z.Apply SELECT statement and reload data records
wherePanel   rA   r(   r<   sizer=   choices)7   rA   )=z!=<z<=>z>=r(   r<   r  r  r   r(   r<   rU   r=   zExample: %sz"MULTILANE = 'no' AND OBJECTID < 10zSELECT * FROM %s WHERE BuilderzSQL BuilderSELECT * FROM %szASELECT * FROM roadsmajor WHERE MULTILANE = 'no' AND OBJECTID < 10   hgapvgapr  r  )r   r   )r  posr  r   r   r      r  colsr  r  rH  sqlNtbr  whereOperatorr   r  	statementsqlIsReducedT)Gr   r  r  rM   PanelrN   r   r   StaticBoxSizerVERTICALr8   rE   rF   rH   ri  r!  r   rh   EVT_LIST_ITEM_ACTIVATEDOnDataItemActivatedr2  r  GetPageCountInsertNBPageBoxSizerEVT_COMMAND_RIGHT_CLICKOnDataRightUpEVT_RIGHT_UPr   GetEVT_LEFT_DCLICKOnDataItemEditEVT_COMMAND_LEFT_DCLICKOnDataDrawSelectedrY   EXPANDALLr   r  FNB_NO_NAV_BUTTONSFNB_NO_X_BUTTON
FNB_NODRAGAddPager   ID_APPLY
SetToolTip
EVT_BUTTONOnApplySqlStatementr   CB_READONLYr   r  Choicer    TE_PROCESS_ENTERr   	OnBuilderEVT_TEXT_ENTERGridBagSizer
HORIZONTALALIGN_CENTER_VERTICALLEFTSetSizerTOPAddGrowableColFlexGridSizerALIGN_RIGHTRIGHTBOTTOMEVT_SIZEOnSqlQuerySizeWrap)r)   rG   r  panellistBox	listSizerwinr  	pageSizersqlQueryPanelsqlBoxsqlSizerr  simpleSqlPanelr  whereSimpleSqlPanelsqlWhereColumnsqlWhereCondsqlWhereValuesqlLabeladvancedSqlPanelbtnSqlBuildersqlStatementsimpleSqlSizersqlSimpleWhereSizeradvancedSqlSizers                             r*   r  zDbMgrBrowsePage.AddLayers  s    DKK50D0D0T0T0V#V3 yy1RSS

 %%gr{{;	"5$((DNNE4::V;;=MMO5!++T-E-EF!-u{{} =u'
~~j)Q~&&E"9##%CeT^^K8??FwOPQ 	 	
 KK,	"))<  RYYfq~6M
 $$VR[[9++T-?-?@$"4"45%];OSTTHHR'')<)<=HHR//1D1DEHHR'')@)@AHHR//1H1HIcabii"&&.@K  ''"*<*<<r}}L
 BII>N8=BKKjQANOPbmmT%=%=> hh!biil
 "&yy..NN;/::{+2259'B
 	##A&yy&yy5	
 	!!!$ &yy%%	
 	  mCC	
 !yy+nn[)007@A
 886bii@,1Y<@#		=9I
 	2==$..9#yy$nn[)007@A%%
 	mQR	
 	2,,d.F.FG"++T-E-EF aa8 kk"--8!9!9BGG!CA 	  	
 	r77"''A! 	  	
 	))BGG3	 	  	
 	$$%89))BFF2RWW<	 	 	
 	))BFF2RYY>	 	 	
 	QF1I1IBFF1R 	 	
 	%%a(/ ++C''*\		BFF0B1M 7"(( BRYY NWX 	 	
 	V"&&299"4Q?!!"23iABFFRYY4FqQx(RWW$rxx/"));	 	 	
 	y!BKK!8!8!?@(+		uf%*0,,.uh'/=/C/C/Eum,1=1C1C1Euo.)6)<)<)>ug&+8+>+>+@ui(-9-?-?-Auk*05un-r,   c                       fdS )zHelper functionc                 (    j                  |       S r&   )OnSqlQuerySize)r   rG   r)   s    r*   <lambda>z4DbMgrBrowsePage.OnSqlQuerySizeWrap.<locals>.<lambda>S  s    T00> r,   r6   r  s   ``r*   r4  z"DbMgrBrowsePage.OnSqlQuerySizeWrapQ  s	    >>r,   c                    || j                   vry|j                         }| j                  s|j                         | _        |j	                         }| j                  d   |d   kD  }|r| j
                  |   d   s|s#| j
                  |   d   s|j                          y|j                  d      }|j                  d      }|j                         }|r{d| j
                  |   d<   |j                  d      s|j                  d       |j                  d      r|j                  d       |j                  |d       |j                  |d	       nzd
| j
                  |   d<   |j                  d      s|j                  d       |j                  d      r|j                  d       |j                  |d       |j                  |d       |j                          y)z,Adapts SQL Query Simple tab on current widthNr   r  r  r  Tr   )r   r   r   r   Fr   r  )r   r  r  GetBestSizeGetSizer  r   FindWindowByNameGetContainingSizerIsColGrowabler.  RemoveGrowableColSetItemPosition)	r)   r   rG   r  r  	sqlReducer  r  sqlSimpleSizers	            r*   rK  zDbMgrBrowsePage.OnSqlQuerySizeU  s    #%%'%113D~~$$Q'$q'1	$../?$.."7"GJJL,,\:
**:6!44648DNN5!.1!//2--a0++A.003**:v>**8V<49DNN5!.1!//2--a0++A.003**:v>**8V<

r,   c                 F    | j                  |       |j                          y)z'Item activated, highlight selected itemN)r  r   r   s     r*   r  z#DbMgrBrowsePage.OnDataItemActivated~  s    &

r,   c                    t        | d      st               | _        t               | _        t               | _        t               | _        t               | _        t               | _        t               | _        t               | _	        t               | _
        t               | _        t               | _        | 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*                  | j                         | j                  t        j                  | j,                  | j                         | j                  t        j                  | j.                  | j                         | j                  t        j                  | j0                  | j                         | j                  t        j                  | j2                  | j                         | j                  t        j                  | j4                  | j                         | j7                  | j8                  | j:                     d         }t=               }|j?                  | j                  tA        d             |jC                         }| jD                  d   r|dk(  s|jG                  |      dk7  r|jI                  | j                  d       |j?                  | j                  tA        d             |j?                  | j                  tA        d	             |j?                  | j
                  tA        d
             | jD                  d   sT|jI                  | j                  d       |jI                  | j                  d       |jI                  | j
                  d       |jK                          |j?                  | j                  tA        d             |j?                  | j                  tA        d             |jK                          |j?                  | j                  tA        d             |j?                  | j                  tA        d             | jL                  rtO        |jQ                               dk(  r8|jI                  | j                  d       |jI                  | j                  d       |j?                  | j                  tA        d             |j?                  | j                  tA        d             | jD                  d   s|jI                  | j                  d       |jC                         dk(  rT|jI                  | j                  d       |jI                  | j                  d       |jI                  | j                  d       |jK                          |j?                  | j                  tA        d             | jS                  |       |jU                          | jV                  jY                  tA        d      |j[                         z         y)$Table description area, context menupopupDataID1r  rH  zEdit selected recordr  rA   FInsert new recordzDelete selected record(s)zDelete all recordsz
Select allzDeselect allHighlight selected featuresz$Highlight selected features and zoomr   Extract selected featureszDelete selected featuresReloadr   N).r  r   r[  popupDataID2popupDataID3popupDataID4popupDataID5popupDataID6popupDataID7popupDataID8popupDataID9popupDataID10popupDataID11rh   rM   r  r  OnDataItemAddOnDataItemDeleteOnDataItemDeleteAllOnDataSelectAllOnDataSelectNoner  OnDataDrawSelectedZoomOnExtractSelectedOnDeleteSelectedOnDataReloadr  r  r?  r   r  r   r   rF   r   r  r  r   rf   r   r   r!  rE   r1   r   )r)   r   tlistmenuselecteds        r*   r  zDbMgrBrowsePage.OnDataRightUp  s   t^, %D %D %D %D %D %D %D %D %D!&D!&DIIbkk4#6#64;L;LIMIIbkk4#5#5$:K:KILIIbkk4#8#8T=N=NIOIIbkk4#;#;@Q@QIRIIbkk4#7#7D<M<MINIIbkk4#8#8T=N=NIOIIbkk4#:#:t?P?PIQIIbkk4#>#>4CTCTIUIIbkk4#9#9d>O>OIPIIbkk4#8#8T=O=OIPIIbkk4#4#49K9KIL##DNN4==$A&$IJvD%%q)?'@A))+z*2~$$X."4KK))51D%%q)<'=>D%%q)D'EFD%%q)='>?~~j)KK))51KK))51KK))51D%%q7D%%q'89D%%q)F'GHD%%q)O'PQxx3u5578A=KK))51KK))51D%%q)D'EFD&&*D(EF~~j)KK**E2!!#r)KK))51KK))51KK**E2D&&(4t 	q785;M;M;OOPr,   c           	      :	   | j                  | j                  | j                     d         }|j                         }|dk(  ry| j                  d   j
                  | j                     d   }| j                  d   j
                  | j                     d   }|j                  |j                  |      }g }g }t        |j                               D ]0  }	|j                  |j                  |	      j                                2 ||vr3|j                  d|       |j                  |t        |      f       d}
d}nd	}t        t        |            D ]  }	| j                  d   j                   |   ||	      d
   }| j                  d   j                   |   ||	      d   }||	   |k(  r)|d	u sZ|j                  ||	   ||t        |      f       |	}
~|du r$|j#                  ||	dz
        j                         }n |j#                  ||	      j                         }|j                  ||	   |||f        t%        | t'        d      |
d	f      }|j)                         t*        j,                  k(  r|j/                         }t1               }	 t        t        |            D ]  }	|	|
k(  r
|j#                  ||	      j                         ||	   k(  r1|j2                  ||	      }t        ||	         dkD  r	 |du r|	dz
  }n|	}|d
   t        k7  r |d
   ||	         |j4                  |   |<   n||	   |j4                  |   |<   |d
   t        k(  r=d||	   v r||	   j9                  dd      ||	<   |j                  ||	   d||	   d       |j                  ||	   d||	          |j                  d||	   z         ! 	 |rW| j>                  j                  d|djA                  |      ||fz         | jC                  | jD                  | j>                         |jG                          yy# t6        $ r* t7        t'        d      t        ||	         |d   dz        w xY w# t6        $ r5}t;        | t'        d      |z  d	       | j=                  |       Y d}~yd}~ww xY w)z+Edit selected record of the attribute tablerH  rA   Nr:   rv   rw   r   TFr   typer   zUpdate existing recordr(   rA  rH  keyEditable2Value '%(value)s' needs to be entered as %(type)s.rU   rw  '''z='r  z%s=NULLz$Unable to update existing record.
%sr(   r?   showTracebackzUPDATE %s SET %s WHERE %s=%dr   )$r  r  r?  r   rF   r   r   r   r   r   r   r  r   insertr   rf   r   r   r   r   rC  rM   rD  	GetValuesrL  rK   r   r   r   r	   r  r  r   r  r  rt   )r)   r   rs  r   rv   rq   r   rH  
columnNamer   r   
missingKeyr   ctypeStrrU   rG  values
updateListry   idxerrs                        r*   r  zDbMgrBrowsePage.OnDataItemEdit  s   ##DNN4==$A&$IJ%%'2:{+224==A'JNN;/66t}}EeL	 2 24 89  
u++-. 	<Aeooa088:;	< J&a+KKCH-.EJJ s:' 	EANN;/66u=jmLWUE~~k299%@AOPVWH!}	)&KKAxS JKE%!MM$A6>>@E!MM$2::<EZ]E8UCD	E  ,-	
 ==?bhh&]]_FJ*s6{+ !GAEz }}T1-5576!9D "]]:a=9F6!9~))T1&'!e&'%g#5?Nvg$*1I@" 1 1$ 7 < @Fay 1 1$ 7 < "'?c1"fQi/,21I,=,=c4,Hq	&--:a=&QR).TU&--Aq	.RS")))z!}*EFC!GV ((//2chhz2IsCD ""4#6#68P8PQLLNm '0  * ", !"V W,/q	NF6N"S!T#   EFL"'
 ##E*s3   A(Q -AP&9BQ &3QQ 	R%+RRc           
      
   | j                  | j                  | j                     d         }| j                  d   j                  | j                     d   }| j                  d   j                  | j                     d   }g }g }t        |j                               D ]0  }|j                  |j                  |      j                                2 t        |j                  j                               dkD  r$t        |j                  j                               }nd}||vr4|j                  d|       |j                  |t        |dz         f       d}	nd}	d}
d	}|D ]  }| j                  d   j                   |   |   d
   }| j                  d   j                   |   |   d   }||k(  r(|	du r9|j                  |||t        |dz         f       |
}n|j                  |||df       |
dz  }
 t#        | t%        d      ||df      }|j'                         t(        j*                  k(  re	 t-        |j/                  |g      d         }	 ||j                  j                         v rt1        t%        d      |z        |j/                         }d}d}t        t        |            D ]  }t        ||         dk(  r ||   |k(  rt1        t%        d      |z        4	 |j2                  ||      d
   t,        k(  rt-        t5        ||               ||<   n-|j2                  ||      d
   t4        k(  rt5        ||         ||<   |d||   z  z  }|j2                  ||      d
   t        k(  r|d||   j7                  dd      z  z  }|d||   z  z  } 	 |	du r|d= t        |j<                        dkD  rt        |j<                        dz   }nd}|j<                  j                  |       ||j>                  |<   ||j                  |<   |jA                  |jC                         dz          | jD                  j                  d|d|jG                  d      d|jG                  d      d       | jI                  | jJ                  | jD                         yy#  d	}Y MxY w#  t1        t%        d      ||   |j2                  ||      d   dz        xY w# t0        $ r5}t9        | t%        d      |z  d       | j;                  |       Y d}~yd}~ww xY w) z%Add new record to the attribute tablerH  r:   rv   rw   r   r   TFrA   r   rw  r   r\  rx  r   z;Record with category number %d already exists in the table.z'Category number (column %s) is missing.rz  r{  z%s,z'%s',r|  r}  zUnable to insert new record.
%sr~  NzINSERT INTO  (r   z	) VALUES())&r  r  r?  rF   r   r   r   r   r  r   rf   r   r  maxr  r   r   r   r   rC  rM   rD  r  r  r   rK   r  r   r	   rj  r   r   r   r   r  rstripr  r  )r)   r   rs  rv   rq   rH  r  r   maxCatr  colIdxr   rC   r   r  rG  r   r  columnsStringvaluesStringr  r   s                         r*   rj  zDbMgrBrowsePage.OnDataItemAdd5  s!   ##DNN4==$A&$IJ{+224==A'JNN;/66t}}EeL	  
u++-. 	<Aeooa088:;	< u  '')*Q.**1134FF J&a+KKC
O45JJ  
	CNN;/66u=cB7KE~~k299%@EfMHi&KKeXs6A: GH"ES%267aKF
	  '(	
 ==?bhh&#---<Q?@4%++2244$; 	   "!s6{+ :A6!9~*%a=I5", !"N O"+!,# 
 % ==A7@CG(+E&),<(=F1I"]]:a=9'BeK(-fQi(8F1I "UZ]%::M}}Z]3G<C$&)2C2CC2N(NN$q	(99;:R T!1I 5%%&*E../!3%%e,'-Ee$'*Ee$u113a78$$++-..s3\5H5H5MO
 t22D4L4LMa '@(RS)/(-jm(DV(L   @ACG"'
 ""5)s?   'R BS A$R;AS R2SS 	T	+TT	c                    | j                  | j                  | j                     d         }|j                         }| j                  d   j
                  | j                     d   }| j                  d   j
                  | j                     d   }g }|dk7  rg|j                  |   }|j                  |       |j                  |   }| j                  j                  d|||fz         |j                  |      }|dk7  rgt        j                  ddd	
      r{t        j                  | t        d      t!        | j                        z  t        d      t        j"                  t        j$                  z        }	|	t        j&                  k7  rg | _	        yd}
t)        j(                  |j                        }g |_        t)        j*                  |j,                        }i |_        t)        j*                  |j                        }i |_        d}
|D ]K  }||v r|j                  j                  |
       ||   |j,                  |
<   ||   |j                  |
<   |
dz  }
M |j/                  t!        |j                               |j                         }|dk7  rI|j1                  |dt        j2                  t        j4                  z         |j                  |      }|dk7  rI| j7                  | j8                  | j                         y)z<Delete selected item(s) from the tlist (layer/category pair)rH  r:   rv   rw   rA   zDELETE FROM %s WHERE %s=%dr  askOnDeleteRecenabledr  z^Selected data records (%d) will be permanently deleted from table. Do you want to delete them?Delete recordsr(   r?   captionr=   Fr   r   T)r  r  r?  r   rF   r   r   r   r   r  r   r   r  rM   
MessageBoxr   rf   YES_NOCENTREYEScopydeepcopyr   r   r   r   LIST_STATE_FOCUSEDr  r  )r)   r   dlistr   rv   rw   indicesr   r   deleteDialogr   	indexTempdataTempcatsTemps                 r*   rk  z DbMgrBrowsePage.OnDataItemDelete  s   ##DNN4==$A&$IJ%%'{+224==A'Jnn[)00?Fbj&&t,ENN5!##E*C$$++,sC/@@ ((.D bj %-=iP==> t//0	2
 *+ii"))+	L rvv%+-( IIe001	==!2!23==!2!23 	E%%a(#+E?Ea #+E?Ea FA	 	3u1123 %%'bjtQ(>(>AVAV(VW((.D bj
 	4..0H0HIr,   c                    | j                  | j                  | j                     d         }t        j                  ddd      rtt        j                  | t        d      t        |j                        z  t        d      t
        j                  t
        j                  z        }|t
        j                  k7  ry	|j                          i |_        g |_	        |j                  d
       | j                   d   j"                  | j                     d   }| j$                  j'                  d|z         | j)                  | j*                  | j$                         |j-                          y	)Delete all items from the listrH  r  r  r  r  zYAll data records (%d) will be permanently deleted from table. Do you want to delete them?r  r  Nr   r:   rv   zDELETE FROM %s)r  r  r?  r   r  rM   r  r   rf   r   r  r  r  r   r   r   rF   r   r  r   r  r  r   )r)   r   r  r  rv   s        r*   rl  z#DbMgrBrowsePage.OnDataItemDeleteAll  s!   ##DNN4==$A&$IJ%-=iP==> u))*	,
 *+ii"))+	L rvv%1{+224==A'J  ''(85(@A4..0H0HI

r,   c                 	   | j                   r| j                  sy| j                  | j                  | j                     d         }|r|j
                  }n|j                  }t        t        t         |                   }d}d| j                  j                  v r| j                  j                  d   }|r|j                         r|j                         j                         | j                  d   k(  r| j                  j                         j                         }|j                  || j                         |r|j!                         \  }}	}
}| j                  j"                  j%                  ||	|
|d       n| j'                  |       | j(                  r| j                  j*                  rn| j                  d   r_| j                  j*                  }|j-                  | j                  d   d	
      j/                         }| j0                  j3                  |       |r&| j                  d   j4                  | j                     d   }d}t7        |      j9                  d      D ]L  }d|v r3|j9                  d      \  }}|d|t        |      |t        |      fz  z  }:|d|t        |      fz  z  }N |j;                  d      }t=        d| ddd| j                  d   j                   t        | j                        |      }i }|j?                         D ]@  }|j9                  d      \  }}tA        |jC                               ||jC                         <   B dx}}| j                  jE                         }d|jG                         d   |jG                         d   z
  |jH                  z  z  }d|jG                         d   |jG                         d   z
  |jJ                  z  z  }|d   |z   }|d   |z
  }|d   |z
  }|d   |z   }|j%                  ||||d       | j                  j                         jM                  ||||       |rp| j                  j"                  jO                          | j                  j"                  jQ                          | j                  jR                  jU                  dd       y| j                  jR                  jU                  dd       y) r]  NrH  vdigitr6  rG   T)nr   r  rr   r   rp  rq  rJ  r:   rw   r   r   -z%s >= %d and %s <= %d or z%s = %d or zor r   r)r(   readr|   r}   r   rG   r   r  r   
   r  r   rr   r  )r  r   r  rr   renderrenderVectorF)+r   rx  r  r  r?  r   r   rL  r  toolbarsGetLayerr|  rF   GetMapWindow
GetDisplaySetSelectedGetRegionSelectedry  	GetRegionAddQueryMapLayerr(   rz  r{  
GetOpacityr  
SetOpacityr   r   r   r  r   
splitlinesr  r/   GetMapGetCurrentRegionheightr   ZoomHistoryAdjustRegionAlignExtentFromDisplay	MapWindow	UpdateMap)r)   zoomselectedOnlyrs  fnr   digitToolbardisplayr  r   r  rr   r  opacityrq   r   r   minr  selectregionlinerw   rU   nsdistewdistrenderernorthsouthwesteasts                                  r*   _drawSelectedzDbMgrBrowsePage._drawSelected  sl   xxt##DNN4==$A&$IJ''BBCRTN#t///??33H=L%%'%%'//1T^^J5OOoo224??AGDMM:$668
1a##--Q!q-N !!,/ {{t33z8R//..!..NN:.J / *,  &&w/ NN;7>>t}}MeT	.t4::3? 
IEe|#(;;s#3S!<%H%H	@ "  )SZ1H!HH
I U+#!{377dmm,	 "--/ ?D!%CJC*/*>F399;'? #$#??113 113C8"335c:; oo	&  113C8"335c:; nn	% sf,sf,c{V+c{V+""UettD"Q,,.::u ;  OO,,.OO668OO%%//t$/OOO%%//u4/Pr,   c                 R   | j                  | j                  | j                     d         }|r|j                  }n|j                  }| j                   |       i}| j
                  j                  j                  | j                        dk  rd| _        | j                  rP| j                  j                  | j
                  j                  | j                  d   |d             | j                  S | j
                  j                  | j                  d   |      | _        | j                  S )z^Redraw a map

        :return: True if map has been redrawn, False if no map is given
        rH  r   Nr6  F)addLayer)r  r  r?  r   r   rx  ry  GetLayerIndexr  SetCmdAddTmpVectorMapLayerrF   )r)   r  rs  r  r   s        r*   r  z DbMgrBrowsePage.AddQueryMapLayer  s    
 ##DNN4==$A&$IJ''BBrt$??,,T[[9A=DK;;KK44NN:.u 5  {{	 //>>z*DDK {{r,   c                 4    | j                  d       g | _        y)zReload tlist of recordsN)r"  r  r   s     r*   rr  zDbMgrBrowsePage.OnDataReload  s      &#% r,   c                    | j                  | j                  | j                     d         }d}	 |j                  |      }|dk(  rn0|j	                  |t
        j                  t
        j                         G|j                          y)zSelect all itemsrH  rA   N)r  r  r?  r   r   rM   r   r   r)   r   rs  r   s       r*   rm  zDbMgrBrowsePage.OnDataSelectAll  st    ##DNN4==$A&$IJ$$T*DrztR%;%;R=S=ST	  	

r,   c                 T   | j                  | j                  | j                     d         }d}	 |j                  |t        j
                        }|dk(  rn3|j                  |dt        j
                  t        j                  z         Y|j                  d       |j                          y)zDeselect itemsrH  rA   r   N)
r  r  r?  r   rM   r   r   r  Focusr   r  s       r*   rn  z DbMgrBrowsePage.OnDataSelectNone  s    ##DNN4==$A&$IJ$$T2+A+ABDrztQ(>(>AVAV(VW	 
 	A

r,   c                 H    | j                  d       |j                          y)Reload table descriptionFr  Nr  r   r   s     r*   r  z"DbMgrBrowsePage.OnDataDrawSelected  s    &

r,   c                 H    | j                  d       |j                          y )NTr  r  r   s     r*   ro  z&DbMgrBrowsePage.OnDataDrawSelectedZoom  s    %

r,   c           
      R   | j                  | j                  | j                     d         }|j                         }t	        |      dk(  rt        | t        d             yt        | t        d      | j                  d| j                  d   t        |      d	d
fd      }|sy|j                  d      }| j                  s| j                  j                  rn@|r>|j                  d      r-| j                  j                  j                  d|dd|z  g       |j!                          y)z]Extract vector objects selected in attribute browse window
        to new vector map
        rH  r   zNothing to extract.r>   Nr^  z	v.extractr6  )r  r   r   T)r(   rA  r  r  disableTable)fulladdrr  zd.vectzmap=%s)ltypelnamelcmd)r  r  r?  r   rf   r
   r   r   r  rF   r   r|  rx  rz  	IsCheckedr  r!  )r)   r   rs  r   rG  r   s         r*   rp  z!DbMgrBrowsePage.OnExtractSelected  s    ##DNN4==$A&$IJ%%'t9>D!,A*BC "34{{ $%)^^J%?$5d$; ! "C  ;;D;)D??t';';#--.$$--"$h45P .  KKMr,   c           
         | j                  | j                  | j                     d         }|j                         }t	        |      dk(  rt        | t        d             yd}| j                  snd| j                  j                  v r| j                  j                  d   }|r|j                         r|j                         j                         | j                  d   k(  r| j                  j                         j                         }|j                  t        t!        t"        |            | j                         | j                  j$                  j'                  d	d	
       | j)                  d      r| j                  r|r3| j                  j                         j*                  j-                          n't/        d| d	| j                  d   dt1        |             | j                  j$                  j'                  d	d	
       yyy)zdDelete vector objects selected in attribute browse window
        (attributes and geometry)
        rH  r   zNothing to delete.r>   Nr  r6  r  Tr  zv.editdelete)r(   r|   r   toolr   )r  r  r?  r   rf   r
   r   rx  r  r  r|  rF   r  r  r  rL  r   r  r  r  rk  digitDeleteSelectedLinesr   r   )r)   r   rs  r   r  r  s         r*   rq  z DbMgrBrowsePage.OnDeleteSelected  s    ##DNN4==$A&$IJ%%'t9>D!,@*AB111??33H=L ))+ ))+335
9SS//668CCE##DS$$8#N))334d3S  &4??,,.44HHJz2!*40 OO%%//t$/O ,;&r,   c                 
   | j                   syd}| j                  | j                   | j                     d         }d}| j                  | j                   | j                     d         }|syd}t        j                          |j                         dk(  r| j                  | j                   | j                     d         j                         }| j                  | j                   | j                     d         j                         }| j                  | j                   | j                     d	         }	|	j                         j                         }
| j                  d
   j                  | j                     d   }| j                  d
   j                  |   |   d   t        k(  rQ|
j                  dd      }
|
r=|
j                  d      sd|
z   }
|
j                  d      s|
dz  }
|	j!                  |
       	 t#        |
      dkD  r&d}|j%                  | j                  ||z   |
z         }n|j%                  | j                        }n| j                  | j                   | j                     d         }	 | j/                  |j                               \  }}|||j                         }|rd}|s|s|r 	 |j%                  | j                  |||      }|rd|j3                         v rn,|dkD  r|j5                  |d       n|j5                  dd       t        j6                          | j8                  j;                  t+        d      | j                  | j                   | j                     d         j=                         z         | j>                  rptA        jB                  ddd      rW|r| jE                  dd       y| j>                  jG                          | j>                  jH                  jK                  d        yyy# t&        $ rh}t)        | t+        d      |j,                  z         | j                  | j                   | j                     d	         j!                  d       Y d}~d}~ww xY w# t0        $ rj t)        | t+        d      |j                         z         |j!                  d| j                  d
   j                  | j                     d   z         d}d}Y <w xY w# t&        $ ri}t)        | t+        d      |j,                  z         |j!                  d| j                  d
   j                  | j                     d   z         Y d}~d}~ww xY w)!z#Apply simple/advanced sql statementNrA   rH  r  Fr   r  r  r   r:   rv   r   "r|  T)r   z"Loading attribute data failed.

%sr>   r   r  z@Loading attribute data failed.
Invalid SQL select statement.

%sr  )rK   r   r   zorder byrB   r   r  	highlightautor  )r  r  )r  )&r  r  r?  rM   rK  r  GetStringSelectionGetValuer/   rF   r   r   r   r   
startswithendswithSetValuerf   rT   r   r	   r   rU   ValidateSelectStatement	TypeErrorlowerrg   rS  rE   r1   r   rx  r   r  r  RemoveQueryLayerr  r  )r)   r   rq   listWinr   r8  showSelectedwhereColwhereOpewhereWinwhereValrv   rr   r  r   s                  r*   r"  z#DbMgrBrowsePage.OnApplySqlStatement  s   ~~	%%dnnT]]&CF&KL!!$.."?"IJ
"**t}}-m<  "  **t}}-o>  "  **4>>$--+H+QRH((*002HNN;/66t}}EgNE~~k*11%8B7KsR#++C5#..s3#&>#,,S1 C%%h/Yx=1$#'L ' 0 0X-@8-K !1 !I !( 0 0 ?I %%dnnT]]&CK&PQC"::3<<>Je<EM,,.C#'L" u ' 0 0t5c !1 !I :,2~%%)t%D%%!t%<
 	,-!!$.."?"GHUUWX	
 ??|//[ 
 ""E"B002))33  4  
?A  YDEO ##DNN4==$A'$JKTTUWXXY  > lln	% &nn[188GPQ * " # !"H IAGG S LL*..5<<T]]KGTU sF   4AP  0:Q4 1S*  	Q1	AQ,,Q14A/S'&S'*	U3AUUc                    | j                   s_t        | t        j                  | j                  d   | j
                  | j                        | _         | j                   j                          y| j                   j                          y)z8SQL Builder button pressed -> show the SQLBuilder dialogr6  )r(   r<   r7  rG   
evtHandlerN)	r  r   rM   rN   rF   r?  OnBuilderEvtr8  r9  r   s     r*   r&  zDbMgrBrowsePage.OnBuilder  s]    ||+99z2mm,,DL LLLL r,   c                 8   |dk(  r| j                   j                         }| j                  | j                  | j                     d         j                  |       | j                  d        | j                   j                         rd | _         y y |dk(  rd | _         y y )Napplyr  r  )r  GetSQLStatementr  r  r?  r  r"  CloseOnApply)r)   r   sqlstrs      r*   r  zDbMgrBrowsePage.OnBuilderEvt  s    G\\113Ft}} =k JKTT
 $$T*||((*# +gDL r,   c                 Z   |dd j                         dk7  ryd}d}||d D ]  }|dk(  r n||z  }|dz  } |dk(  rd}n|j                  d	      }t        | j                  d
   j                  | j
                     d         }||dz   |dz    j                         dk7  s;||dz   |dz   |z    d| j                  d
   j                  | j
                     d   z  k7  ryt        ||dz   |z   d       dkD  r6|j                         j                  d      }|dkD  r||dz   d }||fS d}||fS d}||fS )zhValidate SQL select statement

        :return: (columns, where)
        :return: None on error
        r      select Nr   r  r   *r   r:   rv   r   zfrom r  zwhere rA   )r  r   rf   rF   r   r?  find)r)   r  r  r   r{   tablelenr   s          r*   r  z'DbMgrBrowsePage.ValidateSelectStatement  s    Qq>!Y.56" 	ACxAIDQJE		
 3;D::c?Dt~~k299$--HQRUQY+113w>)AI	H,C
T^^K077FwOPCQ yX-/01A5OO%**84Erz!%!)+. e}	  e} Ee}r,   Nc                 l    | j                  | j                  |   d         }|j                  ||||      S )a'  Load data into list

        :param int layer: layer number
        :param list columns: list of columns for output
        :param str where: where statement
        :param str sql: full sql statement

        :return: id of key column
        :return: -1 if key column is not displayed
        rH  )r  r  rT   )r)   rG   rK   r   r   r   s         r*   rT   zDbMgrBrowsePage.LoadData  s9     %%dnnU&;F&CDws;;r,   c                     || j                   j                         v r@| j                  | j                   |   d         }|j                  | j                  d          y y )NrH  r:   )r  rM  r  rt   rF   )r)   rG   rs  s      r*   r  zDbMgrBrowsePage.UpdatePage  sO    DNN''))''u(=f(EFELL45 *r,   c                    |s| j                   }|| j                  j                         vry | j                  | j                  | j                      d         }|j	                         dk(  r| j                  | j                  |   d         j                  d       | j                  | j                  |   d         j                  d       | j                  | j                  |   d         j                  d       n\| j                  | j                  | j                      d         }|j                  d| j                  d	   j                  |   d
   z         | j                  |       y )Nr  r   r  r  r   r   r  r  r:   rv   )
r?  r  rM  r  r  r  r  rF   r   r  )r)   rG   r8  sqlWins       r*   	ResetPagezDbMgrBrowsePage.ResetPage  s-   MME++--!!$.."?"IJ"u 5m DERRSTUu 5o FGTTUVWu 5g >?HHL(()F{)STFOO"T^^K%@%G%G%Nw%WW 	r,   r  )Trl  r&   )r2   r3   r4   r+   r  r4  rK  r  r  r  rj  rk  rl  r  r  rr  rm  rn  r  ro  rp  rq  r"  r&  r  r  rT   r  r  r6   r,   r*   r  r  O  s    !F\|?'REQNhTCNJCJ:cQJ:&

(T&PPtl! %N<6r,   r  c                   f    e Zd ZddZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd Zd Zd Zy)r  c                 (   t         j                  | ||       | j                  d   j                  j	                         D ]  }|dkD  r||k7  r| j                  |         | j                  r&| j                  d       | j                  d   | _        yy)zPage for managing tables

        :param parent: GUI parent
        :param parentDbMgrBase: instance of DbMgrBase class
        :param onlyLayer: create only tab of given layer, if -1
                          creates tabs of all layers
        r  r:   r   N)r  r+   rF   r   rM  r  r  r?  r  s        r*   r+   zDbMgrTablesPage.__init__  s     	""4"X^^K077<<> 	!E1})!3MM% 	!
 ;;a  KKNDM r,   c           	         || j                   v s|| j                  j                         vry| j                   j                  |       i | j                  |<   t        j                  | t
        j                        }|j                         | j                  |   d<   t        d      }| j                  d   s|t        d      z  }|dk(  r| j                         }| j                  ||d||| j                  d	   j                   |   d
   fz         t        j                  t
        j                        }t        |t
        j                  dt        d      z        }t        j                   |t
        j                        }|j#                  t%        || j                  d	   |      dt
        j&                  t
        j(                  z  d       | j                  d	   j                   |   d
   }t        |t
        j                  dt        d      z  |z        }	t        j                   |	t
        j                        }
| j+                  ||      }|j-                  t
        j.                  | j0                         |j-                  t
        j2                  | j0                         |j                         | j                  |   d<   t        |t
        j                  dt        d      z        }t        j                   |t
        j4                        }t7        |t
        j                  ddt
        j8                        }|j-                  t
        j:                  | j<                         |j-                  t
        j>                  | j@                         |j                         | j                  |   d<   |j#                  tC        |t
        j                  t        d            t
        jD                  t
        jF                  z  t
        jH                  z  d       |j#                  |dt
        jD                  t
        jF                  z  t
        jH                  z  d       t        jJ                  |t
        j                  g d      }|jM                  d       |j-                  t
        jN                  | jP                         |j                         | j                  |   d<   |j#                  tC        |t
        j                  t        d             t
        jD                  t
        jF                  z  t
        jH                  z  d       |j#                  |t
        jD                  t
        jF                  z  t
        jH                  z  d       tS        |t
        j                  d!d"dd#$      }|jU                  d       |j                         | j                  |   d%<   |j#                  tC        |t
        j                  t        d&            t
        jD                  t
        jF                  z  t
        jH                  z  d       |j#                  |t
        jD                  t
        jF                  z  t
        jH                  z  d       tW        |t
        j                  t        d'            }|j-                  t
        jX                  | j@                         |jU                  d       |j                         | j                  |   d(<   |j#                  |t
        j(                  t
        j&                  z  d       t        |t
        j                  dt        d)      z        }t        j                   |t
        j4                        }t[        |t
        j                  dt
        j\                  | j                  d	   j_                  |      *      }|jM                  d       |j                         | j                  |   d+<   |j#                  tC        |t
        j                  t        d            t
        jD                  t
        jF                  z  t
        jH                  z  d       |j#                  |dt
        jD                  t
        jF                  z  t
        jH                  z  d       t7        |t
        j                  ddt
        j8                        }|j-                  t
        j:                  | j`                         |j-                  t
        j>                  | jb                         |j                         | j                  |   d,<   |j#                  tC        |t
        j                  t        d-            t
        jD                  t
        jF                  z  t
        jH                  z  d       |j#                  |dt
        jD                  t
        jF                  z  t
        jH                  z  d       tW        |t
        j                  t        d.            }|j-                  t
        jX                  | jb                         |jU                  d       |j                         | j                  |   d/<   |j#                  |t
        j(                  t
        j&                  z  d       |
j#                  |t
        j(                  t
        j&                  z  dd0       |j#                  |t
        j(                  t
        j&                  z  dd0       |j#                  |
t
        jF                  t
        jH                  z  t
        jd                  z  t
        j&                  z  dd0       |j#                  |t
        jF                  t
        jH                  z  t
        jd                  z  t
        j&                  z  dd0       |j#                  |t
        jF                  t
        jH                  z  t
        jd                  z  t
        j&                  z  dd0       |jg                  |       | j                  d   s|||||||fD ]  }|jU                  d        y1)2a*  Adds tab which represents table

        :param layer: vector map layer connected to table
        :param pos: position of tab, if -1 it is added to end

        :return: True if layer was added
        :return: False if layer was not added - layer has been already added or does not exist
        Fr;  	tablePager  r  r  rA   r  r:   rv   r  r  zDatabase connectionr  r   r"   r  z,Table <%s> - right-click to delete column(s)	tableDatar  r   r  r(   r<   rU   r  r=   
addColNameColumnr  r  )integerr  r  date)r(   r<   r  r   
addColTypeTypeA   rA          .Ar(   r<   r  initialr  r  addColLengthLengthrY   addColButtonzRename columnr  	renameColrenameColToToz&RenamerenameColButtonr  r  r  T)4r   r  r  r   r  rM   r	  rN   r2  r   rF   r  r  r  r  r   r
  rY   r   r  r  _createTableDescrh   r  OnTableRightUpr  r)  r    r%  EVT_TEXTOnTableAddColumnNamer'  OnTableItemAddr   r*  r+  r1  r$  r  
EVT_CHOICEOnTableChangeTyper   r  r   r!  r   r#  r   OnTableRenameColumnNameOnTableItemChanger2  r,  )r)   rG   r  r5  r  r9  dbBoxdbSizerrv   tableBox
tableSizerrs  addBoxaddSizerry   r   r   	btnAddCol	renameBoxrenameSizer
columnFromcolumnTobtnRenameColwidgets                           r*   r  zDbMgrTablesPage.AddLayer	  s#	    DKK50D0D0T0T0V#V5! "u3-2[[]uk*'
~~j)Q~&&E"9##%CeT^^K8??FwOPQ 	 	
 KK,	
 RYYfq9N7O.O
 ##E2;;7UDNN;$?GRVV#	 	 	
 {+2259'Byy1KLLuT
 &&x=
%%eU3

2--t/B/BC

2??D$7$78-2[[]uk* %BIIVao=UV$$VR]];yy%%
 	BKK!:!:;B%%t':':;.4llnul+e		8E))BGG3bhh> 	 	

 	))BGG3bhh>	 	 	
 		RYY0X
 	1

2==$"8"89.3kkmul+e		6C))BGG3bhh> 	 	

 	00277:RXXEa 	 	
 RYYXss
 	e06un-e		8E))BGG3bhh> 	 	

 	11BGG;bhhFq 	 	
 %BIIQuXF	r}}d&9&9:090Aun-YRVVbii%7B RYYfq7I.I
	 ''	2==Ayy..NN;/::5A

 	"-7-=-=-?uk*e		8E))BGG3bhh> 	 	

 	))BGG3bhh>	 	 	
 yy%%
 	bkk4#?#?@b'')?)?@/7~~/?um,e		4A))BGG3bhh> 	 	

 	))BGG3bhh>	 	 	
 Uryy)M"--)?)?@E"3?3E3E3Gu/0266BII+=aHu266BII#5!ANgBFFRYY$61QO288#bii/"));	 	 	
 	288#bii/"));	 	 	
 	288#bii/"));	 	 	
 	y!~~j) 	% e$	% r,   c                     t        |t        j                  | j                  d   j                  |   | j                  d   j                  |            }|j                          |S )z"Create list with table descriptionr:   )r(   r<   rv   rK   )TableListCtrlrM   rN   rF   r   r   Populate)r)   r(   rv   rs  s       r*   r3  z DbMgrTablesPage._createTableDesc	  sW    yy..-44U;NN;/::5A	
 	
 r,   c                     | j                  | j                  | j                     d         }|j                         dk(  r|j	                  d       y|j	                  d       y)zNData type for new column changed. Enable or disable
        data length widgetr+  r  TFN)r  r  r?  	GetStringr  )r)   r   r8  s      r*   r9  z!DbMgrTablesPage.OnTableChangeType	  sM     !!$.."?"OP??	)JJtJJur,   c                    | j                  | j                  | j                     d         }| j                  | j                  | j                     d         }| j                  | j                  | j                     d         }t        |j	                               dkD  r.t        |j	                               dkD  r|j                  d       n|j                  d       |j                          y),Editing column name to be added to the tabler1  r.  r/  r   TFN)r  r  r?  rf   r  r  r   )r)   r   btnrC   colTos        r*   r:  z'DbMgrTablesPage.OnTableRenameColumnName
  s    !!$.."?@Q"RS!!$.."?"LM##DNN4==$A-$PQs||~"s5>>+;'<q'@JJtJJu

r,   c                     | j                  | j                  | j                     d         }t        |j	                               dkD  r|j                  d       n|j                  d       |j                          y)rO  r-  r   TFN)r  r  r?  rf   rM  r  r   )r)   r   rP  s      r*   r6  z$DbMgrTablesPage.OnTableAddColumnName
  sY    !!$.."?"OPu !A%JJtJJu

r,   c                 \   | j                  | j                  | j                     d         }| j                  | j                  | j                     d         j                         }| j                  | j                  | j                     d         j                         }| j                  d   j
                  | j                     d   }|r|st        | t        d             y|j                  d	|
      }|d	kD  r|j                  d	|
      d	kD  rt        | t        d      |||dz         y|j                  ||       | j                  j                  d| j                  d   | j                  |d|df       nt        | t        d      ||dz         y| j                  | j                  | j                         | j                  | j                  | j                     d         j                  | j                  d   j                  |             | j                  | j                  | j                     d         j!                  d       | j                  | j                  | j                     d         j#                  d       | j%                  |       |j'                          y)zRename column in the tabler  r.  r/  r:   rv   z0Unable to rename column. No column name defined.r>   NrA   )startr   zgUnable to rename column <%(column)s> to <%(columnTo)s>. Column already exists in the table <%(table)s>.)ry   rF  rv   zv.db.renamecolumnr6  r   r   rG   ry   zTUnable to rename column. Column <%(column)s> doesn't exist in the table <%(table)s>.rx   r   r   rv   )r  r  r?  r  rF   r   r	   r   FindItemSetItemTextr  r   r  r  SetItemsr   r  r  _updateTableColumnWidgetChoicesr   )r)   r   rs  r   nameTorv   r   s          r*   r;  z!DbMgrTablesPage.OnTableItemChange
  st   ##DNN4==$A+$NO""NN4==)+6

(* 	 $$NN4==)-8

(* 	 {+224==A'J6OP >>>5Dby>>>7"<# !8!
 &*vN!O %%dF3''../'+~~j'A)-596*B	 V "&6	7  	4..0H0HI 	DNN4==9+FGPPNN;'2259	
 	DNN4==9+FGTTUVWDNN4==9-HIRRSUV,,5,9

r,   c                 L   t        | d      st               | _        t               | _        t               | _        | j                  t        j                  | j                  | j                         | j                  t        j                  | j                  | j                         | j                  t        j                  | j                  | j                         t               }|j                  | j                  t        d             | j                  | j                  | j                      d         j#                         dk(  r|j%                  | j                  d       |j                  | j                  t        d             |j'                          |j                  | j                  t        d             | j(                  d	   s8|j%                  | j                  d       |j%                  | j                  d       | j+                  |       |j-                          y
)rZ  popupTableIDr  zDrop selected columnr  rA   FzDrop all columnsr_  r  N)r  r   popupTableID1popupTableID2popupTableID3rh   rM   r  OnTableItemDeleteOnTableItemDeleteAllOnTableReloadr   r  r   r  r  r?  r   r  r  rF   r   r!  )r)   r   rt  s      r*   r4  zDbMgrTablesPage.OnTableRightUp]
  s   t^,!&D!&D!&DIIbkk4#9#9d>P>PIQIIbkk4#<#<ASASITIIbkk4#5#5$:L:LIM vD&&*@(ABt}}-k: 
 KK**E2D&&*<(=>D&&(4~~j)KK**E2KK**E2tr,   c                 |   | j                  | j                  | j                     d         }|j                         }|j	                         }t        j                  ddd      r|j	                         dkD  rMd|j                  |      z  }|dk7  rH|j                  |      }|dk7  r|d	|j                  |      z  z  }|dk7  r3nd
|j                  |      z  }t        j                  | t        d      |z  t        d      t        j                  t        j                  z        }|t        j                  k7  ry|j                         }|dk7  rn| j                  j!                  d| j"                  d   | j                  |j                  |      df       |j%                  |       |j                         }|dk7  rn| j'                  | j                  | j(                         | j"                  d   j*                  | j                     d   }| j                  | j                  | j                     d         j-                  | j"                  d   j/                  |             | j                  | j                  | j                     d         j1                  d       | j3                  |       |j5                          y)z%Delete selected item(s) from the listr  r  r  r  r  r   zcolumns '%s'rA   z, '%s'zcolumn '%s'zPSelected %s will PERMANENTLY removed from table. Do you want to drop the column?Drop column(s)r  Fv.db.dropcolumnr6  rU  r:   rv   r.  r   rV  N)r  r  r?  r   GetSelectedItemCountr   r  r   r   rM   r  r   r  r  r  r  r   rF   
DeleteItemr  r  r   rY  r   r  rZ  r   )r)   r   rs  r   countSelecteddeleteColumnsr  rv   s           r*   ra  z!DbMgrTablesPage.OnTableItemDelete|
  sr   ##DNN4==$A+$NO%%'224%-=iP ))+a/ .1B1B41H Hbj 006Drz%E4E4Ed4K)KK bj
 !.0A0A$0G G==B !	"
 *+ii"))+	L rvv%%%'bj&&%#~~j9!%"'"3"3D"9	 T"))+D bj 	4..0H0HI {+224==A'JDNN4==9+FGPPNN;'2259	
 	DNN4==9+FGTTUVW,,5,9

r,   c                    | j                   d   j                  | j                     d   }| j                   d   j                  |      }| j                   d   j                  | j                     d   }||v r|j	                  |       t        j                  ddd      rpt        j                  | t        d      d	j                  |      z  t        d
      t        j                  t        j                  z        }|t        j                  k7  ry|D ]:  }| j                  j                  d| j                   d   | j                  |df       < | j!                  | j"                  | j                     d         j%                          | j'                  | j                  | j(                         | j                   d   j                  | j                     d   }| j!                  | j"                  | j                     d         j+                  | j                   d   j                  |             | j!                  | j"                  | j                     d         j-                  d       | j/                  |       |j1                          y)r  r:   rv   rw   r  r  r  r  zYSelected columns
%s
will PERMANENTLY removed from table. Do you want to drop the columns?r   re  r  Frf  r6  rU  r  r.  r   rV  N)rF   r   r?  r   r  r   r  rM   r  r   r   r  r  r  r  r   r  r  r   r  r  rY  r  rZ  r   )r)   r   rv   r  rq   r  rC   s          r*   rb  z$DbMgrTablesPage.OnTableItemDeleteAll
  s    {+224==A'J~~k*55e<NN;/66t}}EeL	KK	"%-=iP==C 99T?	$
 *+ii"))+	L rvv% 
	C&&%#~~j9!%"%	
	 	DNN4==9+FGVVX 	4..0H0HI {+224==A'JDNN4==9+FGPPNN;'2259	
 	DNN4==9+FGTTUVW,,5,9

r,   Nc                     | j                  | j                  | j                     d         j                  d       g | _        y)r  r  Tr   N)r  r  r?  rK  r  r   s     r*   rc  zDbMgrTablesPage.OnTableReload
  s@    DNN4==9+FGPP 	Q 	
 !r,   c                    | j                  | j                  | j                     d         j                         }| j                  | j                  | j                     d         j	                         }t        | j                  | j                  | j                     d         j                               }| j                  |||       | j                  d   j                  | j                     d   }| j                  | j                  | j                     d         j                  d       | j                  | j                  | j                     d         j                  | j                  d   j                  |             | j                  | j                  | j                     d         j                  d       | j                  |	       |j                          y
)r  r  r#  r+  r:   rv   r   r.  r   rV  N)r  r  r?  r  r  r  rF  rF   r   r  rY  r   r  rZ  r   )r)   r   r   r   r   rv   s         r*   r7  zDbMgrTablesPage.OnTableItemAdd
  s   ""NN4==),7

(* 	 ##NN4==),7



 	 t}}-n=hj
 	tUF+ {+224==A'JDNN4==9,GHQQRTUDNN4==9+FGPPNN;'2259	
 	DNN4==9+FGTTUVW,,5,9

r,   c                 r   || j                   j                         v r| j                  d   j                  |   d   }| j	                  | j                   |   d         }|j                  | j                  d   j                  |   | j                  d   j                  |             | j                  d        y y )Nr:   rv   r  rv   rK   )	r  rM  rF   r   r  rt   r   r   rc  )r)   rG   rv   rs  s       r*   r  zDbMgrTablesPage.UpdatePage  s    DNN''))NN;/66u=gFE ''u(=k(JKELLnn[188?{3>>uE   t$ *r,   c                 $   | j                   d   j                  |      }| j                  | j                  d   j                  | j
                     d         j                  |       | j                  d   j                  r2| j                  d   j                  j                  j                  |       | j                  | j                  d   j                  | j
                     d         j                  }|r|j                  j                  |       yy)zQUpdate table column widget choices

        :param str table: table name
        r:   rB  r  rH  N)rF   r   r  rH   r  r?  rY  r  list_columnsSetrI   )r)   rv   r  rI   s       r*   rZ  z/DbMgrTablesPage._updateTableColumnWidgetChoices  s    
 ~~k*55e<JJx **4==9-H	

(4.::h''JJx ((5599$?''JJx **4==9&A

) 	 ""&&t, r,   r  r&   )r2   r3   r4   r+   r  r3  r9  r:  r6  r;  r4  ra  rb  rc  r7  r  rZ  r6   r,   r*   r  r    sN    +(Yv
CJ>7r.`!8
%-r,   r  c                   $    e Zd Zd Zd Zd Zd Zy)r  c                    || _         | j                   j                  | _        t        j                  j	                  | |       t        j
                  | t        j                        }|j                  d       t        j                  |t        j                        }t        j                  t        j                        }t        |t        j                  dt        d      z        }t        j                  |t        j                        }| j                  |      | _        | j                  j                  t        j                   | j"                         | j                  j                  t        j$                  | j"                         |j'                  | j                  t        j(                  t        j*                  z  dd	       |j'                  |t        j(                  t        j*                  z  dd	       |j-                  |       t        j                  |t        j                        }t        j                  t        j                        }	t/        |t        j                  | 
      | _        | j                  d   s| j0                  j3                  d       |	j'                  | j0                  dt        j4                  t        j6                  z  t        j8                  z  t        j*                  z  d       t        j                  t        j                        }
|
j'                  |dt        j*                         |j-                  |	       |j;                  ||d       |j=                          | j-                  |
       y)zCreate layer manage pager'   r;  d   r  zList of layersr  r   r"   r2  )r(   r<   parentDialogr  Fr  r  )r  r  N)r  rF   rM   r	  r+   SplitterWindowrN   SetMinimumPaneSizer  r  r   r   r
  _createLayerDesc	layerListrh   r  OnLayerRightUpr  rY   r  r  r,  	LayerBookmanageLayerBookr  r+  r1  r2  SplitHorizontallyFit)r)   r(   r  splitterWin	panelListpanelListSizerlayerBox
layerSizerpanelManagemanageSizer
panelSizers              r*   r+   zDbMgrLayersPage.__init__*  se   .--77
$v.''t		B&&s+
 HHKBII>	R[[1&1=M;N2N
 &&x=
..y9B668K8KLBOOT-@-@At~~BFFRYY,>1UVW:BFFRYY,>1UVW>*
 hhkbii@kk"++.(2994 
 ~~j)  ''.  288#bii/"));	 	 	
 [[-
{qryyA[)%%icBj!r,   c                     t        |t        j                  | j                  d   j                        }|j                          |S )zCreate list of linked layersr:   )r(   r<   r   )LayerListCtrlrM   rN   rF   r   rK  )r)   r(   rs  s      r*   rz  z DbMgrLayersPage._createLayerDescd  s9    bii{0K0R0R
 	
 r,   c                    | j                   j                  | j                  d   j                         | j                   j	                  d       t        t        t        | j                  d   j                  j                                     }| j                  j                  j                  |       t        |      dkD  r| j                  j                  j                  |d          | j                  d   j                  t        |d            d   }t        | j                  d   j                  j                               }nd}d}| j                  j                   j#                  t%        d      |z         | j                  j&                  d   d	   j)                  |d	z          | j                  j*                  d   d	   j                  |       | j                  j-                  d 
       y )Nr:   Trm  r   rv   r   %Drop also linked attribute table (%s)rG   r   )r   )r{  rt   rF   r   rK  rL  r   r   rM  r~  deleteLayerrY  rf   SetStringSelectionr  r  deleteTableSetLabelr   addLayerWidgetsr  modifyLayerWidgetsOnChangeLayer)r)   listOfLayersr   maxLayers       r*   r  zDbMgrLayersPage.UpdatePageq  s    	dnn[9@@At,CT^^K%@%G%G%L%L%NOP((11,?|q   ,,??QP{3::3|A;OPI 4>>+6==BBDEHIH((1156B	
 	,,W5a8AA(Q,O//8;DD\R***6r,   c                      y)z$Layer description area, context menuNr6   r   s     r*   r|  zDbMgrLayersPage.OnLayerRightUp  s    r,   N)r2   r3   r4   r+   rz  r  r|  r6   r,   r*   r  r  )  s    8"t7@r,   r  c                   R    e Zd ZdZej
                  ej                  fdZd ZddZ	y)rJ  zTable description listc           	      $   || _         || _        || _        t        j                  | ||||t
        j                  t
        j                  z  t
        j                  z  t
        j                  z         t        j                  j	                  |        y Nr=   )r(   rv   rK   r   r+   rM   rO   rP   rQ   BORDER_NONErc   rd   )r)   r(   r<   rv   rK   r  r  s          r*   r+   zTableListCtrl.__init__  sn     
,,-<r~~M	
 	&&//5r,   c                      || _         || _        y)zUpdate column descriptionNrp  )r)   rv   rK   s      r*   rt   zTableListCtrl.Update  s    
r,   c           	         i }|sht        d      t        d      t        d      g}d}|D ]  }| j                  ||       |dz  } | j                  dd       | j                  dd	       n| j                          d}| j                  D ]  }| j                  |t        |            }| j                  |dt        |             | j                  |dt        | j                  |   d
                | j                  |dt        | j                  |   d                | j                  ||       t        |      t        | j                  |   d
         t        | j                  |   d         f||<   |dz   } | j                          |S )Populate the listzColumn namez	Data typezData lengthr   rC   headingr   ^  r      rw  r  r   )r   r   r   r   rK   
InsertItemr   SetItemrv   SetItemDatar  r   )r)   r   itemDataheadingsr   hry   r   s           r*   rK  zTableListCtrl.Populate  sz   -(!K.!M:JKHA !!a!3Q AS1AS1!ll 	FOOAs6{3ELL3v;/LL3tzz&'9&'A#BCLL3tzz&'9('C#DEUA&FDJJv&v./DJJv&x01HQK
 AA	 	r,   NF
r2   r3   r4   r5   rM   DefaultPositionDefaultSizer+   rt   rK  r6   r,   r*   rJ  rJ    s%      /1.@.@r~~6$
r,   rJ  c                   R    e Zd ZdZej
                  ej                  fdZd ZddZ	y)r  zLayer description listc           	         || _         || _        t        j                  | ||||t        j
                  t        j                  z  t        j                  z  t        j                  z         t        j                  j                  |        y r  )r(   r   r   r+   rM   rO   rP   rQ   r  rc   rd   )r)   r(   r<   r   r  r  s         r*   r+   zLayerListCtrl.__init__  se    ,,-<r~~M	
 	&&//5r,   c                     || _         y)zUpdate descriptionNr  )r)   r   s     r*   rt   zLayerListCtrl.Update  s	    r,   c                 B   i }|sVt        d      t        d      t        d      t        d      t        d      g}d}|D ]  }| j                  ||       |dz  } n| j                          d}| j                  j	                         D ]  }| j                  |t        |            }| j                  |dt        |             t        | j                  |   d	         }t        | j                  |   d
         }	t        | j                  |   d         }
t        | j                  |   d         }| j                  |d|	       | j                  |d|       | j                  |d|
       | j                  |d|       | j                  ||       t        |      |	||
|f||<   |dz  } t        | j                               D ]L  }| j                  |t        j                         | j                  |      dk  s:| j                  |d       N | j                          |S )r  LayerDriverDatabaser  Keyr   r  r   r=  r<  rv   rw   r  r"      r   )rC   r   )r   r   r   r   rM  r  r   r  r  r   r   r   rM   LIST_AUTOSIZEGetColumnWidthr   )r)   r   r  r  r   r  rG   r   r=  r<  rv   rw   s               r*   rK  zLayerListCtrl.Populate  s   '
AhK:'
AeHUHA !!a!3Q ![[%%' 	EOOAs5z2ELL3u:.4;;u-j9:HU+H56FE*734Edkk%(/0CLL6*LL8,LL5)LL3'UA&u:vxDHQKFA	 t**,- 	5AAR-=-=>""q")B.###4	5
 	r,   Nr  r  r6   r,   r*   r  r    s%     !/1/A/A 6$r,   r  c                       e Zd ZdZej
                  fdZd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)r}  z#Manage layers (add, delete, modify)c                    t         j                  j                  | |||       || _        || _        | j                  j
                  d   | _        | j                  j
                  d   }t        dddd      }g | _        |j                         D ]+  }| j                  j                  |j                                - i | _        t        j                         }t        j                  |d	      }	t        j                   |d
   |d   |	d         \  }
}t        dd|dd      }t        j"                  j%                  |
       |j                         D ]B  }|j'                  dd      \  }}|j                         | j                  |j                         <   D | j)                  | j                  d   | j                  d         | _        	 | j-                  | j                  d   | j                  d   | j*                  d         | _        | j3                          | j5                          | j7                          y # t0        $ r
 g | _        Y Cw xY w)Nr  r:   r6  z
db.driversTp)r|   r  r}   rr  rs  GISDBASELOCATION_NAMEru  )gisdbaselocationru  z
db.connect)r}   envr  r|   :r   r<  r=  r   )rM   Notebookr+   r(   rw  rF   r:   r   listOfDriversr  r   r/   defaultConnectr}  r  r~  create_environmentutils
try_remover   
_getTablesdefaultTables_getColumnsdefaultColumns
IndexError_createAddPage_createDeletePage_createModifyPage)r)   r(   r<   rw  r=   r6  driversdrvgenvvectMap	vectGisrcvectEnvconnectr  r   rU   s                   r*   r+   zLayerBook.__init__  s$   
T62U;(**44[A$$..z:
 \DL%%' 	3C%%ciik2	3 !||~//
 #55*%/*8$
	7
 
 	y)&&( 	>D**S!,KD%05D

-	> "__)4+>+>z+J
	%"&"2"2##H-##J/""1%#D 	    	%"$D	%s   	?H9 9IIc                    t        j                  | t         j                        | _        | j	                  | j                  t        d             	 t        | j                  j                  j                               }t        | j                  t         j                  dt        d      z        }t        j                  |t         j                        }t        | j                  t         j                  dt        d	      z        t        | j                  t         j                  d
|dz   dd      ft        | j                  t         j                  dt        d      z        t        j                   | j                  t         j                  d| j"                        ft        | j                  t         j                  dt        d      z        t%        | j                  t         j                  dt         j&                        ft        | j                  t         j                  dt        d      z        t        j                   | j                  t         j                  d| j(                        ft        | j                  t         j                  dt        d      z        t        j                   | j                  t         j                  d| j*                        ft-        | j                  t         j                  t        d            dfd| _        | j.                  d   d   j1                  | j2                  d          | j.                  d   d   j5                  | j2                  d          | j.                  d   d   j7                  d       | j.                  d   d   j7                  d       | j.                  d   d   j5                  d       | j.                  d   d   j9                  t         j:                  | j<                         | j.                  d   d   j9                  t         j>                  | j@                         | j.                  d   d   j9                  t         j:                  | jB                         | j.                  d   d   jE                  t        d             t        | j                  t         j                  dt        d       z        }t        j                  |t         j                        }tG        jH                  d!d"d#$      }t        | j                  t         j                  dt        d%      z        t%        | j                  t         j                  dt         j&                        ft        | j                  t         j                  dt        d      z        t%        | j                  t         j                  |t         j&                        fd&| _%        | jJ                  d   d   j9                  t         j>                  | jL                         | jJ                  d   d   j9                  t         j>                  | jL                         tO        | j                  t         j                  t        d'      d()      }|j9                  t         jP                  | jL                         tO        | j                  t         j                  t        d*      d()      }|j9                  t         jP                  | jR                         tO        | j                  t         j                  t        d+      d()      }	|	j9                  t         jP                  | jT                         t        jV                  t         jX                        }
t        jZ                  d,d,-      }d}dD ]  }| j.                  |   \  }}|sd.}nd/}|j]                  |t         j^                  |df|0       |s|dz  }I|d1k(  r"t         j^                  t         j`                  z  }n!t         j^                  t         jb                  z  }|j]                  |||df2       |dz  } |je                  d       |j]                  |dt         jf                  t         jb                  z  d,3       t        jV                  t         jX                        }|j]                  |	dt         jf                  t         j`                  z  d,3       |j]                  d4dt         jf                  t         jb                  z  d,3       |j]                  |dt         jf                  d,3       |j]                  |dt         jf                  t         jb                  z  d3       t        jh                  d5d,d,6      }|je                  d       d&D ]g  }| jJ                  |   \  }}|j]                  |t         j^                  7       |j]                  |t         j^                  t         jb                  z  7       i |j]                  |dt         jf                  t         jb                  z  d,3       |j]                  |dt         jf                  t         jj                  z  d,3       |
j]                  |d8t         jf                  t         jb                  z  d83       |
j]                  |d5t         jl                  t         jn                  z  t         jp                  z  t         jb                  z  d83       |js                  | j                         | j                  ju                  d       | j                  jw                  |
       |
jy                  | j                         y# t        $ r d}Y w xY w)9zAdd new layerr;  z	Add layerr  r   r  zLayer descriptionr  %s:r  r%  r   r(  r)  r     rA   r  r  r   r  r  
Key columnz*Insert record for each category into tableN)rG   r<  r=  rv   rw   addCatr<  r=  rv   rw   r  Tz0You need to add categories by v.category module.zTable descriptionr  	keycolumnrU   r  z
Table name)rv   rw   z&Create table}   rA   r  z
&Add layerz&Set defaultr  r  )r   r  rN  )r  r  spanrG   )r  r  r  )r  r  r  r  r  r"   )=rM   r	  rN   addPanelr  r   r  r:   r   rM  r   r   r
  r  r   r   r$  r  r    r%  r  r  r   r  r  r  r  r  rh   r8  OnDriverChangedr'  OnDatabaseChangedOnTableChangedr   r   r  tableWidgetsOnCreateTabler   r!  
OnAddLayerOnSetDefaultr  r)  r(  rY   r*  
ALIGN_LEFTr  r.  r  r/  r0  r-  r2  r1  	FitInsideSetAutoLayoutr,  r  )r)   r  r  r  r>  r?  keyColbtnTablebtnLayer
btnDefaultr9  	dataSizerr   rw   r  rU   r  r=   btnSizers                      r*   r  zLayerBook._createAddPageX  s   ;$--an=	4>>005578H ==RYYfBU@V6W
 &&x=
 ==RYYeaj>P ==yy!$qL	 ==RYYeak>Q 		==yy" ..		
 ==RYYea
m>S ==yy--		
 ==RYYeaj>P 		==yy" ..		
 ==RYYeao>U 		==yy" //		
 ==yyHI
 uB 
J 	X&q)<<)	
 	Z(+44T5H5H5TUW%a(55a8U#A&33A6X&q)2248X&q)..r}}d>R>RSZ(+00t55	
 	W%a(--bmmT=P=PQ 	X&q)44CD	

 ==RYYfBU@V6W
 &&x=

 !!;wO ==RYYeao>U ==yy--		
 ==RYYeao>U ==yy --		

2 	'"1%**2+<+<d>P>PQ% #(():):D<N<NO$--Ao4FYWbmmT%7%78$--AlO)TbmmT__5DMM299a6GiX
t'8'89 KK.	 OO3	L 	C//4LE5MM%b&>&>S!HSWMXqg~002==@00299<MM%e#qM:1HC'	* 	  #yQRVVbii5GPQR;;r}}-ZABFFR]]4JSTUV0B1MX!"&&CxABFFRYY4FqQ $$!!!<	  ## 	LC,,S1LE5MM%b&>&>M?MM%b&>&>&JMK	L
 	yQRVVbii5GPQRxABFFR^^4KTUVjQRVVbii5GPQR"))#bhh.:	 	 	
 	T]]+##D)y)dmm$i  	H	s   -m6 6nnc                    t        j                  | t         j                        | _        | j	                  | j                  t        d             t        | j                  t         j                  dt        d      z        }t        | j                  t         j                  dt         j                  t        t        t        | j                  j                  j                                           | _        | j                  j!                  d	       | j                  j#                  t         j$                  | j&                         	 | j                  j                  t)        | j                  j+                                  d
   }t/        | j                  t         j                  t        d      |z        | _        |dk(  r6| j                  j3                  d       | j0                  j3                  d       t5        | j                  t         j6                  t        d      d      }|j#                  t         j8                  | j:                         t        j<                  t         j>                        }t        j<                  t         j>                        }t        j@                  ddd      }|jC                  |t         jD                         |jC                  | j                  t         jD                         |jC                  |d	t         jF                  t         jH                  z  d       |jC                  | j0                  d	t         jF                  t         jH                  z  d       |jC                  |dt         jF                  t         jH                  z  d       |jC                  |d	t         jF                  t         jJ                  z  d       | j                  jM                  |       y# t,        $ r d}Y zw xY w)Delete layerr;  zRemove layerr  r  zLayer to remover  rv  rA   r  r   rv   r   r  Fz&Remove layerr  r  r  r  r  r  r   r  N)'rM   r	  rN   deletePanelr  r   r   r   r#  rL  r   r   r:   r   rM  r  r  rh   EVT_COMBOBOXr  r  r  r   r   r  r  r   	ID_DELETEr!  OnDeleteLayerr  r  r/  rY   r*  r  r  r0  r,  )r)   r  r   	btnDeleter9  r  	flexSizers          r*   r  zLayerBook._createDeletePage5  s   884BII>$**>1BC##		CTAU9U
 $##yy..S$.."7"7"<"<">?@
 	%%a(boot/A/AB	--D$$779:I $##yy;<yH
 ?##E*##E*bllAo,>Y
	 	r}}d&8&89
 KK,	KK,	$$!!!<	e"":":;d&&R-E-EFiABFFRYY4FqQd&&1266BII;MVWXiABFFRYY4FqQiABFFR^^4KTUV!!),M  	I	s   =O0 0O?>O?c                 j   t        j                  | t         j                        | _        | j	                  | j                  t        d              t        | j                  t         j                  dt        d      z        t        | j                  t         j                  dt         j                  t        t        t        | j                  j                  j                                           ft        | j                  t         j                  dt        d      z        t        j                  | j                  t         j                  d	| j                   
      ft        | j                  t         j                  dt        d      z        t#        | j                  t         j                  ddt         j$                        ft        | j                  t         j                  dt        d      z        t        j                  | j                  t         j                  d	| j&                  
      ft        | j                  t         j                  dt        d      z        t        j                  | j                  t         j                  d	| j(                  
      fd| _        | j*                  d   d   j-                  d       	 t/        | j*                  d   d   j1                               }|rz| j                  j                  |   d   }| j                  j                  |   d   }| j                  j                  |   d   }| j7                  |||      }| j*                  d   d   j9                  |       | j*                  d   d   j;                  |       || j*                  d   d   j=                         v r"| j*                  d   d   j9                  |       nK| j>                  d   dk7  r| j>                  d   |z   }nd|z   }| j*                  d   d   j9                  |       | j*                  d   d   jA                  |       | j*                  d   d   j-                  d       | j*                  d   d   jC                  t         jD                  | jF                         tI        | j                  t         jJ                  t        d      d      }|jC                  t         jL                  | jN                         t        jP                  t         jR                        }t        jT                  d d!d!"      }	|	jW                  d       dD ]  }
| j*                  |
   \  }}|	jY                  |t         jZ                  #       |
dk(  r3|	jY                  |t         jZ                  t         j\                  z  #       n|	jY                  |t         jZ                  #        |jY                  |	dt         j^                  t         j`                  z  d!$       |jY                  |dt         j^                  t         jb                  z  d!$       | j                  je                  |       y# t2        $ rF d}| j*                  j                         D ]#  }| j*                  |   d   j5                  d       % Y w xY w)%zModify layerr;  r  r  r  r  r  r  r  r  r  r  r   )r  rA   r  r  r  )rG   r<  r=  rv   rw   rG   r   r   NFr<  r=  rv   schemazpublic.rw   z&Modify layerr  r  r  r  r  r  r  )3rM   r	  rN   modifyPanelr  r   r   r   r#  rL  r   r   r:   r   rM  r$  r  r    r%  r  r  r  r  r  r  r   r  r  r  r  r   r  rY  rh   r  r  r   r  r!  OnModifyLayerr  r  r/  r.  rY   r*  r  r  r  r0  r,  )r)   rG   r  r<  r=  rv   listOfColumns	btnModifyr9  r  rw   rU   s               r*   r  zLayerBook._createModifyPaget  sw   884BII>$**>1BC ++		7AS ++yy".. S$..*?*?*D*D*F!GH	 ++		8AT 		++yy" ..		
 ++		:AV ++yy"--	 ++		7AS 		++yy" ..		
 ++		<AX 		++yy" //		
_:#
z 	(+88;	@//8;NNPQE ^^**51(;F~~,,U3J?HNN))%09E ,,VXuEM##H-a0CCFK##J/2;;HE//8;DDFF''03FFuM&&x0B6 //9EAE%-E''03FFuM##E*1-66}E##E*1-::1= 	(+00$BTBTU
 bllAo,>Y
	 	r}}d&8&89
 KK,	 $$!!!<	  #B 	DC2237LE5MM%b&>&>M?g~e"*B*BR]]*RSe"*B*BC	D 	iABFFRYY4FqQiABFFR^^4KTUV!!),q  	@E00557 @''.q188?@	@s   )Y# #AZ21Z2c                     g }t        d| dd||      }|t        | t        d             |S |j                         D ]  }|j	                  |        |S )z0Get list of tables for given driver and databasez	db.tablesTr  )r(   r  r}   r<  r=  zOUnable to get list of tables.
Please use db.connect to set database parameters.r>   )r   r	   r   r  r   )r)   r<  r=  r   r   rv   s         r*   r  zLayerBook._getTables  ss    
 ;H M^^% 	!EMM% 	! r,   c           	          g }t        d| dd|||      }||S |j                         D ]  }|j                  |        |S )z!Get list of column of given tablez
db.columnsT)r(   r|   r  r<  r=  rv   )r   r  r   )r)   r<  r=  rv   rK   r   ry   s          r*   r  zLayerBook._getColumns  s[    
 ;Nnn& 	#FNN6"	# r,   c                 r   |j                         }| j                  d   d   j                         }| j                  d   d   }| j                  d   d   }| j                  ||      }|j	                  |       |j                  d       t        |      dk(  r|j	                  g        |j                          y)z/Driver selection changed, update list of tablesr=  r   rv   rw   r   N)rM  r  r  r  rY  r  rf   r   )r)   r   r<  r=  winTablewinKeyr   s          r*   r  zLayerBook.OnDriverChanged)  s    "''
3A6??A''03%%e,Q/2&!a v;!OOB

r,   c                 $    |j                          y)z1Database selection changed, update list of tablesNr   r   s     r*   r  zLayerBook.OnDatabaseChanged:  s    

r,   c                 R   | j                   d   d   j                         }| j                   d   d   j                         }|j                         }| j                   d   d   }| j	                  |||      }|j                  |       |j                  d       |j                          y)z*Table name changed, update list of columnsr<  r   r=  rw   r   N)r  r  r  rM  r  rY  r  r   )r)   r   r<  r=  rv   r8  r  s          r*   r  zLayerBook.OnTableChanged>  s    %%h/2EEG''
3A6??A!""5)!,%8T

r,   c                    | j                   d   d   }| j                   d   d   }| j                   d   d   }| j                   d   d   }|j                  | j                  d          |j                  | j                  d          | j	                  | j                  d   | j                  d         }|j                  |       |j                  d       t        |      dk(  r|j                  g        nR| j                  | j                  d   | j                  d   |d         }|j                  |       |j                  d       |j                          y)zSet default valuesr<  r   r=  rv   rw   r   N)
r  r  r  r  r  rY  r  rf   r  r   )r)   r   r<  r=  rv   rw   r   r  s           r*   r  zLayerBook.OnSetDefaultK  s=   %%h/2''
3A6$$W-a0""5)!,!!$"5"5h"?@$--j9:)4+>+>z+J
 	v1v;!LL####H-##J/q	D
 LLQ

r,   c           	         | j                   d   d   j                         }| j                   d   d   j                         }| j                  d   d   j                         }| j                  d   d   j                         }|r|st	        | t        d             y|| j                   d   d   j                         v rt	        | t        d	      |z         yd
|d|d}t        dd| |d||       | j                   d   d   }|j                  | j                  ||             |j                  |       | j                   d   d   }|j                  | j                  |||             |j                  |       |j                          y)z,Create new table (name and key column given)r<  r   r=  rv   rw   zEUnable to create new table. Table name or key column name is missing.r>   NzFUnable to create new table. Table <%s> already exists in the database.zCREATE TABLE r  z	 INTEGER)r  Tr  )r|   r(   stdinr  r<  r=  )r  r  r  r  r	   r   r   r   rY  r  r  r  r   )	r)   r   r<  r=  rv   rw   r   	tableListkeyLists	            r*   r  zLayerBook.OnCreateTablef  s   %%h/2EEG''
3A6??A!!'*1-668&q)224C@ D((1!4==??A 	  @ 16s;	
 ((1!4	4??68<=$$U+ &&u-a0))&(EBC""3'

r,   c                 H   t        | j                  d   d   j                               }| j                  d   d   }| j                  d   d   j                         }| j                  d   d   j                         }| j                  d   d   j                         }| j                  d   d   j                         }|| j                  j
                  j                         v r1t        | t        d      | j                  j                  |dz  	       y
t        d| d| j                  j                  |||||d
      }|d   dk(  r|d   s| j                  d   d   j                         r(t        d| d| j                  j                  ||d|d	       | j                  j                  j                  |       | j                  j                  d   | _        |j!                  |dz          n|d   rt#        | |d   	       t%        | j                  j
                  j                               dk(  rt| j&                  j)                          | j*                  j)                          | j,                  j                         D ]"  }	| j,                  |	   d   j)                          $ y
y
)zAdd new layer to vector maprG   r   r<  r=  rv   rw   zSUnable to add new layer to vector map <%(vector)s>. Layer %(layer)d already exists.)rr  rG   r>   Nv.db.connectT)	r(   r|   r   r<  r=  rv   rw   rG   getErrorMsgr   r  r0  r   )r(   r|   r   rG   r  r1  rK   r   r  r:   )r  r  r  r  r:   r   rM  r	   r   r   r   r  rw  r  r  rF   r  r   rf   r  r  r  r  )
r)   r   rG   layerWinr<  r=  rv   rw   r   r  s
             r*   r  zLayerBook.OnAddLayer  s{   D((1!4==?@''03%%h/2EEG''
3A6??A$$W-a0CCE""5)!,??ADNN))..006 "^^//%@	A  ""
 q6Q;s1v##H-a0::<**  "
 --:::G!..88EDNeai(VA
 t~~$$))+,1##%##%00557 ;''.q188:;	 2r,   c           	      8   	 t        | j                  j                               }t        d| d| j                  j
                  |       | j                  j                         r| j                  d   d   j                         }| j                  d   d   j                         }| j                  j                  |   d   }d	|z  }t        d
d| |d||       | j                  d   d   }|j                  | j                  ||             |j                  |       | j                  j                  j!                  |       | j                  j"                  d   | _        t%        | j                  j                  j'                               dk(  rv| j                  j)                  d       | j                  j)                  d       | j*                  j'                         D ]#  }| j*                  |   d   j)                  d       % |j-                          y#  Y yxY w)r  Nr  d)r(   r}   r   rG   r<  r   r=  rv   zDROP TABLE %sr  r  T)r  r(   r  r|   r<  r=  r  r:   r   F)r  r  r  r   r:   r   r  r  r  r  r   rY  r  r  rw  r  r  rF   rf   rM  r  r  r   )	r)   r   rG   r<  r=  rv   r   r  r  s	            r*   r  zLayerBook.OnDeleteLayer  s   	((1134E 	4s8J8JRW	

 %%'))(3A6IIKF++J7:CCEHNN))%09E!U+C! ,,W5a8Itvx@A((/ 	))66U6C**44[At~~$$))+,1##E*##E*00557 @''.q188?@ 	

S	s   #H Hc                    	 t        |j                               }| j                         | j                  k(  r| j                  j                  |   d   }| j                  j                  |   d   }| j                  j                  |   d   }| j                  |||      }| j                  d   d   j                  |       | j                  d   d   j                  |       | j                  d   d   j                  |       | j                  d   d   j                  |       | j                  d   d   j                  d       nA| j                  j                  t        d      | j                  j                  |   d   z         |r|j!                          yy#  	 | j                  j                  j	                         d   }n#  Y Y yxY wY xY w)	z.Layer number of layer to be deleted is changedr   Nr<  r=  rv   r   rw   r  )r  rM  r:   r   rM  GetCurrentPager  r  r  r  r  rY  r  r  r  r   r   )r)   r   rG   r<  r=  rv   r   s          r*   r  zLayerBook.OnChangeLayer  s   	)*E  D$4$44^^**51(;F~~,,U3J?HNN))%09E ,,VXuEM##H-a0CCFK##J/2;;HE##G,Q/BB5I##E*1-66}E##E*1-::1=%%9:..''.w78 JJL +	--224Q7 s)   F G'GGGGGc                    | j                   d   d   j                         }|syt        |      }d}| j                   d   d   j                         | j                  j                  |   d   k7  s| j                   d   d   j                         | j                  j                  |   d   k7  sz| j                   d   d   j                         | j                  j                  |   d   k7  s=| j                   d   d   j                         | j                  j                  |   d   k7  rd	}|rt        d
| d	d| j                  j                  |       t        d
d	| j                  j                  | j                   d   d   j                         | j                   d   d   j                         | j                   d   d   j                         | j                   d   d   j                         t        |             | j                  j                  j                  |       | j                  j                  d   | _        |j                          y)z Modify layer connection settingsrG   r   NFr<  r=  rv   rw   Tr  r  )r(   r|   r}   r   rG   )r|   r   r<  r=  rv   rw   rG   r  r:   )r  r  r  r:   r   r  r   r   rw  r  r  rF   r   )r)   r   rG   modifys       r*   r  zLayerBook.OnModifyLayer)  s    ''03FFHE
##H-a0CCE~~$$U+H56&&z215>>@~~$$U+J78&&w/2EEG~~$$U+G45&&u-a0CCE~~$$U+E23 FNN&& NN&&..x8;NNP00<Q?HHJ--g6q9LLN++E215HHJ%j	 --:::G!..88EDN

r,   N)r2   r3   r4   r5   rM   
BK_DEFAULTr+   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6   r,   r*   r}  r}    sb    -79}} A!F[%z=-~@-D:,"63jA;F-^82r,   r}  c                   X    e Zd Zej                  ej
                  fdZd Zd Zd Z	d Z
y)r>  c                 *   || _         t        j                  j                  | ||fd|i| | j	                  t        d             | j                  t        j                  t        j                  j                  t        j                  d      t        j                               t        j                  | t        j                        | _        t#        j$                  | j                   t        j                  dt        j&                  t        j(                  z  d      | _        t-        | j*                  t        j                  t        j.                  t        j0                  z        | _        | j2                  j5                  d	       t7        | j                   t        j8                        | _        | j:                  j=                  t        d
             t7        | j                   t        j>                        | _         | j@                  jC                          | j@                  jE                  t        jF                  | jH                         | j:                  jE                  t        jF                  | jJ                         | jM                          y)z4Dialog to display and save statistics of field statsr=   zField statisticszgrass_sql.icor;  )r'  r  r	  )r(   r<   r  r=   r   r;   whitez&Copy statistics the clipboard (Ctrl+C)N)'r(   rM   Framer+   SetTitler   SetIconIconr  pathr   r   ICONDIRBITMAP_TYPE_ICOr	  rN   r5  scrolledScrolledPanelTAB_TRAVERSALSUNKEN_BORDERspr    TE_MULTILINETE_READONLYr  SetBackgroundColourr   ID_COPYbtnClipboardr   ID_CLOSE	btnCancel
SetDefaultrh   r!  OnCloseOnCopy_layout)r)   r(   r<   r=   r  s        r*   r+   zFieldStatistics.__init___  s   
$B%B6Ba*+,GGY..@"BTBT	
 XXTbii8
((::yy""R%5%55
 77ryy"..0P
	 			%%g. #$**D$$Q'O%PQtzzbkkB!!# 	BMM4<<8r}}dkk:r,   c                 B   t        j                  t         j                        }t        j                  t         j                        }t        j                  t         j                        }|j	                  | j
                  dt         j                  t         j                  z  d       | j                  j                  |       | j                  j                  d       | j                  j                          |j	                  | j                  dt         j                  t         j                  z  t         j                  z  t         j                  z  d       t        j                   | j"                  t         j$                  dt         j&                        }|j	                  |dt         j                  t         j                  z  t         j                  z  d       |j	                  | j(                  dt         j                  d       |j	                  | j*                  dt         j                  d       |j	                  |dt         j,                  t         j                  z  d       | j"                  j                  |       |j/                  | j"                         y )	Nr   r  r  Tr"   )   rA   )r(   r<   r  r=   r   )rM   r  r  r)  rY   r  r  r  r'  r,  r  SetupScrollingGROWr+  r1  r2  
StaticLiner5  rN   LI_HORIZONTALr,  r.  r0  r  )r)   sizertxtSizerr  r  s        r*   r2  zFieldStatistics._layout  s   BKK(;;r{{+;;r}}-TYY1299rvv3EaP"d# 		GG277"RXX-		9	 	 	
 }}::"))("BRBR
 			$1277RWW+<rxx+GPQ	R 	T&&1266!LT^^qI		(qr~~/Fq	Q

E"		$**r,   c                 :   | j                   j                         }t        j                         }|j	                  |       t        j
                  j                         r>t        j
                  j                  |       t        j
                  j                          yy)z%!Copy the statistics to the clipboardN)	r  r  rM   TextDataObjectSetTextTheClipboardOpenSetDataClose)r)   r   r  rdatas       r*   r1  zFieldStatistics.OnCopy  se    		""$!!#e??!OO##E*OO!!# "r,   c                 &    | j                  d       y)z!Button 'Close' pressedTN)rA  r   s     r*   r0  zFieldStatistics.OnClose  s    

4r,   c                    |dk(  r't        | t        d             | j                          yt        j                  d      \  }}t        |d      }g d}|D ]?  }	|	d	k(  r|j                  d
|d|dd       #|j                  d|	d|d|dd       A |j                          t        d| j                  dd|||      }
|
s1t        | j                  t        d             | j                          y|
j                         }t        |      t        |      k7  rHt        | j                  t        d      t        |      t        |      fz         | j                          yt        ||j                  d               }t        ||j                  d               }d|||dz  }t        d| j                  dd|||      }|s t        | j                  t        d             d}t        |      j                         D ]  }|s|t        |      z  } t!        j"                  ||z        }| j%                  t        d      |z         | j&                  j)                          t+        t        |            D ])  }| j&                  j-                  ||   d||   d       + | j&                  j-                  d |z         y)!zP!Update statistics for given column

        :param: column column name
        dbfz)Statistics is not support for DBF tables.r>   NTr  r  )r-  r  r  avgsumnullrH  zselect count(*) from z where z	 is null;r   r  (z) from r  r   r{   )r(   r  r}   r  r<  r=  zUnable to calculte statistics.zIUnable to calculte statistics. Invalid number of lines %d (should be %d).rF  r-  zCselect (%(column)s - %(avg)f)*(%(column)s - %(avg)f) from %(table)s)ry   rF  rv   )r(   r  r}   r   r<  r=  z&Unable to calculte standard deviation.r   zField statistics <%s>z: zstddev: %f
)r	   r   rA  r   r  r  r1   r  r   r(   r  rf   r  r   r   r   mathsqrtr  r  Clearr   
AppendText)r)   r<  r=  rv   ry   r,  r  r  r  r  dataStr	dataLinesrF  r-  r   dataVarvarSumvarstddevr  s                       r*   rt   zFieldStatistics.Update  s   
 U?$*U(VWJJL"**5K{C(= 	VBV|fd,
 BtTU	V 	;;
 $++q1Q/RSJJL&&(	y>SZ'{{A y>3u:.	/ JJL Iekk%012iG 456SW
 

 ;;
 {{A.V,W '?--/ 	%C%*$	% 6E>*a/069:		U$ 	LCII  uSz9S>!JK	L		^f45r,   N)r2   r3   r4   rM   rN   DEFAULT_FRAME_STYLEr+   r2  r1  r0  rt   r6   r,   r*   r>  r>  ^  s,    "$))23I3I $L>$Q6r,   r>  )[r5   sysr  r[  r   r  rJ  rO  corer   rM   wx.lib.mixins.listctrllibmixinslistctrlrc   r   agw.flatnotebookflatnotebookr  ImportErrorwx.lib.agw.flatnotebookagwwx.lib.flatnotebookwx.lib.scrolledpanelscrolledpanelr#  grass.scriptscriptr}  grass.script.utilsr   dbmgr.sqlbuilderr   r   	core.gcmdr   r   r	   r
   r   
core.utilsr   gui_core.dialogsr   gui_core.widgetsr   dbmgr.vinfor   r   r   r   
core.debugr   dbmgr.dialogsr   r   core.settingsr   gui_core.wrapr   r   r   r   r   r   r   r   r   r    r!   version_infomajorr   rZ  r$   rd   re   r8   rn  r  r  r  r	  r  rJ  r  r  r}  r  r>  r6   r,   r*   <module>rr     s  >  	       	 ( (-% %$ ' '  % ? H H ( , & V V  < &   QG; ;w	Ug,,g.G.Gw	Utd9 d9NJ	 JZh' hV%l-' l-^jbhh jZ:Hg<< :z<Hg<< <~I IXe6bhh e6_y  -,,-s   F* *F?>F?