B
    ½ÞZb“  ã               @   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   sL   d}xB|   d¡D ]4}|  d¡\}}ttj|ƒ}|dkr<|}q||O }qW |S )z5 Convert a C++ alignment to the corresponding flags. Nú|z::)ÚsplitÚgetattrÚQtCoreÚQt)Ú	alignmentZalign_flagsZqt_alignÚ_Zalign© r   ú1lib/python3.7/site-packages/PyQt5/uic/uiparser.pyÚ_parse_alignment:   s    r   c             C   s¦   | j  d¡}| j  d¡}| j  d¡}|dks4|dkrL|dkr@dS dt|ƒfS t|ƒ}t|ƒ}t| j  dd¡ƒ}t| j  d	d¡ƒ}|dk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   sf   t  | ¡}td| ¡  ¡ | ¡ f ƒ x*t| ƒD ]}t|tj	ƒr0|| _
P q0W 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 )Nr.   )r    r!   ZQLayout)r$   r   r   r   ÚtopIsLayoutˆ   s    zWidgetStack.topIsLayoutc          	   C   sf   t | d ƒtjk	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kS )Nr.   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-   r/   r0   r>   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Úobject)r$   r   r   r   Ú__init__¨   s    zButtonGroup.__init__N)r?   r@   rA   Ú__doc__rE   r   r   r   r   rB   ¤   s   rB   c               @   sZ  e Zd Zdd„ Zdd„ Zdd„ ZdOd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'dPdJdK„Z(edLdM„ ƒZ)dNS )QÚ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   rE   °   s    

