U
    9_u8                    @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZeje j	e j
d d dlZd dlZd dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlT d dl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mZmZ d dlZe jZ d
d Z!dd Z"G dd deZ#e$dkrd dl%Z%e&e%j'dk rHe(d e%)d e*d dej+d< e,ej-d e.  e/ Z0dd Z1e# Z2e23de1 e24e%j'd  e05  dS )    N)Gtk)domain	localedir)GObject)GLib)GtkGUI)OptionWidget)*)busyreadyc                  C   s   t  } | d dkrdS | S )Nr   /	localhost)cups	getServer)host r   5/usr/share/system-config-printer/printerproperties.pyCUPS_server_hostname5   s    r   c                 C   s   |    dS )NT)hide)widgeteventr   r   r   on_delete_just_hide;   s    r   c                	   @   sN  e Zd ZejjddfejjddfdZeje	dej
e	deje	deje	diZdd	 Zd
d Zdd ZdddZdd Zdd Zdd Zdd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!d0d1 Z"dd3d4Z#dd6d7Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)ddCdDZ*dEdF Z+dGdH Z,dIdJ Z-dKdL Z.dMdN Z/dOdP Z0dQdR Z1dSdT Z2ddUdVZ3ddWdXZ4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:dedf Z;dgdh Z<didj Z=dkdl Z>dmdn Z?ddodpZ@dqdr ZAdsdt ZBdudv ZCdwdx ZDdydz ZEd{d| ZFd}d~ ZGdd ZHdd ZIdd ZJdS )PrinterPropertiesDialogNr   )destroydialog-closedZIdleZ
ProcessingZBusyZStoppedc              r   C   s:	  t j |  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 d | _d  | _| _t | _t | _t | _d| _| jdddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsd3gpitjdt | j| _| jdu| j | j| j| j| j fD ]0}t!" }|#  |$|dv |%|dwdx q| j&}|dy| j' t!(t)dz}t!* }|$|d t!" }|$|d |+|| j,d  |+|| j-d  |.dv | j/0| | j/1 }|2t!j3j4 t!5t6t7}| j/8| | jdut9 d{| _:t)d|| j;ft)d}| j<ft)d~| j=ffD ]R\}	}
t!5t7}t!" }t!j(|	|dxd}|
8| |
0| |
1 2t!j3j> q| jd| j? t!j(dt!" dxd}| j@0| | j@1 }|d| jA |2t!j3jB | jCt)dgt)dgt)dgt)dggf| jDdgdgdgdgdgdggf| jEt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dggf| jFt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dgt)dggf| jGg f| jHt)dgt)dgt)dggf| jIg f| jJt)dgt)dggf| jKt)dgt)dgt)dggf| jLg ff
D ]X\}}t!5t7}|D ]}|jM|d qt!" }|$|dv |%|dwdx |8| qxtNOdt6d| jP| jQtNjRdt6d{| jC| jSd{dddgt)ddtNOdtTd| jU| jVtNjOdt6d| jD| jWddddddgdvdƍtNjOdt7d| jE| jXddddddddgdЍtNOdt6d| jY| jZtNjOdt6d{| jF| j[d{dddddddddddddddddddddddddddgdvdƍtNOdt6d| j\| j]tNjOdt7d| jG| j^dvdtNjOdt7d| jH| j_dddgdvdƍtNjOdt7d| jI| j`dvdtNjOdt7d| jJ| jaddgdЍtNjOdt6d{| jK| jbd{ddgdvdƍtNjOdtNjctNcd| jd| jedvdtNjOdt7d| jL| jfdvdtNOdtTd| jg| jhtNOdt6d| ji| jjtNOdt6d| jk| jltNOd t6dx| jm| jntNOdt6d| jo| jptNOdtqd| jr| jstNOdtqd| jt| jutNOdt6dx| jv| jwtNOdt6dx| jx| jytNOd	t6dx| jz| j{tNOd
t6dx| j|| j}tNOdtTd| j~| jtNOdtTd| j| jtNOdt6d| j| jg}i | _i | _|D ]}|| j|j< || j|j< qd | _d | _|   td|   d S (  NCLC_ALL Fr   tvPrinterPropertiesbtnPrinterPropertiesCancelbtnPrinterPropertiesOKbtnPrinterPropertiesApplybtnPrinterPropertiesClosentbkPrinterentPDescriptionentPLocationentPMakeModellblPMakeModel2	entPState
entPDevicelblPDevice2btnSelectDevicebtnChangePPDchkPEnabledchkPAccepting
chkPSharedlblNotPublishedbtnPrintTestPagebtnSelfTestbtnCleanHeadsbtnConflictcmbPStartBannercmbPEndBannercmbPErrorPolicycmbPOperationPolicy
rbtnPAllow	rbtnPDenytvPUsersentPUserbtnPAddUserbtnPDelUserlblPInstallOptionsswPInstallOptionsvbPInstallOptions
swPOptionslblPOptions
vbPOptionsvbClassMemberslblClassMemberstvClassMemberstvClassNotMembersbtnClassAddMemberbtnClassDelMemberbtnRefreshMarkerLevelstvPrinterStateReasonsntbkPrinterStateReasons
sbJOCopiesbtnJOResetCopiescmbJOOrientationRequestedbtnJOResetOrientationRequestedcbJOFitplotbtnJOResetFitplotcmbJONumberUpbtnJOResetNumberUpcmbJONumberUpLayoutbtnJOResetNumberUpLayoutsbJOBrightnessbtnJOResetBrightnesscmbJOFinishingsbtnJOResetFinishingssbJOJobPrioritybtnJOResetJobPriority
cmbJOMediabtnJOResetMedia
cmbJOSidesbtnJOResetSidescmbJOHoldUntilbtnJOResetHoldUntilcmbJOOutputOrderbtnJOResetOutputOrdercmbJOPrintQualitybtnJOResetPrintQualitycmbJOPrinterResolutionbtnJOResetPrinterResolutioncmbJOOutputBinbtnJOResetOutputBin
cbJOMirrorbtnJOResetMirrorsbJOScalingbtnJOResetScalingsbJOSaturationbtnJOResetSaturationsbJOHuebtnJOResetHue	sbJOGammabtnJOResetGammasbJOCpibtnJOResetCpisbJOLpibtnJOResetLpisbJOPageLeftbtnJOResetPageLeftsbJOPageRightbtnJOResetPageRightsbJOPageTopbtnJOResetPageTopsbJOPageBottombtnJOResetPageBottomcbJOPrettyPrintbtnJOResetPrettyPrintcbJOWrapbtnJOResetWrapsbJOColumnsbtnJOResetColumns
tblJOOtherentNewJobOptionbtnNewJobOptionvboxMarkerLevels)r   zdelete-eventTtextr   clickedZMessage   zMembers of this classZOthersZUsers)r   response)ZmarkupchangedzPortrait (no rotation)zLandscape (90 degrees)zReverse landscape (270 degrees)zReverse portrait (180 degrees)12469Z16zLeft to right, top to bottomzLeft to right, bottom to topzRight to left, top to bottomzRight to left, bottom to topzTop to bottom, left to rightzTop to bottom, right to leftzBottom to top, left to rightzBottom to top, right to leftNoneZStapleZPunchZCoverZBindzSaddle stitchzEdge stitchZFoldZTrimZBalezBooklet makerz
Job offsetzStaple (top left)zStaple (bottom left)zStaple (top right)zStaple (bottom right)zEdge stitch (left)zEdge stitch (top)zEdge stitch (right)zEdge stitch (bottom)zStaple dual (left)zStaple dual (top)zStaple dual (right)zStaple dual (bottom)zBind (left)z
Bind (top)zBind (right)zBind (bottom)z	One-sidedzTwo-sided (long edge)zTwo-sided (short edge)ZNormalZReverseZDraftZHigh)rowZcopies   zorientation-requested         zAutomatic rotation)combobox_mapZspecial_choiceZfitplotz	number-up   	      )r   use_supportedznumber-up-layoutZlrtbZlrbtZrltbZrlbtZtblrZtbrlZbtlrZbtrl)r   Z
brightnessd   Z
finishings      
                                                   2   3   4   5   zjob-prioritymediaZA4)r   Zsidesz	one-sidedztwo-sided-long-edgeztwo-sided-short-edgezjob-hold-untilzno-holdZoutputorderZnormalreversezprint-qualityzprinter-resolution),  r   r   z
