3
NZLO                @   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mZ d dl	T d dl
mZmZmZmZmZmZmZ d dlmZ d dlmZ d dlT ddlT d dlZd dlT d dlT d dlT d dlT d dlZy$d dlZd dlm Z  d d	lm!Z! W n: e"k
r&   e#j$d
 ere#j$d e j%d Y nX d dl&Z&e&j'de( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZN dd lOmPZP dd!lQmRZR d d"l
mZ d#ZSd$ZTd%ZUi ZVejW ZXG d&d' d'eYZZG d(d) d)eYZ[G d*d+ d+e\Z]G d,d- d-e,e*e^Z_G d.d/ d/e`Zad0d1 Zbd2d3 ZcdS )4    N)configparser)*)deviceutilspmlmaintmodelspkitos_utils)cups)PY3   )DBusQtMainLoop)lowlevelzLUnable to load DBus libraries. Please check your installation and try again.zHPlease upgrade your python installation to the latest available version.ignore)Ui_MainWindow)Ui_MainWindow_Derived)FaxSetupDialog)PluginDialog)FirmwareDialog)AlignDialog)PrintDialog)MakeCopiesDialog)SendFaxDialog)	FABWindow)DeviceSetupDialog)PrintTestPageDialog)
InfoDialog)CleanDialog)ColorCalDialog)LineFeedCalDialog)PQDiagDialog)NoDevicesDialog)AboutDialog)SettingsDialog)PrintSettingsToolbox)r
      <      c               @   s   e Zd Zdd ZdS )FuncViewItemc             C   s$   t j| t||| || _|| _d S )N)QListWidgetItem__init__QIcontooltip_textcmd)selfparenttextpixmapr-   r.    r3   /usr/share/hplip/ui5/devmgr5.pyr+   p   s    zFuncViewItem.__init__N)__name__
__module____qualname__r+   r3   r3   r3   r4   r)   o   s   r)   c               @   s   e Zd ZdddZdS )DeviceViewItemTc             C   s0   t j| t||| || _|| _| jtj d S )N)r*   r+   r,   
device_uriis_availZsetTextAlignmentQtZAlignHCenter)r/   r0   r1   r2   r9   r:   r3   r3   r4   r+   x   s    zDeviceViewItem.__init__N)T)r5   r6   r7   r+   r3   r3   r3   r4   r8   w   s   r8   c               @   s&   e Zd Zdd Zdd ZdddZdS )	PluginInstallc             C   s   || _ || _|| _d S )N)r0   plugin_typeplugin_installed)r/   r0   r=   r>   r3   r3   r4   r+      s    zPluginInstall.__init__c             C   s   d}| j r8tj| j| jj | jdtjtjtjtjk}|rt	j
| jtk| jjjd \}}|stj| j| jj | jdtjtjtj d S )NTzZ<b>The HPLIP plugin is already installed.</b><p>Do you want to continue and re-install it?zplugin-reasonzm<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>)r>   ZQMessageBoxwarningr0   ZwindowTitle_PluginInstall__trZYesZNoZNoButtonr	   Zrun_plugin_commandr=   PLUGIN_REQUIRED
cur_deviceZmqZcriticalZOk)r/   Zinstall_pluginokZsudo_okr3   r3   r4   exec_   s"     zPluginInstall.exec_Nc             C   s   t jd||S )NDevMgr5)qApp	translate)r/   scr3   r3   r4   __tr   s    zPluginInstall.__tr)N)r5   r6   r7   r+   rD   r@   r3   r3   r3   r4   r<      s   r<   c                   s  e Zd Zd 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dddZdd Zdd ZejddfddZd d! Zdd"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zdd.d/Zd0d1 Zd2d3 Zd4d5 Zdd7d8Zd9d: Zd;d< Z d=d> Z!d?d@ Z"ddAdBZ#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2ddadbZ3dcdd Z4dedf Z5dgdh Z6didj Z7ddmdnZ8dodp Z9dqdr Z:dsdt Z;dudv Z<dwdx Z=dydz Z>d{d| Z?d}d~ Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdddZMdd ZNdd ZOdd ZPdd ZQdddZRdd ZSdd ZTdddZU  ZVS )rE   Nr   c       	         s6  t t| j| tjd tjdtj  || _|| _i | _	d| _
d | _d | _d| _d| _d | _d| _tt}|j | _t | _| jj  | jj  | jj| _tjdd}tj|| jjs| j| d| j n| j| | jj| j | j  | j   | j!  | j"  t#j$t% tj&s| j'j(d d| _)t*j+d| j, d S )	Nz Initializing toolbox UI (Qt5)...zHPLIP Version: %sr   Fhplipversion T)-superrE   r+   logdebugpropinstalled_versiontoolbox_versioninitial_device_uridevice_varsZnum_devicesrB   cur_printerupdatinginit_failedserviceIs_autoInstaller_distroZCoreInstallZ
MODE_CHECKZis_auto_installer_supportZUserSettingsuser_settingsloadlast_used_device_uricur_device_urisys_confgetr   ZIs_HPLIP_older_versionZlatest_available_versionZsetupUiinitDBusinitPixmapsinitMiscinitUIr   ZsetPasswordCallbackshowPasswordUI	doc_buildContentsAction
setEnabledallow_auto_refreshQTimer
singleShotinitalUpdate)	r/   rS   rT   	dbus_loopr0   nameflZcorerR   )	__class__r3   r4   r+      s@    





zDevMgr5.__init__c             C   s\   t dd| _tj| j\| _| _| _| js>tjd d| _	d S | jj
| jdddddd	 d S )
NT)Zset_as_defaultz#dBus initialization error. Exiting.Zsenderdest	interfacememberpath)Zsender_keywordZdestination_keywordZinterface_keywordZmember_keywordZpath_keyword)r   rm   r   Z	init_dbusZ
dbus_availrY   session_busrO   errorrX   Zadd_signal_receiverhandleSessionSignal)r/   r3   r3   r4   ra     s    
zDevMgr5.initDBusc             C   s6   d| _ i | _i | _| jttdd tdd| _d S )NFhp_logoZ128x128Zfax2other)func_icons_cached
func_iconsdevice_iconsZsetWindowIconr,   load_pixmapfax_icon)r/   r3   r3   r4   rb     s
    zDevMgr5.initPixmapsc                sz   j jd  j jtj  jtj  jj	j
 fdd  jj	j
 fdd  j jd j
 j  jjttdd  jj	j
 j  jjttdd  jj	j
 j  jjttd	d  jj	j
 j  jjttd
d  jj	j
 j  jjttdd  jj	j
 j  jjttdd  jj	j
 j  jjttdd  jj	j
 j  jjttdd  jj	j
 j   j!jttdd  j!j	j
 j"  j#j	j
 j$  j%j&d j
 j'  j(j&d j
 j) t*j*t*j+t*j,  j-   j.   j/   j0   j1   j2j3t4 j
 j5  j6j7ddg  j j8t9dd  j j:d j
 j; d S )NTc                  s    j tjS )N)setDeviceListViewMode	QListViewIconModer3   )r/   r3   r4   <lambda>/  s    z DevMgr5.initUI.<locals>.<lambda>c                  s    j tjS )N)r   r   ListModer3   )r/   r3   r4   r   0  s    zconst QPoint &Zrefresh116x16refreshZlist_addZlist_removesettingsr?   Ztroubleshoothelpquitzconst QString &P   iX  r'   QListWidgetItem *)r   r   )<
