U
    9¡_ÙX ã                
   @   sä  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZze dd¡ d dl	m
Z
 W n   dZ
Y nX e dd¡ d dl	mZ z@e d	d
¡ d dl	mZ e dd
¡ d dl	mZ e ej¡ W n@ ek
r Z z edeƒ edƒ e d¡ W 5 dZ[X Y nX dd„ Zeejƒdkr@ejd dkr@eƒ  e d ¡ d dlZe d¡ e ej¡ d dlZze ejd¡ W n0 ejk
r¨   dejd< e ejd¡ Y nX d dlZej e j!e j"d d dl#Z#d dl	m$Z$ d dl	m%Z% d dl&m'Z' d dl(T d dl)Z*d dl+Z*d dl,Z*d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl2T d dl3Z3d dl4m5Z5 d dl6T d dl7T d dl8Z8d dl9Z9d dl9m:Z:m;Z; d dl<Z<d dl=Z=e= ¡  e j>Z?ej@ Ae?d¡ZBej@ Ce?¡ dZDdZEe% Fd ¡ d!d"„ ZGG d#d$„ d$ƒZHG d%d&„ d&eHƒZIG d'd(„ d(eHƒZJG d)d*„ d*e'ƒZKd+d,„ ZLeMd-kràd dlNZNz&eN Oejdd… dd.d/d0g¡\ZPZQW n( eNjRk
r„   eƒ  e d¡ Y nX dZSePD ]H\ZTZUeTd1kr´eVd2ƒ e# WeX¡ neTd3krÂeUZSeTd4krŽeYeUƒZEqŽeLeSƒ dS )5é    NÚPolkitz1.0)r   FÚ	GdkPixbufz2.0)r   ÚGdkz3.0)r   ÚGtk)r   zsystem-config-printer:z?This is a graphical application and requires DISPLAY to be set.é   c                   C   s   t dƒ d S )Na*  
This is system-config-printer, a CUPS server configuration program.

Options:

  --debug                 Enable debugging output.
  --show-jobs <printer>   Show the print queue for <printer>
  --embedded              Enable to start in Embedded mode.
   --help                  Show this message.
)Úprint© r   r   ú9/usr/share/system-config-printer/system-config-printer.pyÚ	show_help2   s    r
   z--helpz1.9.46Ú ÚCÚLC_ALL)ÚdomainÚ	localedir)ÚGObject)ÚGLib)ÚGtkGUI)Ú*)ÚServerSettings)ÚbusyÚreadyúicons/zsystem-config-printerc                  C   s   t  ¡ } | d dkrdS | S )Nr   ú/Ú	localhost)ÚcupsÚ	getServer)Úhostr   r   r	   ÚCUPS_server_hostnamen   s    r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚServiceStartc                 C   s(   t  ¡ }| | j| j¡}t  ||¡}|S ©N)ÚdbusZ	SystemBusZ
get_objectÚNAMEÚPATHZ	Interface)ÚselfZifaceZbusÚobjÚproxyr   r   r	   Ú
_get_ifacev   s    zServiceStart._get_ifacec                 C   s,   z|   tj¡}| ¡ }W n   Y dS X dS )NFT)r&   r    ZINTROSPECTABLE_IFACEZ
Introspect)r#   r%   Z
introspectr   r   r	   Ú	can_start|   s    zServiceStart.can_startc                 C   s   |   | j¡}|  |||¡ d S r   )r&   ÚIFACEÚ_start)r#   Úreply_handlerÚerror_handlerr%   r   r   r	   Ústart„   s    zServiceStart.startN)Ú__name__Ú
__module__Ú__qualname__r&   r'   r,   r   r   r   r	   r   t   s   r   c                   @   s    e Zd ZdZdZdZdd„ ZdS )ÚSysVServiceStartz!org.fedoraproject.Config.ServiceszQ/org/fedoraproject/Config/Services/ServiceHerders/SysVServiceHerder/Services/cupsz-org.fedoraproject.Config.Services.SysVServicec                 C   s   |j ||d d S )N©r*   r+   )r,   ©r#   r%   r*   r+   r   r   r	   r)   Ž   s    ÿzSysVServiceStart._startN)r-   r.   r/   r!   r"   r(   r)   r   r   r   r	   r0   ‰   s   r0   c                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )ÚSystemDServiceStartzorg.freedesktop.systemd1z/org/freedesktop/systemd1z org.freedesktop.systemd1.Managerzorg.cups.cupsd.servicec                 C   s   |j | jd||d d S )NZfailr1   )Z	StartUnitÚCUPS_SERVICEr2   r   r   r	   r)   ™   s    
þzSystemDServiceStart._startN)r-   r.   r/   r!   r"   r(   r4   r)   r   r   r   r	   r3   “   s
   r3   c                	       s¸  e Zd ZejedƒejedƒejedƒejedƒiZ	dZ
