a
    ¸¹Df•  ã                   @   s¤   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 e¡ZejZdadadd„ Zdd	„ ZG d
d„ deƒZG dd„ deƒZG dd„ deƒZdS )é    N)ÚparseÚ
SubElementé   )ÚQObjectCreator)Ú
Propertiesc                 C   sH   d}|   d¡D ]4}|  d¡\}}ttj|ƒ}|du r:|}q||O }q|S )z5 Convert a C++ alignment to the corresponding flags. Nú|ú::)ÚsplitÚgetattrÚQtCoreÚQt)Ú	alignmentZalign_flagsZqt_alignÚ_Zalign© r   ú_/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/PyQt5/uic/uiparser.pyÚ_parse_alignment:   s    
r   c                 C   s¦   | j  d¡}| j  d¡}| j  d¡}|du s4|du rL|du r@dS dt|ƒfS t|ƒ}t|ƒ}t| j  dd¡ƒ}t| j  d	d¡ƒ}|du r”||||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   Nr   r   Úrowspanr   Úcolspan)ÚattribÚgetr   Úint)Úelemr   r   r   r   r   r   r   r   Ú_layout_positionJ   s    r   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚWidgetStackNc                 C   s<   t d| ¡  ¡ | ¡ f ƒ |  |¡ t|tjƒr8|| _d S )Nz
push %s %s)	ÚDEBUGÚ
metaObjectÚ	classNameÚ
objectNameÚappendÚ
isinstanceÚ	QtWidgetsÚQWidgetÚ	topwidget)ÚselfÚitemr   r   r   Úpushk   s    ÿ
zWidgetStack.pushc                 C   s*   t  | ¡}td| ¡  ¡ | ¡ f ƒ |S )Nzpop layout %s %s)ÚlistÚpopr   r   r   r   )r%   Úlayoutr   r   r   Ú	popLayoutr   s
    
ÿzWidgetStack.popLayoutc                 C   sd   t  | ¡}td| ¡  ¡ | ¡ f ƒ t| ƒD ]}t|tj	ƒr.|| _
 qPq.d | _
td| j
f ƒ |S )Nzpop widget %s %sznew topwidget %s)r(   r)   r   r   r   r   Úreversedr!   r"   r#   r$   )r%   Úwidgetr&   r   r   r   Ú	popWidgetx   s    
ÿzWidgetStack.popWidgetc                 C   s   | d S ©Néÿÿÿÿr   ©r%   r   r   r   Úpeek…   s    zWidgetStack.peekc                 C   s   t | d tjƒS r/   )r!   r"   ZQLayoutr1   r   r   r   ÚtopIsLayoutˆ   s    zWidgetStack.topIsLayoutc              	   C   sf   t | d ƒtjurdS t| ƒdk r&dS | d }t|tjƒodt |ƒtjtjtjtjtj	tj
tjtjfvS )Nr0   Fé   éþÿÿÿ)Útyper"   r#   Úlenr!   ÚQMainWindowÚQStackedWidgetÚQToolBoxÚ
QTabWidgetÚQScrollAreaÚQMdiAreaÚQWizardÚQDockWidget)r%   Úparentr   r   r   ÚtopIsLayoutWidget‹   s    øzWidgetStack.topIsLayoutWidget)
Ú__name__Ú
__module__Ú__qualname__r$   r'   r+   r.   r2   r3   rA   r   r   r   r   r   i   s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚButtonGroupzM Encapsulate the configuration of a button group and its implementation.
    c                 C   s   d| _ d| _dS )z Initialise the button group. TN)Ú	exclusiveÚobjectr1   r   r   r   Ú__init__¨   s    zButtonGroup.__init__N)rB   rC   rD   Ú__doc__rH   r   r   r   r   rE   ¤   s   rE   c                   @   sX  e Zd Zdd„ Zdd„ Zdd„ ZdNdd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zeeee
eeeeeed*œ
Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z d;d<„ Z!d=d>„ Z"d?d@„ Z#dAdB„ Z$dCdD„ Z%dEdF„ Z&dGdH„ Z'dIdJ„ Z(edKdL„ ƒZ)dMS )OÚUIParserc                 C   s0   t |ƒ| _t| j|||ƒ| _|a|a|  ¡  d S ©N)r   Úfactoryr   Úwpropsr   r"   Úreset)r%   Zqtcore_moduleZqtgui_moduleZqtwidgets_moduleZcreatorPolicyr   r   r   rH   °   s    