DeviceListZsetSortingEnabledZsetContextMenuPolicyr;   ZCustomContextMenur   r   r   ViewAsIconsActionZ	triggeredconnectViewAsListActionZcustomContextMenuRequested%DeviceList_customContextMenuRequestedDeviceRefreshActionsetIconr,   r}   DeviceRefreshAction_activatedRefreshAllActionRefreshAllAction_activatedZSetupDeviceActionSetupDeviceAction_activatedRemoveDeviceActionRemoveDeviceAction_activatedZPreferencesActionPreferencesAction_activatedDiagnoseQueueActionDiagnoseQueue_activatedZDiagnoseHPLIPActionDiagnoseHPLIP_activatedrg   helpContentsZ
QuitActionr   ZAboutAction	helpAboutPrintControlPrinterNameComboZ	activated&PrintControlPrinterNameCombo_activatedPrintSettingsPrinterNameCombo'PrintSettingsPrinterNameCombo_activatedsignalSIGINTSIG_IGNinitActionsTabinitStatusTabinitSuppliesTabinitPrintSettingsTabinitPrintControlTabTabsZcurrentChangedintTabs_currentChangedZsplitterZsetSizessetIconSizeQSizeZcurrentItemChangedDeviceList_currentChanged)r/   r3   )r/   r4   rd   )  sJ    zDevMgr5.initUIc             C   sb   | j | j| j| j| j| jd| _d| _tj	rXt
jjtjddd}t
jj|rXd| | _d| _d S )N)r   r            r&   zhttp://hplip.sf.netdirsdocz
index.htmlz	file://%szhttps://launchpad.net/hplip)updateActionsTabupdateStatusTabupdateSuppliesTabupdatePrintSettingsTabupdatePrintControlTabupdateHPLIPupgradeTabIndexdocsrQ   rf   osrt   joinr_   r`   existssupport)r/   gr3   r3   r4   rc   i  s    
zDevMgr5.initMiscc             C   s   | j r| j  d S | j  d}| jd k	rH| j| jsHtjd| j  d}| jr| j  | j	t
jkrr| jjt| j | js| jjt| j d S )NTzDevice %s not foundF)rX   closerescanDevicesrT   activateDevicerO   rv   rV   getPrinterStateprinter_stater   ZIPP_PRINTER_STATE_STOPPEDrB   	sendEventEVENT_PRINTER_QUEUE_STOPPEDprinter_accepting"EVENT_PRINTER_QUEUE_REJECTING_JOBS)r/   Zcontr3   r3   r4   rl     s    
zDevMgr5.initalUpdatec             C   s~   t jt jdd|d	f  d}| jj|}d}xJ|d k	rx|j|krbd}| jj|d | jj| P |d7 }| jj|}q0W |S )
NzActivate: %s %s %sr      r   FTr   z********************z********************)rO   rP   Zboldr   itemr9   ZsetSelectedsetCurrentItem)r/   r9   indexdfoundr3   r3   r4   r     s    

zDevMgr5.activateDevicec             O   s  |d dko|d dkrt jd tj|d d  }|j  |jtk rLnv|jtkrt jd|j  | j|j}|d k	ry| j	j
|j| j| jd W n0 tjjk
r } zt jd	 W Y d d }~X nX n|jtkrt jd
 | jj  n|jtkr(t jd|j  | j|j}|d k	r| j| n|jtkrZt jd t jd tj  | j  nh|jtkrt jd | j  | j| j tj  @ tj!B  | j"  n$|jt#t$t%fkrnt jd|j  d S )Nrr   zcom.hplip.Toolboxrs   EventzHandling event...   zEVENT_DEVICE_UPDATE_REPLY (%s))reply_handlererror_handlerz dbus call to GetStatus() failed. EVENT_USER_CONFIGURATION_CHANGEDzEVENT_HISTORY_UPDATE (%s)EVENT_SYSTEMTRAY_EXITzDHPLIP Status Service was closed. HPLIP Device Manager will now exit.EVENT_RAISE_DEVICE_MANAGERzUnhandled event: %d)&rO   rP   r   r   
event_codeZEVENT_MIN_USER_EVENTZEVENT_DEVICE_UPDATE_REPLYr9   findDeviceByURIrY   Z	GetStatushandleStatusReplyhandleStatusErrordbus
exceptionsDBusExceptionrv   r   r[   r\   ZEVENT_HISTORY_UPDATEupdateHistoryr   warnr   releaseCupsInstancer   r   Z
showNormalZsetWindowStateZwindowStater;   ZWindowMinimizedZWindowActiveZraise_EVENT_DEVICE_START_POLLINGEVENT_DEVICE_STOP_POLLINGZEVENT_POLLING_REQUEST)r/   argskwdseventdever3   r3   r4   rw     sN    











zDevMgr5.handleSessionSignalc             C   s   | j |}|d k	ri }x0|D ](}tjt|t|| }|j|| qW |j |_x&|jD ]}|j| |j|jdd< qZW | j	| d S )N-_)
r   	model_objZconvert_datastr
setdefaultcopydq__dict__replaceupdateDevice)r/   r9   datar   tkeyvaluer   r3   r3   r4   r     s    


zDevMgr5.handleStatusReplyc             C   s   t jt| d S )N)rO   rv   r   )r/   r   r3   r3   r4   r     s    zDevMgr5.handleStatusErrorc             C   s`   |d kr| j }y| jj|j| j| jd W n0 tjjk
rZ } zt	j
d W Y d d }~X nX d S )N)r   r   z!dbus call to GetHistory() failed.)rB   rY   Z
GetHistoryr9   handleHistoryReplyhandleHistoryErrorr   r   r   rO   rv   )r/   r   r   r3   r3   r4   r     s    zDevMgr5.updateHistoryc             C   s   | j |}|d k	rg }|j  x |D ]}|jtjt|  q$W y|d j| _W n tk
rj   t	| _Y nX t
j| jt|_||_| j| d S )Nr   )r   reverseappendr   r   tupler   Z
error_code
IndexErrorZSTATUS_UNKNOWNSTATUS_TO_ERROR_STATE_MAPr`   ERROR_STATE_CLEARerror_statehistr   )r/   r9   historyr   resulthr3   r3   r4   r     s    

zDevMgr5.handleHistoryReplyc             C   s   t jt| d S )N)rO   rv   r   )r/   r   r3   r3   r4   r     s    zDevMgr5.handleHistoryErrorrM   c             C   s    t j||||||j| j d S )N)r   r   Zsend_via_dbusru   )r/   r9   Zprinter_namer   usernamejob_idtitler3   r3   r4   sendMessage  s    zDevMgr5.sendMessagec             C   sJ   | j  rF| jjrF| jrFtjd | j  | jjdkr>| j  n| j	  d S )NzRefresh timer...r   )
rW   r[   Zauto_refreshri   rO   rP   cleanupChildrenZauto_refresh_typerequestDeviceUpdater   )r/   r3   r3   r4   timedRefresh#  s    

zDevMgr5.timedRefreshc             C   s   | j dk	r| j|   dS )zU Called when the active tab changes.
            Update newly displayed tab.
        N)rB   r   )r/   tabr3   r3   r4   r   4  s    
zDevMgr5.Tabs_currentChangedc             C   s    x| j D ]}| j |   qW d S )N)r   )r/   r  r3   r3   r4   updateAllTabs;  s    zDevMgr5.updateAllTabsc             C   s    t jd | j| jj    d S )NzupdateCurrentTab())rO   rP   r   r   ZcurrentIndex)r/   r3   r3   r4   updateCurrentTab@  s    
zDevMgr5.updateCurrentTabc             C   s$   | j jd | j  | j jd d S )NFT)r   rh   r	  )r/   r3   r3   r4   r   M  s    z%DevMgr5.DeviceRefreshAction_activatedc             C   s   | j   d S )N)r   )r/   r3   r3   r4   r   S  s    z"DevMgr5.RefreshAllAction_activatedc             C   s\   |t jkr2| jjt j | jjd | jjd n&| jjt j | jjd | jjd d S )NFT)r   r   r   ZsetViewModer   rh   r   r   )r/   moder3   r3   r4   r   W  s    
zDevMgr5.setDeviceListViewModec       
      C   sb  |d kr| j }y
