
    o'e                         d dl Z d dlZd dlZd dlZd dlmZmZ ddlmZ ddl	m
Z
  ej                  e      Zej                  Zdadad Zd Z G d d	e      Z G d
 de      Z G d de      Zy)    N)parse
SubElement   )QObjectCreator)
Propertiesc                     d}| j                  d      D ]:  }|j                  d      \  }}t        t        j                  |      }||}6||z  }< |S )z5 Convert a C++ alignment to the corresponding flags. N|::)splitgetattrQtCoreQt)	alignmentalign_flagsqt_align_aligns        4/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py_parse_alignmentr   :   s`     KOOC( !nnT*8		8,K5 K!     c                    | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }|||ydt        |      fS t        |      }t        |      }t        | j                   j                  dd            }t        | j                   j                  dd            }|||||fS ||||t        |      fS )	z Return either (), (0, alignment), (row, column, rowspan, colspan) or
    (row, column, rowspan, colspan, alignment) depending on the type of layout
    and its configuration.  The result will be suitable to use as arguments to
    the layout.
    rowcolumnr    r   rowspanr   colspan)attribgetr   int)elemr   r   r   r   r   s         r   _layout_positionr!   J   s     ++//%
 C[[__X&F,I {fn#I.// c(C[F$++//)Q/0G$++//)Q/0GVWg..'+;I+FGGr   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)WidgetStackNc                     t        d|j                         j                         d|j                                | j	                  |       t        |t        j                        r|| _        y y )Nzpush  )	DEBUG
metaObject	className
objectNameappend
isinstance	QtWidgetsQWidget	topwidget)selfitems     r   pushzWidgetStack.pushk   sS    doo/99;"oo/1 	2DdI--.!DN /r   c                     t         j                  |       }t        d|j                         j	                         d|j                                |S )Nzpop layout r%   )listpopr&   r'   r(   r)   )r/   layouts     r   	popLayoutzWidgetStack.popLayoutr   sA    $F$5$5$7$A$A$C$*$5$5$79 	:r   c                 J   t         j                  |       }t        d|j                         j	                         d|j                                t        |       D ]%  }t        |t        j                        s|| _
         n d | _
        t        d| j                         |S )Nzpop widget r%   znew topwidget )r3   r4   r&   r'   r(   r)   reversedr+   r,   r-   r.   )r/   widgetr0   s      r   	popWidgetzWidgetStack.popWidgetx   s    $F$5$5$7$A$A$C$*$5$5$79 	:TN 	"D$	 1 12!%	"
 "DNDNN45r   c                     | d   S Nr   r/   s    r   peekzWidgetStack.peek   s    Bxr   c                 <    t        | d   t        j                        S r<   )r+   r,   QLayoutr>   s    r   topIsLayoutzWidgetStack.topIsLayout   s    $r(I$5$566r   c           	         t        | d         t        j                  uryt        |       dk  ry| d   }t	        |t        j                        xr t        |      t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  fvS )Nr=   F   )typer,   r-   lenr+   QMainWindowQStackedWidgetQToolBox
QTabWidgetQScrollAreaQMdiAreaQWizardQDockWidget)r/   parents     r   topIsLayoutWidgetzWidgetStack.topIsLayoutWidget   s     R>!2!22t9q=b&)"3"34 'f%%((""$$%%""!!%%N' :' 	'r   )
__name__
__module____qualname__r.   r1   r6   r:   r?   rB   rQ   r   r   r   r#   r#   i   s%    I"7'r   r#   c                       e Zd ZdZd Zy)ButtonGroupzM Encapsulate the configuration of a button group and its implementation.
    c                      d| _         d| _        y)z Initialise the button group. TN)	exclusiveobjectr>   s    r   __init__zButtonGroup.__init__   s     r   N)rR   rS   rT   __doc__rZ   r   r   r   rV   rV      s    r   rV   c                      e Zd Zd Zd Z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ed        Zd Zd Zd Zd Zd Zeeee
eeeeee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d&        Z)y'))UIParserc                     t        |      | _        t        | j                  |||      | _        |a|a| j                          y N)r   factoryr   wpropsr   r,   reset)r/   qtcore_moduleqtgui_moduleqtwidgets_modulecreatorPolicys        r   rZ   zUIParser.__init__   s<    %m4 }l " $	

r   c                     	 | j                   |   }|dz  }|| j                   |<   d||fz  S # t        $ r d| j                   |<   |cY S w xY w)zUIParser.uniqueName(string) -> string

        Create a unique name from a string.
        >>> p = UIParser(QtCore, QtGui, QtWidgets)
        >>> p.uniqueName("foo")
        'foo'
        >>> p.uniqueName("foo")
        'foo1'
        r   r   z%s%i)name_suffixesKeyError)r/   namesuffixs      r   
uniqueNamezUIParser.uniqueName   sg    	''-F
 	!#)4 v&&  	'(Dt$K	s   , A	A	c                     | j                   j                          d | _        t	               | _        i | _        ddd| _        g | _        d | _	        g | _
        i | _        y # t        $ r Y Ow xY w)Nr=   )spacingmargin)ra   rb   AttributeErrortoplevelWidgetr#   stackrh   defaultsactionscurrentActionGroup	resourcesbutton_groupsr>   s    r   rb   zUIParser.reset   sd    [[ " ]
$&"5"& #t#s   A 	A+*A+c                 \   | j                  |j                  j                  d      xs |dd  j                               }|d}n|f}| j                  j                  ||||      }| j                  j                  ||       |j                  |       |rt        | j                  ||       |S )Nrj   r   r   )rl   r   r   lowerr`   createQObjectra   setPropertiessetObjectNamesetattrrq   )r/   clsnamerP   branchis_attributerj   argsobjs           r   setupObjectzUIParser.setupObject   s    v}}008OGABK<M<M<OP>D:Dll(($lK!!#v.$D''s3
r   c                 \    |j                  d      D ]  }|j                  d   |k(  s|c S  y )Npropertyrj   )findallr   )r/   r    rj   props       r   getPropertyzUIParser.getProperty   s5    LL, 	D{{6"d*	 r   c           
         d| _         d| _        d| _        g | _        d | _        |j
                  d   j                  dd      }|dk(  rd}| j                  j                  }t        |t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  f      rd }| j                  j%                  | j'                  |||             t        | j                  j                  t        j(                        r| j+                  |d      =| j                  j                  j-                  t/        |j1                  d                   | j+                  |d	      =| j                  j                  j3                  t/        |j1                  d
                   | j5                  |       | j                  j7                         }t        |t        j8                        r#| j;                  |d|j=                                nnt        |t        j>                        rD| j;                  |d|jA                                | j;                  |d|jC                                nt        |t        jD                        r| jF                  jI                  |d      }|	 |jJ                  }|sd}	 | jN                  |   }|jT                  | jV                  jY                  d|| jZ                  f      |_*        t]        | jZ                  ||jT                         |jT                  j_                  |       |j`                  s|jT                  jc                  d       |jT                  je                  |       | j                  "|jg                  | j                         d | _        | j                  ji                         r|| j                  jk                         }|j
                  d   }	t        |t        jl                        r&|jo                  |	d   | jq                  |	      |       n |jr                  |g|	  | j                  j                  }
