3
Za9                @   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%j)d e*d dej+d< ej,ej-d ej.  ej/ Z0dd Z1e# Z2e2j3de1 e2j4e%j'd  e0j5  dS )    N)Gtk)domain	localedir)GObject)GLib)GtkGUI)OptionWidget)*)busyreadyc              C   s   t j } | 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   | j   dS )NT)hide)widgeteventr   r   r   on_delete_just_hide;   s    r   c            	   @   sN  e Zd Zejjdf fejjdf 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!d/d0 Z"dd2d3Z#dd5d6Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)ddBdCZ*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2ddTdUZ3ddVdWZ4dXdY Z5dZd[ Z6d\d] Z7d^d_ Z8d`da Z9dbdc Z:ddde Z;dfdg Z<dhdi Z=djdk Z>dldm Z?ddndoZ@dpdq ZAdrds ZBdtdu ZCdvdw ZDdxdy ZEdzd{ ZFd|d} ZGd~d ZHdd ZIdd ZJdS )PrinterPropertiesDialogN)destroyzdialog-closedZIdleZ
ProcessingZBusyZStoppedc          x   C   sR	  t j j|  y tjtj| _tjtj| _W nF   t  dt	j
d< tjtjd tjtj| _tj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jdu| j xH| j| j| j| j gD ]0}t!j" }|j#  |j$|dv |j%|dwdx qW | j&}|jdy| j' t!j(t)dz}t!j* }|j$|d t!j" }|j$|d |j+|| j,d  |j+|| j-d  |j.dv | j/j0| | j/j1 }|j2t!j3j4 t!j5t6t7}| j/j8| | jjdut9 d{| _:x~t)d|| j;ft)d}| j<ft)d~| j=ffD ]R\}	}
t!j5t7}t!j" }t!j(|	|dxd}|
j8| |
j0| |
j1 j2t!j3j> qW | jjd| j? t!j(dt!j" dxd}| j@j0| | j@j1 }|jd| jA |j2t!j3jB xL| 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g
D ]\\}}t!j5t7}x|D ]}|jM|d qW t!j" }|j$|dv |j%|dwdx |j8| qW tNjOdt6d| jP| jQtNjRdt6d{| jC| jSd{dddgt)ddtNjOdtTd| jU| jVtNjOdt6d| jD| jWddddddgdvdƍtNjOdt7d| jE| jXddddddddgdЍtNjOdt6d| jY| jZtNjOdt6d{| jF| j[d{dddddddddddddddddddddddddddgdvdƍtNjOdt6d| j\| j]tNjOdt7d| jG| j^dvdtNjOdt7d| jH| j_dddgdvdƍtNjOdt7d| jI| j`dvdtNjOdt7d| jJ| jaddgdЍtNjOdt6d{| jK| jbd{ddgdvdƍtNjOdtNjctNjcd| jd| jedvdtNjOdt7d| jL| jfdvdtNjOdtTd| jg| jhtNjOdt6d| ji| jjtNjOdt6d| jk| jltNjOd t6dx| jm| jntNjOdt6d| jo| jptNjOdtqd| jr| jstNjOdtqd| jt| jutNjOdt6dx| jv| jwtNjOdt6dx| jx| jytNjOd	t6dx| jz| j{tNjOd
t6dx| j|| j}tNjOdtTd| j~| jtNjOdtTd| j| jtNjOdt6d| j| jg}i | _i | _x&|D ]}|| j|j< || j|j< 	q
W d | _d | _| j  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,  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   r   r   )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_deleter4   r5   r6   r7   r   ZCellRendererTextclear
pack_startZadd_attributerJ   !on_btnRefreshMarkerLevels_clickedZTreeViewColumn_ZCellRendererPixbufZset_cell_data_funcset_printer_state_reason_iconset_printer_state_reason_textZset_resizablerK   Zappend_columnget_selectionZset_modeZSelectionModeNONE	ListStoreintstr	set_modelr   static_tabsrF   rG   r:   ZMULTIPLEprinter_properties_responser   (on_tvPrinterProperties_selection_changedZSINGLErO   rS   rU   rY   r]   r_   ra   rc   re   ri   appendoptionsZOptionAlwaysShownrM   rN   ZOptionAlwaysShownSpecialrP   boolrQ   rR   rT   rV   rW   rX   rZ   r[   r\   r^   r`   rb   rd   rf   ZIPPResolutionrg   rh   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   floatru   rv   rw   rx   ry   rz   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   





























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 j|g }|j||j||f || j |< d S )N)r   getr   r   )r   
collectionobjr   Zhandlercr   r   r   _connect   s    z PrinterPropertiesDialog._connectc             C   s`   |r|g}nt | jj }x@|D ]8}|| jkr x | j| D ]\}}|j| q:W | j|= q W d S )N)listr   keysZ
disconnect)r   r   Zcollr   Z	signal_idr   r   r   _disconnect  s    

