
    he~                         d dl Z d dlZd dlZd dlZd dlmZ ddlmZ ddlm	Z	 ddl
mZ  ej                  e      Zej                  Zda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)
SubElement   )QObjectCreator)
Properties)UIFilec                     d}| j                  d      D ]D  }|j                  d      \  }}t        t        j                  j                  |      }||}@||z  }F |S )z5 Convert a C++ alignment to the corresponding flags. N|::)splitgetattrQtCoreQtAlignmentFlag)	alignmentalign_flagsqt_align_aligns        4/usr/lib/python3/dist-packages/PyQt6/uic/uiparser.py_parse_alignmentr   8   sf     KOOC( !nnT*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"   H   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.pushi   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*   )r0   layouts     r   	popLayoutzWidgetStack.popLayoutp   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 )r4   r5   r'   r(   r)   r*   reversedr,   r-   r.   r/   )r0   widgetr1   s      r   	popWidgetzWidgetStack.popWidgetv   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   r0   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)r0   parents     r   topIsLayoutWidgetzWidgetStack.topIsLayoutWidget   s     R>!2!22t9q=b&)"3"34 'f%%((""$$%%""!!%%N' :' 	'r   )
__name__
__module____qualname__r/   r2   r7   r;   r@   rC   rR   r   r   r   r$   r$   g   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)rS   rT   rU   __doc__r[   r   r   r   rW   rW      s    r   rW   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&ed$        Z'y%)'UIParserc                     t        |      | _        t        | j                  |||      | _        |a|a|a| j                          y N)r   factoryr   wpropsr   QtGuir-   reset)r0   qtcore_moduleqtgui_moduleqtwidgets_modulecreatorPolicys        r   r[   zUIParser.__init__   sA    %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)r0   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 | _	        i | _
        y # t        $ r Y Hw xY w)Nr>   )spacingmargin)rb   rd   AttributeErrortoplevelWidgetr$   stackrj   defaultsactionscurrentActionGroupbutton_groupsr?   s    r   rd   zUIParser.reset   s]    [[ " ]
$&"5"& #t#s   A 	A$#A$c                    | j                  |j                  j                  d      xs |dd  j                               }|d}i }n|rd}t	        |      }n|f}i }| j
                  j                  |||||      }	| j                  j                  |	|       |	j                  |       |rt        | j                  ||	       |	S )Nrl   r   r   )rQ   )	ctor_argsctor_kwargsis_attribute)rn   r   r   lowerdictra   createQtObjectrb   setPropertiessetObjectNamesetattrrs   )
r0   
class_namerQ   branchr|   parent_is_optionalobject_namerz   r{   objs
             r   _setupObjectzUIParser._setupObject   s    oo!!&)CZ^-A-A-CE >IKIf-K
IKll))*k#) * + 	!!#v.+&D''c:
r   c                 \    |j                  d      D ]  }|j                  d   |k(  s|c S  y )Npropertyrl   )findallr   )r0   r!   rl   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=                                not        |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QButtonGroup)rz   Flayout-positioniconlabeltoolTiptitletoolBarAreatoolBarBreakdockWidgetArea)Ocolumn_counterrow_counteritem_nr	itemstacksorting_enabledr   replacert   r/   r,   r-   rP   rN   rM   rJ   rK   rL   rO   r2   r   QTableWidgetr   setColumnCountrH   r   setRowCounttraverseWidgetTreer;   	QTreeViewhandleHeaderViewr   
QTableViewr   r   QAbstractButtonrb   getAttributestringrr   rx   rk   rW   rZ   ra   r   rs   r   r   rY   setExclusive	addButtonsetSortingEnabledrC   r@   QFormLayout	setWidget_form_layout_role	addWidgetaddItemsetItemToolTipindexOfaddTabsetTabToolTipaddPagerI   rG   r.   setCentralWidgetQToolBar
addToolBarinsertToolBarBreakQMenuBar
setMenuBar
QStatusBarsetStatusBaraddDockWidgetr   r   DockWidgetArea)r0   r!   widget_classrQ   r:   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

)),EF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$ $ ; ;N#0C0C/F !< !H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)	rb   r   
setVisiblesetCascadingSectionResizessetDefaultSectionSizesetHighlightSectionssetMinimumSectionSizesetSortIndicatorShownsetStretchLastSection)r0   r!   rl   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                 r   |j                  d      }|j                  d      }||d}nt        |      t        |      f}| j                  j                  |dt        j
                  j                  j                        }t        j
                  j                  j                  |f}| j                  j                  |d      t        j                  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  |j0                  |g|	  y y )Nzproperty/size/widthzproperty/size/heightr   sizeTypeorientationr   r   QSpacerItem