output-binzface-upZmirrorZscalingZ
saturationZhueZgammai  Zcpig      $@Zlpig      @z	page-leftz
page-rightzpage-topzpage-bottomZprettyprintZwrapcolumnsz+%s)r   __init__localeZ	getlocaleLC_MESSAGESZlanguageLC_CTYPEencodingnonfatalExceptionosenviron	setlocaler   parentprinterppdset	conflictsr   dict
signal_idsZupdating_widgetsZ
getWidgetsconfigPACKAGEr   dialogconnect	on_deleter5   r6   r7   r8   r   ZCellRendererTextclear
pack_startZadd_attributerK   !on_btnRefreshMarkerLevels_clickedZTreeViewColumn_ZCellRendererPixbufZset_cell_data_funcset_printer_state_reason_iconset_printer_state_reason_textZset_resizablerL   Zappend_columnget_selectionZset_modeZSelectionModeNONE	ListStoreintstr	set_modelr   static_tabsrG   rH   r;   ZMULTIPLEprinter_properties_responser   (on_tvPrinterProperties_selection_changedZSINGLErP   rT   rV   rZ   r^   r`   rb   rd   rf   rj   appendoptionsZOptionAlwaysShownrN   rO   ZOptionAlwaysShownSpecialrQ   boolrR   rS   rU   rW   rX   rY   r[   r\   r]   r_   ra   rc   re   rg   ZIPPResolutionrh   ri   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   floatrv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   job_options_widgetsjob_options_buttonsr   button_monitor	_ppdcacheZconnect_signals
debugprint)selfcomboboxcellbtncolumniconr   	selectionstorenametreeviewmodelcolselr   Zoptsr   optionr   r   r   r   O   s   
                             \_






 G

  





                  


	



    z PrinterPropertiesDialog.__init__c                 C   s   t d|   | `d S )Nz-%s)r   r   r   r   r   r   __del__  s    zPrinterPropertiesDialog.__del__c                 C   s2   | j |g }|||||f || j |< d S N)r   getr   r   )r   
collectionobjr   Zhandlercr   r   r   _connect   s    z PrinterPropertiesDialog._connectc                 C   sX   |r|g}nt | j }|D ]4}|| jkr| j| D ]\}}|| q6| j|= qd S r   )listr   keysZ
disconnect)r   r   Zcollr   Z	signal_idr   r   r   _disconnect  s    
z#PrinterPropertiesDialog._disconnectc                 C   s   | j r| j   d | _ d S r   )r   r   r   r   r   r   
do_destroy  s    
z"PrinterPropertiesDialog.do_destroyc                 C   s4   t d|   |   d | _d | _d | _| d d S )NzDESTROY: %sr   )r   r  r   	ppd_localr   emitr   r   r   r   r     s    zPrinterPropertiesDialog.destroyc                 C   sb   || _ |sd S | j d| j | j d| j | j d| j | j d| j | j d| j d S )Nzprinter-eventzprinter-removedzstate-reason-addedzstate-reason-removedzcups-connection-error)r   r   on_printer_eventon_printer_removedon_state_reason_addedon_state_reason_removedon_cups_connection_error)r   monitorr   r   r   set_monitor  s    z#PrinterPropertiesDialog.set_monitorc                 C   sz  || _ || _|| _|s t | _|s.t | _| jd krJ| tj	dd | j
 | _| d t | _| d| jd| j | d| jd| j |r| j| | j||||d | jsd S | j| j| jfD ]}| jjr|  q|  q| jjr| j  n