ÿzUIParser.__init__c                 C   sN   z| j | }W n  ty.   d| j |< | Y S 0 |d7 }|| j |< d||f S )zëUIParser.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Úsuffixr   r   r   Ú
uniqueName»   s    



zUIParser.uniqueNamec                 C   s^   z| j  ¡  W n ty    Y n0 d | _tƒ | _i | _dddœ| _g | _d | _	g | _
i | _d S )Nr0   )ÚspacingÚmargin)rM   rN   ÚAttributeErrorÚtoplevelWidgetr   ÚstackrO   ÚdefaultsÚactionsÚcurrentActionGroupÚ	resourcesÚbutton_groupsr1   r   r   r   rN   Ð   s    zUIParser.resetTc                 C   sv   |   |j d¡p|dd …  ¡ ¡}|d u r0d}n|f}| j ||||¡}| j ||¡ | |¡ |rrt	| j
||ƒ |S )NrQ   r   r   )rS   r   r   ÚlowerrL   ÚcreateQObjectrM   ÚsetPropertiesÚsetObjectNameÚsetattrrW   )r%   Zclsnamer@   ÚbranchÚis_attributerQ   ÚargsÚobjr   r   r   ÚsetupObjectÜ   s    "
zUIParser.setupObjectc                 C   s*   |  d¡D ]}|jd |kr
|  S q
d S )NÚpropertyrQ   )Úfindallr   )r%   r   rQ   Úpropr   r   r   ÚgetPropertyî   s    
zUIParser.getPropertyc              	   C   s  d| _ d| _d| _g | _d | _|jd  dd¡}|dkr<d}| jj}t	|t
jt
jt
jt
jt
jt
jt
jfƒrnd }| j |  |||¡¡ t	| jjt
jƒrä|  |d¡d u r¼| jj t| d¡ƒ¡ |  |d	¡d u rä| jj t| d
¡ƒ¡ |  |¡ | j ¡ }t	|t
jƒr|  |d| ¡ ¡ nt	|t
jƒrP|  |d|  ¡ ¡ |  |d| !¡ ¡ næt	|t
j"ƒr6| j# $|d¡}|d ur6z
|j%}W n t&y˜   |}Y n0 |s¤d}z| j'| }W n$ t(yÖ   t)ƒ  }| j'|< Y n0 |j*d u r*| j+ ,d|| j-f¡|_*t.| j-||j*ƒ |j* /|¡ |j0s*|j* 1d¡ |j* 2|¡ | jd urT| 3| j¡ d | _| j 4¡ r®| j 5¡ }|jd }	t	|t
j6ƒrœ| 7|	d |  8|	¡|¡ n|j9|g|	¢R Ž  | jj}
t	|
t
jƒr:| j# $|d¡}|d urö|
 :||| j# $|d¡¡ n|
 :|| j# $|d¡¡ | j# $|d¡}|d ur|
 ;|
 <|¡|¡ nÈt	|
t
jƒr¾| j# $|d¡}|d urz|
 =||| j# $|d¡¡ n|
 =|| j# $|d¡¡ | j# $|d¡}|d ur|
 >|
 <|¡|¡ nDt	|
t
jƒrÚ|
 ?|¡ n(t	|
t
jƒrö|
 9|¡ nt	|
t
jt
jfƒr|
 7|¡ nìt	|
t
j@ƒrtA|ƒt
jBkr@|
 C|¡ nÂt	|t
jDƒrž| j# $|d¡}|d u rr|
 E|¡ n|
 E||¡ | j# $|d¡}|r|
 F|¡ ndt	|t
jGƒr¸|
 H|¡ nJt	|t
jIƒrÒ|
 J|¡ n0t	|t
jƒr| j# $|d¡}|
 KtLjM N|¡|¡ d S )Nr   Úclassr   Ú.ZLineZQFrameZcolumnCountr   ZrowCountr   ÚheaderÚhorizontalHeaderÚverticalHeaderZbuttonGroupZQButtonGroupFúlayout-positionÚiconÚlabelÚtoolTipÚtitleZtoolBarAreaZtoolBarBreakZdockWidgetArea)OÚcolumn_counterÚrow_counterÚitem_nrÚ	itemstackÚsorting_enabledr   ÚreplacerX   r$   r!   r"   r?   r=   r<   r9   r:   r;   r>   r'   rg   ÚQTableWidgetrk   ZsetColumnCountr7   ri   ZsetRowCountÚtraverseWidgetTreer.   Z	QTreeViewÚhandleHeaderViewrn   Z