t        |
t        j                        r| jF                  jI                  |d      }|.|
ju                  ||| jF                  jI                  |d             n,|
ju                  || jF                  jI                  |d             | jF                  jI                  |d      }|"|
jw                  |
jy                  |      |       y y t        |
t        j                         r| jF                  jI                  |d      }|.|
j{                  ||| jF                  jI                  |d             n,|
j{                  || jF                  jI                  |d             | jF                  jI                  |d      }|"|
j}                  |
jy                  |      |       y y t        |
t        j"                        r|
j                  |       y t        |
t        j                        r|
js                  |       y t        |
t        j                  t        j                  f      r|
jo                  |       y t        |
t        j                        rzt        |      t        j                  k(  r|
j                  |       y t        |t        j                        rs| jF                  jI                  |d      }||
j                  |       n|
j                  ||       | jF                  jI                  |d      }|r|
j                  |       y y t        |t        j                        r|
j                  |       y t        |t        j                        r|
j                  |       y t        |t        j                        rL| jF                  jI                  |d      }|
j                  t        j                  j                  |      |       y y y # tL        $ r |}Y w xY w# tP        $ r tS               x}| jN                  |<   Y w xY w)Nr   classr
   .LineQFramecolumnCountr   rowCountr   headerhorizontalHeaderverticalHeaderbuttonGroupQButtonGroupFlayout-positioniconlabeltoolTiptitletoolBarAreatoolBarBreakdockWidgetArea)Ocolumn_counterrow_counteritem_nr	itemstacksorting_enabledr   replacerr   r.   r+   r,   rO   rM   rL   rI   rJ   rK   rN   r1   r   QTableWidgetr   setColumnCountrG   r   setRowCounttraverseWidgetTreer:   	QTreeViewhandleHeaderViewr   