spacerItemFrz   r|   r   )findtextr    rb   r   r-   QSizePolicyPolicy	ExpandingMinimumr   r   Orientation
Horizontalra   r   rn   rt   rC   r@   r   r,   r   setItemr   r   )
r0   r!   widthheight	size_argsr   policyspacerr   r   s
             r   createSpacerzUIParser.createSpacer  so   3456=FNIUS[1I;;**4%%,,668 ''..66A;;""47699;P;P;[;[[AYq	)F,,]-V9K" - $ ::!!#**//#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                  |||d             | j                  |       | j                   j                         }| j!                  ||       | j                   j                         r}| j                   j#                         }|j                  d   }t%        |t&        j(                        r&|j+                  |d   | j-                  |      |       y  |j.                  |g|  y y )Nr>   rq   
leftMargin	topMarginrightMarginbottomMarginr   r   pyuicMargins)rl   numberrp   horizontalSpacingverticalSpacingpyuicSpacingr   rl   r   Fr   r   )rt   rC   ru   rb   r   rR   r   strtextr   r/   r}   r2   r   r   r7   configureLayoutr@   r,   r-   r   	setLayoutr   	addLayout)r0   r!   rq   lefttoprightbottomcmerp   horizvert	classnamerQ   r6   
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

!!)VT+0 " 2	3 	%%%'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)r0   r!   r6   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    )r0   r!   rl   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   ra   invokeisSortingEnabledr   r   )r0   ws     r   disableSortingzUIParser.disableSorting"  sD    <<1#'<<#6#67I&&$(D & r   c                 x	   | 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                  |       nLt        |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   r   rl   	statusTipr   	whatsThisfont
background
foregroundflags
checkStater   r   QTableWidgetItem).rt   rC   r"   r   r   r/   r,   r-   	QComboBoxrb   r   r   setItemTextr   QListWidgetr+  createWidgetItemr1   QTreeWidgetr   ra   r   rH   r(  r)  r   r   r+   topLevelItemchildr   convertsetTextsetStatusTip
setToolTipsetWhatsThissetFontsetIconsetBackgroundsetForegroundsetFlagssetCheckStater5   r   r    r   )r0   r!   r*  r  r   r1   rQ   r   
nr_in_roottitmr>  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||223D!C$77F:%* 3 , <<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 )Nrl   )rv   r+   rt   r/   r   r0   r!   s     r   	addActionzUIParser.addAction  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  )argsas     r   any_i18nzUIParser.any_i18n  s)      	A}Z3%7	 r   c                    | j                   j                  |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. r1   F)r|   r  r0  r   r1  textAlignmentr2  r   r3  r4  r5  r6  )ra   r   rb   r   rW  r(  r@  rA  rB  rC  setTextAlignmentrD  rE  rF  rG  rH  rI  )r0   	item_typer!   gettergetter_argsr1   propsr  
status_tiptool_tip
whats_thistext_alignmentr2  r   r3  r4  r5  check_states                     r   r;  zUIParser.createWidgetItem  s    ||**9f" + $
   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  r0  r   r1  rY  r2  r   r3  r4  r   r   r   r7  r   )rt   r/   r,   r-   r<  rb   r   r   
headerItemr@  rA  rB  rC  rZ  rD  rE  rF  rG  r   rH   tagr;  horizontalHeaderItemsetHorizontalHeaderItemverticalHeaderItemr   setVerticalHeaderItem)r0   r!   r*  r^  rO  r  r_  r`  ra  rb  r2  r   r3  r4  r1   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   rs   raise_rr   rR  s     r   	setZOrderzUIParser.setZOrder  sC    99	D''3::< 		s   .> 	A
	A
c                 Z    | j                  d| j                  xs | j                  |       y )NQAction)r   rw   rs   rR  s     r   createActionzUIParser.createAction  s)    )''>4+>+>	Fr   c                     | j                  d| j                  |d      }|| _        | j                  |       d | _        y )NQActionGroupFr  )r   rs   rw   r   )r0   r!   action_groups      r   createActionGroupzUIParser.createActionGroup  sD    ((9L9L ) 0".%"&r   )
r:   	addactionr6   r   r1   actionactiongroupr   r   zorderc                     t        |      D ]%  }	 | j                  |j                     } || |       ' y # t        $ r Y 4w xY wr`   )iterwidgetTreeItemHandlersrf  rk   )r0   r!   r>  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)z( Handle the top-level <widget> element. r   rl   Qr   Nr   ztoplevel widget is %s)r   
startswithr}   createToplevelWidgetrs   r   r'   r(   r)   rb   r   rt   r2   r   r;   
addActions
setBuddiessetDelayedProps)r0   elcnamewnames       r   _handle_widgetzUIParser._handle_widget4  s    		'"		&! E$ab	!HNN$uQRy0E"77uE))%0%!!,,.88:	<!!$"5"5r:

++,#

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)rv   addSeparatorr'   r*   r   rs   r,   r-   QMenurS  
menuActionrc   rs  )r0   r:   action_name
action_objs       r   r  zUIParser.addActionsP  s    #'<< 		1FKk)##%+[&:K:K:MN$T%8%8+F
j)//:$$Z%:%:%<=#J0B0BC$$Z0		1r   c                     | j                   j                  D ]-  \  }}}}|r|j                         }t        ||      } ||       / y r`   )rb   delayed_propsr6   r   )r0   r:   r6   r#  rU  s        r   r  zUIParser.setDelayedProps\  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)rb   buddiesr'   r*   setBuddyr   rs   rr   )r0   r:   buddys      r   r  zUIParser.setBuddiesd  s}    ![[00 	2MFE%uf.?.?.AB2(;(;U CD	2 " 2IV..022s   %A!!$BBc                      y)zc
        Reimplemented by a sub-class if it needs to know the translation
        context.
        Nr   )r0   contexts     r   