|j W n tk
r2   d|_Y nX y| j|j  W n    t|jd| j|j< Y nX | j|j }|j |j  }}|j}t||}t	|}|j
dd|j |j  |jdd| y
|j}W n tk
r   t}Y nX |jtkr|j|| jj  d| j |tkrV|ttfkr2t|d }	nt|d }	|	d k	rV|jdd|	 |j  |S )Ndefault_printerZdevicesr   r   )rB   iconAttributeErrorr|   r}   widthZheightr   QPixmapQPainterZ	eraseRectZ
drawPixmap	tech_typeZTECH_TYPE_NONEdevice_typeDEVICE_TYPE_FAXr~   r   TECH_TYPE_COLOR_INKTECH_TYPE_MONO_INKZgetStatusOverlayIconend)
r/   r   pixwr  r   r  pr  Zstatus_iconr3   r3   r4   createDeviceIconb  s>    





zDevMgr5.createDeviceIconc             C   s  t jd t  d| _| j| jd | j j| jd tj	ddg| _
d }z g }x | j
D ]}|tkr^|j| q^W t jddj|  g }x tD ]}|| j
kr|j| qW t jd	dj|  g }x&tD ]}||kr||kr|j| qW t jd
dj|  x|D ]}t jd|  tj|| jdd}|jsPt jd |j| q| j|}|jtkrt| j| jd|j || n8|jrt| j| jd|j || nt| j|j|| |t|< qW t jddj|  d }x|D ]}|}| jj d }	| jj|	}
t jd|  y
t|= W n tk
r8   Y nX xH|	dkr|
d k	r|
j|krj| jj|	 P |	d8 }	| jj|	}
q<W tj  qW | jj  tj  t trx| j!D ]}| j"j#|d qW | j$rHd}	| jj|	 }
}x\|
d k	r:tj  |
j| j$kr"|
}| j j| j$ P |	d7 }	| jj|	}
qW d | _%d| _$| j%d kr| jjd}|d k	r|j| _$t| j$ | _%|}| j&  | j$r| j$| j'_(| j'j)  x|| D ]}||kr| j*t|  qW nzd | _%| j+j,d | j-j,d | j.j,d d| _| j j| jd x| j!D ]}| j"j#|d q W t/  t0| }|j1  W d d| _t/  X |d k	rv| jj2| | j+j,d | j%d k	r| j-j,d | j.j,d | j j| j$ | j3  d S )NzRescanning device list...Tz*Refreshing Device List - HP Device ManagerzRefreshing device list...ZhpZhpfaxzAdds: %s,zRemovals (1): %szUpdates: %sz
adding: %sF)rY   Zdisable_dbusz$Unsupported model - removing device.z%s (Fax)z%s (Printer)zRemovals (2): %sr   zremoving: %sr   rM   zPress F6 to refresh.)4rO   rP   beginWaitCursorrW   setWindowTitle_DevMgr5__tr	statusBarshowMessager   ZgetSupportedCUPSDevicesZcups_devicesdevice_listr   r   ZDevicerY   	supportedr  r  r  r8   r   model_uifax_typecountr   KeyErrorr9   ZtakeItemrF   processEventsZupdateGeometrylenr   r   ZsetTabEnabledr^   rB   updatePrinterCombosr[   r]   saver	  r   rh   r   r   endWaitCursorr"   rD   r   updateWindowTitle)r/   ZcurrentZaddsr   ZremovalsZupdatesr   r  Zremoved_devicer   r   r  Z
first_itemidlgr3   r3   r4   refreshDeviceList  s    



















zDevMgr5.refreshDeviceListc             C   st   | j jtkr&| j| jd| j j  n:| j jrH| j| jd| j j  n| j| jd| j j  | j j| j	 d S )NzHP Device Manager - %s (Fax)z HP Device Manager - %s (Printer)zHP Device Manager - %s)
rB   r  r  r!  r"  r'  r(  r#  r$  r^   )r/   r3   r3   r4   r0  /  s    zDevMgr5.updateWindowTitlec             C   s   | j | j|S )N)r   r   )r/   r9   r3   r3   r4   updateDeviceByURI;  s    zDevMgr5.updateDeviceByURITc             C   s  |dkr| j }tjd|j  | j|}|dk	rD|jt| j| || j koP|r
| j  | j	  | j
 j| j | j jtkr| jj| jj| jtjddd | jj| jj| jtjddd nD| jj| jj| jtjddd | jj| jj| jtjddd dS )z= Update the device icon and currently displayed tab.
        NzupdateDevice(%s)
MainWindowzPrint SettingszPrinter ControlzFax SettingszFax Control)rB   rO   rP   r9   findItemr   r,   r  r-  r  r#  r$  r^   r  DEVICE_TYPE_PRINTERr   Z
setTabTextindexOfZSettingsQApplicationrG   ZControl)r/   r   
update_tabr   r3   r3   r4   r   ?  s    
"$"zDevMgr5.updateDevicec             C   sR   |d k	rN| j  rN| jj j| _t| j | _| j| j_| jj	  | j
  | j  d S )N)rW   r   currentItemr9   r^   r%  rB   r[   r]   r.  r   r0  )r/   r1  jr3   r3   r4   r   Y  s    

z!DevMgr5.DeviceList_currentChangedc             C   s   |d kr| j }| j|jS )N)rB   findItemByURIr9   )r/   r   r3   r3   r4   r6  e  s    zDevMgr5.findItemc             C   sD   d}| j j|}x.|d k	r>|j|kr(|S |d7 }| j j|}qW d S )Nr   r   )r   r   r9   )r/   r9   r   r   r3   r3   r4   r=  l  s    

zDevMgr5.findItemByURIc          	   C   s   yt | S    d S d S )N)r%  )r/   r9   r3   r3   r4   r   x  s    zDevMgr5.findDeviceByURIc             C   s>   |dkr| j }|dk	r:t|_| j|dd | j|jdt dS )z0 Submit device update request to update thread. NF)r:  rM   )rB   ZERROR_STATE_REFRESHINGr   r   r  r9   ZEVENT_DEVICE_UPDATE_REQUESTED)r/   r   r   r3   r3   r4   r	    s    zDevMgr5.requestDeviceUpdatec             C   s2   | j s.| jjd z| j  W d| jjd X dS )z  Rescan and update all devices. FNT)rW   r   rh   r3  )r/   r3   r3   r4   r     s
    zDevMgr5.rescanDevicesc             C   s   t j  d S )N)rF   r+  )r/   r3   r3   r4   callback  s    zDevMgr5.callbackc       
         s   j }|d k	r|jtko|j}|jtko,|}|jtkoTtj	oT|jt