z#PrinterPropertiesDialog._disconnectc             C   s   | j r| j j  d | _ d S )N)r   r   )r   r   r   r   
do_destroy  s    
z"PrinterPropertiesDialog.do_destroyc             C   s4   t d|   | j  d | _d | _d | _| jd d S )NzDESTROY: %sr   )r   r   r   	ppd_localr   emit)r   r   r   r   r     s    zPrinterPropertiesDialog.destroyc             C   sb   || _ |sd S | j jd| j | j jd| j | j jd| j | j jd| j | 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   s~  || _ || _|| _|s tj | _|s.tj | _| jd krJ| jtj	dd | jj
 | _| jd tj | _| jd| jd| j | jd| jd| j |r| jj| | j||||d | jsd S x2| j| j| jgD ]}| jjr|j  q|j  qW | jjr| jj  n
| jj  | j  | jj t!d | j"j t!d | j#}|j$t%j& d d t' }| jj(t!d	||f  | j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!   setDataButtonStater0   set_tooltip_textr   r1   r   Z
set_cursorr   ZTreePathr   Z	set_title)r   r   r   r  r   r   r   r   r   r   r  ,  sN    











zPrinterPropertiesDialog.showc          	   C   sd  | j stjj}|tjjkr~td}|d7 }x| jD ]}||jjd 7 }q2W tj	| j
ddtjjtjj|d}|j  |j  d S |tjjks|tjjkr|tjjkrt| jdkrd}n| j| j }|tjjkr| ry| j| j j W n   Y nX | j  |tjjkr| s |tjjkr`d | _d | _d | _ |j  | jd | jjjd	r`| j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   Fzdialog-closed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   _  sF    
z3PrinterPropertiesDialog.printer_properties_responsec             C   s   | j |tjj d S )N)r   r   r  r  )r   r   r   r   r   r   r     s    z!PrinterPropertiesDialog.on_deletec             C   s  t |tjr|j }n^t |tjr,|j }nHt |tjrB|j }n2t |tjrl|j }|j	 }|j
|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#j$| n| j#j%| | 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_sharedr4   job_sheet_startr5   job_sheet_endr6   error_policyr7   	op_policyr8   default_allowr   discardaddr  )r   r   valuer   iterpZ
old_valuesZ	old_valuer   r   r   on_printer_changed  s8    



z*PrinterPropertiesDialog.on_printer_changedc             C   s   |j  r| jj| n| jj| |jr6| jj| n| jj| | j  | jr| jr|| jkr|j dkrx| jj	  n
| jj
  d S )NTrue)
is_changedr   r:  r9  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 j }g  |j fddd  j   S )z%return list of usernames from the GUIc                s    j | j|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   )rI  r   	getPUsers  s    
z!PrinterPropertiesDialog.getPUsersc             C   sH   | j j }|j  x|D ]}|j|f qW | j| j | 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 jkr*| jj| j n| jj| j | j| j | j  dS )zLcheck if users in GUI and printer are different
        and set self.changedN)	r   rL  except_usersr   r:  r:   r9  rN  r  )r   r   r   r   checkPUsersChanged  s    z*PrinterPropertiesDialog.checkPUsersChangedc             C   s:   | j j }|r.| jj jd|f | j jd | j  d S )Nr   r   )r;   r)  r:   r*  insertset_textrR  )r   r   rO  r   r   r   on_btnPAddUser_clicked  s
    