| j  |   | j t!d | j" t!d | j#}|$t%& d d t' }| j(t!d	||f  | j  d S )
NF)Zmonitor_jobsnewPrinterGUIzprinter-modifiedzdialog-canceled)r   
encryptionr   zCUPS test pagezyTypically shows whether all jets on a print head are functioning and that the print feed mechanisms are working properly.zPrinter Properties - '%s' on %s))r   _host_encryptionr   r   getEncryptionr   r  r  ZMonitorZget_ppdcacher   r  
newprinterZNewPrinterGUIr  r   on_printer_modifiedon_printer_not_modifiedr   Zset_transient_forloadr   r   r    r!   
discoveredr   showr"   setDataButtonStater1   set_tooltip_textr   r2   r   Z
set_cursorr   ZTreePathr   Z	set_title)r   r   r   r  r   r   r   r   r   r   r  ,  sZ    





 
 



zPrinterPropertiesDialog.showc                 C   s\  | j stjj}|tjjkrztd}|d7 }| jD ]}||jjd 7 }q0tj	| j
ddtjjtjj|d}|  |  d S |tjjks|tjjkr|tjjkrt| jdkrd}n| | j }|tjjkr|sz| | j j W n   Y nX |   |tjjkr
|r|tjjkrXd | _d | _d | _ |  | d | jjd	rX| j d  d S )
Nz^There are conflicting options.
Changes can only be applied after
these conflicts are resolved.z


T)r   ZmodalZdestroy_with_parentmessage_typebuttonsr   r   Fr   visible)!r   r   ResponseTypeCANCELZREJECTr   r   r   r   MessageDialogr   MessageTypeWARNINGButtonsTypeZCLOSErunr   ZOKZAPPLYlenr   save_printerr  r   r  r   r  r   r  r  ZNewPrinterWindowget_propertyZon_NPCancel)r   r   r   messager   Zfailedr   r   r   r   _  sN    
 


z3PrinterPropertiesDialog.printer_properties_responsec                 C   s   |  |tjj d S r   )r   r   r  r   )r   r   r   r   r   r   r     s    z!PrinterPropertiesDialog.on_deletec                 C   s  t |tjr| }n^t |tjr,| }nHt |tjrB| }n2t |tjrl| }|	 }|
|d}ntd| j}| j|j| j|j| j|j| j|j| j|j | j|j| j|j| j|j| j|j| j|j | j!|j"i}|| }||kr| j#$| n| j#%| | &  d S )Nr   zWidget type not supported (yet))'
isinstancer   ZCheckButton
get_activeZEntryget_textZRadioButtonZComboBox	get_modelget_active_iter	get_value
ValueErrorr   r$   infor%   locationr)   
device_urir-   enabledr.   	rejectingr/   	is_sharedr5   job_sheet_startr6   job_sheet_endr7   error_policyr8   	op_policyr9   default_allowr   discardaddr  )r   r   valuer   iterpZ
old_values	old_valuer   r   r   on_printer_changed  sP    


           z*PrinterPropertiesDialog.on_printer_changedc                 C   s   |  r| j| n| j| |jr6| j| n| j| |   | jr| jr|| jkr| dkrx| j	  n
| j
  d S )NTrue)
is_changedr   r=  r<  r   r  option_manualfeedoption_inputslotget_current_valuedisableenabler   r   r   r   r   option_changed  s    z&PrinterPropertiesDialog.option_changedc                    s.   | j  }g  | fddd     S )z%return list of usernames from the GUIc                    s     | |dd S Nr   )r   r   )r   pathr?  dataresultr   r   <lambda>  s    z3PrinterPropertiesDialog.getPUsers.<locals>.<lambda>N)r;   r-  Zforeachsort)r   r   r   rO  r   	getPUsers  s    
z!PrinterPropertiesDialog.getPUsersc                 C   sD   | j  }|  |D ]}||f q| | j | | j  dS )z$write list of usernames into the GUIN)r;   r-  r   r   on_entPUser_changedr<   on_tvPUsers_cursor_changed)r   Zusersr   userr   r   r   	setPUsers  s    
z!PrinterPropertiesDialog.setPUsersc                 C   sP   | j s
dS |  | j jkr*| j| j n| j| j | | j |   dS )zLcheck if users in GUI and printer are different
        and set self.changedN)	r   rS  except_usersr   r=  r;   r<  rU  r  r   r   r   r   checkPUsersChanged  s    z*PrinterPropertiesDialog.checkPUsersChangedc                 C   s:   | j  }|r.| j d|f | j d |   d S )Nr   r   )r<   r,  r;   r-  insertset_textrY  )r   r   rV  r   r   r   on_btnPAddUser_clicked  s
    