koTtjdkoT|}|jtkoptjop|op jj}|jtko~|}t } jj }	|	d k	rN j jtkr2|r
|j jd fdd |r|j jd fdd |r*|j jd fdd n |r*|j jd	 fd
d |j   jsN|j jd j  jsj|j jd j |j   jj t j!kr|j jd fdd n|j jd fdd |j" jj#| d S )Ni zPrint...c                  s    j t  jS )N)contextMenuFuncr   rV   r3   )r/   r3   r4   r     s    z?DevMgr5.DeviceList_customContextMenuRequested.<locals>.<lambda>zScan...c                  s    j  jjS )N)r?  r[   cmd_scanr3   )r/   r3   r4   r     s    zMake Copies...c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    zSend Fax...c                  s    j t  j jS )N)r?  r   rV   r^   r3   )r/   r3   r4   r     s    zRefresh DevicezRefresh AllzView as Listc                  s    j tjS )N)r   r   r   r3   )r/   r3   r4   r     s    zView as Iconsc                  s    j tjS )N)r   r   r   r3   )r/   r3   r4   r     s    )$rB   device_stateDEVICE_STATE_NOT_FOUNDr&  r  r7  r(  FAX_TYPE_NONErQ   	fax_buildr  sys
hexversion	scan_typeSCAN_TYPE_NONE
scan_buildr[   r@  	copy_typeCOPY_TYPE_NONEZQMenur   r;  r   ERROR_STATE_ERRORZ	addActionr"  ZaddSeparatorrW   r	  r   ZviewModer   r   rD   ZmapToGlobal)
r/   r  r   availprinterfaxscancpyZpopupr   r3   )r/   r4   r     s>    


z-DevMgr5.DeviceList_customContextMenuRequestedc             C   s   | j ddt zpy|j  W n^ tk
rz   t  |jdd d	kr^tjd|  tj	| n
| j
| tjd| j Y nX W d | j ddt X d S )
NrM   :r   httphttpsfilezOpening browser to: %si  )rS  rT  rU  )r  r   rD   r  r   splitrO   rP   r   openURLrunExternalCommandrj   rk   unlockClickr   )r/   fr3   r3   r4   r?    s    
zDevMgr5.contextMenuFuncc             C   sr   | j j  | jj  | jd k	rn| jjrn| jj  x,| jjD ] }| j jd| | jjd| q:W t| j j	 | _
d S )Nr   )r   clearr   rB   r&  ZupdateCUPSPrinterscups_printersZ
insertItem
to_unicodeZcurrentTextrV   )r/   rI   r3   r3   r4   r-    s    



zDevMgr5.updatePrinterCombosc             C   s   t || _| j  d S )N)r]  rV   r  )r/   rH   r3   r3   r4   r     s    
z/DevMgr5.PrintSettingsPrinterNameCombo_activatedc             C   s   t || _| j  d S )N)r]  rV   r  )r/   rH   r3   r3   r4   r     s    
z.DevMgr5.PrintControlPrinterNameCombo_activatedc             C   sD   d | _ | jjtdd | jjd j| j | jjd j| j d S )N    zQListWidgetItem *)
click_lockActionsListr   r   ZitemClickedr   ActionsList_clickedZitemDoubleClicked)r/   r3   r3   r4   r     s    zDevMgr5.initActionsTabc          0      s  t   z
jj  
jd k	rjtko2j jtkoZt	j
oZjtkoZtjdkoZ jtkoh jtkot	joo
jj	jtkojtkjtky"tj
j\	}}}}}}}}W n tk
r   d S X tj }	t dd}
|	j!|
 |