dZdZ‡ f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d-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d£d6d7„Z#d8d9„ Z$d:d;„ Z%d<d=„ Z&d>d?„ Z'd@dA„ Z(d¤dBdC„Z)dDdE„ Z*dFdG„ Z+dHdI„ Z,dJdK„ Z-dLdM„ Z.dNdO„ Z/dPdQ„ Z0dRdS„ Z1dTdU„ Z2dVdW„ Z3dXdY„ Z4dZd[„ Z5d\d]„ Z6d^d_„ Z7d`da„ Z8dbdc„ Z9ddde„ Z:dfdg„ Z;dhdi„ Z<djdk„ Z=dldm„ Z>dndo„ Z?dpdq„ Z@drds„ ZAd¥dtdu„ZBdvdw„ ZCdxdy„ ZDdzd{„ ZEd¦d|d}„ZFd~d„ ZGd€d„ ZHd‚dƒ„ ZId„d…„ ZJd†d‡„ ZKdˆd‰„ ZLdŠd‹„ ZMdŒd„ ZNdŽd„ ZOd§dd‘„ZPd’d“„ ZQd”d•„ ZRd–d—„ ZSd˜d™„ ZTdšd›„ ZUdœd„ ZVdždŸ„ ZWd d¡„ ZX‡  ZYS )¨ÚGUIZIdleZ
ProcessingZBusyZStoppedr   r   é   c                    s 	  t t| ƒ ¡  z t tj¡| _t tj¡| _W nF   t	ƒ  dt
jd< t tjd¡ t tj¡| _t tj¡| _Y nX i | _t ¡ | _t ¡ | _t ¡ | _d | _d | _t| jfƒ| _d | _tƒ | _d| _| jddddd	d
ddddddddgdgddddgdddgdddgddgd œtjd! t rz| j! "¡  | j! #¡ d" }t$j% &t ¡}t$j' (| j!|¡ | )|¡ | j! *|¡ | +¡  || _!| j, -d#| j.¡ t$j/ 0d$¡ d%}d | _1t2rÖzt2j3 4|d d ¡| _1W n t5j6k
rÔ   Y nX t$ 7¡ | _8| j1d k	rü| j1 -d&| j9¡ | j8 -d'| j9¡ | j: ;| j8ddd(¡ t$j<d)d*}| =d+t$j>t?d,ƒd t?d-ƒ| j@fd.t$jAt?d/ƒd t?d0ƒ| jBfd1t$jCt?d2ƒd d | jDfd3t$jEt?d4ƒd d | jFfd5t$jGd d d | jHfg¡ | =d6d t?d7ƒd d | jIfd8t$jJt?d9ƒd:d | jKfd;t$jLd d d | jMfd<t$jNt?d=ƒd d | jOfd>t$jPd d d | jQfd?t$jEt?d@ƒd d | jRfdAt$jSt?dBƒd d | jTfg¡ | UdCd t?dDƒd d | jVfdEd t?dFƒd d | jWfg¡ | XdGd t?dHƒfdId t?dJƒfdKd t?dLƒfdMd t?dNƒfgdO| jY¡ | Z¡ D ]}| [d¡ q¼dPD ]}| \|¡}| [dQ¡ qÒt$ ]¡ | _^| j^ _|dR¡ | j^ `dS¡ | j^ a¡  | j! b| j^ c¡ ¡ t$ d¡ | _e| je ft?dTƒ¡ | je gdU¡ | je hdQ¡ t$ i¡ }| j^ \dV¡}| j¡ }| j^ \dW¡}| j¡ }	| k¡  |	 k¡  | l|d"dOd"dO¡ | l|	d"dOdOdX¡ | je m|¡ | je -dY| jD¡ | jn )| je¡ | jn )t$ o¡ ¡ t$ p¡ | _q| jq ft?dZƒ¡ | jq gd[¡ | jq -dY| jr¡ | jn )| jq¡ | jn +¡  t$ i¡ }
d\D ]f}|d]krˆt$js tt?d^ƒ¡}| [dQ¡ || _un"|s˜t$ v¡ }n| \|¡}| j¡ }| k¡  |
 w|¡ qX| jx y|
¡ t$ i¡ }d_D ]*}| \|¡}| j¡ }| k¡  | w|¡ qØ| ju y|¡ t$ i¡ | _zd`D ]<}|s2t$ v¡ }n| \|¡}| j¡ }| k¡  | jz w|¡ q| j{ y| jz¡ g | _|t} ~¡  | _}| -da| j€¡ | -db| j¡ | -dc| j‚¡ | jƒ „tj¡ | jƒ …tj†¡ | jƒ gd$¡ zt‡ ˆ| j!¡| _W n t‰k
rþ   d | _Y nX | jŠ ‹dd¡| _Œ|  ¡  d| _ŽdG| _t$ i¡ }deD ]"}| \|¡}| j¡ }| w|¡ q.| +¡  | j ‘|¡ t
j’ “df¡r~t”ƒ | _•nt–ƒ | _•t$ —t˜j™tšj›tœtœ¡| _| jž Ÿ| j¡ | jž  dg¡ | jž ¡dh¡ | jž ¢dO¡ | jž £dX¡ | jž ¤di¡ | jž ¥dQ¡ | jž -dj| j¦¡ | jž -dk| j§¡ | jž -dl| j¨¡ | jž -dm| j©¡ | jž -dn| jª¡ |  ¨| jž¡ | jž «t¬j­j®t$j¯ &dod"d"¡gt¬j°j±¡ | jž -dp| j²¡ | j³ -dY| j´¡ | jµ -dY| j@¡ | j¶ -dY| jD¡ t· ¸¡ | _¹| j¹ -dq| jº¡ |  »¡  z|  ¼¡  W nH tj½k
	r* } z&|j¾\}d | _|  ¼¡  t¿|| j!ƒ W 5 d }~X Y nX |  À¡  tÁ| jƒdrk	rT| j! Âdsdt¡ n>tÁ| jƒdXk	rt| j! Âdudt¡ ntÁ| jƒdOk	r’| j! Âdudv¡ | j! k¡  d S )wNr   r   r   FÚPrintersWindowÚhboxMenuBarZview_area_vboxZview_area_scrolledwindowÚdests_notebookÚdests_iconviewÚbtnAddFirstPrinterÚbtnStartServiceÚbtnConnectNoServiceÚstatusbarMainÚtoolbarÚserver_menubar_itemÚprinter_menubar_itemÚview_discovered_printersÚAboutDialogÚConnectDialogÚchkEncryptedÚcmbServernameÚ
btnConnectÚConnectingDialogÚlblConnectingÚpbarConnectingÚNewPrinterNameÚentDuplicateNameÚbtnDuplicateOkÚInstallDialogÚ
lblInstall)r7   rC   rD   rH   rK   rN   )r   r   zdelete-eventÚprinterz,org.opensuse.cupspkhelper.mechanism.all-editznotify::allowedznotify::permissioné   ZPrinterManagerActionGroup)Únameúconnect-to-serverz_Connect...zChoose a different CUPS serverúserver-settingsz_Settings...zAdjust server settingsúnew-printerÚ_Printerú	new-classZ_ClassÚquitúrename-printerZ_Renameúduplicate-printerZ
_Duplicatez<Ctrl>dúdelete-printerúset-default-printerzSet As De_faultúedit-printerúcreate-classz_Create classúview-print-queuezView Print _Queueúenable-printerZE_nabledúshare-printerZ_Sharedúfilter-nameÚNameúfilter-descriptionZDescriptionúfilter-locationZLocationúfilter-manufacturerzManufacturer / Modelr   )rS   rX   r_   rb   rd   re   rf   TéÿÿÿÿaÛ  
<ui>
 <accelerator action="connect-to-server"/>
 <accelerator action="server-settings"/>
 <accelerator action="new-printer"/>
 <accelerator action="new-class"/>
 <accelerator action="quit"/>

 <accelerator action="rename-printer"/>
 <accelerator action="duplicate-printer"/>
 <accelerator action="delete-printer"/>
 <accelerator action="set-default-printer"/>
 <accelerator action="edit-printer"/>
 <accelerator action="create-class"/>
 <accelerator action="view-print-queue"/>
 <accelerator action="enable-printer"/>
 <accelerator action="share-printer"/>
 <accelerator action="filter-name"/>
 <accelerator action="filter-description"/>
 <accelerator action="filter-location"/>
 <accelerator action="filter-manufacturer"/>
</ui>
ZAddzlist-addú/new-printerú
/new-classr6   ÚclickedZRefreshzview-refresh)rS   rT   NÚnewNrX   rk   Z_New)rU   rW   )r]   rZ   rY   r[   Nr`   ra   r^   r\   Nr_   úprinter-addedzprinter-modifiedzdialog-canceledÚ
Connection)rb   rd   re   rf   z/usr/lib/systemdé   é   é   zkey-press-eventzitem-activatedzselection-changedzbutton-press-eventz
popup-menuÚqueuezdrag-data-getzdialog-closedé   iÐ  iY  iô  é´   )ÃÚsuperr   Ú__init__ÚlocaleZ	getlocaleÚLC_MESSAGESZlanguageÚLC_CTYPEÚencodingÚnonfatalExceptionÚosÚenvironÚ	setlocaler   Úprintersr   r   Úconnect_serverÚgetEncryptionÚconnect_encryptÚgetUserÚconnect_userÚmonitorÚpopulateList_timerÚsetÚserversÚserver_is_publishingÚchangedÚupdating_widgetsZ
getWidgetsÚconfigÚPACKAGEÚPlugWindowIdr7   ÚhideZget_childrenr   ZPlugrk   Ú	ContainerÚremoveÚaddÚset_transient_forÚshow_allrH   ÚconnectÚon_connectingdialog_deleteZWindowZset_default_icon_nameÚedit_permissionr   Z
PermissionZnew_syncr   ÚGErrorZ
LockButtonÚunlock_buttonÚpolkit_permission_changedr8   Z
pack_startZActionGroupZadd_actionsZSTOCK_CONNECTÚ_Úon_connect_activateZSTOCK_PREFERENCESÚon_server_settings_activateZSTOCK_PRINTÚon_new_printer_activateZSTOCK_DND_MULTIPLEÚon_new_class_activateZ
STOCK_QUITÚon_quit_activateÚon_rename_activateZ
STOCK_COPYÚon_duplicate_activateZSTOCK_DELETEÚon_delete_activateZ
STOCK_HOMEÚon_set_as_default_activateZSTOCK_PROPERTIESÚon_edit_activateÚon_create_class_activateZ
STOCK_FINDÚon_view_print_queue_activateZadd_toggle_actionsÚon_enabled_activateÚon_shared_activateZadd_radio_actionsÚon_filter_criterion_changedZlist_actionsÚset_sensitiveÚ
get_actionZ	UIManagerÚ
ui_managerZinsert_action_groupZadd_ui_from_stringZensure_updateZadd_accel_groupZget_accel_groupZMenuToolButtonÚbtnNewZ	set_labelZset_icon_nameZset_is_importantZMenuZcreate_menu_itemÚshowZattachZset_menur?   ÚSeparatorToolItemZ
ToolButtonÚrefreshbuttonÚon_btnRefresh_clickedZMenuItemZnew_with_mnemonicÚmenuItemNewZSeparatorMenuItemÚappendr@   Zset_submenuÚprinter_context_menurA   Ú
jobviewersÚ
newprinterZNewPrinterGUIÚnewPrinterGUIÚon_new_printer_addedÚon_printer_modifiedÚon_new_printer_not_addedrC   Zset_program_nameZset_versionZVERSIONÚauthconnrm   ÚRuntimeErrorr>   Zget_context_idÚstatus_context_idÚsetup_toolbar_for_search_entryÚcurrent_filter_textÚcurrent_filter_modeÚsearch_entryZset_drop_down_menuÚpathÚexistsr3   Úservicestartr0   Ú	ListStorer   ZTYPE_PYOBJECTr   ÚPixbufÚstrÚmainlistr:   Ú	set_modelZset_column_spacingZset_row_spacingZset_pixbuf_columnZset_text_columnZset_tooltip_columnZset_has_tooltipÚdests_iconview_key_press_eventÚdests_iconview_item_activatedÚ dests_iconview_selection_changedÚ!dests_iconview_button_press_eventÚdests_iconview_popup_menuZenable_model_drag_sourcer   ZModifierTypeZBUTTON1_MASKZTargetEntryZ
DragActionZCOPYÚdests_iconview_drag_data_getr<   Úon_start_service_clickedr=   r;   ÚprinterpropertiesZPrinterPropertiesDialogÚpropertiesDlgÚon_properties_dialog_closedZconnect_signalsÚpopulateListÚ	HTTPErrorÚargsÚshow_HTTP_ErrorÚsetConnectedÚlenZset_default_size)r#   ZvboxÚ
PlugWindowZedit_actionZprinter_manager_action_groupÚactionÚactZnewmenuZnewprinteritemZnewclassitemZserver_context_menuÚaction_nameÚitemZnew_menuZnpZmenuÚeÚs©Ú	__class__r   r	   ru   «   sŠ   