z.PrinterPropertiesDialog.on_btnPAddUser_clickedc                    sV   | j   \ } fdd|D }|D ] }| } |} | q(|   d S )Nc                    s   g | ]}t j |qS r   )r   ZTreeRowReferencenew).0r   r   r   r   
<listcomp>  s     zBPrinterPropertiesDialog.on_btnPDelUser_clicked.<locals>.<listcomp>)r;   r   get_selected_rowsZget_pathget_iterremoverY  )r   r   rowsr   rM  r?  r   r_  r   on_btnPDelUser_clicked  s    
z.PrinterPropertiesDialog.on_btnPDelUser_clickedc                 C   s   | j t|  d S r   )r=   set_sensitiver   r,  r   r   r   r   r   rT    s    z+PrinterPropertiesDialog.on_entPUser_changedc                 C   s4   |  }|d krd S | \}}| jt| d S r   )r   ra  r>   rf  r   )r   r   r   r   rd  r   r   r   rU     s
    z2PrinterPropertiesDialog.on_tvPUsers_cursor_changedc                 C   sV   | j | }|  |j| jkr(| j|j= | r>| j| n| j| |   d S r   )	r   resetr   server_side_optionsrD  r   r=  r<  r  r   r   r   r   r   r   on_job_option_reset	  s    

z+PrinterPropertiesDialog.on_job_option_resetc                 C   sl   | j s
d S | j| }|  | r>|| j|j< | j| n"|j| jkrT| j|j= | j| |   d S r   )	r   r   r   rD  ri  r   r=  r<  r  )r   r   r   r   r   r   on_job_option_changed  s    

z-PrinterPropertiesDialog.on_job_option_changedTc                 C   s   t | j}|dkr | j  d S | j }|D ]}| j| q.d}| jD ]}| j|jd|dd |jdd | j|j	d|dd |j	
| tjtjtjj}|d| j ||_|
| | j|d|dd |d7 }qJ| j  d S )Nr   r                 ?r   r   )r&  other_job_optionsr   r   get_childrenrc  attachlabelset_alignmentselectorrf  r   ZButtonZnew_from_icon_nameZSTOCK_REMOVEZIconSizeZBUTTONr   on_btnJOOtherRemove_clickedpyobjectshow_all)r   editablenZchildrenZchildioptr   r   r   r   draw_other_job_options&  s,    






z.PrinterPropertiesDialog.draw_other_job_optionsr   c                 C   s   zt |||| j}W n tk
r2   t  Y d S X ||_| j| | j|d || j	|< || j
krld|_| j
| |   |r|j  d S )Nrx  F)r   r   rK  r0  r   is_newro  r   r|  ri  r   r=  r  rt  Z
grab_focus)r   r   r>  	supportedr~  rx  r   r   r   r   add_job_option@  s"    


z&PrinterPropertiesDialog.add_job_optionc                 C   sR   |j }| j| |   |jr.| j| n| j|j | j	|j= | 
  d S r   )rv  ro  rc  r|  r~  r   r<  r=  r   ri  r  rj  r   r   r   ru  U  s    
z3PrinterPropertiesDialog.on_btnJOOtherRemove_clickedc                 C   sB   | j  }| | | j  | j d | jd |   d S )Nr   F)	r   r,  r  r   rw  r[  r   rf  r  )r   r   r   r   r   r   on_btnNewJobOption_clickeda  s    