QTableViewr   r   QAbstractButtonra   getAttributestringrp   rw   ri   rV   rY   r`   rz   rq   r}   r|   rX   setExclusive	addButtonsetSortingEnabledrB   r?   QFormLayout	setWidget_form_layout_role	addWidgetaddItemsetItemToolTipindexOfaddTabsetTabToolTipaddPagerH   rF   r-   setCentralWidgetQToolBar
addToolBarinsertToolBarBreakQMenuBar
setMenuBar
QStatusBarsetStatusBaraddDockWidgetr   r   DockWidgetArea)r/   r    widget_classrP   r9   bg_i18nbg_namebglaylpr.   r   tooltiptbAreatbBreakdwAreas                   r   createWidgetzUIParser.createWidget   s   #{{7+33D#>6!#L %%fy44i6H6H(44i6N6N(1193G3G(002 3 F

((vtDEdjj**I,B,BCm4<

$$33CX8N4OPj19

$$00T\\%5H1IJ%%%'fi112!!$&--/B	 4 45!!$(:++-/!!$(8))+- 	 9 9:kk..t]CG"&%nnG +GE++G4B 99$ $ : :>#d&9&9%<!>BID//"))DII++G4<<		..u5		##F++$$T%9%9:#'D ::!!#**//#C./B#y445beT%;%;B%?Hf*r*JJ((	i!3!34;;++D&9D!!&$0H0Hw0WX!!&$++*B*B4*QRkk..tY?G"(():):6)BGL # 	9#7#78;;++D&9D  t{{/G/Gg/VW  )A)A$)PQkk..tY?G"''	(9(9&(A7K # 	9#4#45f%	9#;#;<'	I$9$99;P;P#QR'	9#8#89F|y000**62FI$6$6711$F>((0((8++224H008  FI$6$67$$V,FI$8$89&&v.FI$9$9:11$8HI''		(@(@(H  ;) :U & &%G&   E7B}DB++G4Es$   a a! aa!"bbc                    | j                   j                  ||dz         }||j                  |       | j                   j                  ||dz         }||j                  |       | j                   j                  ||dz         }||j	                  |       | j                   j                  ||dz         }||j                  |       | j                   j                  ||dz         }||j                  |       | j                   j                  ||dz         }||j                  |       | j                   j                  ||dz         }||j                  |       y y )NVisibleCascadingSectionResizesDefaultSectionSizeHighlightSectionsMinimumSectionSizeShowSortIndicatorStretchLastSection)	ra   r   
setVisiblesetCascadingSectionResizessetDefaultSectionSizesetHighlightSectionssetMinimumSectionSizesetSortIndicatorShownsetStretchLastSection)r/   r    rj   r   values        r   r   zUIParser.handleHeaderView  sV   ((ti/?@e$((t6O/OP--e4((t6J/JK((/((t6I/IJ''.((t6J/JK((/((t6I/IJ((/((t6J/JK((/ r   c                 6   |j                  d      }|j                  d      }||d}nt        |      t        |      f}| j                  j                  |dt        j
                  j                        }t        j
                  j                  |f}| j                  j                  |d      t        j                  j                  k(  r
|d   |d   f}| j                  j                  d| j                  d	      ||z   d
      }| j                  j                         r}| j                  j!                         }|j"                  d   }	t%        |t        j&                        r&|j)                  |	d   | j+                  |	      |       y  |j,                  |g|	  y y )Nzproperty/size/widthzproperty/size/heightr   sizeTypeorientationr   r   QSpacerItem
spacerItemF)r   r   )findtextr   ra   r   r,   QSizePolicy	ExpandingMinimumr   r   
Horizontalr`   rz   rl   rr   rB   r?   r   r+   r   setItemr   r   )
r/   r    widthheight	size_argsr   policyspacerr   r   s
             r   createSpacerzUIParser.createSpacer  s]   3456=FNIUS[1I;;**4%%//1 ''//:;;""47699;O;OOAYq	)F++M-y6/A" , $ ::!!#**//#C./B#y445BqE4#9#9"#=vFF(R( $r   c                 <   | j                   j                         rdn| j                  d   }| j                  j	                  |d|      }| j                  j	                  |d|      }| j                  j	                  |d|      }| j                  j	                  |d|      }| j                  j	                  |d|      }| j                   j                         r|dk  rd}|dk  rd}|dk  rd}|dk  rd}|dk\  s|dk\  s
|dk\  s|dk\  rvt        |dd	
      }t        |      t        |d      _        t        |      t        |d      _        t        |      t        |d      _        t        |      t        |d      _        | j                  j	                  |d| j                  d         }| j                  j	                  |d|      }	| j                  j	                  |d|      }
