B
    nôb\
/  ã               @   sÂ   d Z ddlZddlmZmZmZmZ ddlmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZdd„ Zedkr¾eƒ  dS )zLayout dialogsé    N)ÚQAbstractTableModelÚQModelIndexÚQSizeÚQt)Úfrom_qvariantÚto_qvariant)	ÚQAbstractItemViewÚ	QComboBoxÚQDialogÚQDialogButtonBoxÚ	QGroupBoxÚQHBoxLayoutÚQPushButtonÚ
QTableViewÚQVBoxLayout)Ú_)Úto_text_stringc                   sr   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zejfdd	„Z	d
d„ Z
eƒ fdd„Zeƒ fdd„Zdd„ Zdd„ Z‡  ZS )ÚLayoutModelú c                s8   t t| ƒ |¡ || _|| _|| _g | _|  ||¡ d S )N)Úsuperr   Ú__init__Ú_parentÚorderÚactiveÚ_rowsÚset_data)ÚselfÚparentr   r   )Ú	__class__© ú:lib/python3.7/site-packages/spyder/plugins/layoutdialog.pyr      s    zLayoutModel.__init__c             C   sJ   g | _ || _|| _x2|D ]*}||kr.|dg}n|dg}| j  |¡ qW dS )r   TFN)r   r   r   Úappend)r   r   r   ÚnameÚrowr   r   r    r   $   s    