zUIParser.__init__c             C   sL   y| j | }W n tk
r,   d| j |< |S X |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`   y| j  ¡  W n tk
r"   Y nX d | _tƒ | _i | _dddœ| _g | _d | _	g | _
i | _d S )Nr.   )ÚspacingÚmargin)rI   rJ   ÚAttributeErrorÚtoplevelWidgetr   ÚstackrK   ÚdefaultsÚactionsÚcurrentActionGroupÚ	resourcesÚbutton_groups)r$   r   r   r   rJ   Ð   s      zUIParser.resetTc             C   sv   |   |j d¡p|dd …  ¡ ¡}|d kr0d}n|f}| j ||||¡}| j ||¡ | |¡ |rrt	| j
||ƒ |S )NrM   r   r   )rO   r   r   ÚlowerrH   ÚcreateQObjectrI   ÚsetPropertiesÚsetObjectNameÚsetattrrS   )r$   Zclsnamer=   ÚbranchÚis_attributerM   ÚargsÚobjr   r   r   ÚsetupObjectÜ   s    "
zUIParser.setupObjectc             C   s*   x$|  d¡D ]}|jd |kr|S qW d S )NÚpropertyrM   )Úfindallr   )r$   r   rM   Ú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 kr¼| jj t| d¡ƒ¡ |  |d	¡d krä| jj t| d
¡ƒ¡ |  |¡ | j ¡ }t	|t
jƒr|  |d| ¡ ¡ nt	|t
jƒrP|  |d|  ¡ ¡ |  |d| !¡ ¡ nêt	|t
j"ƒr:| j# $|d¡}|d k	r:y
|j%}W n t&k
rš   |}Y nX |s¦d}y| j'| }W n& t(k
rÚ   t)ƒ  }| j'|< Y nX |j*d kr.| j+ ,d|| j-f¡|_*t.| j-||j*ƒ |j* /|¡ |j0s.|j* 1d¡ |j* 2|¡ | jd k	rX| 3| j¡ d | _| j 4¡ r°| j 5¡ }|jd }	t	|t
j6ƒr | 7|	d |  8|	¡|¡ n|j9|f|	žŽ  | jj}
t	|
t
jƒr<| j# $|d¡}|d k	rø|
 :||| j# $|d¡¡ n|
 :|| j# $|d¡¡ | j# $|d¡}|d k	r|
 ;|
 <|¡|¡ nÈt	|
t
jƒrÀ| j# $|d¡}|d k	r||
 =||| j# $|d¡¡ n|
 =|| j# $|d¡¡ | j# $|d¡}|d k	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rB|
 C|¡ nÂt	|t
jDƒr | j# $|d¡}|d krt|
 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   Úclassz::Ú.ZLineZQFrameZcolumnCountr   ZrowCountr   ÚheaderÚhorizontalHeaderÚverticalHeaderZbuttonGroupZQButtonGroupFzlayout-positionÚiconZlabelÚtoolTipÚtitleZtoolBarAreaZtoolBarBreakZdockWidgetArea)OÚcolumn_counterÚrow_counterÚitem_nrÚ	itemstackÚsorting_enabledr   ÚreplacerT   r#   r    r!   r<   r:   r9   r6   r7   r8   r;   r&   rc   ÚQTableWidgetrg   ZsetColumnCountr4   re   ZsetRowCountÚtraverseWidgetTreer-   Z	QTreeViewÚhandleHeaderViewrj   Z
QTableViewrk   rl   ZQAbstractButtonrI   ÚgetAttributeÚstringrR   rY   rL   rB   rD   rH   r[   rS   r^   r]   rC   ZsetExclusiveZ	addButtonÚsetSortingEnabledr0   r/   ÚQFormLayoutZ	setWidgetÚ_form_layout_roleZ	addWidgetÚaddItemZsetItemToolTipÚindexOfZaddTabZsetTabToolTipZaddPager5   r3   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#   rm   ZtooltipZtbAreaZtbBreakZdwArear   r   r   ÚcreateWidgetõ   sÊ    













zUIParser.createWidgetc             C   s   | j  ||d ¡}|d k	r$| |¡ | j  ||d ¡}|d k	rH| |¡ | j  ||d ¡}|d k	rl| |¡ | j  ||d ¡}|d k	r| |¡ | j  ||d ¡}|d k	r´| |¡ | j  ||d ¡}|d k	rØ| |¡ | j  ||d ¡}|d k	rü| |¡ d S )NZVisibleZCascadingSectionResizesZDefaultSectionSizeZHighlightSectionsZMinimumSectionSizeZShowSortIndicatorZStretchLastSection)	rI   ry   Z
setVisibleZsetCascadingSectionResizesZsetDefaultSectionSizeZsetHighlightSectionsZsetMinimumSectionSizeZsetSortIndicatorShownZsetStretchLastSection)r$   r   rM   rj   Úvaluer   r   r   rx   ˆ  s*    





zUIParser.handleHeaderViewc       
      C   sö   |  d¡}|  d¡}|d ks$|d k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|f|	žŽ  d S )Nzproperty/size/widthzproperty/size/heightr   ÚsizeTypeZorientationr   r   ZQSpacerItemZ
spacerItemF)r`   zlayout-position)Úfindtextr   rI   rg   r!   ZQSizePolicyZ	ExpandingZMinimumr
   r   Z
HorizontalrH   r[   rO   rT   r0   r/   r   r    r|   ÚsetItemr}   r~   )
r$   r   ÚwidthZheightZ	size_argsr†   ZpolicyÚspacerr‚   rƒ   r   r   r   ÚcreateSpacer¥  s&    