óýþþÿá"Þ$

ÿ ÿ

ÿÿ
ÿ þ þ  ÿ  ÿÿõ
  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿó
  ÿ
  ÿýü û

ÿ











ÿ

ýÿÿÿÿÿüÿÿ
ÿzGUI.__init__c                 C   s†   | j  ¡ }| ¡ }|d k	rv| |d¡}||krj| |¡}| j  |ddd¡ | j j|d dd | j  |¡ qv| |¡}q|d kr‚t	‚d S )Nr6   Tç      à?F©rÂ   ÚcellZstart_editing)
r:   Ú	get_modelÚget_iter_firstÚ	get_valueÚget_pathÚscroll_to_pathÚ
set_cursorZitem_activatedÚ	iter_nextr¼   )r#   rq   ÚmodelÚiterrR   rÂ   r   r   r	   Údisplay_properties_dialog_for  s    


ÿz!GUI.display_properties_dialog_forc                 C   sx   t  ¡ }| d¡ | j |d¡ | j |dd¡ tƒ | _| j d| j	¡ t  
¡ }| | j¡ | j |d¡ | j ¡  d S )NFrg   ÚexpandTÚsearch)r   r¯   Zset_drawr?   ÚinsertZchild_set_propertyÚToolbarSearchEntryrÁ   r”   Úon_search_entry_searchZToolItemr‘   r“   )r#   Z	separatorZ	tool_itemr   r   r	   r¾   ,  s    
z"GUI.setup_toolbar_for_search_entryc                 C   s   || _ |  ¡  d S r   )r¿   rÔ   )r#   ÚUNUSEDÚtextr   r   r	   rô   ;  s    zGUI.on_search_entry_searchc                 C   s   |  ¡ | _|  ¡  d S r   )Zget_namerÀ   rÔ   )r#   rõ   Zselected_actionr   r   r	   r©   ?  s    
zGUI.on_filter_criterion_changedc           	   
   C   sæ   |  ¡ }| |¡}| |d¡}| |d¡}|  ¡  z| jj|| j| j| jd W n t	j
k
rº } zJ|j\}}|  ¡  t||| jƒ |t	jkr¤d | _	|  ¡  |  ¡  W Y ¢d S d }~X Y n( tk
rà   |  ¡  | j ¡  Y d S X d S )Nr6   r   ©r   Ú
encryptionÚparent)ræ   Úget_iterrè   Údesensitise_main_window_widgetsrÒ   r®   r   r   r7   r   ÚIPPErrorrÖ   Úsensitise_main_window_widgetsÚshow_IPP_ErrorÚIPP_SERVICE_UNAVAILABLErØ   rÔ   r¼   r„   Úupdate)	r#   ÚiconviewrÂ   rí   rî   rR   Úobjectrß   Úmr   r   r	   rË   C  s.    
þ



z!GUI.dests_iconview_item_activatedc                 C   s   |   ¡  d S r   ©rý   ©r#   r$   r   r   r	   rÓ   _  s    zGUI.on_properties_dialog_closedc                 C   sR  d| _ | j ¡ }|r| ¡ }nd}|s*d S | ¡ }d}d}d}d}d}	| ¡ }
|D ]P}|
 |¡}|
 |d¡}|
 |d¡}|jr‚d}|j	rŽd}nd}|j
ržd}qRd}	qRt|ƒ}| j d¡ |dk¡ | j d¡ |dk¡ | j d¡ |dkoð| ¡ t ¡  ¡ }|dks |d kr&| j|kr&d}nd}| j d	¡ |¡ | j d
¡}| |dkoZ| ¡ | ¡ D ].}t|tjƒrf| |dkoŽ|oŽ|¡ qf| |p¤| ¡ | j d¡}| |dkoÆ| ¡ | ¡ D ].}t|tjƒrÒ| |dkoú|oú|	¡ qÒ| |p|	 ¡ | j d¡ |dko.| ¡ | j d¡ |dk¡ d| _ d S )NTFr   r6   ú/edit-printerr   ú/duplicate-printerú/rename-printerú/set-default-printerú/enable-printerú/share-printerú/delete-printerú/create-class)rŠ   r˜   Úget_permissionÚget_allowedÚget_selected_itemsræ   rú   rè   Ú
discoveredÚenabledZ	is_sharedrÙ   r¬   r«   rª   ÚuserdefaultÚUserDefaultPrinterÚgetÚdefault_printerZget_proxiesÚ
isinstancer   ZCheckMenuItemZset_inconsistentÚ
set_active)r#   r  Ú
permissionÚcan_editÚpathsZany_disabledZany_enabledZany_discoveredZ
any_sharedZany_unsharedrí   rÂ   rî   r  rR   ÚnÚuserdefZset_default_sensitivityrÛ   Úwidgetr   r   r	   rÌ   b  sx    


ÿ
ÿÿÿÿz$GUI.dests_iconview_selection_changedc              	   C   s   | j  d d d d d dd¡ d S ©Nr   )r´   Úpopup_for_device)r#   r  r   r   r	   rÎ   ª  s
      ÿzGUI.dests_iconview_popup_menuc              	   C   s¨   |j dkr¤| t|jƒt|jƒ¡}| ¡ }|d kr<| ¡  nL||krˆ| ¡  | |¡ | ¡ }|D ]}t	|ƒt
jkrb qzqb| ||d¡ | j d d d d d |j |j¡ dS ©Nr   F)ÚbuttonZget_path_at_posÚintÚxÚyr  Úunselect_allÚselect_pathÚ	get_cellsÚtyper   ÚCellRendererTextrë   r´   r   Útime)r#   r  ÚeventZ
click_pathr  Úcellsrå   r   r   r	   rÍ   ®  s*    
ÿ

  ÿz%GUI.dests_iconview_button_press_eventc                 C   s„   t  ¡ }|jtjks,|jtjks,|jtjkrP| ¡ |@ dkrP| j 	d¡ 
¡  dS |jtjkr€| ¡ |@ dkr€| j 	d¡ 
¡  dS dS )Nr   r  Tr  F)r   Z accelerator_get_default_mod_maskZkeyvalr   ZKEY_BackSpaceZ
KEY_DeleteZKEY_KP_DeleteZ	get_stater¬   r«   ZactivateZKEY_F2)r#   r  r,  Z	modifiersr   r   r	   rÊ   Á  s     
ÿ
þýÿz"GUI.dests_iconview_key_press_eventc           
      C   sf   |dkr\|  ¡ }| ¡ }d}|D ]}	|| | |	¡d¡d 7 }q t|ƒdkrb| dd|¡ ntƒ  d S )Nr   r   r6   Ú