|	dk\  s|
dk\  rBt        |dd
      }t        |	      t        |d      _        t        |
      t        |d      _        |j                  d   }| j                   j                         rd }n| j                   j                  }d|j                  vr |dd  j                         |j                  d<   | j                   j                  | j                  |||             | j                  |       | j                   j                         }| j!                  ||       | j                   j                         r}| j                   j#                         }|j                  d   }t%        |t&        j(                        r&|j+                  |d   | j-                  |      |       y  |j.                  |g|  y y )Nr=   ro   
leftMargin	topMarginrightMarginbottomMarginr   r   pyuicMargins)rj   numberrn   horizontalSpacingverticalSpacingpyuicSpacingr   rj   r   r   )rr   rB   rs   ra   r   rQ   r   strtextr   r.   ry   r1   r   r   r6   configureLayoutr?   r+   r,   r   	setLayoutr   	addLayout)r/   r    ro   lefttoprightbottomcmern   horizvert	classnamerP   r5   
top_layoutr   s                   r   createLayoutzUIParser.createLayout  s	    zz--/T]]85L((x@{{&&t\6Bkk%%dK@''mVD((~vF ::'')axQwaqy!%zA619qEQJ&A+T:NCC-0YJsH%*-0XJsH%*-0ZJsH%*-0[JsH%* ++))$	i(*''.A7K{{&&t->HA:T:NCC-0ZJsH%*-0YJsH%*KK(	::!!#FZZ))F$"+AB-"5"5"7DKK

((FDAB%%%'T6*::!!#*J./B*i&;&;<$$RUD,B,B2,FO$
$$V1b1 $r   c                    t        |t        j                        ru| j                  |d|j                         | j                  |d|j
                         | j                  |d|j                         | j                  |d|j                         y t        |t        j                        r| j                  |d|j                         y y )Ncolumnminimumwidthrowminimumheightcolumnstretch
rowstretchstretch)
r+   r,   QGridLayoutsetArraysetColumnMinimumWidthsetRowMinimumHeightsetColumnStretchsetRowStretch
QBoxLayout
setStretch)r/   r    r5   s      r   r   zUIParser.configureLayout  s    fi334MM$ 4002MM$ 2..0MM$1H1HIMM$f.B.BC	 4 45MM$	6+<+<= 6r   c                     |j                   j                  |      }|r=t        |j                  d            D ]  \  }}t	        |      }|dkD  s |||       ! y y )N,r   )r   r   	enumerater   r   )r/   r    rj   setterarrayidxr   s          r   r  zUIParser.setArray  sW    %'C(89 '
UE
193&' r   c                     | j                   dk(  r=| j                  j                  d|j                        | _        |j                  d       y y )Nr   __sortingEnabledF)r   r`   invokeisSortingEnabledr   r   )r/   ws     r   disableSortingzUIParser.disableSorting  sD    <<1#'<<#6#67I&&$(D & r   c                 v	   | j                   j                         r-t        |      |d   j                  d<   | j	                  |       y | j                   j
                  }t        |t        j                        r|| j                  j                  |d      }| j                  j                  |d      }|r|j                  |d       n|j                  d       |j                  | j                  |       nt        |t        j                        rL| j                  |       | j!                  d||j"                  | j                        }|j                  |       nKt        |t        j$                        r| j&                  r%| j&                  d   \  }}| j&                  d   \  }}n|}| j                  }| j(                  j+                  dd	t-        | j&                        z  |fd
      }| j                  dk(  rH| j&                  s<| j(                  j/                  d|j0                        | _        |j5                  d
       | j&                  j7                  || j                  f       d| _        |j9                  |      }	| j&                  dd  D ]  \  }
}|	j;                  |      }	 d}|j=                  d      D ]&  }| j                  j?                  |      }|j                  d   }|dk(  r|dz  }|s;|	jA                  ||       N|dk(  r|jC                  ||       f|dk(  r|jE                  ||       ~|dk(  r|jG                  ||       |dk(  r|jI                  ||       |dk(  r|jK                  ||       |dk(  r|jM                  ||       |dk(  r|jO                  ||       |dk(  r|jQ                  |       |dk(  s|jS                  ||       ) | j	                  |       | j&                  jU                         \  }| _        nt        |t        jV                        rstY        |j                  d         }tY        |j                  d         }| j                  |       | j!                  d||j"                  ||      }|j[                  |||       | xj                  dz  c_        y )Nr   r   r   r    QListWidgetItemr=   QTreeWidgetItemzitem_%dFr  r   r   rj   	statusTipr   	whatsThisfont
background
foregroundflags
checkStater   r   QTableWidgetItem).rr   rB   r!   r   r   r.   r+   r,   	QComboBoxra   r   r   setItemTextr   QListWidgetr"  createWidgetItemr0   QTreeWidgetr   r`   rz   rG   r  r   r   r   r*   topLevelItemchildr   convertsetTextsetStatusTip
setToolTipsetWhatsThissetFontsetIconsetBackgroundsetForegroundsetFlagssetCheckStater4   r   r   r   )r/   r    r!  r   r   r0   rP   r   
nr_in_roottitmr5  nr_in_parentr   r   c_propc_prop_namer   cols                     r   
handleItemzUIParser.handleItem  s   ::!!#0@0FDGNN,-##D)

$$A!Y001{{..tV<{{..tV<IIdB'IIbMdllD1Ay445##A&,,->aff&		$Ay445>> $r 2IFA$(NN1$5MAzF!%J||112C!C$77&UL <<1$T^^+/<<+>+>?QSTSeSe+fD(''.%%tT\\&:;  ~~j1+/>>!"+= 4'E<::l3D4  LL4 ;D![[006F"&++f"5K"f,!! LL8$3))&&9$	17$3))&&9$.VV4$.VV4$4**66:$4**66:$/f-$4**66:3;6 ''-"&.."4"4"64<Ay556$++e,-$++h/0##A&,,-?qvvS"		#sD)LLALr   c                     | j                   j                  | j                  j                  |j                  d   f       y )Nrj   )rt   r*   rr   r.   r   r/   r    s     r   	addActionzUIParser.addActiony  s,    TZZ114;;v3FGHr   c                  <    | D ]  }|t        |t              r y y)z; Return True if any argument appears to be an i18n string. TF)r+   r   )r   as     r   any_i18nzUIParser.any_i18n|  s)      	A}Z3%7	 r   c                    | j                   j                  |ddd      }| j                  }|j                  |d      }|j                  |d      }|j                  |d      }	|j                  |d      }
| j	                  |||	|
      r| j                   j                  d||       |r|j                  |       |r|j                  |       |	r|j                  |	       |
r|j                  |
       |j                  |d      }|r|j                  |       |j                  |d	      }|r|j                  |       |j                  |d
      }|r|j                  |       |j                  |d      }|r|j                  |       |j                  |d      }|r|j                  |       |j                  |d      }|r|j                  |       |j                  |d      }|r|j!                  |       |S )z( Create a specific type of widget item. r0   r   Fr   r'  r   r(  textAlignmentr)  r   r*  r+  r,  r-  )r`   rz   ra   r   rM  r  r7  r8  r9  r:  setTextAlignmentr;  r<  r=  r>  r?  r@  )r/   	item_typer    gettergetter_argsr0   propsr   
status_tiptool_tip
whats_thistext_alignmentr)  r   r*  r+  r,  check_states                     r   r2  zUIParser.createWidgetItem  s    ||)))VRG
   v.&&t[9
$$T95&&t[9
==z8Z@LL<LLj)OOH%j)**4A!!.1  v.LL  v.LL&&t\:
z*&&t\:
z*!!$0MM% ''l;{+r   c                 b   | j                   j                  }t        |t        j                        r| j
                  }| j                  }|j                  |d      }|r |j                         j                  ||       |j                  |d      }|r |j                         j                  ||       |j                  |d      }|r |j                         j                  ||       |j                  |d      }|r |j                         j                  ||       |j                  |d      }	|	r |j                         j                  ||	       |j                  |d      }