zLayoutModel.set_datac             C   sL   |  ¡ stjS | ¡ }|dkr<t tjtjB tjB tjB ¡S t tj¡S dS )zOverride Qt method)r   N)ÚisValidr   ZItemIsEnabledÚcolumnZ	ItemFlagsZItemIsSelectableZItemIsUserCheckableZItemIsEditable)r   Úindexr%   r   r   r    Úflags0   s    zLayoutModel.flagsc             C   sª   |  ¡ r(d| ¡   kr&t| jƒk s.n tƒ S | ¡ }| ¡ }|  |¡\}}|tjks`|tjkrr|dkr¤t|ƒS n2|tj	kr¤|dkr”|rŽtj
S tjS |dkr¤t|ƒS tƒ S )zOverride Qt methodr   é   )r$   r#   Úlenr   r   r%   r   ÚDisplayRoleÚEditRoleÚCheckStateRoleZCheckedZ	Unchecked)r   r&   Úroler#   r%   r"   Ústater   r   r    Údata;   s     (

zLayoutModel.datac             C   s   |  ¡ }|   |¡\}}|tjkrZ|  ||| g¡ | j |¡ | j ¡  | j ||¡ dS |tj	krŒ|  |t
|tƒ|g¡ | j ||¡ dS dS )zOverride Qt methodT)r#   r   r,   Úset_rowr   ÚsetCurrentIndexÚsetFocusÚdataChangedÚemitr+   r   r   )r   r&   Úvaluer-   r#   r"   r.   r   r   r    ÚsetDataQ   s    


zLayoutModel.setDatac             C   s
   t | jƒS )zOverride Qt method)r)   r   )r   r&   r   r   r    ÚrowCountb   s    zLayoutModel.rowCountc             C   s   dS )zOverride Qt methodé   r   )r   r&   r   r   r    ÚcolumnCountf   s    zLayoutModel.columnCountc             C   s    | j g krddgS | j | S dS )r   N)r   )r   Úrownumr   r   r    r#   j   s    
zLayoutModel.rowc             C   s   || j |< dS )r   N)r   )r   r:   r5   r   r   r    r0   q   s    zLayoutModel.set_row)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r'   r   r*   r/   r6   r   r7   r9   r#   r0   Ú__classcell__r   r   )r   r    r      s   
r   c                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚLayoutSaveDialogr   c                s"  t t| ƒ |¡ || _t| ƒ| _| j |¡ | j d¡ | j ¡  t	t	j
t	jB tj| ƒ| _| j t	j
¡| _| j t	j¡| _| j d¡ tddƒ| _|  d¡ |  d¡ |  | j¡ |  | j¡ tƒ | _| j | j¡ | j | j¡ |  | j¡ | jj | j¡ | jj  | j!¡ | jj" | j#¡ d S )NTFi,  éd   zSave layout as)$r   r@   r   r   r	   Z	combo_boxZaddItemsZsetEditableZclearEditTextr   ÚOkÚCancelr   Ú
HorizontalÚ
button_boxÚbuttonÚ	button_okZbutton_cancelÚ
setEnabledr   Údialog_sizeÚsetWindowTitleZsetModalÚsetMinimumSizeÚsetFixedSizer   ÚlayoutÚ	addWidgetÚ	setLayoutÚacceptedÚconnectÚacceptÚrejectedÚcloseZeditTextChangedÚ
check_text)r   r   r   )r   r   r    r   x   s0    



zLayoutSaveDialog.__init__c             C   s*   t |ƒdkr| j d¡ n| j d¡ dS )z%Disable empty layout name possibilityÚ FTN)r   rG   rH   )r   Útextr   r   r    rU   œ   s    zLayoutSaveDialog.check_text)r;   r<   r=   r>   r   rU   r?   r   r   )r   r    r@   v   s   $r@   c                   s:   e Zd ZdZ‡ fdd„Zdd„ Zddd„Zd	d
„ Z‡  ZS )ÚLayoutSettingsDialogzLayout settings dialogc       	         sÆ  t tˆ ƒ |¡ |ˆ _d ˆ _|ˆ _|ˆ _|ˆ _tt	dƒƒˆ _
tt	dƒƒˆ _tt	dƒƒˆ _ttjtjB tjˆ ƒˆ _tt	dƒƒˆ _tˆ ƒˆ _ˆ j tj¡ˆ _ˆ j tj¡ˆ _ˆ j d¡ ˆ j d¡ tddƒˆ _ˆ  ˆ j¡ ˆ  ˆ j¡ ˆ   d¡ ˆ j !t"ˆ j||ƒ¡ ˆ j #t$j%¡ ˆ j &t$j'¡ ˆ j (¡  )¡  ˆ j *¡  )¡  ˆ j +d¡ ˆ j ,d	¡ ˆ j -tj.¡ ˆ j *¡  /d¡ ˆ j 0d
d¡ ˆ j 1¡ ˆ _t2ƒ }| 3ˆ j
¡ | 3ˆ j¡ | 4¡  | 3ˆ j¡ t5ƒ }| 3ˆ j¡ | 6|¡ ˆ j 7|¡ t2ƒ }| 3ˆ j¡ | 3ˆ j¡ ˆ  7|¡ ˆ jj8 9ˆ j:¡ ˆ jj; 9ˆ j<¡ ˆ jj= 9ˆ j>¡ ˆ j
j= 9‡ fdd„¡ ˆ jj= 9‡ fdd„¡ ˆ j ?¡ j@ 9‡ fdd„¡ ˆ jjA 9‡ fdd„¡ ˆ j ?¡  Bdd¡}ˆ j C|¡ ˆ j D¡  d S )NzMove Upz	Move DownzDelete LayoutzLayout Display and OrderTi,  éÈ   zLayout SettingsFr(   c                  s
   ˆ   d¡S )NT)Úmove_layoutr   )r   r   r    Ú<lambda>è   s    z/LayoutSettingsDialog.__init__.<locals>.<lambda>c                  s
   ˆ   d¡S )NF)rZ   r   )r   r   r    r[   é   s    c                  s   ˆ   d d ¡S )N)Úselection_changedr   )r   r   r    r[   ë   s    c                  s   ˆ   d d ¡S )N)r\   r   )r   r   r    r[   í   s    r   )Er   rX   r   r   Z_selection_modelÚnamesr   r   r   r   Úbutton_move_upÚbutton_move_downÚbutton_deleter   rB   rC   r   rD   rE   r   Z	group_boxr   ÚtablerF   Z	ok_buttonZcancel_buttonZ
setDefaultZsetAutoDefaultr   rI   rK   rL   rJ   ZsetModelr   ZsetSelectionBehaviorr   Z
SelectRowsZsetSelectionModeZSingleSelectionZverticalHeaderZhideZhorizontalHeaderZsetAlternatingRowColorsZsetShowGridZsetHorizontalScrollBarPolicyZScrollBarAlwaysOffZsetStretchLastSectionZsetColumnHiddenÚselectionModelr   rN   Z
addStretchr   Z	addLayoutrO   rP   rQ   rR   rS   rT   ZclickedÚdelete_layoutÚmodelr3   ZselectionChangedr&   r1   r2   )	r   r   r]   r   r   Zbuttons_layoutZgroup_layoutrM   r&   )r   )r   r    r   ¦   st    



zLayoutSettingsDialog.__init__c             C   sü   | j | j| j  }}}t| j ¡  ¡  ¡ tƒ}||kr@| |¡}|dkrø| 	|¡ d||< ||krl| 	|¡ |||  | _ | _| _
| j ¡  ||¡ | j ¡  dd¡}| j |¡ | j ¡  |  dd¡ t|ƒdkrø| j d¡ | j d¡ | j d¡ dS )r   éÿÿÿÿNr   T)r]   r   r   ra   rb   ÚcurrentIndexr/   r   r&   Úremover   rd   r   r1   r2   r\   r)   r^   ÚsetDisabledr_   r`   )r   r]   r   r   r"   r&   r   r   r    rc   ô   s(    



