3
NZ^                 @   s   d dl T ddlT d dlmZmZ d dlT d dlT ddlmZ dZ	yd dl
m
Z
 W n" ek
rr   ejd dZ	Y nX G d	d
 d
eeZG dd deZdS )    )*   )
to_unicodefrom_unicode_to_str)Ui_MainWindowT)faxz1Fax address book disabled - Python 2.3+ required.Fc               @   s
  e Zd ZeeegeeegZe 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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d)d* Zd;d,d-Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!d6d7 Z"d<d9d:Z#d8S )=	FABWindowc             C   sp   t j| | | j|  td| _d | _d| _d| _t | _	| j	j
  | j	j  | j  | j  tjd| j d S )NAllFr   )QMainWindow__init__setupUir   groupnameupdating_groupupdating_nameZUserSettingsuser_settingsloaddebuginitDBinitUiZQTimerZ
singleShotupdateUi)selfparent r   !/usr/share/hplip/ui5/fabwindow.pyr   3   s    



zFABWindow.__init__c             C   sz   t j | _| jj }x6|D ].}td|| d kr|| d jtd qW |sv| jjdtj  ddddtdgd d S )Nr	   groups__ )	r   ZFaxAddressBookdbZget_all_recordsr   appendsetutilsgen_random_uuid)r   datadr   r   r   r   E   s    


zFABWindow.initDBc             C   sT  | j ttdd | jjttdd | jjttdd | jjttdd | jjttdd | jjttdd | j	jttd	d | j
jttd
d | jjttdd | 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	jj| j | jjj| j | jjj| j | j
jj| j | jjtj | jjtj | jj t!t!f j| j" | jj#d | jj$| jj% d  | jj& j'  | jj(d | jj)t*j+ | jj& j'  | jj(d | jj,d | jj-d | jj.d | jj/j| j0 | jj/j| j1 | j2j3j| j4 | j5j3j| j6 | j7j8j| j9 | jj:j| j; | j5j<t=| j5 | j2j<t>| j?| j2 | jj@tjA | jjB| j | jjB| j | jjB| j | jjB| j | jj@tjA | jjB| j | jjB| j
 | jjB| j | jjB| j	 | jjB| j | jjC| j? d S )NZhp_logoZ128x128	new_groupZ24x24Znew_group_from_selectionrename_groupZremove_groupZnew_userZremove_useradd_to_groupremove_from_groupF   T)DZsetWindowIconZQIconZload_pixmapZNewGroupActionZsetIconNewGroupFromSelectionActionRenameGroupActionRemoveGroupActionZNewNameActionRemoveNameActionAddToGroupActionRemoveFromGroupActionZ
QuitActionZ	triggeredconnectcloseNewGroupAction_triggered%NewGroupFromSelectionAction_triggeredRenameGroupAction_triggeredRemoveGroupAction_triggeredNewNameAction_triggeredRemoveNameAction_triggeredZImportActionImportAction_triggeredRemoveFromGroupAction_triggeredAddToGroupAction_triggeredGroupTableWidgetZsetHorizontalScrollBarPolicyQtZScrollBarAlwaysOffNameTableWidgetZSplitterZsplitterMovedintSplitter_splitterMovedZsetChildrenCollapsibleZsetHandleWidthZhandleWidthZverticalHeaderZhideZsetShowGridZsetSelectionModeZQAbstractItemViewZSingleSelectionZsetDragEnabledZsetAcceptDropsZsetDropIndicatorShownZitemSelectionChanged%GroupTableWidget_itemSelectionChanged$NameTableWidget_itemSelectionChangedNameLineEditeditingFinishedNameLineEdit_editingFinishedFaxNumberLineEdit!FaxNumberLineEdit_editingFinishedNotesTextEditZtextChangedNotesTextEdit_textChangedZnamesAddedToGroup"GroupTableWidget_namesAddedToGroupZsetValidatorZPhoneNumValidatorZAddressBookNameValidatorr   ZsetContextMenuPolicyZActionsContextMenuZ	addActionZsetDatabase)r   r   r   r   r   R   sh    zFABWindow.initUic             C   s<   t s t| | jd | j  d S | j  | j  | j  d S )Nz?<b>Fax support disabled.</b><p>Fax support requires Python 2.3.)	fax_avail	FailureUI_FABWindow__trr1   updateGroupListupdateNameListupdateDetailsFrame)r   r   r   r   r      s    zFABWindow.updateUic             C   s   | j jj  |j  d S )N)rE   rC   emitaccept)r   er   r   r   
closeEvent   s    zFABWindow.closeEventc             C   s,   | j jd| j j  | jjd| jj  d S )Nr   )r;   setColumnWidthwidthr=   )r   posindexr   r   r   r?      s    z FABWindow.Splitter_splitterMovedc             C   sp  d| _ d\}}z(t }|j| jd | jj  | jjd | jjd| | jjd| jj	  | j
j }|j  | jjt| t| jd}|jtjtjB  | jjdd| d}x~|D ]v}|tdkrqt|trtt|}ntt|}|| jkr|}|jtjtjB tjB  | jj|d| |d7 }qW W d d| _ |d k	rV|jd n|d k	rj|jd X d S )NTZGroupr   r   r	   F)NN)r   QTableWidgetItemsetTextrL   r;   clearsetColumnCountsetHorizontalHeaderItemrT   rU   r   get_all_groupssortsetRowCountlensetFlagsr<   ItemIsSelectableItemIsEnabledsetItemr   
isinstancer>   strr   r   ZItemIsDropEnabledsetSelected)r   allk
headerItemr   jgir   r   r   rM      s@    