|
r |j                         j                  ||
       |j                  |d      }|r |j                         j                  ||       |j                  |d      }|r |j                         j!                  ||       |j                  |d	      }|r |j                         j#                  ||       | xj                  d
z  c_        y t        |t        j$                        rt'        |      dk7  r|j(                  dk(  rZ| j+                  d||j,                  | j                        }|j/                  | j                  |       | xj                  d
z  c_        y |j(                  dk(  rZ| j+                  d||j0                  | j2                        }|j5                  | j2                  |       | xj2                  d
z  c_        y y y y )Nr   r'  r   r(  rO  r)  r   r*  r+  r   r   r   r.  r   )rr   r.   r+   r,   r3  ra   r   r   
headerItemr7  r8  r9  r:  rP  r;  r<  r=  r>  r   rG   tagr2  horizontalHeaderItemsetHorizontalHeaderItemverticalHeaderItemr   setVerticalHeaderItem)r/   r    r!  rT  rF  r   rU  rV  rW  rX  r)  r   r*  r+  r0   s                  r   	addHeaderzUIParser.addHeader  s   JJ  a../KKE%%C$$T62D&&sD1**4=J++C<((y9H))#x8**4=J++C<"..t_EN//^D$$T62D&&sD1$$T62D&&sD1**4>J,,S*=**4>J,,S*=1$91124yA~88x'001CT22D4G4GID--d.A.A4H''1,'XX&001CT00$2B2BDD++D,<,<dC$$)$	 '  3r   c                     |j                   y 	 t        | j                  |j                         j                          y # t        $ r Y y w xY wr_   )r   r   rq   raise_rp   rI  s     r   	setZOrderzUIParser.setZOrder  sC    99	D''3::< 		s   .> 	A
	A