z"LayoutSettingsDialog.delete_layoutTc             C   s¬   | j | j| j  }}}| j ¡  ¡  ¡ }|}|r:|d8 }n|d7 }|| ||  ||< ||< || _| j ¡  ||¡ | j ¡  	|d¡}| j 
|¡ | j ¡  |  dd¡ dS )r   r(   r   N)r]   r   r   ra   rb   rf   r#   rd   r   r&   r1   r2   r\   )r   Zupr]   r   r   r#   Zrow_newr&   r   r   r    rZ     s    

z LayoutSettingsDialog.move_layoutc             C   s6  | j  ¡ }| j  ¡ }| ¡ }| j| j| j  }}}| |¡d }	| |¡d }
|
|kr’|dkr’|| }|
||< |
|| |¡< ||kr’|
|| |¡< |	rª|
|kr¼| |
¡ n|
|kr¼| 	|
¡ || _| j
 d¡ | j d¡ |dkrî| j
 d¡ |t|ƒd kr| j d¡ t|ƒdkr2| j
 d¡ | j d¡ dS )r   r(   r   re   FTN)ra   rd   rf   r#   r   r]   r   r&   r!   rg   r^   rh   r_   r)   )r   Z	selectionZdeselectionrd   r&   r#   r   r]   r   r.   r"   Zold_namer   r   r    r\   !  s8    


z&LayoutSettingsDialog.selection_changed)T)	r;   r<   r=   r>   r   rc   rZ   r\   r?   r   r   )r   r    rX   ¤   s
   N
rX   c              C   sp   ddl m}  | ƒ }dddddg}dddddg}ddg}td|||ƒ}td|ƒ}| ¡  | ¡  t | ¡ ¡ dS )	zRun layout test widget testr   )ÚqapplicationÚtestZtesterZ20Z30Z40N)Zspyder.utils.qthelpersri   rX   r@   ZshowÚsysÚexitZexec_)ri   Zappr]   r   r   Zwidget_1Zwidget_2r   r   r    rj   I  s    
rj   Ú__main__)r>   rk   Zqtpy.QtCorer   r   r   r   Zqtpy.compatr   r   Zqtpy.QtWidgetsr   r	   r
   r   r   r   r   r   r   Zspyder.config.baser   Zspyder.py3compatr   r   r@   rX   rj   r;   r   r   r   r    Ú<module>   s   ,^. &