rq   é   )ræ   r  rè   rú   rÙ   r†   rz   )
r#   r  ÚcontextZselection_dataÚinfoZ	timestamprí   r  Zselected_printer_namesrÂ   r   r   r	   rÏ   Ô  s    ÿz GUI.dests_iconview_drag_data_getc              	   C   sj   z*t | j| j| jd| _| j d| j¡ W n: tjtj	fk
rH   Y d S  t
k
rd   | j ¡  Y nX d S )Nr÷   zproblems-clicked)r   r   r   r7   ZserverSettingsr”   Úon_problems_button_clickedr   rü   rÕ   r¼   r„   r   )r#   Úmenuitemr   r   r	   rœ   ã  s    þÿzGUI.on_server_settings_activatec                 C   sb  t | jƒ}tƒ }| j tdƒ| ¡ |r6tdƒ| }ntdƒ}| j | j|¡ | j	| j
fD ]}| |¡ qZdD ]}| j |¡}| |¡ qn|r"| jr | j ¡  tjd| j| jd| _| j d| j¡ | j d| j¡ | j d	| j¡ | j d
| j¡ | j d| j¡ t | jj¡ | j | j¡ |rR| j ¡ rD| j  | j!¡ n| j  d ¡ n| j  d ¡ d S )NzPrinters - %szConnected to %szNot connected)ú/server-settingsrh   ri   F)Zmonitor_jobsr   rø   rl   zprinter-eventzprinter-removedzcups-connection-errorzcups-connection-recovered)"Úboolr   r   r7   Z	set_titlerš   r>   Úpushr½   r­   r²   rª   r¬   r«   r„   ÚcleanupZMonitorr   r   r”   Úprinter_addedÚprinter_eventÚprinter_removedÚcups_connection_errorÚcups_connection_recoveredr   Úidle_addZrefreshrÒ   Zset_monitorZ_using_polkitr˜   Zset_permissionr–   )r#   Z	connectedr   Z
status_msgr  rÝ   rÛ   r   r   r	   rØ   ð  sJ    
ÿ
þÿÿzGUI.setConnectedc                 C   sŠ   | j  ¡ }|r| ¡ }nd}| j |¡ | j |¡ dD ]}| j |¡}| |¡ q8|rf|  | j	¡ n dD ]}| j |¡}| d¡ qjd S )NT)rh   ri   )r  r  r  r  r  r
  r  F)
r˜   r  r  r­   rª   r;   r¬   r«   rÌ   r:   )r#   r  rõ   r  r  rÛ   rÜ   r   r   r	   r™      s    

zGUI.polkit_permission_changedc                 C   s"   | j  d ¡ t| j ƒ}| ¡  |S r   )r‡   ÚdiscardÚlistÚsort)r#   Zknown_serversr   r   r	   Ú
getServers;  s    
zGUI.getServersTc           1         s¾  t ƒ ‰ ˆj ¡ }ˆj ¡ }|D ]$}| |¡}| |d¡}ˆ  |¡ qˆjrd}ˆj |¡ ˆj 	t
dƒ¡ zt ˆj¡ˆ_ˆj ¡ ˆ_W nV tjk
rà } z6|j\}}	t||	ˆjƒ i ˆ_d ˆ_|tjkrÐd}W 5 d }~X Y nX ˆj ¡  ˆj d¡ |rd ˆ_ni ˆ_d ˆ_ˆj ¡ D ]\}}
ˆj |
 ¡ ¡ qt ¡  ¡ }g }g }g }g }ˆj d¡}|jd d ˆj}tˆj ƒdkrši }t! "ˆj t!j#¡}ˆj$dkrÐ| %¡ D ]"}| &|¡d k	rª|| ||< qªnÆˆj$d	kr| ¡ D ](\}}
| &|
j'¡d k	rä|| ||< qän†ˆj$d
krP| ¡ D ](\}}
| &|
j(¡d k	r$|| ||< q$nFˆj$dkr| ¡ D ](\}}
| &|
j)¡d k	rd|| ||< qdnt*ƒ  |}ˆj+ ,¡ sÒi }| ¡ D ]\}}
|
j-s²|
||< q²|}t.| ¡ ƒD ]P\}}
|
j/r|
j0r| 1|¡ n
| 1|¡ n|
j0r"| 1|¡ n
| 1|¡ qÞ| 2¡  | 2¡  | 2¡  | 2¡  ˆj3 4¡  t
dƒdft
dƒdft
dƒdft
dƒdft
dƒdft
dƒdft
dƒdft
dƒdfdœ}t5j6 7¡ }||||fD ]2}|sÖqÆ|D ]}d}|| }|j-r|j0rd}nd}n¨|j0rd}nšt8j9 :|j;¡\}}|dkrJ| <d¡rDd}nd}nf|dkrZd}nV|dkrjd }nF|d!krzd"}n6|j; <d#¡rŽd"}n"|j; <d$¡r¢d"}n|d%kr°d}|| \}}t5 =t5j>j?¡\}}}z| @||d¡} W n² tAjBk
r”   d } tCd&fD ]@}!z tDjE Fd'|!|f ¡} W  qDW n tAjBk
r>   Y nX q| d krz| @d|d¡} W n.   tDjE GtDjHjIdd(||¡} |  Jd¡ Y nX Y nX d }"d }#|ˆjkr°d)}"n||kr¾d*}"|#sL|jK}$|$ d+g ¡}%d }&|%D ]T}'|'d,krò q4|'d-krd.}#qÞtL M|jN|'¡}(|&d kr"|(}&n|(|&krÞ|(}&qÞ|&rL|& O¡ })|&jP|) }#|#s^|jQs^d.}#|jRr¦|  S¡ }*|* Jd¡ |  T|*dd|  U¡ |  V¡ ddd/d/tDjWjXd0¡ |*} |"r2t5 =t5j>j?¡\}}}zL| @|"|d d¡}+|  S¡ }*|+ T|*dd|+ U¡ |+ V¡ ddd/d/tDjWjXd1¡ |*} W n$ tAjBk
r0   tYd2|" ƒ Y nX |#rÞt5 =t5j>j?¡\}}}zl| @|#|d d¡},|  S¡ }*|, T|*|* U¡ d |* V¡ d |, U¡ |, V¡ |* U¡ d |* V¡ d d/d/tDjWjXd1¡ |*} W n$ tAjBk
rÜ   tYd2|# ƒ Y nX ˆj3j1|| ||gd3 qÚqÆˆj ¡ }‡ ‡fd4d5„}-| Z|-d ¡ ˆj[}.ˆjrJˆj s®ˆj3 \¡ s®ˆj]}.ndˆj^}.ˆj_d6kphˆj_d d7k}/d }0|/rŽˆj` a¡ }/|/s–t
d8ƒ}0nt
d9ƒ}0ˆjb c|/¡ ˆjb d|0¡ ˆje f|.¡ d S ):Nr6   Fzobtaining queue detailsTr  )Zlabelr   rb   rd   re   rf   zNetwork printer (discovered)zi-network-printerzNetwork class (discovered)ZPrinterrP   ZFaxZClasszNetwork printerzNetwork print share)údiscovered-printerúdiscovered-classúlocal-printerú	local-faxúlocal-classúipp-printerúsmb-printerúnetwork-printerrD  rC  rB  rF  )ZippZippsz//localhostrG  ZsmbrH  ZhpfaxrE  )ZsocketZlpdZdnssdrI  zhp:/net/zhpfax:/net/Zimplicitclassr   z%s%s.pngr/  zemblem-defaultzemblem-favoritezprinter-state-reasonsZnoneZpausedzmedia-playback-pauseg      ð?é   éÿ   zNo %s icon available)Úrowc                    s$   |   |d¡}|ˆ kr ˆj |¡ d S ©Nr6   ©rè   r:   r'  ©rí   rÂ   rî   rõ   rR   ©Zselected_printersr#   r   r	   Úmaybe_selectL  s    z&GUI.populateList.<locals>.maybe_selectr   r   zService framework not availablez%Cannot start service on remote server)gr†   r:   r  ræ   rú   rè   r‘   r   Z_set_prompt_allowedÚ_begin_operationrš   ÚcupshelpersZgetPrintersr~   Z
getDefaultr  rü   rÖ   rþ   r7   rÿ   Ú_end_operationÚitemsr‡   r   r  r  r  r¬   r«   Zset_propertiesrÙ   r¿   ÚreÚcompileÚIrÀ   Úkeysrñ   r1  ÚlocationZmake_and_modelrz   rB   Ú
get_activer  r?  ÚremoteÚis_classr³   r@  rÈ   Úclearr   Z	IconThemeZget_defaultÚurllibÚparseZ	splittypeZ
device_uriÚ
startswithZicon_size_lookupZIconSizeZDIALOGZ	load_iconr   r—   Úiconpathr   rÆ   Znew_from_filerk   Z
ColorspaceZRGBZfillÚother_attributesÚstatereasonZStateReasonrR   Z	get_levelZ
LEVEL_ICONr  Ú	rejectingÚcopyZ	compositeZ	get_widthZ
get_heightZ
InterpTypeZBILINEARÚ
debugprintÚforeachÚDESTS_PAGE_DESTSrç   ÚDESTS_PAGE_NO_PRINTERSÚDESTS_PAGE_NO_SERVICEr   rÄ   r'   r<   rª   Zset_tooltip_textr9   Zset_current_page)1r#   Úprompt_allowedr  rí   rÂ   rî   rR   Zkill_connectionrß   r  rP   r  Zlocal_printersZlocal_classesZremote_printersZremote_classesZdelete_actionZprinters_setZprinters_subsetÚpatternZPRINTER_TYPEZthemer~   r)  r  ZschemeÚrestZtipZiconÚresultÚwÚhZpixbufÚpZ
def_emblemZemblemZattrsZreasonsZworst_reasonÚreasonÚrÚlevelrf  Zdefault_emblemZother_emblemrQ  Zpager'   Ztooltip_textr   rP  r	   rÔ   A  s   





  
ÿÿÿÿÿÿÿÿê
ý
 