z2PrinterPropertiesDialog.on_btnNewJobOption_clickedc                 C   s0   | j  }t|dko|| jk}| j| d S rL  )r   r,  r&  ri  r   rf  )r   r   r   Zactiver   r   r   on_entNewJobOption_changedi  s    
z2PrinterPropertiesDialog.on_entNewJobOption_changedc                 C   s   |  | d S r   )r  rg  r   r   r   on_entNewJobOption_activaten  s    z3PrinterPropertiesDialog.on_entNewJobOption_activatec              	   C   sb  zb| j j}|dg }t| j o4| j jo4| j j }z|d |}W n tk
r`   d}Y nX | j	
| | j jp~t| j }| j| jfD ]}|
| qd}d}|r*| j jtj@ dkr*zR|d |dg }	|	D ]2}
|
dkrd}|r qq|
d	krd}|r qqW n tk
r(   Y nX || jf|| jffD ]"\}}|rV|  n|  q>W n   t  Y nX | js| j js| j jd
s| j jdr| j jdr| j js| j	  n
| j	  d}d}| jr,td | j  | jD ]&}|j | j  kr"d}nd}qn
| j  t!d}t!d}|rTd| }|rbd| }| j "| | j#"| | j$% }|r.t&| j'( D ]}| j')|}| j'*| }zZ|| j  kr|+|f}|,|d| n*|| j# kr|+|f}|,|d| W n tk
r(   Y nX q| j-
t.| jdkoJ| j  | j/
| j  d S )Nzdocument-format-supportedzapplication/postscriptFr   application/vnd.cups-commandzprinter-commandsPrintSelfTestPageTZCleanzdnssd:zmdns:z/cupszConflicts detectedzInstallable OptionszPrinter Options	<b>%s</b>)0r   other_attributesr   r   r   r4  r5  indexr0  r1   rf  r  r,   r+   typer   CUPS_PRINTER_COMMANDSr2   r3   r  r   r   r   Zremoter3  
startswithendswithr   r   r4   	tab_labelr,  r?   r   Z
set_markuprC   r   r-  ranger#   get_n_pagesget_nth_pageget_tab_labelrb  	set_valuer!   r&  r    )r   ZattrsZformatsZ	printableZtestpageZ
adjustabler   ZselftestZ
cleanheadsZcommandscommandZcondZinstallableboldZoptionsboldr   ZinstallabletextZoptionstextr   ry  pagerr  r?  r   r   r   r  r  s    










z*PrinterPropertiesDialog.setDataButtonStateFc              
   C   s  |d kr| j }d}|j}|jr4| jtd|  n| jtd|  zj|js| jr|   | j sn|r| jj	|| jd |jrlt
| j}|stjdtjjtjjtdd}|td |tjtjjtjtjj | }|  |tjjkr| j  W d	S d	}|jd d  }	|D ]*}
|
|	kr@|	|
 n| j|
| q&|	D ]}
| j |
| qV| j!" }| j#" }| j$" }| j%& }| j'& }| j(& }||j)ks|r| j*|| ||j+ks|r| j,|| |js||j-ks|r| j.|| ||j/ks"|r,|0| ||j1ks>|rH|2| ||j3ksZ|rd|4| d
d }|| j5}|| j6}|| j7}|| j8}||j9ks||j:ks|r|;|| ||j<ks|r|=| ||j>ks|r|?| | j@& }| A }||jBks&||jCks&|r2|D|| |jED ]}|| jFkr8|G| q8| jFH D ]P}|I s|r`|J |K kr`tLd|j|J f  |M|j|J  q`W nL tjNk
r  } z*|jO\}}tP||| | j  W Y d	S d }~X Y nX | j  tQ | _R| jjSshd| jTkrh| jtd z| jU | _VW n   tW  Y nX | j  |sz|X  | Y  W n tjNk
r   Y nX | jZ[  dS )NFzmodifying class %szmodifying printer %s)r   r   zThis will delete this class!)flagsr  r  r   zProceed anyway?Tc                 S   s   |   }|  }||dS Nr   )r-  r.  r/  )Zcmbr   r?  r   r   r   get_combo_value!  s    z=PrinterPropertiesDialog.save_printer.<locals>.get_combo_valuezSet %s = %sserver_settingszfetching server settings)\r   r   is_classr   _begin_operationr   r   getPrinterSettingsZnondefaultsMarkedZ
addPrinterr  getCurrentClassMembersrG   r   r!  r"  r#  r$  r   Zformat_secondary_textZadd_buttonsZSTOCK_CANCELr  ZNOZSTOCK_DELETEZYESr%  r   _end_operationclass_membersrc  ZaddPrinterToClassZdeletePrinterFromClassr%   r,  r$   r)   r-   r+  r.   r/   r1  ZsetPrinterInfor2  ZsetPrinterLocationr3  ZsetPrinterDevicer4  Z
setEnabledr5  ZsetAcceptingr6  Z	setSharedr5   r6   r7   r8   r7  r8  ZsetJobSheetsr9  ZsetErrorPolicyr:  ZsetOperationPolicyr9   rS  r;  rX  Z	setAccess
attributesri  ZunsetOptionvaluesrD  rG  get_defaultr   Z	setOptionIPPErrorargsshow_IPP_Errorr   r   Z_use_pk__dict__ZadminGetServerSettingsr  r   getAttributesupdatePrinterPropertiesr   update)r   r   Zsaveallr   Zclass_deletedr   Znew_membersr   rP  Zold_membersmemberr2  r1  r3  r4  Z	acceptingZsharedr  r7  r8  r9  r:  r;  rX  r   esr   r   r   r'    s     
























z$PrinterPropertiesDialog.save_printerc                 C   s   | j  D ]}|  q
d S r   )r   r  Z	writebackrJ  r   r   r   r  e  s    z*PrinterPropertiesDialog.getPrinterSettingsc                 C   sR   |  \}}|r|| _n6z
| j}W n tk
r8   Y d S X ||rN|| d S r   )Zget_selectedZ%printer_properties_last_iter_selectedAttributeErrorZiter_is_validZselect_iter)r   r   r   r?  r   r   r   r   k  s    

z@PrinterPropertiesDialog.on_tvPrinterProperties_selection_changedc                 C   sB   |  \}}|d k	r>| }||}||d}| j| d S r  )Z
get_cursorr-  rb  r/  r#   set_current_page)r   r   rM  r   r   r?  ry  r   r   r   %on_tvPrinterProperties_cursor_changedz  s    
z=PrinterPropertiesDialog.on_tvPrinterProperties_cursor_changedc                 C   s   | j   d S r   )r1   r   r   r   r   r   printTestPage  s    z%PrinterPropertiesDialog.printTestPagec           
   
   C   s  | j }|sd S d }| jdkrD| jd}|rDtjtd|j  }t	
 }t	d ztj| jd| j| jd}W n6 tk
r } ztd || j W Y d S d }~X Y nX d }|td zF|rtj|rtd|  |j|j|d}ntd	 ||j}W n~ t	jk
r } z\|j\}}	|t	jkrb| jd
krb| jd dkrbttdtd| j nt||	| j W 5 d }~X Y nX |  t	| |d k	rttdtd| | jd d S )NFPageSizeztestpage-%s.psr   )Ztry_as_rootr   r  zprinting test pagezPrinting custom test page )filezPrinting default test pager   r   r   Not possible^The remote server did not accept the print job, most likely because the printer is not shared.	SubmittedzTest page submitted as job %dr   )r   r   
findOptionr   rM  joinpkgdata	defchoicelowerr   getUserZsetUserauthconn
Connectionr   r  r  RuntimeErrorr  r  r   existsr   r  r   r  r  IPP_NOT_AUTHORIZEDshow_error_dialogr  show_info_dialog)
r   r   r   Zcustom_testpager{  rV  r   r  job_idmsgr   r   r   on_btnPrintTestPage_clicked  sf    




 


z3PrinterPropertiesDialog.on_btnPrintTestPage_clickedc                 C   s  | j }|sd S tjdd}|d|  |  | jtd z@d}| jj|j	||j	t
 d}ttdtd| | jd	 W nj tjk