QTableViewro   rp   ZQAbstractButtonrM   ÚgetAttributeÚstringrV   r]   rP   rE   rG   rL   r_   rW   rb   ra   rF   ZsetExclusiveZ	addButtonÚsetSortingEnabledr3   r2   ÚQFormLayoutZ	setWidgetÚ_form_layout_roleZ	addWidgetÚaddItemZsetItemToolTipÚindexOfZaddTabZsetTabToolTipZaddPager8   r6   r#   ZsetCentralWidgetZQToolBarZ
addToolBarZinsertToolBarBreakZQMenuBarZ
setMenuBarZ
QStatusBarZsetStatusBarZaddDockWidgetr   r   ZDockWidgetArea)r%   r   Zwidget_classr@   r-   Zbg_i18nÚbg_nameÚbgÚlayÚlpr$   rr   ZtooltipZtbAreaZtbBreakZdwArear   r   r   ÚcreateWidgetõ   sÔ    ý

ÿÿ


ÿ






ÿzUIParser.createWidgetc                 C   s   | j  ||d ¡}|d ur$| |¡ | j  ||d ¡}|d urH| |¡ | j  ||d ¡}|d url| |¡ | j  ||d ¡}|d ur| |¡ | j  ||d ¡}|d ur´| |¡ | j  ||d ¡}|d urØ| |¡ | j  ||d ¡}|d urü| |¡ d S )NZVisibleZCascadingSectionResizesZDefaultSectionSizeZHighlightSectionsZMinimumSectionSizeZShowSortIndicatorZStretchLastSection)	rM   r   Z
setVisibleZsetCascadingSectionResizesZsetDefaultSectionSizeZsetHighlightSectionsZsetMinimumSectionSizeZsetSortIndicatorShownZsetStretchLastSection)r%   r   rQ   rn   Úvaluer   r   r   r~   ˆ  s*    





zUIParser.handleHeaderViewc           
      C   sø   |  d¡}|  d¡}|d u s$|d u r*d}nt|ƒt|ƒf}| j |dtjj¡}tjj|f}| j |d¡tj	j
kr€|d |d f}| jjd|  d	¡|| d
d}| j ¡ rô| j ¡ }|jd }	t|tjƒrâ| |	d |  |	¡|¡ n|j|g|	¢R Ž  d S )Nzproperty/size/widthzproperty/size/heightr   ÚsizeTypeZorientationr   r   ZQSpacerItemZ
spacerItemF)rd   rq   )Úfindtextr   rM   rk   r"   ZQSizePolicyZ	ExpandingZMinimumr   r   Z
HorizontalrL   r_   rS   rX   r3   r2   r   r!   r‚   ÚsetItemrƒ   r„   )
r%   r   ÚwidthÚheightZ	size_argsrŒ   ÚpolicyÚspacerrˆ   r‰   r   r   r   ÚcreateSpacer¥  s*    


ÿþ