z.PrinterPropertiesDialog.on_btnPAddUser_clickedc                sZ   | j j j \ } fdd|D }x(|D ] }|j } j|} j| q*W | j  d S )Nc                s   g | ]}t jj |qS r   )r   ZTreeRowReferencenew).0r   )r   r   r   
<listcomp>  s    zBPrinterPropertiesDialog.on_btnPDelUser_clicked.<locals>.<listcomp>)r:   r   get_selected_rowsget_pathget_iterremoverR  )r   r   rowsr   rG  r<  r   )r   r   on_btnPDelUser_clicked  s    

z.PrinterPropertiesDialog.on_btnPDelUser_clickedc             C   s   | j jt|j  d S )N)r<   set_sensitiver   r)  )r   r   r   r   r   rM    s    z+PrinterPropertiesDialog.on_entPUser_changedc             C   s4   |j  }|d krd S |j \}}| jjt| d S )N)r   rY  r=   r_  r   )r   r   r   r   r]  r   r   r   rN     s
    z2PrinterPropertiesDialog.on_tvPUsers_cursor_changedc             C   sV   | j | }|j  |j| jkr(| j|j= |j r>| jj| n| jj| | j  d S )N)	r   resetr   server_side_optionsr@  r   r:  r9  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| }|j  |j r>|| j|j< | jj| n"|j| jkrT| j|j= | jj| | j  d S )N)	r   r   r   r@  ra  r   r:  r9  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j  d S | jj }x|D ]}| jj| q0W d}x| jD ]}| jj|jd|dd |jjdd | jj|j	d|dd |j	j
| tjjtjtjj}|jd| j ||_|j
| | jj|d|dd |d7 }qPW | jj  d S )Nr   r   g        g      ?r   r   )r#  other_job_optionsr   r   get_childrenr\  attachlabelset_alignmentselectorr_  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   yt j|||| j}W n tk
r0   t  d S X ||_| jj| | j|d || j	|< || j
krjd|_| j
j| | j  |r|jj  d S )N)rm  F)r   r   rF  r-  r   is_newrd  r   rq  ra  r   r:  r  ri  Z
grab_focus)r   r   r;  	supportedrr  rm  r   r   r   r   add_job_option@  s     


z&PrinterPropertiesDialog.add_job_optionc             C   sR   |j }| jj| | j  |jr.| jj| n| jj|j | j	|j= | j
  d S )N)rk  rd  r\  rq  rr  r   r9  r:  r   ra  r  )r   r   r   r   r   r   rj  U  s    
z3PrinterPropertiesDialog.on_btnJOOtherRemove_clickedc             C   sB   | j j }| j| | jj  | j jd | jjd | j  d S )Nr   F)	r   r)  rt  r   rl  rT  r   r_  r  )r   r   r   r   r   r   on_btnNewJobOption_clickeda  s    