c                 Z    | j                  d| j                  xs | j                  |       y )NQAction)r   ru   rq   rI  s     r   createActionzUIParser.createAction  s(    D$;$;$Rt?R?R	r   c                 |    | j                  d| j                  |      }|| _        | j                  |       d | _        y )NQActionGroup)r   rq   ru   r   )r/   r    action_groups      r   createActionGroupzUIParser.createActionGroup  s:    ''8K8KTR".%"&r   )
r9   	addactionr5   r   r0   actionactiongroupr   r   zorderc                     t        |      D ]%  }	 | j                  |j                     } || |       ' y # t        $ r Y 4w xY wr_   )iterwidgetTreeItemHandlersr\  ri   )r/   r    r5  handlers       r   r   zUIParser.traverseWidgetTree  sN    $Z 	!E55eii@ D% 	!  s   5	A Ac                    |j                   d   }|j                   d   }|s1|}|j                  d      r|dd  }|d   j                         |dd  z   }| j                  ||      | _        | j                  j                  |       t        d| j                  j                         j                                | j                  j                  | j                  |       | j                  j                  | j                         | j                  |       | j                  j                          | j                          | j!                          | j#                          y )Nr   rj   Qr   r   ztoplevel widget is %s)r   
startswithry   createToplevelWidgetrq   r|   r&   r'   r(   ra   r{   rr   r1   r   r:   
addActions
setBuddiessetDelayedProps)r/   r    cnamewnames       r   createUserInterfacezUIParser.createUserInterface(  s   G$F# E$ab	!HNN$uQRy0E"77uE))%0%!!,,.88:	<!!$"5"5t<

++,%

r   c                    | j                   D ]  \  }}|dk(  r|j                          t        d||j                                t	        | j
                  |      }t        |t        j                        r |j                  |j                                t        |t        j                        r|j                  |        y )N	separatorzadd action %s to %s)rt   addSeparatorr&   r)   r   rq   r+   r,   QMenurJ  