zUIParser.createSpacerc                 C   sd  | j  ¡ rdn| jd }| j |d|¡}| j |d|¡}| j |d|¡}| j |d|¡}| j |d|¡}| 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rt|dd	d
}t|ƒt|dƒ_t|ƒt|dƒ_t|ƒt|dƒ_t|ƒt|dƒ_| j |d| jd ¡}| j |d|¡}	| j |d|¡}
|	dks\|
dkrŠt|ddd
}t|	ƒt|dƒ_t|
ƒt|dƒ_|j	d }| j  ¡ r¦d }n| j j
}d|j	vrÐ|dd …  ¡ |j	d< | j  |  |||¡¡ |  |¡ | j  ¡ }|  ||¡ | j  ¡ r`| j  ¡ }|j	d }t|tjƒrN| |d |  |¡|¡ n|j|g|¢R Ž  d S )Nr0   rU   Z
leftMarginZ	topMarginZrightMarginZbottomMarginr   rh   ZpyuicMargins)rQ   ÚnumberrT   ZhorizontalSpacingZverticalSpacingZpyuicSpacingrl   rQ   r   rq   )rX   r3   rY   rM   rk   rA   r   ÚstrÚtextr   r$   r^   r'   rg   r}   r+   ÚconfigureLayoutr2   r!   r"   r‚   Z	setLayoutrƒ   Z	addLayout)r%   r   rU   ÚleftÚtopÚrightZbottomZcmerT   ZhorizZvertÚ	classnamer@   r*   Z
top_layoutr‰   r   r   r   ÚcreateLayoutÃ  sT    
"
ÿ




zUIParser.createLayoutc                 C   sn   t |tjƒrN|  |d|j¡ |  |d|j¡ |  |d|j¡ |  |d|j¡ nt |tjƒrj|  |d|j	¡ d S )NZcolumnminimumwidthZrowminimumheightZcolumnstretchZ
rowstretchZstretch)
r!   r"   ZQGridLayoutÚsetArrayZsetColumnMinimumWidthZsetRowMinimumHeightZsetColumnStretchZsetRowStretchZ
QBoxLayoutZ
setStretch)r%   r   r*   r   r   r   r—     s    ÿÿzUIParser.configureLayoutc                 C   sF   |j  |¡}|rBt| d¡ƒD ]"\}}t|ƒ}|dkr|||ƒ qd S )Nú,r   )r   r   Ú	enumerater	   r   )r%   r   rQ   ÚsetterÚarrayÚidxr‹   r   r   r   r     s    zUIParser.setArrayc                 C   s*   | j dkr&| j d|j¡| _| d¡ d S )Nr   Ú__sortingEnabledF)rx   rL   ÚinvokeÚisSortingEnabledrz   r   )r%   Úwr   r   r   ÚdisableSorting  s
    
ÿzUIParser.disableSortingc                 C   s<  | j  ¡ r*t|ƒ|d jd< |  |¡ n| j j}t|tjƒrˆ| j	 
|d¡}| j	 
|d¡}|rl| |d¡ n
| d¡ | | j|¡ n¢t|tjƒrÀ|  |¡ |  d||j| j¡}| |¡ njt|tjƒrÔ| jrò| jd \}}| jd \}}n
|}| j}| j dd	t| jƒ |fd
¡}| jdkrJ| jsJ| j d|j¡| _| d
¡ | j || jf¡ d| _| |¡}	| jdd … D ]\}
}|	 |¡}	qzd}| d¡D ]}| j	 |¡}|jd }|dkrà|d7 }|r´|	  ||¡ nÔ|dkrø| !||¡ n¼|dkr| "||¡ n¤|dkr(| #||¡ nŒ|dkr@| $||¡ nt|dkrX| %||¡ n\|dkrp| &||¡ nD|dkrˆ| '||¡ n,|dkrž| (|¡ n|dkrž| )||¡ qž|  |¡ | j *¡ \}| _nVt|tj+ƒr*t,|jd ƒ}t,|jd ƒ}|  |¡ |  d||j||¡}| -|||¡ |  jd7  _d S )Nr   rq   r–   rr   Ú ZQListWidgetItemr0   ZQTreeWidgetItemzitem_%dFr£   r   rh   rQ   Ú	statusTiprt   Ú	whatsThisÚfontÚ
backgroundÚ
foregroundÚflagsÚ
checkStater   r   ÚQTableWidgetItem).rX   r3   r   r   r}   r$   r!   r"   Z	QComboBoxrM   rk   r„   ZsetItemTextrx   ZQListWidgetr§   ÚcreateWidgetItemr&   ÚQTreeWidgetry   rL   r_   r7   r¤   r¥   rz   r   r    ZtopLevelItemÚchildri   ÚconvertÚsetTextÚsetStatusTipÚ
setToolTipÚsetWhatsThisÚsetFontÚsetIconÚsetBackgroundÚsetForegroundÚsetFlagsÚsetCheckStater)   r|   r   rŽ   )r%   r   r¦   r–   rr   r&   r@   r   Z
nr_in_rootZtitmr³   Znr_in_parentr   rj   Zc_propZc_prop_namer   Úcolr   r   r   Ú
handleItem  sŽ    


ÿÿ














ÿzUIParser.handleItemc                 C   s   | j  | jj|jd f¡ d S )NrQ   )rZ   r    rX   r$   r   ©r%   r   r   r   r   Ú	addActiony  s    zUIParser.addActionc                  G   s&   | D ]}|durt |tƒs dS qdS )z; Return True if any argument appears to be an i18n string. NTF)r!   r•   )re   Úar   r   r   Úany_i18n|  s    zUIParser.any_i18nc                 G   sb  | j  |ddd¡}| j}| |d¡}| |d¡}| |d¡}	| |d¡}
|  |||	|
¡rh| j  d||¡ |rv| |¡ |r„| |¡ |	r’| |	¡ |
r | 	|
¡ | |d¡}|rº| 
|¡ | |d	¡}|rÔ| |¡ | |d
¡}|rî| |¡ | |d¡}|r
| |¡ | |d¡}|r&| |¡ | |d¡}|rB| |¡ | |d¡}|r^| |¡ |S )z( Create a specific type of widget item. r&   r   Fr–   r©   rt   rª   ÚtextAlignmentr«   rr   r¬   r­   r®   r¯   )rL   r_   rM   rk   rÄ   r¤   rµ   r¶   r·   r¸   ÚsetTextAlignmentr¹   rº   r»   r¼   r½   r¾   )r%   Z	item_typer   ÚgetterZgetter_argsr&   Úpropsr–   Ú
status_tipÚtool_tipÚ
whats_thisÚtext_alignmentr«   rr   r¬   r­   r®   Zcheck_stater   r   r   r±   †  sL    










zUIParser.createWidgetItemc                 C   sò  | j j}t|tjƒrX| j}| j}| |d¡}|rB| ¡  	||¡ | |d¡}|rb| ¡  
||¡ | |d¡}|r‚| ¡  ||¡ | |d¡}|r¢| ¡  ||¡ | |d¡}	|	rÂ| ¡  ||	¡ | |d¡}
|
râ| ¡  ||
¡ | |d¡}|r| ¡  ||¡ | |d¡}|r&| ¡  ||¡ | |d	¡}|rH| ¡  ||¡ |  jd
7  _n–t|tjƒrît|ƒdkrî|jdkr²|  d||j| j¡}| | j|¡ |  jd
7  _n<|jdkrî|  d||j| j¡}| | j|¡ |  jd
7  _d S )Nr–   r©   rt   rª   rÅ   r«   rr   r¬   r­   r   r   r   r°   r   )rX   r$   r!   r"   r²   rM   rv   rk   Z
headerItemrµ   r¶   r·   r¸   rÆ   r¹   rº   r»   r¼   r|   r7   Útagr±   ZhorizontalHeaderItemZsetHorizontalHeaderItemZverticalHeaderItemrw   ZsetVerticalHeaderItem)r%   r   r¦   rÈ   r¿   r–   rÉ   rÊ   rË   rÌ   r«   rr   r¬   r­   r&   r   r   r   Ú	addHeaderÁ  s\    ÿÿzUIParser.addHeaderc                 C   s<   |j d u rd S zt| j|j ƒ ¡  W n ty6   Y n0 d S rK   )r–   r
   rW   Zraise_rV   rÁ   r   r   r   Ú	setZOrderû  s    
zUIParser.setZOrderc                 C   s   |   d| jp| j|¡ d S )NZQAction)rg   r[   rW   rÁ   r   r   r   ÚcreateAction  s    ÿzUIParser.createActionc                 C   s*   |   d| j|¡}|| _|  |¡ d | _d S )NÚQActionGroup)rg   rW   r[   r}   )r%   r   Úaction_groupr   r   r   ÚcreateActionGroup  s    
zUIParser.createActionGroup)
r-   Z	addactionr*   r’   r&   ÚactionZactiongroupr   r   Zzorderc              	   C   sD   t |ƒD ]6}z| j|j }W n ty2   Y qY n0 || |ƒ qd S rK   )ÚiterÚwidgetTreeItemHandlersrÍ   rP   )r%   r   r³   Úhandlerr   r   r   r}     s    
zUIParser.traverseWidgetTreec                 C   sÆ   |j d }|j d }|sJ|}| d¡r2|dd … }|d  ¡ |dd …  }|  ||¡| _| j |¡ td| j ¡  ¡ ƒ | j	 
| j|¡ | j | j¡ |  |¡ | j ¡  |  ¡  |  ¡  |  ¡  d S )Nrl   rQ   ÚQr   r   ztoplevel widget is %s)r   Ú
startswithr^   ÚcreateToplevelWidgetrW   ra   r   r   r   rM   r`   rX   r'   r}   r.   Ú
addActionsÚ
setBuddiesÚsetDelayedProps)r%   r   ÚcnameZwnamer   r   r   ÚcreateUserInterface(  s&    


ÿ

zUIParser.createUserInterfacec                 C   st   | j D ]h\}}|dkr | ¡  qtd|| ¡ ƒ t| j|ƒ}t|tjƒrX| 	| 
¡ ¡ qt|tjƒs| 	|¡ qd S )NÚ	separatorzadd action %s to %s)rZ   ZaddSeparatorr   r   r
   rW   r!   r"   ZQMenurÂ   Z