r } zJ|j\}}|tjkr| j j	d
krttdtd| j nt||| j W 5 d }~X Y nX | j  W 5 Q R X d S )NZwt)modez#CUPS-COMMAND
%s
zsending maintenance commandr  )formatr  rV  r  z'Maintenance command submitted as job %dr  r   r  r  )r   tempfileZNamedTemporaryFilewriteflushr   r  r   r  r   r  r  r   r  r  r  r  r  r  )r   r  r   Ztmpfiler  r  r  r  r   r   r   maintenance_command  s>    




 z+PrinterPropertiesDialog.maintenance_commandc                 C   s   |  d d S )Nr  r  r   r   r   r   r   on_btnSelfTest_clicked  s    z.PrinterPropertiesDialog.on_btnSelfTest_clickedc                 C   s   |  d d S )Nz	Clean allr  r  r   r   r   on_btnCleanHeads_clicked  s    z0PrinterPropertiesDialog.on_btnCleanHeads_clickedc           	      C   sx   |d krt  }ttt}|| d}t|D ]2\}}||||g ||kr2|	| d}q2|st|	d d S )NFTr   )
	ppdippstrZTranslationDictr   r   r   r   	enumerater   r   
set_active)	r   r   r  r>  Ztranslationdictr   r  nrvalr   r   r   fillComboBox  s    

z$PrinterPropertiesDialog.fillComboBoxc                 C   s  t  | _i | _t  | _|s"t }|s.t }tj| j	||d}|| _t
|| j}|| _z|jd }|| _W n tk
r   Y nX | jj }z,| | _| | _| jdkr| j  W n tjk
r6 }	 zZ|	j\}	}
|	tjkrt|	|
| j |	tjtjfkr ttdtdtjj| j d| _W 5 d }	~	X Y nd t k
r }	 zDt!|	"drpt#tdtd| j nt#tdtd	| j  W 5 d }	~	X Y nX | j$| j%| j&fD ]}|'| q| j(| j)| j*| j+| j,| j-| j.| j/| j0| j1| j2| j3| j4| j5| j6fD ]}|7| q| j$8|j9 | j%8|j: |j;}| j&8| | j<| j& | j=| j>| j)| j?| j&| j(fD ] }|j@r||A  n|B  qfz6|jCr| jr| jDA  n
| jDE  n
| jDA  W n   tF  | jDA  Y nX | j-7| | j.7| | j/7| | j07| | j48d
 i | _G| jHI D ]}|jJdkr`| jr`| jKd}|r`|L|jM |}z| jjN|jJ }W n  tk
r   |Od  Y nxX zL|jJ| jjPkr| jjP|jJ d }|jO||d n
|O| || jG|jJ< W n(   tF  d}tQd|jJ|f  Y nX |jR7| |s(|jS7d q(g | _T| jU|d | jjNV D ]}|| jGkrbqN|dksN|dkrzqN| jjN| }|| jjPkr| jjP| d }n.tW|tXrddg}t!|Y }nd
}t!|}| jZ|||d|d qN| j[8d
 | j[7| | j\7d |j@rH| j]^| j_}|dkr<| j]`| | a| n| b|| | c  | d  | e  t  | _| f  | g  d S )N)r   r   r  zserver-is-sharing-printersFz	Raw Queuez3Unable to get queue details. Treating queue as raw.r   Errorz'The PPD file for this queue is damaged.z2There was a problem connecting to the CUPS server.r   r   r  r   )r  z0Option '%s' has value '%s' and cannot be edited.r}  zoutput-modez	media-coltrueZfalse)r>  r  r~  rx  )hr   r   r   r   r   r   r  r  r  r   cupshelpersZPrinterr   r  Zserver_is_publishingKeyErrorr  ZgetPPDr   r  Zlocalizer  r  ZIPP_INTERNAL_ERRORr  r   ZIPP_SERVICE_UNAVAILABLEZshow_dialogr   r   r"  ZERRORr  r   r  r  r$   r%   r)   Zset_editabler+   r,   r-   r.   r/   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rf  r[  r1  r2  r3  r<  r'   r&   r*   r  r   r  r6  r0   rw  r   ri  r   r  r   r  Zset_defaultr  r  ZreinitZpossible_attributesr   r   r   ro  r|  r  r*  r   r  r  r   r   r#   page_numr@   remove_pagefillClassMembersfillPrinterOptionsupdateMarkerLevelsupdateStateReasonsupdatePrinterPropertiesTreeViewr  r  )r   r   r   r  r   r   r   Z
publishingrx  r  mr   Zurir   r{  Zoption_editabler>  r  tab_nrr   r   r   r    s@   







          

 

zPrinterPropertiesDialog.loadc                 C   s   t tt}| jd t| j D ]F}| j|}| j	|}|
d }||d|  ||d| q&| j }| j| d S )NFr   r   )r   r   r   r   r#   Zset_show_tabsr  r  r  r  r   r  r,  r   r   r   )r   r   ry  r  rr  r?  r   r   r   r   r    s    