j"  yt#j$|	j%ddW n tj&k
r6   dY nX jt'krr\r\
j(d}nJrv rv
j(d}n0rr
j(d	}nr r
j(d
}nd}fdd
j(dd
j(d
fddf	fdd
j(dd
j(d
jjffdd
j(dd
j(d
fddffdd
j(dd
j(d
fddffd d
j(d!d"
j(d#
fd$df
fd%d
j(d&d'
j(d(
jj)f fd)d
j(d*d+
j(d,
fd-dffd.d
j(d/d0
j(d1
fd2dfd3d 
j(d4d5
j(d6
fd7dffd8d
j(d9d:
j(d;
fd<dffd=d
j(d>d?
j(d@
fdAdffdBd
j(dCdD
j(dE
fdFdffdGd
j(dCdD
j(dH
fdIdffdJd
j(dKdL
j(dM
fdNdffdOd
j(dPdQ
j(dR
fdSdffdTd
j(dUdV
j(dWdX
j ffdYd
j(dZd[
j(d\
fd]dffd^d
j(d_d|
fd`dffdad
j(dbd|
fdcdffddd
j(dedf
j(dgt*||fdhd 
j(didj
j(dk
j+fdld 
j(dmdn
j(do
j,fg
_-
j.sRx*
j-D ] \}}}}}t/|dp
j0|< q(W dq
_.xH
j-D ]>\}}}}}|d k	r~| s~qZt1
j|
j0| || qZW W d t2  X d S )rNi z/etc/hp/hplip.confrrK   pluginFz<Download and install<br>required plugin (already installed).z=Download and install<br>required plugin (needs installation).z<Download and install<br>optional plugin (already installed).z=Download and install<br>optional plugin (needs installation).rM   c                  s    S )Nr3   r3   )rN  r3   r4   r   Q  s    z*DevMgr5.updateActionsTab.<locals>.<lambda>ZPrintprintzPrint documents or files.c                  s   t   jS )N)r   rV   r3   )r/   r3   r4   r   U  s    c                  s    S )Nr3   r3   )rP  r3   r4   r   W  s    ZScanrP  z*Scan a document, image, or photograph.<br>c                  s    S )Nr3   r3   )rQ  r3   r4   r   ]  s    zMake CopiesZ
makecopiesz3Make copies on the device controlled by the PC.<br>c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r   a  s    c                  s    S )Nr3   r3   )rO  r3   r4   r   e  s    zSend FaxrO  zSend a fax from the PC.c                  s   t   j jS )N)r   rV   r^   r3   )r/   r3   r4   r   i  s    c                  s    S )Nr3   r3   )rO  r3   r4   r   k  s    z	Fax SetupZ	fax_setupz4Fax support must be setup before you can send faxes.c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r   o  s    c                  s    o
j jS )N)r[   cmd_fabr3   )rO  r/   r3   r4   r   q  s    zFax Address BookZfabz>Setup fax phone numbers to use when sending faxes from the PC.c                  s   j tko S )N)Zpower_settingsZPOWER_SETTINGS_NONEr3   )rM  r   r3   r4   r   y  s    zDevice Settingsr   zNYour device has special device settings.<br>You may alter these settings here.c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r   }  s    c                  s    S )Nr3   r3   )rN  r3   r4   r     s    zPrint Test PageZtestpagez4Print a test page to test the setup of your printer.c                  s   t   jS )N)r   rV   r3   )r/   r3   r4   r     s    c               S   s   dS )NTr3   r3   r3   r3   r4   r     s    z#View Printer and Device Informationr   z:View information about the device and all its CUPS queues.c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    c                  s   o j tkS )N)Z
align_typeZALIGN_TYPE_NONEr3   )r   rN  r3   r4   r     s    zAlign Cartridges (Print Heads)ZalignzJThis will improve the quality of output when a new cartridge is installed.c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    c                  s   o j tkS )N)Z
clean_typeZCLEAN_TYPE_NONEr3   )r   rN  r3   r4   r     s    zClean PrintheadsZcleanzyYou only need to perform this action if you are<br>having problems with poor printout quality due to clogged ink nozzles.c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    c                  s   o j tko j tkS )N)color_cal_typeCOLOR_CAL_TYPE_NONECOLOR_CAL_TYPE_TYPHOONr3   )r   rN  r3   r4   r     s    zColor CalibrationZcolorcalz^Use this procedure to optimimize your printer's color output<br>(requires glossy photo paper).c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    c                  s   o j tko j tkS )N)rf  rg  rh  r3   )r   rN  r3   r4   r     s    z=Use this procedure to optimimize your printer's color output.c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    c                  s   o j tkS )N)Zlinefeed_cal_typeZLINEFEED_CAL_TYPE_NONEr3   )r   rN  r3   r4   r     s    zLine Feed CalibrationZlinefeed_calz^Use line feed calibration to optimize print quality<br>(to remove gaps in the printed output).c                  s   t   jS )N)r    r^   r3   )r/   r3   r4   r     s    c                  s   o j tkS )N)Zpq_diag_typeZPQ_DIAG_TYPE_NONEr3   )r   rN  r3   r4   r     s    zPrint Diagnostic PageZpq_diagzOYour printer can print a test page <br>to help diagnose print quality problems.c                  s   t   jS )N)r!   r^   r3   )r/   r3   r4   r     s    c                  s   oj tko dkS )NZusb)Zwifi_configZWIFI_CONFIG_USB_XMLr3   )busr   rN  r3   r4   r     s    zWireless/wifi setup using USBZwirelesszIConfigure your wireless capable printer using a temporary USB connection.zhp-wificonfig -d %sc                  s
   o j S )N)Zfw_downloadr3   )r   rN  r3   r4   r     s    zDownload FirmwareZfirmwarezUDownload firmware to your printer <br>(required on some devices after each power-up).c                  s   t   jS )N)r   r^   r3   )r/   r3   r4   r     s    c                  s    oS )Nr3   r3   )rN  
req_pluginr3   r4   r     s    zInstall Required Pluginc                  s   t  jS )N)r<   rc  r3   )r   r>   r/   r3   r4   r     s    c                  s   o S )Nr3   r3   )
opt_pluginrN  r3   r4   r     s    zInstall Optional Pluginc                  s   t  jS )N)r<   rc  r3   )r   r>   r/   r3   r4   r     s    c                  s   oj tko dkS )NZnet)Zembedded_server_typeZEWS_NONEr3   )ri  r   rN  r3   r4   r     s    z$Open printer's web page in a browserZewszAThe printer's web page has supply, status, and other information.c               S   s   dS )NTr3   r3   r3   r3   r4   r     s    zVisit HPLIP Support Websiterx   zVisit HPLIP Support Website.c               S   s   dS )NTr3   r3   r3   r3   r4   r     s    ZHelpr   zView HPLIP help.Z32x32T)3r   r`  r[  rB   rA  rB  r&  r(  rC  rQ   rD  r  r  rE  rF  r7  rG  rH  rI  r[   r@  rJ  rK  rc  rA   ZPLUGIN_OPTIONALr   ZparseDeviceURIr^   Errorr   ConfigParseropenZreadfpr   r   Zto_boolr`   NoOptionErrorZPLUGIN_NONEr"  re  openEWSr   r   ZICONSrz   r}   r{   r)   r/  )r/   Zback_endZis_hpZmodelserialZdev_filehostzcZportZ
hplip_conffpxZfilter1   r  Ztooltipr.   Zfltrr3   )rM  ri  rQ  r   rO  rk  r>   rN  rj  rP  r/   r4   r     s>   



"











zDevMgr5.updateActionsTabc             C   s   |d k	r| j |k	r|| _ |jrbt|jtjrb|j }| jddt z|j  W d | jddt X nHt	  |jj
dd d	krtjd|j  tj|j n| jt|j tjd| j d S )
NrM   rR  r   rS  rT  rU  zOpening browser to: %si  )rS  rT  rU  )r_  r.   
isinstancecollectionsCallabler  r   rD   r   r   rV  rO   rP   r   rW  rX  r   rj   rk   rY  )r/   r   r2  r3   r3   r4   ra    s    zDevMgr5.ActionsList_clickedc             C   s   d | _ t  d S )N)r_  r/  )r/   r3   r3   r4   rY    s    zDevMgr5.unlockClickc             C   s   t | d S )N)rd  )r/   r  r3   r3   r4   &ActionsList_customContextMenuRequested  s    z.DevMgr5.ActionsList_customContextMenuRequestedc             C   sF   | j jd | jd| jd| jd| jd| jd| jdg| _d S )Nr   rM   StatuszDate and TimeZCodezJob IDDescription)StatusTablesetColumnCountr"  status_headers)r/   r3   r3   r4   r     s    zDevMgr5.initStatusTabc             C   s   | j   | j  d S )N)updateStatusLCDupdateStatusTable)r/   r3   r3   r4   r   !  s    zDevMgr5.updateStatusTabc             C   s   | j d k	r| j jr| j jr| j j}|jdddkrL|jdd}|jdd}n:ytj| j jd j}W n tt	fk
r   d}Y nX d}| j
|| nb| j jtkr| j
| jd| jd n<| j js| j
| jd	 n"| j js| j
| jd
 n| j
  d S )NZpanelr   r   zpanel-line1rM   zpanel-line2zStatus information notzavailable for this device.zDevice not supported.zNo status history available.)rB   r   r&  r   r`   r   queryStringr   r  	TypeErrordrawStatusLCDstatus_typeSTATUS_TYPE_NONEr"  )r/   r   line1line2r3   r3   r4   r  &  s(    

zDevMgr5.updateStatusLCDc             C   s   t dd}t }|j| |jtddd |j| j  d\}}}|rV|j||| |rh|j||| |j  | j	j
| d S )NZ	panel_lcdry   r   
      !   )r  r  r  )r}   r  beginsetPenQColorZsetFontZfontZdrawTextr  ZLCD	setPixmap)r/   r  r  Zpmr  ru  Zy_line1Zy_line2r3   r3   r4   r  H  s    


zDevMgr5.drawStatusLCDc             C   s  | j j  tjtjB }d}| jjd d  }|r| j jt| | j j	t| j
 | j j| j
 | j j j  | j j j  |j  t|d }xn|D ]d}|d krqtj|jd}tj|jd}|dkr| jd}n
t|j}t }|jt|j td|j |f }	|jr t|j}
ntd}
tj|jt }| jj!}|t"t#fkrZt$|d }nt$|d }t|j}t%t&|| jd}|j'| | j j(|d| xVd|fd|	fd|fd|
fd	|fgD ]0\}}t%t|}|j'| | j j(||| qW |d8 }qW | j j)  | j j*dd
 n| j jd | j j	d | j jddg | j j j  | j j j  tj}t$t+d }t%t&|| jd}|j'| | j j(|d| t%| jd}|j'| | j j(dd| | j j)  | j j*dd
 d S )Nr   r   z(most recent)z%s %srM   r   r   r   r&      z1Status information not available for this device.),r|  r[  r;   ItemIsSelectableItemIsEnabledrB   r   setRowCountr,  r}  r~  setHorizontalHeaderLabelsverticalHeaderhidehorizontalHeadershowr   r   r  r   r"  ZgetTimeDeltaDescZtimedateZ	QDateTimeZ	setTime_tr   r   ZtoStringr  r]  r   r`   r   r  r  r  getStatusListIconQTableWidgetItemr,   setFlagssetItemresizeColumnsToContentssetColumnWidthrL  )r/   flagsrowr   r   ZessZeslZdescZdtZttr  r   r  Z
status_pixr   r1  colr   r2   r3   r3   r4   r  _  sr    



,




zDevMgr5.updateStatusTablec          4   C   s$  t dd| _d}d}d}d}d}d}d	}d
}d}	d}
d}d}t|gt|gt|gt|
gt|gt|||gt|||gt	|
gt
|gt|gt|gt|gt|gt|gt|gt|||gt||gt||
gt|gt|	gt|
gt|gt||gt||gt|gt|gi| _| jd| jd| jd| jd| jdg| _d S )NZbatteryr   z#ffff00z#ffffccz#00ffffz#ccffffz#ff00ffz#ffccffz#000000z#0000ffz#808080z#a9a9a9z#c0c0c0z#ff0000rM   r{  zHP Part No.zApprox. Levelrz  )r}   pix_batteryAGENT_TYPE_UNSPECIFIEDAGENT_TYPE_BLACKZAGENT_TYPE_MATTE_BLACKZAGENT_TYPE_PHOTO_BLACKZAGENT_TYPE_BLACK_B8800ZAGENT_TYPE_CMYZAGENT_TYPE_KCMZAGENT_TYPE_GGKZAGENT_TYPE_YELLOWZAGENT_TYPE_MAGENTAZAGENT_TYPE_CYANZAGENT_TYPE_CYAN_LOWZAGENT_TYPE_YELLOW_LOWZAGENT_TYPE_MAGENTA_LOWAGENT_TYPE_BLUEZAGENT_TYPE_KCMY_CMZAGENT_TYPE_LC_LMZAGENT_TYPE_LG_PKZAGENT_TYPE_LGZAGENT_TYPE_GZAGENT_TYPE_DGZAGENT_TYPE_PGZAGENT_TYPE_C_MZAGENT_TYPE_K_YZAGENT_TYPE_LCZAGENT_TYPE_REDTYPE_TO_PIX_MAPr"  supplies_headers)r/   ZyellowZlight_yellowZcyanZ
light_cyanZmagentaZlight_magentablackZblueZgrayZ	dark_grayZ
light_grayZredr3   r3   r4   r     sT    