setContextzUIParser.setContextm  s    
 	r   c                     t        |j                  d         | j                  d<   t        |j                  d         | j                  d<   y)z% Handle the <layoutdefault> element. rq   rp   N)r    r   ru   )r0   r  s     r   _handle_layout_defaultzUIParser._handle_layout_defaultt  s<     #&bii&9":h#&ryy';#<i r   c                     d}|D ]B  }t        | j                  |j                        }|| j                  j                  ||       |}D y)z  Handle the <tabstops> element. N)r   rs   r  setTabOrder)r0   r  
lastwidget	widget_elr:   s        r   _handle_tab_stopszUIParser._handle_tab_stopsz  sO     
 	 IT00)..AF%##//
FCJ	 r   c                      fd}|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)z# Handle the <connections> element. c                 f    | j                   k(  rj                  S t        j                  |       S r`   )uinamers   r   )r   r0   s    r   name2objectz1UIParser._handle_connections.<locals>.name2object  s.    dkk!***t22C88r   signal(Nr>   r&   r-  senderreceiverslotr   r!  r   )r   r   r   r   ra   getSlotconnectrH   tupler   QMetaObjectconnectSlotsByNamers   )
r0   r  r  connr  signal_namesignal_argsr  bound_signalr  s
   `         r   _handle_connectionszUIParser._handle_connections  s4   	9  	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 }|D ]X  }|j                  d      }| j                  j                  ||j                  d      xs d ||j                  d                   Z y)z% Handle the <customwidgets> element. c                     | 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.hNrF   /)r-  r   z..z4custom widget header file name may not contain '..'.r   )endswithr   SyntaxErrorr+   join)r   mpathparts      r   header2modulez6UIParser._handle_custom_widgets.<locals>.header2module  sq     t$ES) ' y(t|)*`aaLL&' 88E?"r   r   extendsr.   r   N)r   ra   addCustomWidget)r0   r  r  custom_widgetr  s        r   _handle_custom_widgetszUIParser._handle_custom_widgets  se    	#.   	EM%..w7ILL((!**95B!-"8"8"BCE	Er   c                     t         r`   )NotImplementedError)r0   r  
widgetnames      r   r  zUIParser.createToplevelWidget  s    !!r   c                     |D ]k  }|j                   dk(  s|j                  d   }t               }|| j                  |<   | j	                  |d      }|P|j                  d      dk(  sed|_        m y)z$ Handle the <buttongroups> element. buttongrouprl   rY   NboolfalseF)rf  r   rW   rx   r   r   rY   )r0   r  button_groupr   r   r   s         r   _handle_button_groupszUIParser._handle_button_groups  sx      		-L=0&--f5 ].0""7+''kB#}}V,7',		-r   c                      y r`   r   r?   s    r   finalizezUIParser.finalize  s    r   c                 h   t        |d      rd}nt        j                  j                  |      }| j                  j                  |       t        |      }|j                  | _        |j                  | j                  _        | j                  |j                         |j                  | j                  |j                         |j                  | j                  |j                         |j                  | j                  |j                         |j                   | j#                  |j                          |j$                  | j'                  |j$                         |j(                  | j+                  |j(                         | j-                          | j.                  }| j1                          |S )Nreadr-  )hasattrospathdirnamerb   set_base_dirr   r   r  r  layout_defaultr  rx   r  custom_widgetsr  r:   r  connectionsr  	tab_stopsr  r  rs   rd   )r0   filenamebase_dirui_filer*  s        r   parsezUIParser.parse  sP   8V$Hwwx0H  *"(($//**+
 !!-''(>(>?  ,&&w'<'<=!!-''(>(>?>>%/*$$W%8%89(""7#4#45

r   c                    | d   dkD  r&t         j                  j                  j                  }|S | d   dk(  r&t         j                  j                  j                  }|S t         j                  j                  j
                  }|S )N   r   )r-   r   ItemRoleSpanningRole	FieldRole	LabelRole)layout_positionroles     r   r   zUIParser._form_layout_role  sx    1!((11>>D  Q1$((11;;D  ((11;;Dr   N)TT)(rS   rT   rU   r[   rn   rd   r   r   r   r   r   r  r  r  r+  rP  rS  staticmethodrW  r;  rk  rn  rq  ru  r|  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r^   r^      s   
'*	  EI#6Q f0:)<B2H
>''YvI  :x8*tF' #"" "(
!8
12=
 C>E@"- (T  r   r^   )sysloggingr  rexml.etree.ElementTreer   
objcreatorr   
propertiesr   r  r   	getLoggerrS   loggerdebugr'   r   rc   r-   r   r"   r4   r$   rZ   rW   r^   r   r   r   <module>r     s~   J   	 	 , & "  
		8	$		 H>8'$ 8'v& av ar   