zFABWindow.updateGroupListc             C   s~   | j sz| jj }|rTt|d j | _| jj| jtdk | jj| jtdk n| jjd | jjd d | _| j	  d S )Nr   r	   F)
r   r;   selectedItemsr   textr   r,   
setEnabledr+   rN   )r   selected_itemsr   r   r   r@      s    
z/FABWindow.GroupTableWidget_itemSelectionChangedc             C   s   | j s| jj }t|}|dkrXd | _| jjd | jjd | jjd | j	jd n|dkrt
|d j | _| jjd | jjd | jj| jt
dk | j	jd n@| jjd | jjd | jj| jt
dk | j	jd d | _| j  d S )Nr   Fr   Tr	   )r   r=   rn   r`   r   r-   rp   r*   r/   r.   r   ro   r   rO   )r   rq   Znum_selected_itemsr   r   r   rA      s*    
z.FABWindow.NameTableWidget_itemSelectionChangedc       	      C   s  d| _ d\}}zt }|j| jd | jj  | jjd | jjd| | jjd| jj	  | j
j| j}dd |D }|j  | jjt| x|t|D ]p\}}t|trtt|}ntt|}|jtjtjB tjB  | jj|d| || jkr|}|dkr|}qW W d d| _ |d k	r2|jd nT|d k	rH|jd n>d | _| jjd | jjd | j jd | j!jd | j"  X d S )	NTNamer   r   c             S   s   g | ]}|j d s|qS )r   )
startswith).0nr   r   r   
<listcomp>  s    z,FABWindow.updateNameList.<locals>.<listcomp>F)NN)#r   rX   rY   rL   r=   rZ   r[   r\   rT   rU   r   Zgroup_membersr   r^   r_   r`   	enumeratere   r>   rf   r   ra   r<   rb   rc   ZItemIsDragEnabledrd   r   rg   r-   rp   r*   r/   r.   rO   )	r   mri   rj   namesZfiltered_namesrk   ru   rm   r   r   r   rN     sD    



zFABWindow.updateNameListc             C   sD   | j j }x4t|D ](}| j j|d}|j|t|j k qW d S )Nr   )r=   ZrowCountrangeitemrg   r   ro   )r   r   Zrowsrrm   r   r   r   selectByName@  s    
zFABWindow.selectByNamec             C   s   | j d krB| jjd | jjt  | jjt  | jjt  nH| jjd | jj	| j }| jj| j  | jj|d  | jj|d  d S )NFTr   notes)
r   Z	NameFramerp   rB   rY   rf   rE   rG   r   get)r   r#   r   r   r   rO   G  s    
zFABWindow.updateDetailsFramec             C   s   | j d k	rt| jj }|| j krtj| | jdd| j |f tjtjB tjkr| j	j
| j | tjd| j |f  | jtttf jt| j | | j  n| jj| j  d S )NzRename?zRename '%s' to '%s'?zRename %s to %s)r   r   rB   ro   ZQMessageBoxZquestionrL   ZYesZNor   renamelogr   databaseChangedr>   rf   rP   ZFAB_NAME_RENAMErN   rY   )r   new_namer   r   r   rD   V  s    