zDevMgr5.initSuppliesTabc             C   s  t   tjtjB }z| jj  | jjd | jjd | jd k	o`| jj	o`| jj
tko`| jjtkrg | j_d}xvy<t| jjd|  }t| jjd|  }| jjd|  }W n tk
r   P Y nX | jjj||||f |d7 }qrW | jjjtjtjd | jjt| jj | jjt| j | jj| j | jj j  | jj j  | jjtdd xt | jjD ]p\}}|\}}}}y8t| jjd	|  }| jjd
|  }	| jjd|  }
W n tk
r   P Y nX d }|t!t"t#t$t%t&t'fkr| j(||}d }|t!t)t"t#t&fkr&| j*||}|d k	r^t+t,|| j-d}|j.| | jj/|d| xJd|	fd|fd|
fgD ]0\}}t+t0|}|j.| | jj/||| qvW |d k	rrt+t,|| j-d}|j.| | jj/|d| qrW | jj1  | jj2dd | jj2dd nt3j4d tj}| jjd | jjd | jjddg | jj j  | jj j  t+| j-d}|j.| | jj/dd| t5t6d }t+t,|| j-d}|j.| | jj/dd| | jj1  | jj2dd W d t7  X d S )Nr   r   zagent%d-typezagent%d-kindzagent%d-sku)r   d      zagent%d-levelzagent%d-desczagent%d-health-descrM   r   r   r   r  x   z3Supplies information not available for this device.)8r   r;   r  r  ZSuppliesTabler[  r  r}  rB   r&  r  r  rA  rB  Zsorted_suppliesr   r   r*  r   sortr   
cmp_to_keyZ	levelsCmpr,  r  r  r  r  r  r  r   r   	enumerateAGENT_KIND_SUPPLYAGENT_KIND_HEAD_AND_SUPPLYAGENT_KIND_TONER_CARTRIDGEZAGENT_KIND_MAINT_KITZAGENT_KIND_ADF_KITAGENT_KIND_INT_BATTERYZAGENT_KIND_DRUM_KITcreateStatusLevelGraphicAGENT_KIND_HEADgetStatusIconr  r,   r"  r  r  r   r  r  rO   r?   r  rL  r/  )r/   r  a
agent_type
agent_kindZ	agent_skur  ru  Zagent_levelZ
agent_descZagent_health_descZlevel_pixmapr2   r1  r  r   r3   r3   r4   r     s    





 







zDevMgr5.updateSuppliesTabc             C   s2  |t tttfkr| j| }t|trt|}tdd}|j	t
dddd t }|j| |jtj |dkr|jt
|d  |jtt
|d tj |jdddddd nV|dkrB|jt
|d  |jtt
|d tj |jdddddd |jt
|d  |jtt
|d tj |jd	ddddd n|d
kr|jt
|d  |jtt
|d tj |jd	d	dddd |jt
|d  |jtt
|d tj |jdd	dddd |jt
|d  |jtt
|d tj |jdddddd |j  |S |S n|tkr.| jS d S )N   r   r   r   r  i  r      r   r   )r  r  r  r  r  rv  listr,  r  fillr  r  r  setRenderHintAntialiasingr  ZsetBrushQBrushr;   ZSolidPatternZdrawPier  r  r  )r/   r  r  mapmap_lenr  r  r3   r3   r4   r  e  sL    






zDevMgr5.getStatusIconr  r  c          	   C   s  |r|d | }nd}t ||}|jtdddd t }|j| |jtj |jtj	 | j
| }t|}	|	dks~|	dkr|jdd||tt|d  n|	dkr|d }
|jdd||
tt|d  |jd|
||tt|d  nt|	dkr`|d }d| }|jdd||tt|d  |jd|||tt|d  |jd|||tt|d  |jdd|| |dkr|tttfkr|jtj d| d }|d }|j|d|| |j|||||  |d	kr|tttfkr|jtj |d }|d }|j|d|| |j|||||  |d
krN|tttfkrN|jtj |d }|j|d|| |j|||||  |j  |S )Nr  r   r   r   r   K   r   r   2      )r  r  r  r  r  r  r  r  r;   r  r  r,  ZfillRectr  ZdrawRectr  r  r  ZwhiteZdrawLiner  )r/   Zpercentr  r  r  fwZpxZppr  r  Zh2Zh3Zh23Zw1Zh6Zw2Zh4Zw4r3   r3   r4   r    s\    


  
z DevMgr5.createStatusLevelGraphicc             C   s   d S )Nr3   )r/   r3   r3   r4   r     s    zDevMgr5.initPrintSettingsTabc          
   C   s\   t   zH| jjtkr(| jj| jd n| jj| jd | jj| j| j	 W d t
  X d S )NzPrinter Name:z	Fax Name:)r   rB   r  r7  ZPrintSettingsPrinterNameLabelsetTextr"  r%   ZupdateUirV   r/  )r/   r3   r3   r4   r     s    zDevMgr5.updatePrintSettingsTabc             C   sn  t j| jdt j| jdt j| jdt j| jdt j| jdt j| jdt j| jdi| _	| j
jttdd	 | jjttd
d	 t jttdd	t jttdd	t jttdd	t jttdd	t jttdd	t jttdd	t jttdd	i| _| jjj| j | jjj| j | jjj| j | j
jj| j | jjj| j | jd| jd| jdg| _d S )NZPendingzOn holdZPrintingStoppedZCanceledZAbortedZ	CompletedZcancelr   r   busyrd  r?   rv   rC   rz  zTitle/DescriptionzJob ID)r   ZIPP_JOB_PENDINGr"  ZIPP_JOB_HELDZIPP_JOB_PROCESSINGZIPP_JOB_STOPPEDZIPP_JOB_CANCELLEDZIPP_JOB_ABORTEDZIPP_JOB_COMPLETED
JOB_STATESCancelJobButtonr   r,   r}   ZRefreshButtonJOB_STATE_ICONSStartStopButtonclickedr   StartStopButton_clickedAcceptRejectButtonAcceptRejectButton_clickedSetDefaultButtonSetDefaultButton_clickedCancelJobButton_clickedRefreshButton_clickedjob_headers)r/   r3   r3   r4   r     s,    zDevMgr5.initPrintControlTabc             C   s   | j jj| j d| _d S )NF)InstallLatestButtonr  r   InstallLatestButton_clickedInstallLatestButton_lock)r/   r3   r3   r4   initUpgradeTab  s    zDevMgr5.initUpgradeTabc             C   s   | j dkrd S | jrj| jjd tj }|d k	rNtjdrN|d }tj| nt	j
d|  | jjd nd| _ tjd tjd| j d S )NTFz
hp-upgradez 'hp-upgrade -w'z3Failed to run hp-upgrade command from terminal =%s z>http://hplipopensource.com/hplip-web/install/manual/index.htmli  )r  rZ   r  rh   r   get_terminalwhichr
   executerO   rv   rW  rj   rk   InstallLatestButton_unlock)r/   terminal_cmdr.   r3   r3   r4   r  #  s    