z7PrinterPropertiesDialog.updatePrinterPropertiesTreeViewc                    s\  | j }|sd S | j D ]}| j| qt }d}dtfdtfdtfdtffD ]\} |j|g } tkrt	|dkrz |d  W nB t
k
r } z$td| |f  dd |D }W 5 d }~X Y nX  fd	d|D ||< |dkst	||k rPt	|}qPd
D ]B}t	|| |krtd|| |d  |f  || |d = qttdd |d |d |d |d }t| |jtj@ dk}	|	r| j  n
| j  t	|dkrtjtdd}
|
d |
dd | j|
ddd n^d}t	|}d|d d  }|dkrd}t }|d |d |d |d | j|ddd |D ]\}}}}|d kr|d}n&| jdkr| j |}|d k	r|}|d }|d }tj!dd}t! }t"#||}|$d|  ||ddd ||ddd tj|d}
|
%d |
d ||
ddd |&|||dd |d7 }q`| j'  d S )Nr   marker-colorsmarker-namesmarker-typesmarker-levelsz %s value not coercible to %s: %sc                 S   s   g | ]}d qS )rm  r   r^  xr   r   r   r`    s     z>PrinterPropertiesDialog.updateMarkerLevels.<locals>.<listcomp>c                    s$   g | ]} t kr|d k rdn|qS )r   rm  )r   r  typr   r   r`    s   )r  r  r  r  zTrimming %s from %sc                 S   s   | |||fS r   r   )colorr   r  levelr   r   r   rQ    s    z<PrinterPropertiesDialog.updateMarkerLevels.<locals>.<lambda>z0Marker levels are not reported for this printer.rr  Trm  Fr   r   r   r   r   )Zspacingz%d%%r   )(r   r   rp  rc  r   r   r   r  r   r&  	TypeErrorr   r  mapr  r   r  rK   r  r   r   Labelr   Zset_line_wraprs  r   GridZset_column_homogeneousZset_row_homogeneousset_column_spacingset_row_spacingr   ZlocalizeMarkerNameBoxgtkinklevelZGtkInkLevelr  Zset_width_charsrq  rw  )r   r   r   Zmarker_infoZnum_markersattrr  r  ZmarkersZcan_refreshrr  Zcolsrd  gridr  r   Zmarker_typer  Zlocalized_namer   r   ZvboxZsubhboxZinklevelr   r  r   r    s     














z*PrinterPropertiesDialog.updateMarkerLevelsc                 C   s   |  d d S )NZReportLevelsr  r  r   r   r   r   6  s    z9PrinterPropertiesDialog.on_btnRefreshMarkerLevels_clickedc                 C   s   | j }|jdg }ttt}d}|D ]|}|dkr8 qd}|d }t|j	|| j
}| dkrltj}ntjj|  }||d| | \}	}
||d|
 q(| j| d}|rd}| j| d S )Nzprinter-state-reasonsFZnoneTZpausedr   r   )r   r  r   r   r   r   r   statereasonZStateReasonr   r   Z
get_reasonZSTOCK_MEDIA_PAUSEZ
LEVEL_ICONZ	get_levelr  Zget_descriptionrL   r   rM   r  )r   r   Zreasonsr   anyreasonr?  rr   titler   r  r   r   r   r  9  s*    
z*PrinterPropertiesDialog.updateStateReasonsc           	      G   sP   | |d}tj }z||dd}|d| W n tjk
rJ   Y nX d S )Nr   r   pixbuf)r/  r   Z	IconThemer  Z	load_iconset_propertyr   ZGError)	r   r   r   r   r?  rN  r   Zthemer  r   r   r   r   T  s    
z5PrinterPropertiesDialog.set_printer_state_reason_iconc                 G   s   | d||d d S )Nr   r   )r  r/  )r   r   r   r   r?  rN  r   r   r   r   ]  s    z5PrinterPropertiesDialog.set_printer_state_reason_textc                 C   sZ  t d | j}| j|j | j|j | j|j	t
d}|jdd}t|dkrd|d| 7 }| j| t| jdkrVt d | j|j | j|j  | j|j | | j|j|jtj | | j|j|jtj | | j|j|j tj! | | j"|j#|j$tj% | j&|j' | j(|j'  | )|j* | +  | ,  | -  d S )Nzupdate printer propertiesZUnknownzprinter-state-messager   r   z - z.no changes yet: full printer properties update).r   r   r)   r[  r3  r&   Zmake_and_modelprinter_statesr   stater   r  r&  r(   r   r-   r  r4  r.   r5  r/   r6  r  r5   Zjob_sheets_supportedr7  r  Z
job_sheetsr6   r8  r7   Zerror_policy_supportedr9  Zprinter_error_policyr8   Zop_policy_supportedr:  Zprinter_op_policyr9   r;  r:   rW  rX  r  r  r  )r   r   r  r  r   r   r   r  `  sR    
z/PrinterPropertiesDialog.updatePrinterPropertiesc              	   C   s  | j | j}|dkr"| j | | j D ]}| j| q,| j D ]}| j| qH| j | jdkr| j 	| j| j
| j | js| j | j}|dkr| j | | j | j}|dkr| j | d S | j}|  | j  d}| jjD ],}|jdkrNd}| j}| j | j}|dkrF| j 	| jtj|jd| j | j}	ntj|j}
tjdt|
 d}| d |tjj | j |ddd tj!"ddd	d	}|#d
dd
d |$| | j
}	t% }|&d
 |'d
 |$| d}d  | _(| _)t*|j+D ]\}}|j,dkr,q|d7 }t-||| |	d}|.|j/d|dd t0 }|j1rtj!"ddd	d	}|#dddd
 |$|j1 |.|d|dd |.|d|dd n|.|d|dd | |j2ddd || j+|j,< |j23| |j,dkr|| _(n|j,dkr|| _)qq|sN| j | j}|dkrN| j | | j+4 D ] }|5 }|rX| j6$| qX| j7  | j7  d S )Nr  FZInstallableOptionsTr  r  r   rn  g      ?r   r   Z
PageRegionr   )r  r   Z	InputSlotZ
ManualFeed)8r#   r  rE   r  rA   rp  rc  rD   rB   insert_pagerC   r   r   r@   ZmarkDefaultsr  ZoptionGroupsr   r   r  r   r?   r  r   ZFramehtmlescapeZget_label_widgetZset_use_markupZset_shadow_typeZ
ShadowTyper   r   Z	Alignmentr]  Zset_paddingr=  r  r  r  rF  rE  r  r   keywordr   rq  ZconflictIconr  rr  rt  rf  r  ZcheckConflictsr   rw  )r   r   rx  r  r   r   ZhasInstallableOptionsgroupZ	containerr  Z
group_nameframer  rd  r  r   oZhboxar   r   r   r   r    s      