menuActionri  )r/   r9   action_name
action_objs       r   rx  zUIParser.addActionsB  s    #'<< 		1FKk)##%+[&:K:K:MN$T%8%8+F
j)//:$$Z%:%:%<=#J	0F0FG$$Z0		1r   c                     | j                   j                  D ]-  \  }}}}|r|j                         }t        ||      } ||       / y r_   )ra   delayed_propsr5   r   )r/   r9   r5   r  r   s        r   rz  zUIParser.setDelayedPropsN  sE    ,0KK,E,E 	(FFFDVV,F4L	r   c                    | j                   j                  D ]F  \  }}t        d||j                                	 |j	                  t        | j                  |             H y # t        $ r t        d||j                                Y pw xY w)Nz%s is buddy of %sz1ERROR in ui spec: %s (buddy of %s) does not exist)ra   buddiesr&   r)   setBuddyr   rq   rp   )r/   r9   buddys      r   ry  zUIParser.setBuddiesV  s}    ![[00 	2MFE%uf.?.?.AB2(;(;U CD	2 " 2IV..022s   %A!!$BBc                     t        d|j                         |j                  }|d}|| _        || j                  _        | j	                  |       y )Nzuiname is %sr$  )r&   r   uinamera   
setContext)r/   r    rj   s      r   r  zUIParser.classname_  sB    ndii(yy<D!r   c                      y)zc
        Reimplemented by a sub-class if it needs to know the translation
        context.
        Nr   )r/   contexts     r   r  zUIParser.setContextj  s    
 	r   c                     t        |j                  d         | j                  d<   t        |j                  d         | j                  d<   y )Nro   rn   )r   r   rs   rI  s     r   readDefaultszUIParser.readDefaultsq  s:    "%dkk(&;"<h#&t{{9'=#>i r   c                     d }|D ]B  }t        | j                  |j                        }|| j                  j                  ||       |}D y r_   )r   rq   r   setTabOrder)r/   r    
lastwidgetwidget_elemr9   s        r   setTaborderzUIParser.setTaborderu  sO    
 	 KT00+2B2BCF%##//
FCJ	 r   c                    	 t        |d      } |d      D ]  }|j                  j                  d      }|s!|j	                  d      s3t
        j                  j                  |dd | j                  z         }|| j                  vsq| j                  j                  |        y# t        $ r t        |d      }Y w xY w)zk
        Read a "resources" tag and add the module to import to the parser's
        list of them.
        rq  getiteratorincludelocationz.qrcN)r   rp   r   r   endswithospathbasename_resource_suffixrv   r*   )r/   r    iteratorr  locmnames         r   readResourceszUIParser.readResources  s    
	4tV,H  	* 	1G..$$Z0C s||F+((SbD4I4I)IJ.NN))%0	1  	4t]3H	4s   B% %B=<B=c                      fd}t        |      D ]  }|j                  d      }|j                  d      \  }}|d d j                  dd      } ||j                  d            }t	        ||      } j
                  j                   ||j                  d            |j                  d	      j                  d      d
         }	|dk(  r|j                  |	       |j                  d      }t        |      dk(  r||d
      j                  |	       |t        |         j                  |	       ! t        j                  j                   j                         y )Nc                 f    | j                   k(  rj                  S t        j                  |       S r_   )r  rq   r   )r   r/   s    r   name2objectz/UIParser.createConnections.<locals>.name2object  s.    dkk!***t22C88r   signal(r=   r%   r$  senderreceiverslotr   r  r   )rq  r   r   r   r   r`   getSlotconnectrG   tupler   QMetaObjectconnectSlotsByNamerq   )
r/   r    r  connr  signal_namesignal_argsr  bound_signalr  s
   `         r   createConnectionszUIParser.createConnections  s8   	9 J 	CD]]8,F'-||C'8$K%cr*223;K x!89F"6;7L<<''DMM*4M(NMM&)//4Q79D b $$T*)//4{#q( Q088> {!34<<TB%	C( 	--d.A.ABr   c           
          d }t        |      D ]X  }|j                  d      }| j                  j                  ||j                  d      xs d ||j                  d                   Z y )Nc                     | j                  d      r| dd } g }| j                  d      D ](  }|dvs|dk(  rt        d      |j                  |       * dj	                  |      S )	zheader2module(header) -> string

            Convert paths to C++ header files to according Python modules
            >>> header2module("foo/bar/baz.h")
            'foo.bar.baz'
            z.hNrE   /)r$  r   z..z4custom widget header file name may not contain '..'.r   )r  r   SyntaxErrorr*   join)r   mpathparts      r   header2modulez-UIParser.customWidgets.<locals>.header2module  sq     t$ES) ' y(t|)*`aaLL&' 88E?"r   r   extendsr-   r   )rq  r   r`   addCustomWidget)r/   r    r  custom_widgetr  s        r   customWidgetszUIParser.customWidgets  si    	#. "$Z 	VM%..w7ILL((%2%;%;I%F%S)%2=3I3I(3S%TV	Vr   c                     t         r_   )NotImplementedError)r/   r  