ÿ

   ÿ







     ý
  ú



 ÷

ÿÿ

zGUI.populateListc                 C   s    | j  t| ¡ pdƒdk¡ d S )Nr   r   )rG   rª   rÙ   Zget_active_text©r#   r  r   r   r	   Úon_connect_servername_changedk  s    z!GUI.on_connect_servername_changedc                 C   sŒ  |   ¡ }| jjr| jj ¡ p"t ¡ }t t¡}| j 	|¡ | j 
d¡ |D ]}| j |¡ qJ| j ¡  | j ¡  |¡ | j t ¡ tjk¡ | j ¡  d¡ | j ¡  | j | j¡ | j ¡ }| j ¡  |tjjkrØd S | j ¡ rðt tj¡ nt tj¡ t ¡ | _| j ¡   ¡ }| j! "t#dƒ| ¡ | j$ | j¡ | j$ ¡  t% &d| j'¡ || _(t )| j(¡ t *d¡ t +¡ | _,t- .| j/| jf¡| _0d S )Nr   Tz<i>Opening connection to %s</i>é(   r   )1rA  rÒ   rP   r   r   r   rÅ   rÇ   rF   rÉ   Zset_entry_text_columnZappend_textr®   Z	get_childÚset_textrE   r  r€   ZHTTP_ENCRYPT_ALWAYSZset_activates_defaultZ
grab_focusrD   r’   r7   ÚrunrŽ   ÚResponseTypeÚOKr[  ZsetEncryptionZHTTP_ENCRYPT_IF_REQUESTEDr   Úget_textrI   Ú
set_markuprš   rH   r   Útimeout_addÚupdate_connecting_pbarr   Ú	setServerÚsetUserr‚   rƒ   Ú_threadÚstart_new_threadr”   Úconnect_thread)r#   r  r‡   Zcurrent_serverZstoreÚserverÚresponseZ
servernamer   r   r	   r›   n  sR    
ÿþ

ÿ




ÿ


ÿzGUI.on_connect_activatec                 C   s<   d}t  ¡  z | j d¡s d}n
| j ¡  W 5 t  ¡  X |S )NTZvisibleF)r   Úthreads_enterÚthreads_leaverH   Zget_propertyrJ   Zpulse)r#   Úretr   r   r	   r€     s    
zGUI.update_connecting_pbarc                 C   s   |   |¡ dS )NT)Úon_cancel_connect_clicked©r#   r  r,  r   r   r	   r•   ­  s    
zGUI.on_connectingdialog_deletec                 C   s   d| _ | j ¡  dS )z–
        Stop connection to new server
        (Doesn't really stop but sets flag for the connecting thread to
        ignore the connection)
        N)r…  rH   rŽ   rv  r   r   r	   r‹  ±  s    zGUI.on_cancel_connect_clickedNc                 C   sR  t  | j¡ | jd dkrbzt j| j| jd}~W n. tk
rP   t  d¡ Y n   tƒ  Y nX zt	j|| j| jd}W n( tk
r } zf| j
t ¡ kr¨W Y ¢RdS t ¡  z0| j ¡  d| _ |  ¡  |  ¡  td||ƒ W 5 t ¡  X W Y ¢dS d}~X Y n¤ t jk
r” } zr|j\}}| j
t ¡ kr:W Y ¢RdS t ¡  z0| j ¡  d| _ |  ¡  |  ¡  t|||ƒ W 5 t ¡  X W Y ¢dS d}~X Y n   tƒ  Y nX | j
t ¡ krºdS t ¡  z$| j ¡  || _ |  ¡  |  ¡  W n^ t jk
r4 } z,|j\}d| _ |  ¡  |  ¡  t||ƒ W 5 d}~X Y n   tƒ  Y nX t ¡  dS )zV
        Open a connection to a new server. Is executed in a separate thread!
        r   r   )r   rø   r   N)r   r‚  rƒ   r   rm   r   r¼   r  rz   r»   r…  rƒ  Ú	get_identr   rˆ  r‰  rH   rŽ   rØ   rÔ   rþ   rü   rÖ   rÕ   r×   )r#   rù   Z
connectionrà   rß   r   r   r	   r”   º  sx    ÿþ 



 


 
zGUI.connectc                 C   sL   d}|dkrHzt  d¡ | j ¡  W qHW q tk
rD   |d7 }Y qX qdS )z0Reconnect to CUPS after the server has reloaded.r   é   N)r+  Úsleepr   Z_connectr¼   )r#   Zattemptr   r   r	   Ú	reconnect  s    

zGUI.reconnectc                 C   s   | j  ¡  dS )zClose Connect dialogN)ZConnectWindowrŽ   rv  r   r   r	   Úon_btnCancelConnect_clicked  s    zGUI.on_btnCancelConnect_clickedc                 C   sF   | j d kr:zt | j¡| _ W n tk
r0   Y nX |  ¡  |  ¡  d S r   )r   r»   rm   r7   r¼   rØ   rÔ   ©r#   r"  r   r   r	   r±     s    
zGUI.on_btnRefresh_clickedc                 C   s^   t  ¡ }|| jkr&| ¡  |  ¡  d S t  | j| j|tdƒ| jtdƒtdƒtdƒtdƒ¡	 d S )NzSet Default Printerz;Do you want to set this as the system-wide default printer?z'Set as the _system-wide default printerz"_Clear my personal default settingz#Set as my _personal default printer)	r  r  r  r^  rÔ   ZUserDefaultPromptÚset_default_printerrš   r7   )r#   rR   r  r   r   r	   Ú"set_system_or_user_default_printer)  s    
öz&GUI.set_system_or_user_default_printerc              
   C   s6  | j | }d}| j tdƒ¡ z| ¡ }W n’ tjk
rr } z(|j\}t|| jƒ | j 	¡  W Y ¢d S d }~X Y nL tj
k
r¼ } z,|j\}}t||| jƒ | j 	¡  W Y ¢d S d }~X Y nX | j 	¡  |rÔ|  ¡  z|  ¡  W nP tjk
r0 } z.|j\}d | _|  ¡  |  ¡  t|| jƒ W 5 d }~X Y nX d S )NFzsetting default printer)r~   r   rR  rš   ÚsetAsDefaultrÕ   rÖ   r×   r7   rT  rü   rþ   r  rÔ   rØ   )r#   rR   rP   Úreloadrß   rà   Úmsgr   r   r	   r“  >  s4    




zGUI.set_default_printerc                 C   sn   | j rt | j ¡ d | _ | jr(| j ¡  t| jƒdkrF| jd  ¡  q(| j 	¡  | j
 	¡  t ¡  | `| `d S r  )r…   r   Úsource_remover„   r7  rÙ   rµ   Zon_delete_eventrÒ   Údestroyr·   r   Ú	main_quitrÈ   r~   rŒ  r   r   r	   rŸ   a  s    


zGUI.on_quit_activatec                 C   s>   | j | jdd}t|ƒdkr:ttdƒtdƒ| jd dS dS )	Nr   ©Úlimitr   zCannot RenamezThere are queued jobs.©rù   FT)r~   Z
jobsQueuedrÙ   Úshow_error_dialogrš   r7   )r#   rR   Zjobsr   r   r	   Úis_rename_possibles  s    þzGUI.is_rename_possiblec                 C   st   | j | jdd}t|ƒdkrptj| jddtjjtjj	t
dƒd}| t
dƒ¡ | ¡ }| ¡  |tjjkrpdS dS )	zŒ
        Renaming deletes job history. So if we have some completed jobs,
        inform the user and let him confirm the renaming.
        r   r›  r   TzRenaming will lose history©rù   ZmodalZdestroy_with_parentZmessage_typeZbuttonsrö   z;Completed jobs will no longer be available for re-printing.F)r~   ZjobsPreservedrÙ   r   ÚMessageDialogr7   ÚMessageTypeÚWARNINGÚButtonsTypeZ	OK_CANCELrš   Zformat_secondary_textrz  r™  r{  ÚCANCEL)r#   rR   Zpreserved_jobsÚdialogro  r   r   r	   Úrename_confirmed_by_user}  s     üzGUI.rename_confirmed_by_userc                 G   s  | j  ¡ }|d krd S |\}}}|d kr,d S t|ƒtjkrr| j  ¡ }|D ]}t|ƒtjkrH q`qHt|ƒtjkrrd S | j  ¡ }| |¡}| |d¡}	|  	|	¡s d S |  