z&FABWindow.NameLineEdit_editingFinishedc             C   s:   | j d k	r6| jj| j dt| jj  | jjt| j  d S )Nr   )	r   r   set_key_valuer   rE   ro   r   rP   FAB_NAME_DETAILS_CHANGED)r   r   r   r   rF   e  s    
z+FABWindow.FaxNumberLineEdit_editingFinishedc             C   s.   | j d k	r*| jj| j dt| jj j  d S )Nr~   )r   r   r   r   rG   ZdocumentZtoPlainText)r   r   r   r   rH   k  s    
z#FABWindow.NotesTextEdit_textChangedc             C   s   | j d k	r| jjt| j  d S )N)r   r   rP   r   )r   r   r   r   NotesTextEdit_editingFinishedp  s    
z'FABWindow.NotesTextEdit_editingFinishedc             C   s   d}t j| | jd| jd\}}t|}|tdkrJt| | jd d}|r| jjdtj  ddddtd|gd || _	t
jd| j	  | jjt| j	 | j  d S )	NFzEnter New Group NamezName for New Group:r	   zO<b>Sorry, the group name cannot be 'All'.</b><p>Please choose a different name.r   r   zNew empty group %s)QInputDialoggetTextrL   r   rK   r   r    r!   r"   r   r   r   r   rP   FAB_GROUP_ADDrM   )r   okrl   r   r   r   r2   u  s    (z"FABWindow.NewGroupAction_triggeredc             C   s   dd | j j D }|rd}tj| | jd| jd\}}t|}| jj }||krht| | jd d}|r| jj	|| || _
tjd| j
dj|f  | jjt| j
 | j  d S )	Nc             S   s   g | ]}t |j qS r   )r   ro   )rt   ru   r   r   r   rv     s    zCFABWindow.NewGroupFromSelectionAction_triggered.<locals>.<listcomp>FzEnter New Group NamezName for New Group:zr<b>Sorry, the group name cannot be the same as an existing group (or 'All').</b><p>Please choose a different name.zNew group %s with names %s,)r=   rn   r   r   rL   r   r   r]   rK   Zupdate_groupsr   r   r   joinr   rP   r   rM   )r   selected_namesr   rl   r   r   r   r   r3     s    
z/FABWindow.NewGroupFromSelectionAction_triggeredc             C   s   | j j }|rt|d j }d}tj| | jdd| \}}t|}| jj }||krlt	| | jd d}|r| jj
|| tjd||f  | jtttf jt|| || _| j  d S )Nr   FzRename GroupzNew Name for Group '%s':zr<b>Sorry, the group name cannot be the same as an existing group (or 'All').</b><p>Please choose a different name.zRename group %s to %s)r;   rn   r   ro   r   r   rL   r   r]   rK   r&   r   r   r   r>   rf   rP   ZFAB_GROUP_RENAMEr   rM   )r   rq   Z	old_groupr   r%   r   r   r   r   r4     s     

z%FABWindow.RenameGroupAction_triggeredc             C   s@   | j j| j tjd| j  | jjt| j d | _| j  d S )NzRemove group %s)	r   Zdelete_groupr   r   r   r   rP   ZFAB_GROUP_REMOVErM   )r   r   r   r   r5     s
    z%FABWindow.RemoveGroupAction_triggeredc             C   s<   d}t j| | jd| jd\}}|r8t|}| j| d S )NFzEnter New Namez	New Name:)r   r   rL   r   addName)r   r   tr   r   r   r6     s
    z!FABWindow.NewNameAction_triggeredr   c             C   sr   | j tdkrtdg}ntd| j g}| jj|ddd||d || _tjd| j  | jjt	| j | j
  d S )Nr	   r   zNew name %s)r   r   r   r    r   r   r   r   rP   ZFAB_NAME_ADDrN   )r   r   r   rl   r   r   r   r     s    zFABWindow.addNamec             C   s`   dd | j j D }|r\x4|D ],}| jj| tjd|  | jjt| qW d | _	| j
  d S )Nc             S   s   g | ]}t |j qS r   )r   ro   )rt   ru   r   r   r   rv     s    z8FABWindow.RemoveNameAction_triggered.<locals>.<listcomp>zRemoving name %s)r=   rn   r   deleter   r   r   rP   ZFAB_NAME_REMOVEr   rN   )r   r   ru   r   r   r   r7     s    
z$FABWindow.RemoveNameAction_triggeredc             C   sd   dd | j j D }|r`tjddj|| jf  | jj| j| | jj	t
| j d | _| j  d S )Nc             S   s   g | ]}t |j qS r   )rf   ro   )rt   ru   r   r   r   rv     s    z=FABWindow.RemoveFromGroupAction_triggered.<locals>.<listcomp>z%s leaving group %sr   )r=   rn   r   r   r   r   r   r(   r   rP   FAB_GROUP_MEMBERSHIP_CHANGEDr   rM   )r   r   r   r   r   r9     s    z)FABWindow.RemoveFromGroupAction_triggeredc             C   s^   t | jj|dj | _| jj| j| tjddj	|| jf  | j
jt| j | j  d S )Nr   zAdding %s to group %sr   )r   r;   r{   ro   r   r   r'   r   r   r   r   rP   r   rM   )r   rowitemsr   r   r   rI     s
    z,FABWindow.GroupTableWidget_namesAddedToGroupc             C   s   dd | j j D }|rd}| jj }|rdd |D }|j  t| |}|j tjkr|j	}|r| jj