widgetnames      r   rw  zUIParser.createToplevelWidget  s    !!r   c                     t        |      D ]k  }|j                  dk(  s|j                  d   }t               }|| j                  |<   | j                  |d      }|P|j                  d      dk(  sed|_        m y )Nbuttongrouprj   rX   boolfalseF)rq  r\  r   rV   rw   r   r   rX   )r/   r    button_groupr   r   r   s         r   buttonGroupszUIParser.buttonGroups  sz     J 		-L=0&--f5 ].0""7+''kB#}}V,7',		-r   c                      y r_   r   r>   s    r   finalizezUIParser.finalize  s    r   c           	         t        |d      rd}n*t        |      }t        j                  j	                  |      }| j
                  j                  |       || _        d| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd	| j                  fd
| j                  ff}t!        |      }|j#                         }|j$                  dk7  rt'        d      |j(                  j+                  d      }|t'        d      |dk7  rt'        d      |D ]!  \  }}	|j-                  |      }
|
 |	|
       # | j/                          | j0                  }| j3                          |S )Nreadr$  layoutdefaultr   buttongroupscustomwidgetsr9   connectionstabstopsrv   uiznot created by Qt Designerversionzmissing version numberz4.0z)only Qt Designer files v4.0 are supported)hasattrr   r  r  dirnamera   set_base_dirr  r  r  r  r  r}  r  r  r  r   getrootr\  r  r   r   findr  rq   rb   )r/   filenameresource_suffixbase_dirbranchHandlersdocumentrootr  tagnameactorr    r!  s               r   r   zUIParser.parse  s{   8V$H 8}Hwwx0H  * / d//0dnn-d//0d001d667d445d../d001	
 ?!88t:;;++//),?677 eIJJ, 	NGU==)Dd	 	

r   c                     | d   dkD  rt         j                  j                  }|S | d   dk(  rt         j                  j                  }|S t         j                  j                  }|S )N   r   )r,   r   SpanningRole	FieldRole	LabelRole)layout_positionroles     r   r   zUIParser._form_layout_role  sf    1!((55D  Q1$((22D  ((22Dr   N)T)*rR   rS   rT   rZ   rl   rb   r   r   r   r   r   r  r   r  r"  rG  rJ  staticmethodrM  r2  ra  rd  rg  rk  rr  r   r}  rx  rz  ry  r  r  r  r  r  r  r  rw  r  r  r   r   r   r   r   r]   r]      s   	'*
 $Q f0:)<@2D
>''XtI  9v8*t' #"" "(
!4
12	? 1(C:V<"
-/b  r   r]   )sysloggingr  rexml.etree.ElementTreer   r   
objcreatorr   
propertiesr   	getLoggerrR   loggerdebugr&   r   r,   r   r!   r3   r#   rY   rV   r]   r   r   r   <module>r     sv   R   	 	 3 & " 
		8	$		 H>8'$ 8'v& mv mr   