zUIParser.createSpacerc             C   sb  | 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	krÐ|dd …  ¡ |j	d< | j  |  |||¡¡ |  |¡ | j  ¡ }|  ||¡ | j  ¡ r^| j  ¡ }|j	d }t|tjƒrN| |d |  |¡|¡ n|j|f|žŽ  d S )Nr.   rQ   Z
leftMarginZ	topMarginZrightMarginZbottomMarginr   rd   ZpyuicMargins)rM   ZnumberrP   ZhorizontalSpacingZverticalSpacingZpyuicSpacingrh   rM   r   zlayout-position)rT   r0   rU   rI   rg   r>   r   ÚstrÚtextr   r#   rZ   r&   rc   rw   r*   ÚconfigureLayoutr/   r    r!   r|   Z	setLayoutr}   Z	addLayout)r$   r   rQ   ÚleftÚtopÚrightZbottomZcmerP   ZhorizZvertÚ	classnamer=   r)   Z
top_layoutrƒ   r   r   r   ÚcreateLayoutÃ  sZ    
    "





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   sJ   |j  |¡}|rFx4t| d¡ƒD ]"\}}t|ƒ}|dkr |||ƒ q W d S )Nú,r   )r   r   Ú	enumerater   r   )r$   r   rM   ÚsetterZarrayÚidxr…   r   r   r   r”     s    zUIParser.setArrayc             C   s*   | j dkr&| j d|j¡| _| d¡ d S )Nr   Ú__sortingEnabledF)rr   rH   ÚinvokeÚisSortingEnabledrt   r{   )r$   Úwr   r   r   ÚdisableSorting  s    

zUIParser.disableSortingc             C   sF  | 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¡}| |¡ ntt|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| _| |¡}	x&| jdd … D ]\}
}|	 |¡}	q|W d}x&| d¡D ]}| j	 |¡}|jd }|dkrè|d7 }|r¼|	  ||¡ nÔ|dkr | !||¡ n¼|dkr| "||¡ n¤|dkr0| #||¡ nŒ|dkrH| $||¡ nt|dkr`| %||¡ n\|dkrx| &||¡ nD|dkr| '||¡ n,|dkr¦| (|¡ n|dkr¦| )||¡ q¦W |  |¡ | j *¡ \}| _nVt|tj+ƒr4t,|jd ƒ}t,|jd ƒ}|  |¡ |  d||j||¡}| -|||¡ |  jd7  _d S )Nr   zlayout-positionr   rm   Ú ZQListWidgetItemr.   ZQTreeWidgetItemzitem_%dFr™   r   rd   rM   Ú	statusTiprn   Ú	whatsThisÚfontÚ
backgroundÚ
foregroundÚflagsÚ
checkStater   r   ÚQTableWidgetItem).rT   r0   r   r   rw   r#   r    r!   Z	QComboBoxrI   rg   r~   ZsetItemTextrr   ZQListWidgetr   ÚcreateWidgetItemr%   ÚQTreeWidgetrs   rH   r[   r4   rš   r›   rt   r{   r   ZtopLevelItemÚchildre   ZconvertÚsetTextÚsetStatusTipÚ
setToolTipÚsetWhatsThisÚsetFontÚsetIconÚsetBackgroundÚsetForegroundÚsetFlagsÚsetCheckStater(   rv   r   rˆ   )r$   r   rœ   r   rm   r%   r=   r   Z
nr_in_rootZtitmr©   Znr_in_parentr   rf   Zc_propZc_prop_namer   Úcolr   r   r   Ú
handleItem  sˆ    

