z2PrinterPropertiesDialog.on_btnNewJobOption_clickedc             C   s0   | j j }t|dko|| jk}| jj| d S )Nr   )r   r)  r#  ra  r   r_  )r   r   r   Zactiver   r   r   on_entNewJobOption_changedi  s    
z2PrinterPropertiesDialog.on_entNewJobOption_changedc             C   s   | j | d S )N)ru  )r   r   r   r   r   on_entNewJobOption_activaten  s    z3PrinterPropertiesDialog.on_entNewJobOption_activatec          "   C   sn  yd| j j}|jdg }t| j o4| j jo4| j j }y|jd |}W n tk
r`   d}Y nX | j	j
| | j jp~t| j }x| j| jgD ]}|j
| qW d}d}|o| j jtj@ dkr(yN|jd |jdg }	x2|	D ]*}
|
dkrd}|rP q|
d	krd}|rP qW W n tk
r&   Y nX x:|| jf|| jfgD ]"\}}|rV|j  n|j  q>W W n   t  Y nX | js| j js| j jjd
s| j jjdr| j jjdr| j j r| j	j  n
| j	j  d}d}| jr4td | jj  x<| jD ]&}|jj | j j kr(d}nd}qW n
| jj  t!d}t!d}|r\d| }|rjd| }| j j"| | j#j"| | j$j% }|r:xt&| j'j( D ]}| j'j)|}| j'j*|j }yZ|| j j kr|j+|f}|j,|d| n*|| j#j kr|j+|f}|j,|d| W n tk
r2   Y nX qW | j-j
t.| jdkoV| j  | j/j
| j  d S )Nzdocument-format-supportedzapplication/postscriptFr   zapplication/vnd.cups-commandzprinter-commandsPrintSelfTestPageTZCleanzdnssd:zmdns:z/cupszConflicts detectedzInstallable OptionszPrinter Optionsz	<b>%s</b>)0r   other_attributesr   r   r   r1  r2  indexr-  r0   r_  r  r+   r*   typer   CUPS_PRINTER_COMMANDSr1   r2   r  r   r   r   Zremoter0  
startswithendswithr   r   r3   	tab_labelr)  r>   r   Z
set_markuprB   r   r*  ranger"   get_n_pagesget_nth_pageget_tab_labelr[  	set_valuer    r#  r   )r   ZattrsZformatsZ	printableZtestpageZ
adjustabler   ZselftestZ
cleanheadsZcommandscommandZcondZinstallableboldZoptionsboldr   ZinstallabletextZoptionstextr   rn  pagerg  r<  r   r   r   r  r  s    













z*PrinterPropertiesDialog.setDataButtonStateFc             C   s  |d kr| j }d}|j}|jr4| jjtd|  n| jjtd|  y||j r| jr| j  | jj sp|r| jj	|| jd |jrtt
j| j}|stjdtjjtjjtdd}|jtd |jtjtjjtjtjj |j }|j  |tjjkr| jj  d	S d	}|jd d  }	x2|D ]*}
|
|	krB|	j|
 n| jj|
| q(W x|	D ]}
| jj |
| q\W | j!j" }| j#j" }| j$j" }| j%j& }| j'j& }| j(j& }||j)ks|r| jj*|| ||j+ks|r| jj,|| |j r||j-ks|r| jj.|| ||j/ks,|r6|j0| ||j1ksH|rR|j2| ||j3ksd|rn|j4| d
d }|| j5}|| j6}|| j7}|| j8}||j9ks||j:ks|r|j;|| ||j<ks|r|j=| ||j>ks|r |j?| | j@j& }| jA }||jBks0||jCks0|r<|jD|| x&|jED ]}|| jFkrD|jG| qDW x^| jFjH D ]P}|jI s|rp|jJ |jK krptLd|j|jJ f  |jM|j|jJ  qpW W nD tjNk
r
 } z$|jO\}}tP||| | jj  d	S d }~X nX | jj  tQ | _R| jjS rtd| jTkrt| jjtd y| jjU | _VW n   tW  Y nX | jj  |sy|jX  | jY  W n tjNk
r   Y nX | jZj[  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   | j  }| j }|j|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  getCurrentClassMembersrF   r   r  r  r   r!  r   Zformat_secondary_textZadd_buttonsZSTOCK_CANCELr  ZNOZSTOCK_DELETEZYESr"  r   _end_operationclass_membersr\  ZaddPrinterToClassZdeletePrinterFromClassr$   r)  r#   r(   r,   r(  r-   r.   r.  ZsetPrinterInfor/  ZsetPrinterLocationr0  ZsetPrinterDevicer1  Z
setEnabledr2  ZsetAcceptingr3  Z	setSharedr4   r5   r6   r7   r4  r5  ZsetJobSheetsr6  ZsetErrorPolicyr7  ZsetOperationPolicyr8   rL  r8  rQ  Z	setAccess
attributesra  ZunsetOptionvaluesr@  rC  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   rI  Zold_membersmemberr/  r.  r0  r1  Z	acceptingZsharedr  r4  r5  r6  r7  r8  rQ  r   esr   r   r   r$    s    


























z$PrinterPropertiesDialog.save_printerc             C   s    x| j j D ]}|j  qW d S )N)r   r  Z	writeback)r   r   r   r   r   r  e  s    z*PrinterPropertiesDialog.getPrinterSettingsc             C   sP   |j  \}}|r|| _n4y
| j}W n tk
r6   d S X |j|rL|j| d S )N)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   |j  \}}|d k	r>|j }|j|}|j|d}| jj| d S )Nr   )Z
get_cursorr*  r[  r,  r"   set_current_page)r   r   rG  r   r   r<  rn  r   r   r   %on_tvPrinterProperties_cursor_changedz  s    
z=PrinterPropertiesDialog.on_tvPrinterProperties_cursor_changedc             C   s   | j j  d S )N)r0   r   )r   r   r   r   printTestPage  s    z%PrinterPropertiesDialog.printTestPagec       
   !   C   s  | j }|sd S d }| jdkrD| jjd}|rDtjjtd|jj  }t	j
 }t	jd ytj| jd| j| jd}W n. tk
r } ztd || j d S d }~X nX d }|jtd yF|rtjj|rtd|  |j|j|d}ntd	 |j|j}W n~ t	jk
rx } z^|j\}}	|t	jkrZ| jd
krZ| jd dkrZttdtd| j nt||	| j W Y d d }~X nX |j  t	j| |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   zNot possiblez^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   rG  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_testpagerp  rO  r   r  job_idmsgr   r   r   on_btnPrintTestPage_clicked  sV    





 


z3PrinterPropertiesDialog.on_btnPrintTestPage_clickedc             C   s  | j }|sd S tjdd}|jd|  |j  | jjtd y@d}| jj|j	||j	tj
 d}ttdtd| | jd	 W nj tjk
r } zL|j\}}|tjkr| j j	d
krttdtd| j nt||| j W Y d d }~X nX | jj  W d Q R X d S )NZwt)modez#CUPS-COMMAND
%s
zsending maintenance commandzapplication/vnd.cups-command)formatr  rO  r  z'Maintenance command submitted as job %d)r   r   zNot possiblez^The remote server did not accept the print job, most likely because the printer is not shared.)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  s4    



 z+PrinterPropertiesDialog.maintenance_commandc             C   s   | j d d S )Nrx  )r  )r   r   r   r   r   on_btnSelfTest_clicked  s    z.PrinterPropertiesDialog.on_btnSelfTest_clickedc             C   s   | j d d S )Nz	Clean all)r  )r   r   r   r   r   on_btnCleanHeads_clicked  s    z0PrinterPropertiesDialog.on_btnCleanHeads_clickedc       	      C   s|   |d krt j }tjtt}|j| d}x>t|D ]2\}}|j|j||g ||kr4|j	| d}q4W |sx|j	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          0   C   s  t  | _i | _t  | _|s"tj }|s.tj }tj| j	||d}|| _t
j|| j}|| _y|jd }|| _W n tk
r   Y nX | jj }y,|j | _|j | _| jdkr| jj  W n tjk
r6 }	 z\|	j\}	}
|	tjkrt|	|
| j |	tjtjgkr ttdtdtjj| j d| _W Y d d }	~	X nd t k
r }	 zFt!|	j"drpt#tdtd| j nt#tdtd	| j  W Y d d }	~	X nX x$| j$| j%| j&fD ]}|j'| qW xT| j(| j)| j*| j+| j,| j-| j.| j/| j0| j1| j2| j3| j4| j5| j6fD ]}|j7| qW | j$j8|j9 | j%j8|j: |j;}| j&j8| | jj<| j& x@| j=| j>| j)| j?| j&| j(fD ] }|j@r|jA  n|jB  qpW y6|jCr| jr| jDjA  n
| jDjE  n
| jDjA  W n   tF  | jDjA  Y nX | j-j7| | j.j7| | j/j7| | j0j7| | j4j8d
 i | _Gx"| jHjI D ]}|jJdkrp| jrp| jjKd}|rp|jL|jM |}y| jjN|jJ }W n  tk
r   |jOd  Y nX yL|jJ| jjPkr| jjP|jJ d }|jO||d n
|jO| || jG|jJ< W n6   tF  d}t#tdtd|jJ|f | j Y nX |jQj7| |s8|jRj7d q8W g | _S| jT|d x| jjNjU D ]}|| jGkrqp|dksp|dkrqp| jjN| }|| jjPkr| jjP| d }n.tV|tWrddg}t!|jX }nd
}t!|}| jY|||d|d qpW | jZj8d
 | jZj7| | j[j7d |j@rl| j\j]| j^}|dkr`| j\j_| | j`| n| ja|| | jb  | jc  | jd  t  | _| je  | jf  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   )rs  z0Option '%s' has value '%s' and cannot be edited.)rm  zoutput-modez	media-coltrueZfalse)r;  rs  rr  rm  )gr   r   r   r   r   r   r  r  r  r   cupshelpersZPrinterr   ry  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.   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r_  rT  r.  r/  r0  r9  r&   r%   r)   r  r   r  r3  r/   rl  r   ra  r   r  r   r  Zset_defaultr  r  ZreinitZpossible_attributesr   r   rd  rq  r   r'  r   r  rt  r   r   r"   page_numr?   remove_pagefillClassMembersfillPrinterOptionsupdateMarkerLevelsupdateStateReasonsupdatePrinterPropertiesTreeViewr  r  )r   r   r   r  r   r   r   Z
publishingrm  r  mr   Zurir   rp  Zoption_editabler;  rs  tab_nrr   r   r   r    s   














zPrinterPropertiesDialog.loadc             C   s   t jtt}| jjd xXt| jj D ]F}| jj|}| jj	|}|j
d }|j|d|j  |j|d| q(W | jj }| 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   rn  r  rg  r<  r   r   r   r   r    s    

z7PrinterPropertiesDialog.updatePrinterPropertiesTreeViewc                sl  | j }|sd S x| jj D ]}| jj| qW t }d}xdtfdtfdtfdtfgD ]\} |jj|g } tkrt	|dkry |d  W nB t
k
r } z&td| |f  dd |D }W Y d d }~X nX  fd	d|D ||< |dkpt	||k rVt	|}qVW xJdD ]B}t	|| |krtd
|| |d  |f  || |d = qW ttdd |d |d |d |d }t| |jtj@ dk}	|	r| jj  n
| jj  t	|dkrtjtdd}
|
jd |
jdd | jj|
ddd nbd}t	|}d|d d  }|dkr&d}tj }|jd |jd |jd |jd | jj|ddd x|D ]\}}}}|d krd}n&| jdkr| jj |}|d k	r|}|d }|d }tj!dd}tj! }t"j#||}|j$d|  |j|ddd |j|ddd tj|d}
|
j%d |
jd |j|
ddd |j&|||dd |d7 }qnW | j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 )g        r   )rW  xr   r   r   rX    s    z>PrinterPropertiesDialog.updateMarkerLevels.<locals>.<listcomp>c                s$   g | ]} t kr|d k rdn|qS )r   g        )r   )rW  r  )typr   r   rX    s   zTrimming %s from %sc             S   s   | |||fS )Nr   )colorr   r{  levelr   r   r   rJ    s    z<PrinterPropertiesDialog.updateMarkerLevels.<locals>.<lambda>z0Marker levels are not reported for this printer.)rg  Tg        Fr   r   r   r   r   )Zspacingz%d%%r   )r  r  r  r  )(r   r   re  r\  r   r   r   ry  r   r#  	TypeErrorr   r   mapr{  r   r|  rJ   r  r   r   Labelr   Zset_line_wraprh  r   GridZset_column_homogeneousZset_row_homogeneousset_column_spacingset_row_spacingr   ZlocalizeMarkerNameBoxgtkinklevelZGtkInkLevelr  Zset_width_charsrf  rl  )r   r   r   Zmarker_infoZnum_markersattrr  r  ZmarkersZcan_refreshrg  Zcolsr]  gridr  r   Zmarker_typer  Zlocalized_namer   r   ZvboxZsubhboxZinklevelr   )r  r   r    s     












z*PrinterPropertiesDialog.updateMarkerLevelsc             C   s   | j d d S )NZReportLevels)r  )r   r   r   r   r   r   ;  s    z9PrinterPropertiesDialog.on_btnRefreshMarkerLevels_clickedc             C   s   | j }|jjdg }tjtt}d}x|D ]z}|dkr8P d}|jd }tj|j	|| j
}|j dkrltj}ntjj|j  }|j|d| |j \}	}
|j|d|
 q*W | jj| d}|rd}| jj| d S )Nzprinter-state-reasonsFZnoneTZpausedr   r   )r   ry  r   r   r   r   r   statereasonZStateReasonr   r   Z
get_reasonZSTOCK_MEDIA_PAUSEZ
LEVEL_ICONZ	get_levelr  Zget_descriptionrK   r   rL   r  )r   r   Zreasonsr   anyreasonr<  rr   titler   r  r   r   r   r  >  s*    

z*PrinterPropertiesDialog.updateStateReasonsc       	      G   sP   |j |d}tjj }y|j|dd}|j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<  rH  r   Zthemer  r   r   r   r   Y  s    
z5PrinterPropertiesDialog.set_printer_state_reason_iconc             G   s   |j d|j|d d S )Nr   r   )r  r,  )r   r   r   r   r<  rH  r   r   r   r   b  s    z5PrinterPropertiesDialog.set_printer_state_reason_textc             C   sZ  t d | j}| jj|j | jj|j | jj|j	t
d}|jjdd}t|dkrd|d| 7 }| jj| t| jdkrVt d | jj|j | jj|j  | jj|j | j| j|j|jtj | j| j|j|jtj | j| j|j|j tj! | j| j"|j#|j$tj% | j&j|j' | j(j|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(   rT  r0  r%   Zmake_and_modelprinter_statesr   stater   ry  r#  r'   r   r,   r  r1  r-   r2  r.   r3  r  r4   Zjob_sheets_supportedr4  r  Z
job_sheetsr5   r5  r6   Zerror_policy_supportedr6  Zprinter_error_policyr7   Zop_policy_supportedr7  Zprinter_op_policyr8   r8  r9   rP  rQ  r  r  r  )r   r   r  r  r   r   r   r  e  sH    

z/PrinterPropertiesDialog.updatePrinterPropertiesc             C   s  | j j| j}|dkr"| j j| x| jj D ]}| jj| q.W x| jj D ]}| jj| qNW | j j| jdkr| j j	| j| j
| j | js| j j| j}|dkr| j j| | j j| j}|dkr| j j| d S | j}|j  | jj  d}xB| jjD ]4}|jdkrZd}| j}| j j| j}|dkrR| j j	| jtj|jd| j | j}	ntjj|j}
tjdtj|
 d}|j jd |jtjj | jj |ddd tj!j"ddd	d	}|j#d
dd
d |j$| | j
}	tj% }|j&d
 |j'd
 |j$| d}d  | _(| _)xt*|j+D ]\}}|j,dkr<q"|d7 }t-||| |	d}|j.|j/d|dd tj0 }|j1rtj!j"ddd	d	}|j#dddd
 |j$|j1 |j.|d|dd |j.|d|dd n|j.|d|dd |j |j2ddd || j+|j,< |j2j3| |j,dkr|| _(n|j,dkr"|| _)q"W q W |sd| j j| j}|dkrd| j j| x.| j+j4 D ] }|j5 }|rp| j6j$| qpW | jj7  | jj7  d S )Nr   FZInstallableOptionsT)rg  z	<b>%s</b>r   g      ?g      ?r   r   Z
PageRegion)r  r   Z	InputSlotZ
ManualFeedr  r  r  r  r  r  )8r"   r  rD   r  r@   re  r\  rC   rA   insert_pagerB   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	AlignmentrV  Zset_paddingr:  r  r  r  rB  rA  r  r   keywordr   rf  ZconflictIconr  rg  ri  r_  r  ZcheckConflictsr   rl  )r   r   rm  r  r   r   ZhasInstallableOptionsgroupZ	containerr  Z
group_nameframer  r]  r  r   oZhboxar   r   r   r   r    s    








z*PrinterPropertiesDialog.fillPrinterOptionsc             C   s   | j j| | jj| | jj| j}|dkr:| jj| | jj| jdkrb| jj| j| j	| j
 | jj }| jj }|j  |j  t| jj }|j  xL|D ]D}|| jjkr|| jjkr|j|f q| jjtj@ s|j|f qW d S )Nr   r  r  )rH   r_  rI   r"   r  rA   r  rD   r  rE   r   rF   r*  rG   r   r   r   Zget_printersrK  r   r   r  r   r{  r   ZCUPS_PRINTER_CLASS)r   rm  r  Zmodel_membersZmodel_not_membersnamesr   r   r   r   r    s*    


z(PrinterPropertiesDialog.fillClassMembersc             C   sN   t j| j| j t j| j| jjkr4| jj| j n| jj	| j | j
  d S )N)r  moveClassMembersrG   rF   r  r   r  r   r:  r9  r  )r   r   r   r   r   on_btnClassAddMember_clicked#  s    z4PrinterPropertiesDialog.on_btnClassAddMember_clickedc             C   sN   t j| j| j t j| j| jjkr4| jj| j n| jj	| j | j
  d S )N)r  r  rF   rG   r  r   r  r   r:  r9  r  )r   r   r   r   r   on_btnClassDelMember_clicked,  s    z4PrinterPropertiesDialog.on_btnClassDelMember_clickedc             C   sF   |o | j d k	o | j jpt| j }x| j| jgD ]}|j| q0W d S )N)r   r  r   r   r+   r*   r_  )r   Z	sensitiver   r   r   r   sensitise_new_printer_widgets5  s    
z5PrinterPropertiesDialog.sensitise_new_printer_widgetsc             C   s   | j d d S )NF)r  )r   r   r   r   desensitise_new_printer_widgets>  s    z7PrinterPropertiesDialog.desensitise_new_printer_widgetsc             C   sN   t | j | j  | jjd| jj| jj| j| j	| jds@| j
  t| j d S )NZdevice)r0  r   r   r  r   )r
   r   r  r  initr   r0  r   r  r  r  r   )r   r   r   r   r   on_btnSelectDevice_clickedB  s    

z2PrinterPropertiesDialog.on_btnSelectDevice_clickedc          	   C   sR   t | j | j  | jjd| jj| j| jj| j	| j
| jdsD| j  t| j d S )Nr   )r0  r   r   r   r  r   )r
   r   r  r  r  r   r0  r   r   r  r  r  r   )r   r   r   r   r   on_btnChangePPD_clickedO  s    

z/PrinterPropertiesDialog.on_btnChangePPD_clickedc             C   sd   t d | j  | jjdr`| jr`y&| jj  |r>| j| n| j  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  ]  s    
z+PrinterPropertiesDialog.on_printer_modifiedc             C   s   | j   d S )N)r  )r   r   r   r   r   r  k  s    z/PrinterPropertiesDialog.on_printer_not_modifiedc             C   s   | j d |d d S )NF)r  )r   monr   Z	eventnamer   r   r   r   r  o  s    z(PrinterPropertiesDialog.on_printer_eventc             C   sJ   | j jdr.| jr.| jj|kr.| j 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  r  s
    z*PrinterPropertiesDialog.on_printer_removedc             C   sT   | j jdrP| jrP| jj|j krPy| jj  | j  W n tjk
rN   Y nX d S )Nr  )	r   r%  r   r   get_printerr  r  r   r  )r   r  r  r   r   r   r  z  s    
z-PrinterPropertiesDialog.on_state_reason_addedc             C   sT   | j jdrP| jrP| jj|j krPy| jj  | j  W n tjk
rN   Y nX d S )Nr  )	r   r%  r   r   r  r  r  r   r  )r   r  r  r   r   r   r    s    
z/PrinterPropertiesDialog.on_state_reason_removedc             C   s   d S )Nr   )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   r>  rF  rL  rP  rR  rU  r^  rM  rN  rb  rc  rq  rt  rj  ru  rv  rw  r  r$  r  r   r  r  r  r  r  r  r  r  r  r  r   r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   ?   s   
   0

31%	
		
 
i
 <"

 R`	0q		
			r   __main__r   zSpecify queue namer   TZuiZSYSTEM_CONFIG_PRINTER_UIr   c             C   s   | j   tj  d S )N)r   loopquit)r   r   r   r   on_dialog_closed  s    r  zdialog-closed)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                 _