|| || _	tjddj|| j	f  | jjt| j	 | j  nt| | jd d S )Nc             S   s   g | ]}t |j qS r   )r   ro   )rt   ru   r   r   r   rv     s    z8FABWindow.AddToGroupAction_triggered.<locals>.<listcomp>Fc             S   s   g | ]}|t d kr|qS )r	   )r   )rt   rl   r   r   r   rv     s    zAdding %s to group %sr   zt<b>There are no groups to join.</b><p>Use <i>New Group from Selection</i> to create a new group using these name(s).)r=   rn   r   r]   r^   
JoinDialogZexec_QDialogZAcceptedr   r'   r   r   r   r   rP   r   rM   rK   rL   )r   r   r   Z
all_groupsZdlgr   r   r   r   r:     s"    


z$FABWindow.AddToGroupAction_triggeredc             C   s   t tj| | jd| jjd}|rttjj	|}t
jd|  || j_| jj  |r|jdrr| jj|\}}n| jj|\}}|st| | n| j  d S )Nz'Import fax addresses from LDIF or vCardz"vCard (*.vcf);;LDIF (*.ldif *.ldi)z
result: %sz.vcf)rf   ZQFileDialogZgetOpenFileNamerL   r   Zworking_dirr   ospathdirnamer   r   Zsaveendswithr   Zimport_vcardZimport_ldifrK   r   )r   resultZworking_directoryr   Z	error_strr   r   r   r8     s     

z FABWindow.ImportAction_triggeredNc             C   s   t jd|jd|S )Nr   zutf-8)ZqApp	translateencode)r   scr   r   r   Z__tr  s    zFABWindow.__tr)r   )N)$__name__
__module____qualname__Z
pyqtSignalr>   rf   r   rC   r   r   r   r   rS   r?   rM   r@   rA   rN   r}   rO   rD   rF   rH   r   r2   r3   r4   r5   r6   r   r7   r9   rI   r:   r8   rL   r   r   r   r   r   .   s<   E
20

r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c             C   s    t j| | d| _| j| d S )Nr   )r   r   r   r   )r   r   r   r   r   r   r   &  s    zJoinDialog.__init__c             C   s  | j d | jttddddj j| j  t| | _| jj d t	 | _
| j
j d t| | _| jj d | j
j| j t| | _ttjtj}|jd |jd |j| jj j  | jj| | jj d | j
j| j | jj| j
ddd	d
 tddtjtj}| jj|d	dd	d	 tddtjtj}| jj|ddd	d	 t| | _| jj d | jj| jdd	d	d	 t| | _| jj d | jj| jddd	d	 | jj t! j"| j# x4t$|D ](\}}|dkr|| _%| jj&|| qW | jj'j"| j( | jj'j"| j) | j*  d S )NDialogr   i  k   
gridlayout
hboxlayoutlabelZcomboBoxr         (      r)   ZpushButton_2Z
pushButton)+ZsetObjectNameZresizeZQSizeZQRectsizeZ
expandedToZminimumSizeHintZQGridLayoutr   ZQHBoxLayoutr   ZQLabelr   Z	addWidgetZ	QComboBoxGroupJoinComboBoxZQSizePolicyZ	ExpandingZFixedZsetHorizontalStretchZsetVerticalStretchZsetHeightForWidth
sizePolicyZhasHeightForWidthZsetSizePolicyZ	addLayoutZQSpacerItemZMinimumZaddItemZQPushButton
JoinButtonCancelButtonZcurrentIndexChangedr>   r0   %GroupJoinComboBox_currentIndexChangedrw   r   Z
insertItemZclickedrQ   ZrejectretranslateUi)r   r   r   Z
spacerItemZspacerItem1rm   rl   r   r   r   r   ,  sH    
&







zJoinDialog.setupUic             C   s   t | jj | _d S )N)r   r   ZcurrentTextr   )r   rm   r   r   r   r   `  s    z0JoinDialog.GroupJoinComboBox_currentIndexChangedc             C   sj   | j tjddd tj | jjtjddd tj | jjtjddd tj | jjtjddd tj d S )Nr   z
Join GroupzGroup to Join:ZJoinZCancel)ZsetWindowTitleZQApplicationr   ZUnicodeUTF8r   rY   r   r   )r   r   r   r   r   d  s    zJoinDialog.retranslateUiN)r   r   r   r   r   r   r   r   r   r   r   r   %  s   4r   N)Zbase.gZui_utilsZbase.sixextr   r   ZPyQt5.QtCoreZPyQt5.QtGuiZfabwindow_baser   rJ   r   ImportErrorr   errorr
   r   r   r   r   r   r   r   <module>   s    

   z