zUIParser.handleItemc             C   s   | j  | jj|jd f¡ d S )NrM   )rV   r   rT   r#   r   )r$   r   r   r   r   Ú	addActiony  s    zUIParser.addActionc              G   s(   x"| D ]}|dk	rt |tƒsdS qW dS )z; Return True if any argument appears to be an i18n string. NTF)r    rŒ   )ra   Ú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Ÿ   rn   r    ÚtextAlignmentr¡   rm   r¢   r£   r¤   r¥   )rH   r[   rI   rg   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¡   rm   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Ÿ   rn   r    r¹   r¡   rm   r¢   r£   r   r   r   r¦   r   )rT   r#   r    r!   r¨   rI   rp   rg   Z
headerItemrª   r«   r¬   r­   rº   r®   r¯   r°   r±   rv   r4   Útagr§   ZhorizontalHeaderItemZsetHorizontalHeaderItemZverticalHeaderItemrq   ZsetVerticalHeaderItem)r$   r   rœ   r¼   r´   r   r½   r¾   r¿   rÀ   r¡   rm   r¢   r£   r%   r   r   r   Ú	addHeaderÁ  sX    zUIParser.addHeaderc             C   s>   |j d krd S yt| j|j ƒ ¡  W n tk
r8   Y nX d S )N)r   r	   rS   Zraise_rR   )r$   r   r   r   r   Ú	setZOrderû  s    
zUIParser.setZOrderc             C   s   |   d| jp| j|¡ d S )NZQAction)rc   rW   rS   )r$   r   r   r   r   ÚcreateAction  s    zUIParser.createActionc             C   s*   |   d| j|¡}|| _|  |¡ d | _d S )NÚQActionGroup)rc   rS   rW   rw   )r$   r   Zaction_groupr   r   r   ÚcreateActionGroup  s    
zUIParser.createActionGroup)
r,   Z	addactionr)   rŠ   r%   ÚactionZactiongroupr   r   Zzorderc          	   C   sH   xBt |ƒD ]6}y| j|j }W n tk
r4   w
Y nX || |ƒ q
W d S )N)ÚiterÚwidgetTreeItemHandlersrÁ   rL   )r$   r   r©   Zhandlerr   r   r   rw     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 )Nrh   rM   ÚQr   r   ztoplevel widget is %s)r   Ú
startswithrZ   ÚcreateToplevelWidgetrS   r]   r   r   r   rI   r\   rT   r&   rw   r-   Ú
addActionsÚ
setBuddiesÚsetDelayedProps)r$   r   ZcnameZwnamer   r   r   ÚcreateUserInterface(  s$    




zUIParser.createUserInterfacec             C   sx   xr| j D ]h\}}|dkr"| ¡  qtd|| ¡ ƒ t| j|ƒ}t|tjƒrZ| 	| 
¡ ¡ qt|tjƒs| 	|¡ qW d S )NZ	separatorzadd action %s to %s)rV   ZaddSeparatorr   r   r	   rS   r    r!   ZQMenur¶   Z
menuActionrÅ   )r$   r,   Zaction_nameZ
action_objr   r   r   rÍ   B  s    
zUIParser.addActionsc             C   s<   x6| j jD ]*\}}}}|r"| ¡ }t||ƒ}||ƒ q
W d S )N)rI   Zdelayed_propsr)   r	   )r$   r,   r)   r—   ra   r   r   r   rÏ   N  s
    