|	¡s®d S | dd¡ g }
|
 | d| j¡¡ |
 | d| j¡¡ |
| _g | _| j  ||d¡ d S )Nr6   ÚeditableTzediting-startedzediting-canceled)r:   Z
get_cursorr)  r   r*  r(  ræ   rú   rè   rŸ  r§  Úset_propertyr³   r”   Úprinter_name_edit_startÚprinter_name_edit_cancelÚrename_sigidsÚrename_entry_sigidsrë   )r#   rõ   ÚtupleÚresrÂ   rå   r-  rí   rî   rR   Zidsr   r   r	   r    “  s>    







ÿ
ÿzGUI.on_rename_activatec                 C   sˆ   t dt|ƒt|ƒf ƒ t|tjƒr„| d| j¡}| j ||f¡ | j	 
¡ }| |¡}| |d¡}| d| j||¡}| j ||f¡ d S )Nz)editing-started with cell=%s, editable=%sr‰   r6   zediting-done)rg  Úreprr  r   ZEntryr”   Úprinter_name_editingr­  r³   r:   ræ   rú   rè   Úprinter_name_editing_done)r#   rå   r¨  rÂ   Úidrí   rî   rR   r   r   r	   rª  ¶  s"    ÿÿ

 þzGUI.printer_name_edit_startc                 C   sV   |  ¡  }}| dd¡}| dd¡}| dd¡}||krRtd|d  ƒ | |¡ d S )Nr   r   ú#ú zremoved disallowed character %srg   )r}  Úreplacerg  ry  )r#   ÚentryÚnewnameZorignamer   r   r	   r±  Æ  s    zGUI.printer_name_editingc              
   C   s‚   t t|ƒƒ | ¡ }t d||f ƒ z|  ||¡ W 5 | d¡ | dd¡ | jD ]}| |¡ qR| jD ]\}}| |¡ qhX d S )Nzedited: %s -> %sFr¨  )	rg  r°  r}  Ústop_editingr©  r¬  Ú
disconnectr­  Úrename_printer)r#   r·  rå   rR   r¸  r³  r$   r   r   r	   r²  Ï  s    

zGUI.printer_name_editing_donec                 C   sZ   t dt|ƒ ƒ | d¡ | dd¡ | jD ]}| |¡ q,| jD ]\}}| |¡ qBd S )Nzediting-canceled (%s)Tr¨  F)rg  r°  r¹  r©  r¬  rº  r­  )r#   rå   r³  r$   r   r   r	   r«  Ý  s    

zGUI.printer_name_edit_cancelc              
      s0  |  ¡ ˆ   ¡ krd S zˆjj|ˆjˆjˆjd W n\ tk
rF   Y nJ tjk
rŽ } z*|j	\}}t
||ˆjƒ ˆ ¡  W Y ¢d S d }~X Y nX ˆ |¡sžd S ˆj tdƒ¡ ˆjjj}|sHz:ˆjj d¡ ˆ |¡söˆjj d¡ ˆj ¡  W d S W nN tjk
rF } z,|j	\}}t
||ˆjƒ ˆj ¡  W Y ¢d S d }~X Y nX ˆ ˆ ¡rˆj ¡  |sˆjjrz|ˆjj_ˆjj d¡ W nv tjk
rÄ } z|j	\}t|ˆjƒ W 5 d }~X Y n> tjk
r  } z|j	\}}t
||ˆjƒ W 5 d }~X Y nX ˆj ¡  ˆ ¡  d S ˆjjs8ˆj ¡  ˆ ¡  d S |sÈzˆjj d¡ W nv tjk
rŠ } z|j	\}t|ˆjƒ W 5 d }~X Y n> tjk
rÆ } z|j	\}}t
||ˆjƒ W 5 d }~X Y nX ˆj|krnd}zˆjj ¡ }W nv tjk
r" } z|j	\}t|ˆjƒ W 5 d }~X Y n> tjk
r^ } z|j	\}}t
||ˆjƒ W 5 d }~X Y nX |rnˆ ¡  zˆj |¡ W nv tjk
r¸ } z|j	\}t|ˆjƒ W 5 d }~X Y n> tjk
rô } z|j	\}}t
||ˆjƒ W 5 d }~X Y nX ˆj ¡  ‡ ‡fdd„}	ˆ ¡  ˆj ¡ }
|
 |	d ¡ d S )Nr÷   zrenaming printerFTc                    s$   |   |d¡}|ˆ kr ˆj |¡ d S rM  rN  rO  ©Únew_namer#   r   r	   Úselect_new_printerP  s    z.GUI.rename_printer.<locals>.select_new_printer) ÚlowerrÒ   Úloadr   r   r7   r¼   r   rü   rÖ   rþ   rÔ   rŸ  rR  rš   rP   re  ZsetAcceptingrT  Úduplicate_printerr„   r   rR   rÕ   r×   r  r•  r  ÚdeletePrinterr:   ræ   rh  )r#   Zold_namer½  rß   r  re  r—  rà   r–  r¾  rí   r   r¼  r	   r»  æ  s¨    ý











 



 
 
 

zGUI.rename_printerc                 C   s0   || j j_g | j j_| j j| j jd| jd}|S )NT)Zsaveallrù   )rÒ   rP   rR   Úclass_membersÚsave_printerr7   )r#   r½  rŠ  r   r   r	   rÁ  Z  s    

þzGUI.duplicate_printerc           
   
   G   s
  | j }| ¡ }| j  ¡ }| |d ¡}| |d¡}| j |¡ | j | j	¡ | j 
¡ }| j ¡  |tjjkrpd S z| jj|| j| j| j	d W n\ tk
r¢   Y nJ tjk
rê } z*|j\}}	t||	| j	ƒ |  ¡  W Y ¢d S d }~X Y nX |  | j ¡ ¡ | j ¡  d S )Nr   r6   r÷   )r:   r  ræ   rú   rè   rL   ry  rK   r’   r7   rz  rŽ   r   r{  r¥  rÒ   rÀ  r   r   r¼   r   rü   rÖ   rþ   rÔ   rÁ  r}  r„   r   )
r#   rõ   r  r  rí   rî   rR   ro  rß   r  r   r   r	   r¡   d  s4    


ý

zGUI.on_duplicate_activatec                 C   s\   |  ¡ }|}| dd¡}| dd¡}| dd¡}||krB| |¡ | j t | j|¡¡ d S )Nr   r   r´  rµ  )r}  r¶  ry  rM   rª   r¶   ZcheckNPNamer~   )r#   r  rö   Znew_textr   r   r	   Úon_entDuplicateName_changedƒ  s    
ÿzGUI.on_entDuplicateName_changedc                 G   s   |   ¡  d S r   )Údelete_selected_printer_queues©r#   rõ   r   r   r	   r¢   ‘  s    zGUI.on_delete_activatec              
   C   s®  | j  ¡ }| j  ¡ }g }t|ƒ}|dkrz| |d ¡}| |d¡}| |d¡}|jrbtdƒ| }ntdƒ| }| |¡ n2tdƒ}|D ]$}	| |	¡}| |d¡}| |¡ q†t	j
| jddt	jjt	jj|d}
|
 td	ƒt	jjtd
ƒt	jj¡ |
 t	jj¡ |
 ¡ }|
 ¡  |t	jjkrd S z:|D ]0}| j tdƒ| ¡ | j |¡ | j ¡  q"W nH tjk
rž } z&|j\}}| j ¡  t||| jƒ W 5 d }~X Y nX | j ¡  d S )Nr   r   r6   zReally delete class '%s'?zReally delete printer '%s'?z$Really delete selected destinations?Tr   Z_CancelZ_Deletezdeleting printer %s) r:   r  ræ   rÙ   rú   rè   r]  rš   r³   r   r¡  r7   r¢  r£  r¤  ÚNONEÚadd_buttonsr{  ZREJECTZACCEPTZset_default_responserz  r™  r   rR  rÂ  rT  rü   rÖ   rþ   r„   r   )r#   r  rí   Z	to_deleter  Úitrr$   rR   Zmessage_formatrÂ   r¦  ro  rß   r—  r   r   r	   rÆ  ”  sV    


 ü ÿ

 z"GUI.delete_selected_printer_queuesc                 C   sð   | j r