z#DevMgr5.InstallLatestButton_clickedc             C   s
   d| _ d S )NF)r  )r/   r3   r3   r4   r  5  s    z"DevMgr5.InstallLatestButton_unlockc             C   sL   | j j }|d k	rHt|jtj\}}|rH|rH| jj| tj	d| j
 d S )Ni  )JobTabler;  Z	value_intr   r;   UserRolerB   	cancelJobrj   rk   r   )r/   r   r  rC   r3   r3   r4   r  9  s    
zDevMgr5.CancelJobButton_clickedc             C   s   | j   d S )N)r   )r/   r3   r3   r4   r  C  s    zDevMgr5.RefreshButton_clickedc             C   s   | j   d S )N)r  )r/   r3   r3   r4   r   F  s    zDevMgr5.updateHPLIPupgradec             C   s  | j jtkr6| jj| jd | jjtj	ddd  n(| jj| jd | jjtj	ddd  | j
j  | j
jd | j
jd | j  tjtjB }tj }d}x |D ]}|j| jkr|d7 }qW |r| jjd | j
j| | j
jt| j | j
j| j xt|D ]\}}|j| jkr
t| j|j | j|j }|j tj!|j" |j#| | j
j$|d| t|j%}|j#| | j
j$|d| tt&|j"}|j#| | j
j$|d	| q
W | j
j'dd | j
j(  n| jjd
 d S )NzPrinter Name:r5  zPrinter Queue Controlz	Fax Name:zFax Queue Controlr   r   Tr   F))rB   r  r7  ZPrintControlPrinterNameLabelr  r"  ZgroupBoxZsetTitler9  rG   r  r[  r  r}  updatePrintControllerr;   r  r  r   ZgetJobsrq   rV   r  rh   r,  r  r  r  r  r  stater  ZsetDatar  idr  r  r  r]  ZsetCurrentCellr  )r/   r  ZjobsZnum_jobsr<  r  r1  r3   r3   r4   r   L  sF    





zDevMgr5.updatePrintControlTabc             C   sF   t j| _d| _t j }x*|D ]"}|j| jkr|j| _|j| _P qW d S )NT)	r   IPP_PRINTER_STATE_IDLEr   r   ZgetPrintersrn   rV   r  Z	accepting)r/   r\  r  r3   r3   r4   r   |  s    
zDevMgr5.getPrinterStatec             C   s  | j j| jd tj }| jjtkr,d}nd}|| jkrp| j	j| jd|  | j
jtdd | j jd n4| j	j| jd|  | j
jtd	d | j jd
 | j  | jtjkr| jj| jd | jjtdd | jj| jd|  n| jtjkr>| jj| jd | jjtdd | jj| jd|  n:| jj| jd | jjtdd | jj| jd|  | jr| jj| jd | jjtdd | jj| jd n6| jj| jd | jjtdd | jj| jd d S )NzSet as DefaultZPrinterZFaxz
Default %srC   r   FzNot Default %sinfoTzStarted/IdleZidlezStop %szStarted/Processingr  r  r?   zStart %szAccepting JobszReject JobszRejecting JobszAccept Jobs)r  r  r"  r   ZgetDefaultPrinterrB   r  r7  rV   ZSetDefaultLabelZSetDefaultIconr  r}   rh   r   r   r  ZStartStopLabelZStartStopIconr  IPP_PRINTER_STATE_PROCESSINGr   ZAcceptRejectLabelZAcceptRejectIconr  )r/   r  Zdevice_stringr3   r3   r4   r    s>    
zDevMgr5.updatePrintControllerc             C   s   t   z| jtjtjfkrVtjtjtd| | j\}}|tj	kr| j
jtkrPt}qt}n:tjtjtd| | j\}}|tj	kr| j
jtkrt}nt}|tj	kr| j  | j
j|| j nt| | jd|  tj  W d t  X d S )Nqt4z><b>Start/Stop printer queue operation fails. </b><p>Error : %s)r   r   r   r  r  cups_operationstopGUI_MODErV   IPP_OKrB   r  r7  r   ZEVENT_FAX_QUEUE_STOPPEDstartZEVENT_PRINTER_QUEUE_STARTEDZEVENT_FAX_QUEUE_STARTEDr  r   	FailureUIr"  r   r/  )r/   r  
result_strr   r3   r3   r4   r    s&    


zDevMgr5.StartStopButton_clickedc             C   s   t   z| jrJtjtjtd| | j\}}|tjkr| jj	t
krDt}qt}n:tjtjtd| | j\}}|tjkr| jj	t
krt}nt}|tjkr| j  | jj|| j nt| | jd|  tj  W d t  X d S )Nr  z@<b>Accept/Reject printer queue operation fails.</b><p>Error : %s)r   r   r   r  Zrejectr  rV   r  rB   r  r7  r   ZEVENT_FAX_QUEUE_REJECTING_JOBSacceptZ"EVENT_PRINTER_QUEUE_ACCEPTING_JOBSZEVENT_FAX_QUEUE_ACCEPTING_JOBSr  r   r  r"  r   r/  )r/   r  r  r   r3   r3   r4   r    s&    


z"DevMgr5.AcceptRejectButton_clickedc             C   s   t   zztjtjtd| | jjd\}}|tjkrPt| | j	d|  tj
  n.| j  | jjtkrjt}nt}| jj|| j W d t  X d S )Nr  utf8zB<b>Set printer queue as default operation fails. </b><p>Error : %s)r   r   r  ZsetDefaultPrinterr  rV   encoder  r  r"  r   r  rB   r  r7  Z"EVENT_PRINTER_QUEUE_SET_AS_DEFAULTZEVENT_FAX_QUEUE_SET_AS_DEFAULTr   r/  )r/   r  r  r   r3   r3   r4   r    s     

z DevMgr5.SetDefaultButton_clickedc          
   C   sV   t   z:| jj }x*|d k	r<|j r2| jj|j |j }qW W d t  X | j	  d S )N)
r   r  Z
firstChildZisOnrB   r  r  ZnextSiblingr/  r   )r/   r   r3   r3   r4   cancelCheckedJobs  s    

zDevMgr5.cancelCheckedJobsc             C   s   | j   |j  d S )N)cleanupr  )r/   r   r3   r3   r4   
closeEvent)  s    zDevMgr5.closeEventc             C   s   | j   d S )N)r  )r/   r3   r3   r4   r  .  s    zDevMgr5.cleanupc             C   s6   t jd ytjdtj W n tk
r0   Y nX d S )NzCleaning up child processes.r   )rO   rP   r   waitpidWNOHANGOSError)r/   r3   r3   r4   r  2  s
    