zUIParser.setDelayedPropsc          	   C   sf   x`| j jD ]T\}}td|| ¡ ƒ y| t| j|ƒ¡ W q
 tk
r\   td|| ¡ ƒ Y q
X q
W d S )Nz%s is buddy of %sz1ERROR in ui spec: %s (buddy of %s) does not exist)rI   Zbuddiesr   r   ZsetBuddyr	   rS   rR   )r$   r,   Zbuddyr   r   r   rÎ   V  s    zUIParser.setBuddiesc             C   s:   t d|jƒ |j}|d krd}|| _|| j_|  |¡ d S )Nzuiname is %srž   )r   r   ÚuinamerI   Ú
setContext)r$   r   rM   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 )NrQ   rP   )r   r   rU   )r$   r   r   r   r   ÚreadDefaultsq  s    zUIParser.readDefaultsc             C   s>   d }x4|D ],}t | j|jƒ}|d k	r2| j ||¡ |}q
W d S )N)r	   rS   r   ZsetTabOrder)r$   r   Z
lastwidgetZwidget_elemr,   r   r   r   ÚsetTaborderu  s    
zUIParser.setTaborderc             C   sŽ   yt |dƒ}W n tk
r,   t |dƒ}Y nX xZ|dƒD ]N}|j d¡}|r8| d¡r8tj |dd… | j ¡}|| j	kr8| j	 
|¡ q8W d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	   rR   r   r   ÚendswithÚosÚpathÚbasenameÚ_resource_suffixrX   r   )r$   r   ÚiteratorrÖ   ZlocZmnamer   r   r   ÚreadResources  s    
zUIParser.readResourcesc       
         sì   ‡ fdd„}xÌ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W t
j ˆ j¡ d S )Nc                s    | ˆ j krˆ jS tˆ j| ƒS d S )N)rÑ   rS   r	   )rb   )r$   r   r   Úname2object”  s    
z/UIParser.createConnections.<locals>.name2objectÚsignalú(r.   ú rž   ÚsenderZreceiverÚslotr   r•   r   )rÈ   r‡   r   ru   r	   rH   ZgetSlotZconnectr4   Útupler
   ZQMetaObjectZconnectSlotsByNamerS   )
r$   r   rà   Zconnrá   Zsignal_nameZsignal_argsrä   Zbound_signalrå   r   )r$   r   ÚcreateConnections“  s     


zUIParser.createConnectionsc          	   C   sL   dd„ }x>t |ƒD ]2}| d¡}| j || d¡p4d|| d¡ƒ¡ qW d S )Nc             S   sZ   |   d¡r| dd… } g }x4|  d¡D ]&}|dkr&|dkrBtdƒ‚| |¡ q&W 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.hNr2   ú/)rž   ri   z..z4custom widget header file name may not contain '..'.ri   )rÙ   r   ÚSyntaxErrorr   Újoin)rj   ZmpathÚpartr   r   r   Úheader2module±  s    
z-UIParser.customWidgets.<locals>.header2modulerh   Zextendsr"   rj   )rÈ   r‡   rH   ZaddCustomWidget)r$   r   rì   Zcustom_widgetr’   r   r   r   ÚcustomWidgets°  s    
zUIParser.customWidgetsc             C   s   t ‚d S )N)ÚNotImplementedError)r$   r’   Z
widgetnamer   r   r   rÌ   Î  s    zUIParser.createToplevelWidgetc             C   sb   x\t |ƒD ]P}|jdkr
|jd }tƒ }|| j|< |  |d¡}|d k	r
| d¡dkr
d|_q
W d S )NZbuttongrouprM   rC   ÚboolZfalseF)rÈ   rÁ   r   rB   rY   rg   r‡   rC   )r$   r   Zbutton_groupr€   r   rf   r   r   r   ÚbuttonGroupsÑ  s    


zUIParser.buttonGroupsc             C   s   d S )Nr   )r$   r   r   r   Úfinalizeß  s    zUIParser.finalizerž   c          	   C   sÌ   | 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	 }td
|f ƒ |dks†t‚x*|D ]"\}}| |¡}	|	d k	rŒ||	ƒ qŒW |  ¡  | j}
|  ¡  |
S )NZlayoutdefaultrh   ZbuttongroupsZcustomwidgetsr,   ZconnectionsZtabstopsrX   ÚversionzUI version is %s)z4.0)rI   Zset_base_dirrÝ   rÔ   r’   rð   rí   rÐ   rç   rÕ   rß   r   Zgetrootr   r   ÚAssertionErrorÚfindrñ   rS   rJ   )r$   ÚfilenameZresource_suffixZbase_dirZbranchHandlersZdocumentrò   Z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_positionZroler   r   r   r}     s    

zUIParser._form_layout_roleN)T)rž   )*r?   r@   rA   rE   rO   rJ   rc   rg   r„   rx   r‹   r“   rŽ   r”   r   rµ   r¶   Ústaticmethodr¸   r§   rÂ   rÃ   rÄ   rÆ   rÉ   rw   rÐ   rÍ   rÏ   rÎ   r’   rÒ   rÔ   rÕ   rß   rç   rí   rÌ   rð   rñ   r   r}   r   r   r   r   rG   ¯   s`   
 BZ
;:		

!rG   )ÚsysZloggingÚos.pathrÚ   ÚreZxml.etree.ElementTreer   r   Z
objcreatorr   Z
propertiesr   Z	getLoggerr?   ZloggerÚdebugr   r
   r!   r   r   r'   r   rD   rB   rG   r   r   r   r   Ú<module>)   s   
;