z*PrinterPropertiesDialog.fillPrinterOptionsc                 C   s   | j | | j| | j| j}|dkr:| j| | j| jdkrb| j| j| j	| j
 | j }| j }|  |  t| j }|  |D ]D}|| jjkr|| jjkr||f q| jjtj@ s||f qd S )Nr  )rI   rf  rJ   r#   r  rB   r  rE   r  rF   r   rG   r-  rH   r   r  r   Zget_printersrR  r   r   r  r   r  r   ZCUPS_PRINTER_CLASS)r   rx  r  Zmodel_membersZmodel_not_membersnamesr   r   r   r   r    s.     

z(PrinterPropertiesDialog.fillClassMembersc                 C   sN   t | j| j t | j| jjkr4| j| j n| j	| j | 
  d S r   )r  moveClassMembersrH   rG   r  r   r  r   r=  r<  r  r  r   r   r   on_btnClassAddMember_clicked  s    z4PrinterPropertiesDialog.on_btnClassAddMember_clickedc                 C   sN   t | j| j t | j| jjkr4| j| j n| j	| j | 
  d S r   )r  r  rG   rH   r  r   r  r   r=  r<  r  r  r   r   r   on_btnClassDelMember_clicked'  s    z4PrinterPropertiesDialog.on_btnClassDelMember_clickedc                 C   sB   |o | j d k	o | j jpt| j }| j| jfD ]}|| q.d S r   )r   r  r   r   r,   r+   rf  )r   Z	sensitiver   r   r   r   sensitise_new_printer_widgets0  s    z5PrinterPropertiesDialog.sensitise_new_printer_widgetsc                 C   s   |  d d S NFr  r   r   r   r   desensitise_new_printer_widgets9  s    z7PrinterPropertiesDialog.desensitise_new_printer_widgetsc                 C   sN   t | j |   | jjd| jj| jj| j| j	| jds@| 
  t| j d S )NZdevice)r3  r   r   r  r   )r
   r   r  r  initr   r3  r   r  r  r  r   r  r   r   r   on_btnSelectDevice_clicked=  s    
z2PrinterPropertiesDialog.on_btnSelectDevice_clickedc              	   C   sR   t | j |   | jjd| jj| j| jj| j	| j
| jdsD|   t| j d S )Nr   )r3  r   r   r   r  r   )r
   r   r  r  r  r   r3  r   r   r  r  r  r   r  r   r   r   on_btnChangePPD_clickedJ  s    
z/PrinterPropertiesDialog.on_btnChangePPD_clickedc                 C   sd   t d |   | jdr`| jr`z&| j  |r>| | n|   W n tj	k
r^   Y nX d S )Nzon_printer_modified calledr  )
r   r  r   r(  r   r  r  r  r   r  )r   r   r   Zppd_has_changedr   r   r   r  X  s    
z+PrinterPropertiesDialog.on_printer_modifiedc                 C   s   |    d S r   r  )r   r   r   r   r   r  f  s    z/PrinterPropertiesDialog.on_printer_not_modifiedc                 C   s   |  d |d d S r  )r  )r   monr   Z	eventnamer   r   r   r   r  j  s    z(PrinterPropertiesDialog.on_printer_eventc                 C   sJ   | j dr.| jr.| jj|kr.| j tjj | jrF| jj|krFd | _d S Nr  )r   r(  r   r   r   r   r  r   )r   r  r   r   r   r   r  m  s    
z*PrinterPropertiesDialog.on_printer_removedc                 C   sT   | j drP| jrP| jj| krPz| j  |   W n tjk
rN   Y nX d S r  	r   r(  r   r   Zget_printerr  r  r   r  r   r  r  r   r   r   r	  u  s    
z-PrinterPropertiesDialog.on_state_reason_addedc                 C   sT   | j drP| jrP| jj| krPz| j  |   W n tjk
rN   Y nX d S r  r  r  r   r   r   r
  ~  s    
z/PrinterPropertiesDialog.on_state_reason_removedc                 C   s   d S r   r   )r   r  r   r   r   r    s    z0PrinterPropertiesDialog.on_cups_connection_error)N)NNN)T)r   r   TT)FN)N)NNN)T)K__name__
__module____qualname__r   ZSignalFlagsZRUN_LASTZ__gsignals__r   ZIPP_PRINTER_IDLEr   ZIPP_PRINTER_PROCESSINGZIPP_PRINTER_BUSYZIPP_PRINTER_STOPPEDr   r   r   r   r  r  r   r  r  r   r   rB  rK  rS  rW  rY  r\  re  rT  rU  rk  rl  r|  r  ru  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   r   r   r   r   ?   s   	   0

31%	
		
  
i
 <"

 M`	0q		
			r   __main__r   zSpecify queue namer   TZuiZSYSTEM_CONFIG_PRINTER_UIr   c                 C   s   |    t  d S r   )r   loopquit)r   r   r   r   on_dialog_closed  s    r  r   )6r   r   r  Zgi.repositoryr   r   r   gettextinstallr   r   r  r   r   r   Zguir   r  Zoptionwidgetsr   debugr  Zerrordialogsr  Zppdcacher  r  r  r
   r   r  Z
pkgdatadirr  r   r   r   r  sysr&  argvprintexitZset_debuggingr   r   r   r  ZMainLoopr  r  Z
propertiesr   r  r%  r   r   r   r   <module>   sn                 Z