d S | ¡ }| j}| ¡ }| ¡ }g }|D ]$}| |¡}| |d¡}	| |	¡ q0|D ]†}	| j 	t
dƒ|	j ¡ z|	 |¡ W nR tjk
rÔ }
 z2|
j\}
}t |
|| j¡ | j ¡  W Y ¢ qâW 5 d }
~
X Y nX | j ¡  qZ| j ¡  d S )Nr   úmodifying printer %s)rŠ   r[  r:   r  ræ   rú   rè   r³   r   rR  rš   rR   Z
setEnabledrü   rÖ   Úerrordialogsrþ   r7   rT  r„   r   )r#   Ztoggle_actionÚenabler  r  rí   r~   rÂ   rÊ  rP   rß   r  r   r   r	   r§   Ä  s,    


zGUI.on_enabled_activatec                 C   sN  | j r
d S | ¡ }| j}| ¡ }| ¡ }g }|D ]$}| |¡}| |d¡}	| |	¡ q0d}
|D ]ˆ}	| j 	t
dƒ|	j ¡ z|	 |¡ d}
W nP tjk
rÚ } z0|j\}}t||| jƒ | j ¡  W Y ¢ qèW 5 d }~X Y nX | j ¡  q^|
rB|rB| jd kr:z|	 ¡  |	jd }|| _W n tjtfk
r8   Y nX |  ¡  |  ¡  d S )Nr   FrË  Tzserver-is-sharing-printers)rŠ   r[  r:   r  ræ   rú   rè   r³   r   rR  rš   rR   Z	setSharedrü   rÖ   rþ   r7   rT  rˆ   ZgetAttributesrc  ÚKeyErrorÚadvise_publishÚdefer_refresh)r#   r3  Zsharer  r  rí   r~   rÂ   rÊ  rP   Zsuccessrß   r  rr  r   r   r	   r¨   á  sF    
ÿ




zGUI.on_shared_activatec                 C   s"   | j sttdƒtdƒ| jd d S )NzPublish Shared Printersz€Shared printers are not available to other people unless the 'Publish shared printers' option is enabled in the server settings.r  )rˆ   Zshow_info_dialogrš   r7   ©r#   r   r   r	   rÏ    s
    ûzGUI.advise_publishc                 G   sZ   | j }| ¡ }| ¡ }z| |d ¡}W n tk
r>   Y d S X | |d¡}|  |¡ d S )Nr   r6   )r:   r  ræ   rú   Ú
IndexErrorrè   r”  )r#   rõ   r  r  rí   rî   rR   r   r   r	   r£     s    zGUI.on_set_as_default_activatec                 G   s    | j  ¡ }|  | j |d ¡ d S r  )r:   r  rË   )r#   rõ   r  r   r   r	   r¤   (  s    
zGUI.on_edit_activatec                 C   sÒ   | j  ¡ }g }| j  ¡ }|D ]$}| |¡}| |d¡}| |¡ q| jjd| j| j	| j
dsj| j ¡  d S | jj ¡ }| jj ¡ }	| ¡ }|d k	rÎ| |¡}
| |d¡}|d |krÈ|	 |¡ | |¡ |
}qŠd S )Nr6   Úclassr÷   r   )r:   r  ræ   rú   rè   r³   r·   Úinitr   r   r7   r„   r   ZtvNCNotMembersZtvNCMembersrç   rì   r  r   )r#   rõ   r  rÃ  rí   rÂ   rî   rR   Z	out_modelZin_modelÚnextÚdatar   r   r	   r¥   ,  s0    


ý



zGUI.on_create_class_activatec           	      G   s¢   | j  ¡ }t|ƒrpg }| j  ¡ }|D ]$}| |¡}| |d¡}| |¡ q$tjd d d|| j	d}| 
d| j¡ n"tjd d d| j	d}| 
d| j¡ | j |¡ d S )Nr6   F)Úmy_jobsÚspecific_destsrù   Úfinished)r×  rù   )r:   r  rÙ   ræ   rú   rè   r³   Ú	jobviewerÚ	JobViewerr7   r”   Úon_jobviewer_exitrµ   )	r#   rõ   r  rØ  rí   rÂ   rî   rR   Úviewerr   r   r	   r¦   F  s$    