menuActionrÑ   )r%   r-   Úaction_nameZ
action_objr   r   r   rÛ   B  s    
zUIParser.addActionsc                 C   s8   | j jD ]*\}}}}|r | ¡ }t||ƒ}||ƒ qd S rK   )rM   Zdelayed_propsr*   r
   )r%   r-   r*   r    re   r   r   r   rÝ   N  s
    
zUIParser.setDelayedPropsc              	   C   s`   | j jD ]R\}}td|| ¡ ƒ z| t| j|ƒ¡ W q tyX   td|| ¡ ƒ Y q0 qd S )Nz%s is buddy of %sz1ERROR in ui spec: %s (buddy of %s) does not exist)rM   Zbuddiesr   r   ZsetBuddyr
   rW   rV   )r%   r-   Zbuddyr   r   r   rÜ   V  s    ÿzUIParser.setBuddiesc                 C   s:   t d|jƒ |j}|d u rd}|| _|| j_|  |¡ d S )Nzuiname is %sr¨   )r   r–   ÚuinamerM   Ú
setContext)r%   r   rQ   r   r   r   r›   _  s    zUIParser.classnamec                 C   s   dS )zc
        Reimplemented by a sub-class if it needs to know the translation
        context.
        Nr   )r%   Úcontextr   r   r   rã   j  s    zUIParser.setContextc                 C   s,   t |jd ƒ| jd< t |jd ƒ| jd< d S )NrU   rT   )r   r   rY   rÁ   r   r   r   ÚreadDefaultsq  s    zUIParser.readDefaultsc                 C   s:   d }|D ],}t | j|jƒ}|d ur0| j ||¡ |}qd S rK   )r
   rW   r–   ZsetTabOrder)r%   r   Z
lastwidgetZwidget_elemr-   r   r   r   ÚsetTaborderu  s    zUIParser.setTaborderc                 C   sˆ   zt |dƒ}W n ty*   t |dƒ}Y n0 |dƒD ]N}|j d¡}|r4| d¡r4tj |dd… | j ¡}|| j	vr4| j	 
|¡ q4dS )zk
        Read a "resources" tag and add the module to import to the parser's
        list of them.
        rÕ   ZgetiteratorÚincludeÚlocationz.qrcNéüÿÿÿ)r
   rV   r   r   ÚendswithÚosÚpathÚbasenameÚ_resource_suffixr\   r    )r%   r   Úiteratorrç   ÚlocZmnamer   r   r   ÚreadResources  s    
zUIParser.readResourcesc           
         sè   ‡ fdd„}t |ƒD ]À}| d¡}| d¡\}}|d d…  dd¡}|| d¡ƒ}t||ƒ}ˆ j || d	¡ƒ| d
¡ d¡d ¡}	|dkr˜| |	¡ q| d¡}t|ƒdkrÂ||d   |	¡ q|t	|ƒ  |	¡ qt
j ˆ j¡ d S )Nc                    s    | ˆ j krˆ jS tˆ j| ƒS d S rK   )râ   rW   r
   )rf   r1   r   r   Úname2object”  s    
z/UIParser.createConnections.<locals>.name2objectÚsignalú(r0   ú r¨   ÚsenderZreceiverÚslotr   rž   r   )rÕ   r   r	   r{   r
   rL   ZgetSlotÚconnectr7   Útupler   ZQMetaObjectZconnectSlotsByNamerW   )
r%   r   rò   Úconnró   Zsignal_nameZsignal_argsrö   Zbound_signalr÷   r   r1   r   ÚcreateConnections“  s"    

ÿ
zUIParser.createConnectionsc              	   C   sH   dd„ }t |ƒD ]2}| d¡}| j || d¡p2d|| d¡ƒ¡ qd S )Nc                 S   sV   |   d¡r| dd… } g }|  d¡D ]&}|dvr$|dkr@tdƒ‚| |¡ q$d |¡S )	zÀheader2module(header) -> string

            Convert paths to C++ header files to according Python modules
            >>> header2module("foo/bar/baz.h")
            'foo.bar.baz'
            z.hNr5   ú/)r¨   rm   z..z4custom widget header file name may not contain '..'.rm   )rê   r	   ÚSyntaxErrorr    Újoin)rn   ZmpathÚpartr   r   r   Úheader2module±  s    
z-UIParser.customWidgets.<locals>.header2modulerl   Zextendsr#   rn   )rÕ   r   rL   ZaddCustomWidget)r%   r   r   Zcustom_widgetr›   r   r   r   ÚcustomWidgets°  s    
þzUIParser.customWidgetsc                 C   s   t ‚d S rK   )ÚNotImplementedError)r%   r›   Z
widgetnamer   r   r   rÚ   Î  s    zUIParser.createToplevelWidgetc                 C   s^   t |ƒD ]P}|jdkr|jd }tƒ }|| j|< |  |d¡}|d ur| d¡dkrd|_qd S )NZbuttongrouprQ   rF   ÚboolÚfalseF)rÕ   rÍ   r   rE   r]   rk   r   rF   )r%   r   Zbutton_groupr†   r‡   rj   r   r   r   ÚbuttonGroupsÑ  s    


zUIParser.buttonGroupsc                 C   s   d S rK   r   r1   r   r   r   Úfinalizeß  s    zUIParser.finalizec              	   C   s
  t |dƒrd}nt|ƒ}t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dkrœtdƒ‚|j d¡}|d u r¸tdƒ‚|dkrÈtdƒ‚|D ]"\}}	| |¡}
|
d urÌ|	|
ƒ qÌ|  ¡  | j}|  ¡  |S )NÚreadr¨   Zlayoutdefaultrl   ZbuttongroupsZcustomwidgetsr-   ÚconnectionsZtabstopsr\   Zuiznot created by Qt DesignerÚversionzmissing version numberz4.0z)only Qt Designer files v4.0 are supported)Úhasattrr•   rë   rì   ÚdirnamerM   Zset_base_dirrî   rå   r›   r  r  rß   rû   ræ   rñ   r   ÚgetrootrÍ   rý   r   r   Úfindr  rW   rN   )r%   ÚfilenameZresource_suffixÚbase_dirZbranchHandlersÚdocumentÚrootr	  ÚtagnameZactorr   r¦   r   r   r   r   â  s@    
ø


zUIParser.parsec                 C   s8   | d dkrt jj}n| d dkr,t jj}nt jj}|S )Né   r   )r"   r‚   ZSpanningRoleZ	FieldRoleZ	LabelRole)Zlayout_positionÚroler   r   r   rƒ     s    

zUIParser._form_layout_roleN)T)*rB   rC   rD   rH   rS   rN   rg   rk   rŠ   r~   r“   rœ   r—   r   r§   rÀ   rÂ   ÚstaticmethodrÄ   r±   rÎ   rÏ   rÐ   rÓ   rÖ   r}   rß   rÛ   rÝ   rÜ   r›   rã   rå   ræ   rñ   rû   r  rÚ   r  r  r   rƒ   r   r   r   r   rJ   ¯   sf   
 BZ
	;:ö		
1rJ   )ÚsysÚloggingrë   ÚreÚxml.etree.ElementTreer   r   Z
objcreatorr   Z
propertiesr   Ú	getLoggerrB   ÚloggerÚdebugr   r   r"   r   r   r(   r   rG   rE   rJ   r   r   r   r   Ú<module>)   s   
;