zDevMgr5.cleanupChildrenc             C   s   | j   tj  | j  d S )N)r  r   r   r   )r/   r3   r3   r4   r   :  s    zDevMgr5.quitc             C   sJ   t | }|jj| |j tjkrF| jj  | jd k	rF| jj	t
| j d S )N)r$   Z	TabWidgetZsetCurrentIndexrD   QDialogAcceptedr[   r\   rB   r   r   rV   )r/   Ztab_to_showr2  r3   r3   r4   r   M  s    

z#DevMgr5.PreferencesAction_activatedc             C   s<   t jdrd}nd}tj| t j| | j  | j  d S )Nzhp-setupzhp-setup --guizpython ./setup.py --gui)r   r  rO   rP   runr   r-  )r/   r.   r3   r3   r4   r   ^  s    


z#DevMgr5.SetupDeviceAction_activatedc             C   sT   t jdrd}nd}| jd k	r,|d| j 7 }tj| t j| | j  | j  d S )Nzhp-setupzhp-setup --gui --removez python ./setup.py --gui --removez --device=%s)r   r  r^   rO   rP   r  r   r-  )r/   r.   r3   r3   r4   r   j  s    



z$DevMgr5.RemoveDeviceAction_activatedc             C   s,   t jdrd}nd}tj| tj| d S )Nzhp-diagnose_queueszhp-diagnose_queues --guiz!python ./diagnose_queues.py --gui)r   r  rO   rP   r
   r  )r/   r.   r3   r3   r4   r   y  s
    

zDevMgr5.DiagnoseQueue_activatedc             C   s:   t jdrd}nd}t j }|r6|d|  }tj| d S )Nz	hp-doctorzhp-doctor -i -wzpython ./doctor.py -i -wz '%s')r   r  r  r
   r  )r/   r.   r  r3   r3   r4   r     s    
zDevMgr5.DiagnoseHPLIP_activated%c                s   t   zt|dkr0t  jd tjd ntjdd
| jdf  tj| y"dj fdd	|j	|D }W n t
k
r   Y nX tj| |j	 d }|j	 }tj| tj|  j  tjtj|| tj  W d t  X d S )Nr   zq<p><b>Unable to run command. No command specified.</b><p>Use <pre>Configure...</pre> to specify a command to run.z9No command specified. Use settings to configure commands.zRun: %s %s (%s) %sr   r   rM   c                s   g | ]} j jj||qS r3   )rB   rU   r`   ).0ru  )r/   r3   r4   
<listcomp>  s   z.DevMgr5.runExternalCommand.<locals>.<listcomp>z********************z********************)r   r,  r  r"  rO   rv   rP   r^   r   rV  r  r  r   spawnvpP_NOWAITrF   r+  r/  )r/   r.   Z
macro_charrt   r   r3   )r/   r4   rX    s*    



zDevMgr5.runExternalCommandc             C   s   t j| j d S )N)r   rW  r   )r/   r3   r3   r4   r     s    zDevMgr5.helpContentsc             C   s    t | tj| jd }|j  d S )Nz (Qt4))r#   rQ   rL   rS   rD   )r/   r2  r3   r3   r4   r     s    zDevMgr5.helpAboutc             C   s   t jd||S )NrE   )rF   rG   )r/   rH   rI   r3   r3   r4   rJ     s    zDevMgr5.__tr)NNNNr   )N)r   )N)NT)NN)rM   rM   )r  r  )r   )r  )N)Wr5   r6   r7   r+   ra   rb   rd   rc   rl   r   rw   r   r   r   r   r   rQ   r  r  r
  r   r  r  r   r   r   r  r3  r0  r4  r   r   r6  r=  r   r	  r   r>  r   r?  r-  r   r   r   r   ra  rY  ry  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   rX  r   r   r"  __classcell__r3   r3   )rp   r4   rE      s    9@6


, "



3 `"
^4t6
K!
05


!rE   c               @   s8   e Zd ZdddZdd Zdd Zd	d
 ZdddZdS )PasswordDialogNr   c             C   s8  t j| | || _t| }|jd |jd t| | _|j| jdddd t| | _	|j| j	dd t
| | _| jjt
j |j| jdddd t| | _|j| jdd t
| | _| jjt
j |j| jdddd t| | _|j| jdd | j  | jtddj| j  | jjj| j | jjj| j d S )	N   r   r   r   r   r   i     )r  r+   promptZQGridLayoutZ	setMarginZ
setSpacingZQLabelPromptTextLabelZ	addWidgetUsernameTextLabelZ	QLineEditUsernameLineEditZsetEchoModeZNormalPasswordTextLabelPasswordLineEditZPasswordZQPushButtonOkPushButtonlanguageChangeZresizer   Z
expandedToZminimumSizeHintr  r   r  ZreturnPressed)r/   r  r0   rn   Zmodalro   ZLayoutr3   r3   r4   r+     s.    







zPasswordDialog.__init__c             C   s   t | jj S )N)r]  r  r1   )r/   r3   r3   r4   getUsername  s    zPasswordDialog.getUsernamec             C   s   t | jj S )N)r]  r
  r1   )r/   r3   r3   r4   getPassword  s    zPasswordDialog.getPasswordc             C   s^   | j | jd | jj| j| j | jj| jd | jj| jd | jj| jd d S )Nz+HP Device Manager - Enter Username/Passwordz	Username:z	Password:ZOK)r!  _PasswordDialog__trr  r  r  r  r	  r  )r/   r3   r3   r4   r    s
    zPasswordDialog.languageChangec             C   s   t jd||S )NrE   )rF   rG   )r/   rH   rI   r3   r3   r4   rJ     s    zPasswordDialog.__tr)NNr   r   )N)r5   r6   r7   r+   r  r  r  r  r3   r3   r3   r4   r    s
   
$r  c          
   C   s4   z,t | d }|j tjkr*|j |j fS W d X dS )NrM   )rM   rM   )r  rD   r  r  r  r  )r  r2  r3   r3   r4   re    	  s    
re   c             C   s.   |r"t j|\}}|t jkr&d}n| }d| S )Nzhplipopensource.comz	http://%s)hpmudextZget_zc_ip_addressZ
HPMUD_R_OK)rr  rs  ZstatusZipr3   r3   r4   rp  	  s    
rp  )drE  Ztimer   ZgzipZselectZstructr   Zbase.sixext.movesr   Zbase.gbaser   r   r   r   r   r	   r
   Zprntr   Zbase.sixextr   Z
base.codesZui_utilsr  Zinstaller.core_installZPyQt5.QtCoreZPyQt5.QtGuiZPyQt5.QtWidgetsrw  r   Zdbus.mainloop.pyqt5r   r   ImportErrorrO   rv   exitwarningssimplefilterDeprecationWarningZdevmgr5_baser   Z
devmgr_extr   Zfaxsetupdialogr   Zplugindialogr   Zfirmwaredialogr   Zaligndialogr   Zprintdialogr   Zmakecopiesdialogr   Zsendfaxdialogr   Z	fabwindowr   Zdevicesetupdialogr   Zprinttestpagedialogr   Z
infodialogr   Zcleandialogr   Zcolorcaldialogr   Zlinefeedcaldialogr    Zpqdiagdialogr!   Znodevicesdialogr"   Zaboutdialogr#   Zsettingsdialogr$   Zprintsettingstoolboxr%   ZMIN_AUTO_REFRESH_RATEZMAX_AUTO_REFRESH_RATEZDEF_AUTO_REFRESH_RATEr%  Z	ModelDatar   r*   r)   r8   ZQObjectr<   ZQMainWindowrE   r  r  re   rp  r3   r3   r3   r4   <module>   s   $


	T                :