þ
ÿz GUI.on_view_print_queue_activatec                 C   sL   z| j  |¡}| j |= W n. tk
rF   tdt|ƒt| j ƒf ƒ Y nX d S )Nz'Jobviewer exited but not in list:
%s
%s)rµ   ÚindexÚ
ValueErrorrg  r°  )r#   rÝ  Úir   r   r	   rÜ  Z  s    ÿzGUI.on_jobviewer_exitc                 C   s   |   ¡  d S r   )rÔ   rÇ  r   r   r	   Ú$on_view_discovered_printers_activatec  s    z(GUI.on_view_discovered_printers_activatec                 C   s   d| j krt | j¡| _d S )NÚtroubleshooter)Ú__dict__Útroubleshootrz  Úon_troubleshoot_quitrâ  rv  r   r   r	   Úon_troubleshoot_activatef  s    
zGUI.on_troubleshoot_activatec                 C   s   | ` d S r   )râ  )r#   râ  r   r   r	   rå  j  s    zGUI.on_troubleshoot_quitc                 C   st   | j  |¡ | j |¡ | j |¡ | j |¡ | j |¡ | j |¡ dD ]}| j |¡ |¡ qL|  	d d ¡ d S )N)z/connect-to-serverr4  rh   ri   r  r  r  r	  r  r  r
  r  z/filter-namez/filter-descriptionz/filter-locationz/filter-manufacturer)
r:   rª   r­   r;   r°   rB   rÁ   r¬   r«   r™   )r#   Ú	sensitiverÛ   r   r   r	   rý   m  s    z!GUI.sensitise_main_window_widgetsc                 C   s   |   d¡ d S ©NFr  rÑ  r   r   r	   rû   ˆ  s    z#GUI.desensitise_main_window_widgetsc                 C   s&   | j  | j¡ | j  ¡  | j  ¡  d S r   )rC   r’   r7   rz  rŽ   rv  r   r   r	   Úon_about_activateŒ  s    
zGUI.on_about_activatec                 C   s$   d| j kr tj| j| ¡ d| _d S )Nrâ  r  )rã  rä  rz  rå  Z
get_dialogrâ  )r#   Úserversettingsr   r   r	   r2  –  s    
ÿzGUI.on_problems_button_clickedc                 C   sL   | j  |¡ | j |¡ | j d¡ |¡ | j d¡ |¡ |  d d ¡ d S )Nrh   ri   )r­   rª   r;   r¬   r«   r™   )r#   rç  r   r   r	   Úsensitise_new_printer_widgetsŸ  s
    z!GUI.sensitise_new_printer_widgetsc                 C   s   |   d¡ d S rè  ©rë  rÑ  r   r   r	   Údesensitise_new_printer_widgets¦  s    z#GUI.desensitise_new_printer_widgetsc                 G   sL   t | jƒ |  ¡  | jjd| j| j| jds>|  ¡  | j 	¡  t
| jƒ d S )NrP   r÷   )r   r7   rí  r·   rÔ  r   r   rë  r„   r   r   ©r#   r  rõ   r   r   r	   r   ª  s    
ý
zGUI.on_new_printer_activatec                 G   s8   |   ¡  | jjd| j| j| jds4|  ¡  | j ¡  d S )NrÓ  r÷   )	rí  r·   rÔ  r   r   r7   rë  r„   r   rî  r   r   r	   rž   ¶  s    ýzGUI.on_new_class_activatec                 C   s   |   ¡  d S r   rì  r  r   r   r	   rº   ¿  s    zGUI.on_new_printer_not_addedc           
      C   sÈ  t d| ƒ |  ¡  |  ¡  || jkr2t dƒ d S | j ¡ }| ¡ }|d k	r²| |d¡}||kr¦| |¡}| j 	|ddd¡ | j 
¡  | jj|d dd | j |¡ q²| |¡}qD| j |¡ | jjr| jjjs| jjjsz| j| j|| jjd W n   tƒ  Y nX | jjrÄtj| jddtjjtjjtd	ƒd
}| tjtj j!tdƒtj j"¡ | #¡ }| $¡  |tj j"krÄ| jj% &¡  d}	z|  '|¡ d}	W n t(k
r°   Y nX |	rÄ| jj) *¡  d S )NzNew printer added: %szNew printer disappearedr6   Trã   Frä   ©Úppdz$Would you like to print a test page?r   zPrint Test Page)+rg  rë  rÔ   r~   r:   ræ   rç   rè   ré   rê   r&  rë   r'  rì   rÒ   rÀ  rð  rP   r  r\  ÚcheckDriverExistsr7   rz   r   r¡  r¢  ZQUESTIONr¤  rÈ  rš   rÉ  ZSTOCK_CANCELr{  ZNOZYESrz  r™  r¦  rŽ   rï   r¼   ZbtnPrintTestPagerj   )
r#   r$   rR   rí   rî   rq   rÂ   Úqr‡  Zproperties_shownr   r   r	   r¸   Â  sp    




ÿ
ÿþ
ÿ

 ü ÿ
zGUI.on_new_printer_addedc                 C   s"   |  d¡ | jj| j| jd d S )NFr1   )rª   rÄ   r,   Úon_start_service_replyr’  r   r   r	   rÐ     s    

ÿzGUI.on_start_service_clickedc                 G   s   t  d| j¡ d S )Nr   )r   Útimeout_add_secondsÚservice_started_try)r#   rÖ   r   r   r	   ró  	  s    zGUI.on_start_service_replyc                 C   s4   t  ¡  z|  d ¡ W 5 t  ¡  X t d| j¡ dS r!  )r   rˆ  r‰  r±   r   rô  Úservice_started_retryrÑ  r   r   r	   rõ    s    
zGUI.service_started_tryc                 C   s8   | j s4t ¡  z|  d ¡ | j d¡ W 5 t ¡  X dS )NTF)r   r   rˆ  r‰  r±   r<   rª   rÑ  r   r   r	   rö    s    

zGUI.service_started_retryc              
   C   s¼  t  ¡ }| jdks$| jd dks$dS |s¦z| j  |¡}W nX t jk
r } z8|j\}}|t jkrjW Y ¢dS |  ||¡ W Y ¢dS W 5 d}~X Y nX t  |¡}t	 
|¡ t |¡\}}	t|ƒdksÎt|	ƒdkr¸d}
t|ƒdkrüzt ¡ }d}
W n   Y nX |
r”t|ƒdkr”|d }dtdƒ d	 td
ƒ||f  }| j}| j |¡ | |¡ | ¡ }| ¡  |tjjkr¸z| dd|¡ W n   Y nX n$ttdƒtdƒ||	| d f |ƒ dS )z´Check that the driver for an existing queue actually
        exists, and prompt to install the appropriate package
        if not.

        ppd: cups.PPD object, if already createdr   r   r   NFTz"<span weight="bold" size="larger">zInstall driverz	</span>

zGPrinter '%s' requires the %s package but it is not currently installed.zMissing driverzwPrinter '%s' requires the '%s' program but it is not currently installed.  Please install it before using this printer.)r   r   r   ZgetPPDrü   rÖ   ZIPP_NOT_FOUNDrþ   ZPPDr{   ÚunlinkrS  ZmissingPackagesAndExecutablesrÙ   ÚinstallpackageZ
PackageKitrš   rN   rO   r~  r’   rz  rŽ   r   r{  r|  ZInstallPackageNamerž  )r#   rù   rR   rð  r†  Úfilenamerß   r—  ZpkgsZexesZcan_installZpkÚpkgZinstall_textr¦  r‡  r   r   r	   rñ  !  sl    	
ÿ




ÿÿþþ

ÿüùzGUI.checkDriverExistsc                 C   sÂ   t d| ƒ | j |¡ | jjr¾z| j| jj|| jjd W n   tƒ  Y nX zH| jjd }| ¡ d kr–t dƒ | 	¡  | jj
 |¡ | j | j¡ W n$ tk
r¬   Y n   tƒ  Y nX d S )NzPrinter modified by user: %srï  ZmediazInvalid media option: resetting)rg  rÒ   rÀ  rð  rñ  r¦  rz   Zserver_side_optionsZget_current_valueÚresetr‰   r‘   rÄ  rP   rÎ  )r#   r$   rR   Zppd_has_changedZoptionr   r   r	   r¹   f  s*    
 ÿ
zGUI.on_printer_modifiedc                    s8   ‡ fdd„}ˆ j rt ˆ j ¡ t d|¡ˆ _ tdƒ d S )Nc                      s.   d ˆ _ t ¡  zˆ jdd W 5 t ¡  X dS ©NF)rl  )r…   r   rˆ  r‰  rÔ   r   rÑ  r   r	   Údeferred_refresh…  s    
z+GUI.defer_refresh.<locals>.deferred_refreshéÈ   zDeferred populateList by 200ms)r…   r   r˜  r  rg  )r#   rý  r   rÑ  r	   rÐ  „  s
    	zGUI.defer_refreshc                 C   s   |   ¡  d S r   )rÐ  rÑ  r   r   r	   Úprinter_added_or_removed•  s    zGUI.printer_added_or_removedc                 C   s   |   ¡  d S r   ©rÿ  ©r#   ÚmonrP   r   r   r	   r8  š  s    zGUI.printer_addedc                 C   s4   || j kr0| j | jf |Ž |  | j¡ |  ¡  d S r   )r~   r   rÌ   r:   rÿ  )r#   r  rP   Z	eventnamer,  r   r   r	   r9    s    
zGUI.printer_eventc                 C   s   |   ¡  d S r   r   r  r   r   r	   r:  £  s    zGUI.printer_removedc                 C   s   d | _ |  ¡  | jdd d S rü  )r   rØ   rÔ   ©r#   r  r   r   r	   r;  ¦  s    zGUI.cups_connection_errorc                 C   s   t dƒ t | j¡ d S )NzTrying to recover connection)rg  r   r=  rõ  r  r   r   r	   r<  «  s    zGUI.cups_connection_recovered)T)N)N)T)T)N)Zr-   r.   r/   r   ZIPP_PRINTER_IDLErš   ZIPP_PRINTER_PROCESSINGZIPP_PRINTER_BUSYZIPP_PRINTER_STOPPEDZprinter_statesri  rj  rk  ru   rï   r¾   rô   r©   rË   rÓ   rÌ   rÎ   rÍ   rÊ   rÏ   rœ   rØ   r™   rA  rÔ   rw  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Ï  r£   r¤   r¥   r¦   rÜ  rá  ræ  rå  rý   rû   ré  r2  rë  rí  r   rž   rº   r¸   rÐ   ró  rõ  rö  rñ  r¹   rÐ  rÿ  r8  r9  r:  r;  r<  Ú__classcell__r   r   rá   r	   r5       s¶   
   ý  rH0
  ,2	
K#

#		t
01
	

	
	B

Er5   c                 C   sˆ   t  tj dt  ¡ ¡¡ t ¡  ddlm	} |dd | r^t
jd d d| gd}| dtj¡ ntƒ }t ¡  zt ¡  W 5 t ¡  X d S )	NZ	CUPS_USERr   )ÚDBusGMainLoopT)Zset_as_defaultF)r×  rØ  rÙ  )r   r‚  r{   r|   r  r‚   r   Zthreads_initZ	dbus.glibr  rÚ  rÛ  r”   r   rš  r5   rˆ  r‰  Úmain)Ú	show_jobsr  rÝ  Z
mainwindowr   r   r	   r  ¯  s    

ÿr  Ú__main__z	embedded=Údebugz
show-jobs=z--debugTz--show-jobsz
--embedded)Zr‹   Úsysr{   r+  rV  rƒ  r    ZgiZrequire_versionZgi.repositoryr   r   r   r   rÔ  Úargvr¼   rß   r   Úexitr
   rÙ   r   ZrequireZppdSetConformanceZPPD_CONFORM_RELAXEDrv   r}   r   ÚErrorr|   ÚgettextÚinstallrŒ   r   rS  r   r   Zguir   r	  Zurllib.requestr_  Zurllib.parseZurllib.errorrä  rø  rÚ  r»   r„   rÌ  r  rê  r   ró   ZSearchCriterionrd  r¶   r   r   rÑ   Z	ppdippstrZ
pkgdatadirZpkgdatarÂ   Újoinrb  r³   rÚ   r   Zset_prgnamer   r   r0   r3   r5   r  r-   ZgetoptZ
gnu_getoptZoptsrÖ   ZGetoptErrorr  ZoptZoptargZset_debuggingZset_debugprint_fnrg  r#  r   r   r   r	   Ú<module>   sÚ    

	 




                
 ÿÿ


