a
    K56a ù  ã                   @   s\  d dl mZ d dlZdejv s0dejv s0edƒ‚z¾d dlZe dd¡ d dlmZ e d	d¡ d d
lmZ e dd¡ d dlm	Z	 e dd¡ d dlm
Z
 e dd¡ d dlmZ e dd¡ d dlmZ e dd¡ d dlmZ e d¡ W n ey
   edƒ‚Y n0 da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 mZmZmZ d dlmZ d dlmZ dZdZ dd „ Z!d!d"„ Z"d#d$„ Z#e $d%¡Z%d&d'„ Z&d(d)„ Z'dd+d,„Z(d-d.„ Z)G d/d0„ d0ej*ƒZ+G d1d2„ d2e+ƒZ,G d3d4„ d4e+ƒZ-G d5d6„ d6ej*ƒZ.G d7d8„ d8e/ƒZ0G d9d:„ d:e/ƒZ1G d;d<„ d<ej2ej3ƒZ4G d=d>„ d>ej*ƒZ5G d?d@„ d@ej3ƒZ6G dAdB„ dBe7ƒZ8G dCdD„ dDe/ƒZ9G dEdF„ dFe9ƒZ:G dGdH„ dHe:ƒZ;G dIdJ„ dJe:ƒZ<G dKdL„ dLe<ƒZ=G dMdN„ dNe:ƒZ>G dOdP„ dPe:ƒZ?G dQdR„ dRe?ƒZ@G dSdT„ dTejAƒZBe CeB¡ G dUdV„ dVe?ƒZDG dWdX„ dXe?ƒZEG dYdZ„ dZe:ƒZFG d[d\„ d\e:ƒZGG d]d^„ d^e:ƒZHG d_d`„ d`eHƒZIG dadb„ dbe:ƒZJG dcdd„ dde:ƒZKG dedf„ dfe:ƒZLG dgdh„ dhe:ƒZMG didj„ djejNƒZOG dkdl„ dle9ejPƒZQG dmdn„ dne9ejPƒZRG dodp„ dpe9ejSƒZTdqdr„ ZUdsdt„ ZVdudv„ ZWe<e=eDeEeFeHeGeIeJeKe@eLe>dwœZXeQeTeRdxœZYdydz„ ZZd{d|„ Z[d}d~„ Z\dd€„ Z]dS )‚é    )ÚUINotImportableNZDISPLAYZWAYLAND_DISPLAYz7No graphical display detected, falling back to text UI.ÚGLibz2.0)r   ÚGObject)r   ÚPangoz1.0)r   ÚGdkz3.0)r   Ú	GdkPixbuf)r   ÚGtk)r   Ú	GtkSource)r	   Zcairoz?Please install the reportbug-gtk package to use this interface.)ÚQueue)Ú	NoPackageÚNoBugsÚQuertBTSError)Údebbugs)Úlaunch_browserTz"/usr/share/pixmaps/debian-logo.pngc                 C   s$   | t krdS | tkrdS t| ƒS d S )Nz<MainContext of UI thread>z!<MainContext of reportbug thread>)Ú
ui_contextÚreportbug_contextÚrepr)Úcontext© r   ú5/usr/lib/python3/dist-packages/reportbug/ui/gtk_ui.pyÚ_describe_contextP   s
    r   c                 C   s>   t j ¡ }|| kr*tdt| ƒt|ƒf ƒ‚| ¡ s:tdƒ‚d S )Nz4Function should be called in %s but was called in %sz*Function should be called with %s acquired)r   ÚMainContextZref_thread_defaultÚAssertionErrorr   Zis_owner)ZexpectedZreallyr   r   r   Ú_assert_contextY   s    
ÿr   c                 C   s   d|  S )Nú	<b>%s</b>r   ©Úsr   r   r   Ú	highlighte   s    r   z<.*?>c                 C   s   t  d| ¡S ©NÚ )Úre_markup_freeÚsubr   r   r   r   Úmarkup_freek   s    r"   c                 C   s$   |   ¡ } | d dv r | d d… S | S )Néÿÿÿÿ)ú?ú:)Ústripr   r   r   r   Úask_freeo   s    r'   Fc                 C   sP   t tƒ t ¡ }| tjj¡ | tjj	tjj	¡ |rB| 
| ¡ n
| | ¡ |S ©N)r   r   r   ZScrolledWindowZset_shadow_typeZ
ShadowTypeZ	ETCHED_INÚ
set_policyÚ
PolicyTypeZ	AUTOMATICZadd_with_viewportÚadd)ÚwidgetZwith_viewportÚscrolledr   r   r   Úcreate_scrollablev   s    
r.   c                 C   sT   t tƒ t ttjjtjjB tjj	tj
j| ¡}| ddd„ ¡ | d¡ | ¡  d S )NÚresponsec                 W   s   |   ¡ S r(   ©Údestroy)ÚdÚargsr   r   r   Ú<lambda>†   ó    zinfo_dialog.<locals>.<lambda>Ú	Reportbug)r   r   r   ÚMessageDialogÚ	assistantÚDialogFlagsÚMODALÚDESTROY_WITH_PARENTÚMessageTypeÚINFOÚButtonsTypeÚCLOSEÚconnectÚ	set_titleÚshow_all)ÚmessageÚdialogr   r   r   Úinfo_dialog‚   s    ÿ
rE   c                   @   s   e Zd Zdd„ ZdS )ÚCustomDialogc                 O   s.  t tƒ tj | dttjjtjjB |¡ |  	|d ¡ |  
d¡ tjdd}| 
d¡ | j |ddd¡ tjdd}| |d	dd¡ tjd
d
ddd}| |d	dd¡ tj |tjj¡}	| |	ddd¡ tj|d}
|
 d¡ |
 tjj¡ |
 d¡ |
 dd	¡ | |
d	dd¡ | j|g|¢R i |¤Ž d S )Nr6   r#   é   é
   ©Zspacingé   Tr   Fg      à?g      ð?)ZxalignZyalignZxscaleZyscale©Úlabelú	can-focus)r   r   r   ÚDialogÚ__init__r8   r9   r:   r;   Úset_default_responseÚset_border_widthÚVBoxÚvboxÚ
pack_startÚHBoxZ	AlignmentÚImageÚnew_from_stockÚIconSizeZDIALOGÚLabelÚset_line_wrapÚset_justifyÚJustificationÚFILLÚset_selectableÚset_propertyÚsetup_dialog)ÚselfZstock_imagerC   Úbuttonsr3   ÚkwargsrS   ÚhboxZalignÚimagerL   r   r   r   rO   Œ   s.    þ



zCustomDialog.__init__N©Ú__name__Ú
__module__Ú__qualname__rO   r   r   r   r   rF   ‹   s   rF   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚInputStringDialogc              	   C   s2   t tƒ t | tj|tjtjjtj	tjj
f¡ d S r(   )r   r   rF   rO   r   ZSTOCK_DIALOG_INFOÚSTOCK_CANCELÚResponseTypeÚCANCELZSTOCK_OKÚACCEPT)ra   rC   r   r   r   rO   ±   s    

ÿÿzInputStringDialog.__init__c                 C   s(   t tƒ t ¡ | _| | jddd¡ d S )NFTr   )r   r   r   ÚEntryÚentryrT   ©ra   rS   r   r   r   r`   ·   s    
zInputStringDialog.setup_dialogc                 C   s   t tƒ | j ¡ S r(   ©r   r   rp   Úget_text©ra   r   r   r   Ú	get_value¼   s    zInputStringDialog.get_valueN)rg   rh   ri   rO   r`   ru   r   r   r   r   rj   °   s   rj   c                   @   s<   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ ZdS )ÚExceptionDialogc                    s   t tƒ ‡ ‡fdd„}|S )Nc              
      s2   ˆrˆ| ||ƒ t  ˆ jd t | ||¡¡¡ d S r   )ÚapplicationÚrun_once_in_main_threadÚstart_dialogÚjoinÚ	tracebackÚformat_exception)ÚexctypeÚvalueÚtb©ÚclsÚoldhookr   r   Ú
excepthookÆ   s
    ÿz5ExceptionDialog.create_excepthook.<locals>.excepthook©r   r   )r   r‚   rƒ   r   r€   r   Úcreate_excepthookÃ   s    z!ExceptionDialog.create_excepthookc                 C   s8   t tƒ z| |ƒ}| ¡  W n   t d¡ Y n0 d S ©Né   )r   r   rB   ÚsysÚexit)r   r   rD   r   r   r   ry   Î   s    zExceptionDialog.start_dialogc                 C   s*   t tƒ t | tjdtjtjjf|¡ d S )NzSAn error has occurred while doing an operation in Reportbug.
Please report the bug.)	r   r   rF   rO   r   ZSTOCK_DIALOG_ERRORÚSTOCK_CLOSErl   r?   )ra   r   r   r   r   rO   ×   s    zExceptionDialog.__init__c                 C   s`   t j d¡}| |ddd¡ t  ¡ }| d¡ | ¡  |¡ t|ƒ}| 	|¡ |  
d| j¡ d S )NzMore detailsTr   Fr/   )r   ÚExpanderÚnew_with_mnemonicrT   ÚTextViewÚset_editableÚ
get_bufferÚset_textr.   r+   r@   Úon_response)ra   rS   r   ÚexpanderÚviewr-   r   r   r   r`   Û   s    

zExceptionDialog.setup_dialogc                 C   s   t tƒ t d¡ d S r†   ©r   r   rˆ   r‰   ©ra   rD   Úresr   r   r   r‘   è   s    zExceptionDialog.on_responseN)	rg   rh   ri   Úclassmethodr…   ry   rO   r`   r‘   r   r   r   r   rv   Á   s   


rv   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚReportViewerDialogc              
   C   s®   t tƒ tj | dttjjtjjB tj	tj
jtjtj
jf¡ || _|  dd¡ |  tj
j¡ |  d¡ |  d| j¡ t ¡ }| ¡  | j¡ | j t|ƒddd¡ |  ¡  d S )Nr6   é  rJ   r/   Tr   )r   r   r   rN   rO   r8   r9   r:   r;   Z
STOCK_COPYrl   ÚAPPLYrŠ   r?   rC   Úset_default_sizerP   rQ   r@   r‘   r   r   r   rS   rT   r.   rB   )ra   rC   r“   r   r   r   rO   î   s     

ÿþ
zReportViewerDialog.__init__c                 C   s>   t tƒ |tjjkr2tj tj¡}| 	| j
d¡ n|  ¡  d S )Nr#   )r   r   r   rl   rš   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr   rC   r1   )ra   rD   r–   Z	clipboardr   r   r   r‘     s
    zReportViewerDialog.on_responseN)rg   rh   ri   rO   r‘   r   r   r   r   r˜   í   s   r˜   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚBugz(Encapsulate a bug report for the GTK+ UIc                 C   sh   |j | _d |j¡| _|j| _|j| _|j| _	|j
| _
|j| _d |j¡| _|j
| _|j| _|j| _d S )Nz, )Zbug_numÚidrz   ZtagsÚtagÚpackageÚpendingÚstatusZ
originatorÚreporterÚdateÚseverityZfound_versionsÚversionÚ
filed_dateZlog_modifiedÚmodified_dateÚsubjectÚinfo)ra   Úbugr   r   r   rO     s    zBug.__init__c                 c   s\   | j V  | jV  | jV  | jV  | jV  | jV  | jV  | jV  | jV  | j	V  | j
V  d S r(   )rž   rŸ   r    rª   r¢   r£   r¤   r¥   r¦   r§   r¨   rt   r   r   r   Ú__iter__  s    zBug.__iter__N)rg   rh   ri   Ú__doc__rO   r¬   r   r   r   r   r     s   r   c                   @   sF   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Zdd„ Z	dS )Ú	BugReportc                 C   s  |  d¡}d}g | _|t|ƒk rT|| }|d7 }| ¡ s:qT| j |¡ | d¡rqTqd}g }d}|t|ƒk r¼|| }| |¡ |d7 }| ¡ s |dk r`|d7 }q`|dkr¶|dkr¶d}q¼d}q`|rîd |d d	… ¡| _d ||d d … ¡| _nd |d d
… ¡| _d| _d S )NÚ
r   r‡   zSubject:Fé   z-- Package-specific info:Téýÿÿÿéþÿÿÿr   )	ÚsplitÚheadersÚlenr&   ÚappendÚ
startswithrz   Úoriginal_infoÚothers)ra   rC   ÚlinesÚiÚlineZstorerª   Z	has_otherr   r   r   rO   +  s>    


zBugReport.__init__c                 C   s   | j S r(   )r¹   rt   r   r   r   Ú
get_othersQ  s    zBugReport.get_othersc                 C   s   | j S r(   )r¸   rt   r   r   r   Úget_original_infoT  s    zBugReport.get_original_infoc                 C   s,   | j D ] }d|v r|tdƒd …   S qd S ©NZSubjectú	Subject: )r´   rµ   )ra   Úheaderr   r   r   Úget_subjectW  s    
zBugReport.get_subjectc                 C   s8   t t| jƒƒD ]$}d| j| v rd| | j|<  q4qd S r¿   )Úrangerµ   r´   )ra   r©   r»   r   r   r   Úset_subject\  s    zBugReport.set_subjectéO   Fc                 C   sZ   d}d}|  ¡ D ]D}|r2||d 7 }| ¡ sd}qtj|||d}|d |¡d 7 }q|S )z8Wrap every line in the message, except the pseudoheadersr   Tr¯   F)ÚwidthÚbreak_long_words)Ú
splitlinesr&   ÚtextwrapZwraprz   )ra   ÚmsgrÆ   rÇ   ÚbodyZpheadr¼   Útmpr   r   r   Úwrap_bug_bodyb  s    ÿzBugReport.wrap_bug_bodyc                 C   s>   | j r$d d | j¡|  |¡| j ¡S d d | j¡|  |¡¡S )Nz	{}
{}

{}r¯   z{}
{}
)r¹   Úformatrz   r´   rÍ   ©ra   rª   r   r   r   Úcreate_messagev  s    zBugReport.create_messageN)rÅ   F)
rg   rh   ri   rO   r½   r¾   rÂ   rÄ   rÍ   rÐ   r   r   r   r   r®   *  s   &
r®   c                   @   sL   e Z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S )ÚBugPagec
                 C   sÔ   t tƒ tj | ¡ tj | ¡ |  d¡ t 	¡ | _
|| _|| _| jj| _|| _|| _|| _|| _|| _|| _|	| _d | _tjdd}
|
 tjddddd¡ t ¡ | _| j d¡ |
 | jddd¡ |  |
¡ d S )	NTé   rI   zRetrieving bug information.rK   Fr   ç{®Gáz„?)r   r   Ú	threadingÚThreadrO   r   ÚEventBoxÚ	setDaemonr   r   r   rD   r8   rw   ÚnumberÚ	queryonlyÚbtsÚmirrorsÚ
http_proxyÚtimeoutÚarchivedÚ
bug_statusrR   rT   rY   ÚProgressBarÚprogressÚset_pulse_stepr+   )ra   r8   rD   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rS   r   r   r   rO     s,    



zBugPage.__init__c                 C   s‚   | j  ¡ stdƒ‚| j  ¡  t d| j¡ tjt	| j
ƒ| j| j| j| j| jd}|sd| j | j¡ n|d | _| j | j|¡ d S )Nz%Could not acquire my own main-contextrH   )rÛ   rÜ   rÞ   r   )r   Úacquirer   Úpush_thread_defaultr   Útimeout_addÚpulser   Z
get_reportÚintrØ   rÝ   rÚ   rÛ   rÜ   rÞ   rw   rx   Ú	not_foundrß   ÚfoundrÏ   r   r   r   Úrunœ  s    

þ
zBugPage.runc                 C   s*   t tƒ |  ¡ }|r&|  |¡ | ¡  d S r(   )r   r   Z	get_childÚremoveZunparent)ra   Úchildr   r   r   Údrop_progressbar®  s
    
zBugPage.drop_progressbarc                 C   s   t tƒ | j ¡  |  ¡ S r(   )r   r   rá   ræ   Zis_alivert   r   r   r   ræ   µ  s    
zBugPage.pulsec                 C   s.   t tƒ |  ¡  |  tjdd¡ |  ¡  d S )Nz-The bug can't be fetched or it doesn't exist.rK   )r   r   rí   r+   r   rY   rB   rt   r   r   r   rè   º  s    zBugPage.not_foundc                 C   s–  t tƒ |  ¡  |d j}|d }tjdd}| d¡ tjd| d}| d¡ | 	tj
j¡ | |ddd¡ t ¡ }d}|D ]V}t ¡ }	|	 d¡ |	 ¡  |d d	… ¡ |rÀ|	 tjjd¡ | |	ddd¡ | }q€t|dƒ}
| |
ddd¡ t ¡ }tjd
d}| d| j¡ | |ddd¡ | jsptjdd}| tj tjtjj¡¡ | d| j ¡ | |ddd¡ | |ddd¡ |  !|¡ |  "¡  d S )Nr   r‡   rÒ   rI   zDescription: rK   TFi'  zOpen in browserÚclickedZReply)#r   r   rí   r©   r   rR   rQ   rY   rZ   r[   r\   r]   rT   r   rŽ   r   r   Zset_state_flagsZ
StateFlagsZPRELIGHTr.   Z
HButtonBoxÚButtonr@   Úon_open_browserrÙ   Ú	set_imagerV   rW   Z
STOCK_EDITrX   ÚBUTTONÚon_replyr+   rB   )ra   rª   ÚdescZbodiesrS   rL   ZviewsZoddrË   r“   r-   ÚbboxÚbuttonr   r   r   ré   À  sD    





zBugPage.foundc                 C   s(   t tƒ tt | jt| jƒ| j¡ƒ d S r(   )	r   r   r   r   Zget_report_urlrÚ   rç   rØ   rÞ   ©ra   rö   r   r   r   rð   ê  s    zBugPage.on_open_browserc                 C   sF   t tƒ | j | j¡ | j ¡  z| j ¡  W n t	y@   Y n0 d S r(   )
r   r   rw   Úset_next_valuerß   r8   Úforward_pagerD   r1   ÚAttributeErrorr÷   r   r   r   ró   î  s    
zBugPage.on_replyN)rg   rh   ri   rO   rê   rí   ræ   rè   ré   rð   ró   r   r   r   r   rÑ   ~  s   *rÑ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
BugsDialogc                 C   s‚   t tƒ tj | d|tjjtjjB tjtj	j
f¡ || _|| _|j| _t ¡ | _| j | jddd¡ |  d| j¡ |  dd¡ d S )NzReportbug: bug informationTr   r/   éX  )r   r   r   rN   rO   r9   r:   r;   rŠ   rl   r?   r8   rÙ   rw   ZNotebookÚnotebookrS   rT   r@   r‘   r›   )ra   r8   rÙ   r   r   r   rO   ý  s    þ
zBugsDialog.__init__c                 G   s   |   ¡  d S r(   r0   ©ra   r3   r   r   r   r‘   
  s    zBugsDialog.on_responsec                 G   s<   t | j| || jg|¢R Ž }| j |tj|d¡ | ¡  d S )NrK   )rÑ   r8   rÙ   rý   Zappend_pager   rY   Ústart)ra   rØ   r3   Úpager   r   r   Úshow_bug  s    zBugsDialog.show_bugN)rg   rh   ri   rO   r‘   r  r   r   r   r   rû   ü  s   rû   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚReportbugApplicationc                 C   s0   t tƒ tj | ¡ |  d¡ tƒ | _d | _d S ©NT)	r   r   rÔ   rÕ   rO   r×   r
   ÚqueueÚ
next_valuert   r   r   r   rO     s
    
zReportbugApplication.__init__c                 C   s$   t  ¡ stdƒ‚t  ¡  t ¡  d S )NzCould not acquire UI context)r   rã   r   rä   r   Úmainrt   r   r   r   rê     s    zReportbugApplication.runc                 C   s   t tƒ | j ¡ S r(   )r   r   r  rœ   rt   r   r   r   Úget_last_value%  s    z#ReportbugApplication.get_last_valuec                 C   s    t tƒ | j | j¡ d | _d S r(   )r   r   r  Zputr  rt   r   r   r   Úput_next_value)  s    z#ReportbugApplication.put_next_valuec                 C   s   t tƒ || _d S r(   )r   r   r  ©ra   r~   r   r   r   rø   .  s    z#ReportbugApplication.set_next_valuec                    s   ‡ ‡‡fdd„}t  |¡ d S )Nc                      s   t tƒ ˆˆ i ˆ¤Ž dS ©NF©r   r   r   ©r3   Úfuncrc   r   r   Úcallback5  s    z>ReportbugApplication.run_once_in_main_thread.<locals>.callback)r   Úidle_add)ra   r  r3   rc   r  r   r  r   rx   2  s    z,ReportbugApplication.run_once_in_main_threadc                    s<   ‡ ‡‡‡fdd„}t  |¡ ˆ ¡ }t|tƒr4|‚n|S d S )Nc               
      s`   t tƒ zˆˆ i ˆ¤Ž} W n. tyH } zˆ |¡ W Y d }~nd }~0 0 ˆ | ¡ ˆ ¡  dS r
  )r   r   ÚBaseExceptionrø   r  )ÚretÚe©r3   r  rc   ra   r   r   r  ?  s     
z:ReportbugApplication.call_in_main_thread.<locals>.callback)r   r  r  Ú
isinstancer  )ra   r  r3   rc   r  r  r   r  r   Úcall_in_main_thread<  s    

z(ReportbugApplication.call_in_main_threadN)
rg   rh   ri   rO   rê   r  r  rø   rx   r  r   r   r   r   r    s   
r  c                   @   s   e Zd Zdd„ ZdS )Ú
SyncReturnc                 C   s   t tƒ t | |¡ || _d S r(   )r   r   ÚRuntimeErrorrO   Úresult)ra   r  r   r   r   rO   W  s    zSyncReturn.__init__Nrf   r   r   r   r   r  V  s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚReportbugConnectorc                 O   s   t tƒ d S r(   r  ©ra   r3   rc   r   r   r   Úexecute_operation^  s    z$ReportbugConnector.execute_operationc                 O   s   t tƒ ||fS r(   r„   )r   r3   rc   r   r   r   Úsync_pre_operationd  s    z%ReportbugConnector.sync_pre_operationN)rg   rh   ri   r  r  r   r   r   r   r  ]  s   r  c                   @   sŠ   e Zd ZdZejjZdZe	Z
e 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S )ÚPager   Fz#fff8aec                 C   sJ   t tƒ || _|j| _|  ¡ | _| | j_| j d¡ | j ¡  t	j
| _d S )NrJ   )r   r   r8   rw   Úcreate_widgetr,   r   rQ   rB   r  Únext_page_numÚpage_num)ra   r8   r   r   r   rO   q  s    

zPage.__init__c                 O   sZ   t tƒ |  ¡  |  ¡  | dd¡| _| dd¡| _| j|i |¤Ž | j 	¡  |  
¡  d S )NÚempty_okFÚpresubj)r   r   Ú	switch_inÚconnect_signalsÚpopr!  r"  Úexecuter8   ÚshowÚsetup_focusr  r   r   r   r  {  s    
zPage.execute_operationc                 C   s   t tƒ d S r(   r  rt   r   r   r   r$  …  s    zPage.connect_signalsc                 C   s   t tƒ | j | j|¡ d S r(   )r   r   r8   Úset_page_completer,   )ra   Zcompleter   r   r   r)  ˆ  s    zPage.set_page_completec                 C   s   t tƒ | j | j|¡ d S r(   )r   r   r8   Úset_page_typer,   )ra   Útyper   r   r   r*  Œ  s    zPage.set_page_typec                 C   s    t tƒ |r| j | j|¡ d S r(   )r   r   r8   Úset_page_titler,   )ra   Útitler   r   r   r,    s    zPage.set_page_titlec                 C   s~   t tƒ t jd7  _| j | j| j¡ |  | j	¡ |  
| j¡ |  d¡ | j | jtj | j¡¡ | j | ¡ | j ¡  d S )Nr‡   r6   )r   r   r  r  r8   Zinsert_pager,   r   r)  Údefault_completer*  Ú	page_typer,  Zset_page_side_imager   ZPixbufZnew_from_fileÚ
side_imageÚset_next_pageZcommitrt   r   r   r   r#  –  s    
zPage.switch_inc                 C   s   t tƒ | j ¡  d S r(   )r   r   r,   Ú
grab_focusrt   r   r   r   r(  £  s    zPage.setup_focusc                 G   s$   t tƒ | j | j¡r | j ¡  d S r(   )r   r   r8   Zget_page_completer,   rù   rþ   r   r   r   Úactivate_forward¨  s    zPage.activate_forwardc                 C   s   t tƒ d S r(   r  rt   r   r   r   Ú
switch_out®  s    zPage.switch_outc                 C   s   t tƒ | jrdS t|ƒS d S r  )r   r   r!  Úboolr	  r   r   r   Úis_valid±  s    zPage.is_validc                 O   s@   t tƒ |  ¡ }|  |¡r2| j |¡ |  d¡ n
|  d¡ d S ©NTF)r   r   ru   r6  rw   rø   r)  )ra   r3   rc   r~   r   r   r   Úvalidate¹  s    
zPage.validateN)rg   rh   ri   r  r   ÚAssistantPageTypeZCONTENTr/  r.  ÚDEBIAN_LOGOr0  r   Zcolor_parseÚWARNING_COLORrO   r  r$  r)  r*  r,  r#  r(  r3  r4  r6  r8  r   r   r   r   r  j  s"   


r  c                   @   s    e Zd ZejjZdZdd„ ZdS )Ú	IntroPageTc                 C   st   t tƒ tjdd}tjdd}| d¡ | d¡ | tjj	¡ | 
|ddd¡ tj dd	¡}| 
|ddd¡ |S )
Né   rI   a'  
<b>Reportbug</b> is a tool designed to make the reporting of bugs in Debian and derived distributions relatively painless.

This wizard will guide you through the bug reporting process step by step.

<b>Note:</b> bug reports are publicly archived (including the email address of the submitter).rK   TFr   z1https://salsa.debian.org/reportbug-team/reportbugzHomepage of reportbug project)r   r   r   rR   rY   Úset_use_markuprZ   r[   r\   r]   rT   Z
LinkButtonZnew_with_label)ra   rS   rL   Úlinkr   r   r   r  È  s    

ÿzIntroPage.create_widgetN)	rg   rh   ri   r   r9  ZINTROr/  r.  r  r   r   r   r   r<  Ä  s   r<  c                   @   s6   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zd	S )ÚGetStringPagec                 C   s   t tƒ | j ¡  d S r(   ©r   r   rp   r2  rt   r   r   r   r(  ß  s    zGetStringPage.setup_focusc                 C   s†   t tƒ tjdd}t ¡ | _| j d¡ | j tjj	¡ | j 
d¡ | j dd¡ t ¡ | _| | jddd¡ | | jddd¡ |S ©NrÒ   rI   TrM   Fr   )r   r   r   rR   rY   rL   rZ   r[   r\   r]   r^   r_   ro   rp   rT   rq   r   r   r   r  ã  s    

zGetStringPage.create_widgetc                 C   s,   t tƒ | j d| j¡ | j d| j¡ d S )NÚchangedZactivate)r   r   rp   r@   r8  r3  rt   r   r   r   r$  ð  s    zGetStringPage.connect_signalsc                 C   s   t tƒ | j ¡ S r(   rr   rt   r   r   r   ru   õ  s    zGetStringPage.get_valueNFr   c                 C   sž   t tƒ t | jj| dd¡¡ | j |¡ |rŒ| ¡  t	 
¡ }t	 t¡}|D ]}| |g¡ qN| |¡ | d¡ | d¡ | j |¡ nd | _|  ¡  d S )Nz8(enter Ctrl+c to exit reportbug without reporting a bug)r   Tr   )r   r   r   r  rL   r   Úreplacerp   Úsortr   ZEntryCompletionÚ	ListStoreÚstrr¶   Ú	set_modelZset_inline_selectionZset_text_columnZset_completionÚ
completionr8  )ra   ÚpromptÚoptionsÚforce_promptÚdefaultrI  ÚmodelÚoptionr   r   r   r&  ù  s    



zGetStringPage.execute)NFr   ©rg   rh   ri   r(  r  r$  ru   r&  r   r   r   r   r@  Þ  s
   r@  c                   @   s   e Zd Zdd„ ZdS )ÚGetPasswordPagec                 C   s"   t tƒ t | ¡}| j d¡ |S r
  )r   r   r@  r  rp   Zset_visibility©ra   r,   r   r   r   r    s    
zGetPasswordPage.create_widgetN)rg   rh   ri   r  r   r   r   r   rQ    s   rQ  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚGetMultilinePagec                 C   s   t tƒ | j ¡  d S r(   ©r   r   r“   r2  rt   r   r   r   r(    s    zGetMultilinePage.setup_focusc                 C   sš   t tƒ tjdd}t ¡ | _| j d¡ | j tjj	¡ | j 
d¡ | j dd¡ | | jddd¡ t ¡ | _| j ¡ | _t| jƒ}| |ddd¡ |S rB  )r   r   r   rR   rY   rL   rZ   r[   r\   r]   r^   r_   rT   r   r“   r   Úbufferr.   ©ra   rS   r-   r   r   r   r    s    


zGetMultilinePage.create_widgetc                 C   s   t tƒ | j d| j¡ d S ©NrC  )r   r   rU  r@   r8  rt   r   r   r   r$  ,  s    z GetMultilinePage.connect_signalsc                 C   s.   t tƒ | j | j ¡ | j ¡ d¡}| d¡S )NTr¯   )r   r   rU  rs   Úget_start_iterÚget_end_iterr³   ©ra   Útextr   r   r   ru   0  s    zGetMultilinePage.get_valuec                 C   s:   t tƒ d| _t | jj|¡ | j d¡ | j d¡ d S )NTr   rC  )	r   r   r!  r   r  rL   r   rU  Úemit©ra   rJ  r   r   r   r&  5  s
    zGetMultilinePage.executeNrP  r   r   r   r   rS    s
   rS  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ ZdS )
ÚTreePageNc                 O   s0   t tƒ tj| g|¢R i |¤Ž | j ¡ | _d S r(   )r   r   r  rO   r“   Úget_selectionÚ	selectionr  r   r   r   rO   A  s    zTreePage.__init__c                 C   s   t tƒ | j ¡  d S r(   rT  rt   r   r   r   r(  F  s    zTreePage.setup_focusc                 C   s   t tƒ | j d| j¡ d S rW  )r   r   r`  r@   r8  rt   r   r   r   r$  J  s    zTreePage.connect_signalsc                 C   st   t tƒ | j ¡ \}}| j ¡ tjjk}g }|D ].}| | 	|¡| j
¡}|d ur0| t|ƒ¡ q0|rp|sp|d S |S ©Nr   )r   r   r`  Úget_selected_rowsZget_moder   ÚSelectionModeÚMULTIPLEru   Úget_iterÚvalue_columnr¶   r"   )ra   rN  ÚpathsÚmultipler  Úpathr~   r   r   r   ru   N  s    zTreePage.get_value)rg   rh   ri   rf  rO   r(  r$  ru   r   r   r   r   r^  >  s
   r^  c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚGetListPager   c                 C   s8  t tƒ tjdd}t ¡ | _| j d¡ | j tjj	¡ | 
| jddd¡ tjdd}t ¡ | _| j d¡ | j ¡  tjj¡ t| jƒ}| 
|ddd¡ t ¡ }| d¡ | tjj¡ tjtjd}| d| j¡ | 
|ddd¡ tjtjd}| d| j¡ | 
|ddd¡ | 
|ddd¡ | 
|ddd¡ |S )	NrÒ   rI   TFr   rJ   )Zstockrî   )r   r   r   rR   rY   rL   rZ   r[   r\   r]   rT   rU   ÚTreeViewr“   Úset_rules_hintr_  Úset_moderc  rd  r.   Z
VButtonBoxZset_spacingZ
set_layoutZButtonBoxStyleZSTARTrï   Z	STOCK_ADDr@   Úon_addZSTOCK_REMOVEÚ	on_remove)ra   rS   rd   r-   rõ   rö   r   r   r   r  _  s0    



zGetListPage.create_widgetc                 C   s,   t tƒ g }| jD ]}| || j ¡ q|S r(   )r   r   rN  r¶   rf  )ra   ÚvaluesÚrowr   r   r   ru   }  s
    
zGetListPage.get_valuec                 C   s*   t tƒ tdƒ}| ¡  | d| j¡ d S )NzAdd a new item to the listr/   )r   r   rj   rB   r@   Úon_add_dialog_response)ra   rö   rD   r   r   r   rn  „  s    zGetListPage.on_addc                 C   s:   t tƒ |tjjkr.| j | ¡ g¡ |  ¡  | 	¡  d S r(   )
r   r   r   rl   rn   rN  r¶   ru   r8  r1   r•   r   r   r   rr  Š  s
    z"GetListPage.on_add_dialog_responsec                 C   sX   t tƒ | j ¡ \}}g }|D ]}| | j |¡¡ q|D ]}| j |¡ q:|  ¡  d S r(   )	r   r   r`  rb  r¶   rN  re  rë   r8  )ra   rö   rN  rg  Zitersri  Úiterr   r   r   ro  ‘  s    zGetListPage.on_removec                 C   sx   t tƒ d| _t | jj|¡ t t	¡| _
| j
 d| j¡ | j | j
¡ | j tjj¡ | j tjdt ¡ dd¡ d S )NTzrow-changedZItemr   ©r[  )r   r   r!  r   r  rL   r   r   rF  rG  rN  r@   r8  r“   rH  r`  rm  rc  rd  Úappend_columnÚTreeViewColumnÚCellRendererTextr]  r   r   r   r&  œ  s    zGetListPage.executeN)
rg   rh   ri   rf  r  ru   rn  rr  ro  r&  r   r   r   r   rj  \  s   rj  c                   @   s   e Zd Zdd„ ZdS )ÚWrapRendererTextc                 C   s0   t tƒ |  d|j¡ tj | |||||¡ d S )Nú
wrap-width)r   r   r_   rÆ   r   rw  Ú	do_render)ra   Zcrr,   Zbackground_areaZ	cell_areaÚflagsr   r   r   rz  ¬  s    zWrapRendererText.do_renderN)rg   rh   ri   rz  r   r   r   r   rx  «  s   rx  c                   @   s*   e Zd ZdZdd„ Zdd„ Zd
dd	„ZdS )ÚMenuPager   c                 C   sœ   t tƒ tjdd}t ¡ | _| j d¡ | j tjj	¡ | 
| jddd¡ t ¡ | _| j d¡ t| jƒ}| tjjtjj¡ | 
|ddd¡ | ¡  |S )NrÒ   rI   TFr   )r   r   r   rR   rY   rL   rZ   r[   r\   r]   rT   rk  r“   rl  r.   r)   r*   ZNEVERZALWAYSrB   rV  r   r   r   r  ¸  s    


zMenuPage.create_widgetc                 C   s&   t tƒ t | ¡ | j d| j¡ d S )Núrow-activated)r   r   r^  r$  r“   r@   r3  rt   r   r   r   r$  È  s    
zMenuPage.connect_signalsNFc	                 C   s¤  t tƒ t | jj|¡ t tt¡| _	| j
 | j	¡ |rH| j tjj¡ | j
 tjdt ¡ dd¡ tƒ }	|	 dtjj¡ |	 dd¡ | j
 tjd|	dd	¡ d }
t|tƒrF|rö|D ]>}||v r¶d
 ||  ¡ ¡}| j	 t|ƒ|f¡}||kr¶|}
q¶| ¡ D ]D\}}|r||vrþd
 | ¡ ¡}| j	 t|ƒ|f¡}||krþ|}
qþnH|D ]B}d
 |d  ¡ ¡}| j	 t|d ƒ|f¡}|d |krJ|}
qJ|
r | j |
¡ d S )NZOptionr   )Zmarkupz	wrap-modery  i,  ÚDescriptionr‡   rt  ú ) r   r   r   r  rL   r   r   rF  rG  rN  r“   rH  r`  rm  rc  rd  ru  rv  rw  rx  r_   r   ÚWrapModeÚWORDr  Údictrz   r³   r¶   r   ÚitemsZselect_iter)ra   ÚparrK  rJ  rM  Zany_okÚorderZextrasrh  ZrendZdefault_iterrO  r[  rs  rô   rq  r   r   r   r&  Í  sB    zMenuPage.execute)NFNNF)rg   rh   ri   rf  r  r$  r&  r   r   r   r   r|  µ  s     ÿr|  c                   @   sx   e Zd ZdZdZddd„Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zd dd„Zdd„ ZdS )!ÚHandleBTSQueryPageTr   Nr   FÚnoc              
   C   sò  t tƒ || _|| _|| _|| _|| _|| _|r:tj	j
| _tj| }| d¡}|sZtd ƒ‚t|tƒrŒ|}|	rt|d7 }dtj| d |f }n&dtj| d d dd„ |D ƒ¡f }| j | jj|¡ z$tj||||||||	d	\}}}W nH ty0 } z.d
tj| d t|ƒf }t|ƒ‚W Y d }~n
d }~0 0 zš|sP|d u rJt‚nt‚nz|dkrfd|f }nd}g }|D ]H\}}g }|D ]}| |¡ q‚t||d | |tt t!|ƒƒf¡ qr||fi fW S W n tyä   t‚Y n0 td ƒ‚d S )NZbtsrootz(source)z1Querying %s bug tracking system for reports on %sÚnamez.Querying %s bug tracking system for reports %sr  c                 S   s   g | ]}t |ƒ‘qS r   )rG  )Ú.0Úxr   r   r   Ú
<listcomp>  r5   z9HandleBTSQueryPage.sync_pre_operation.<locals>.<listcomp>)rÛ   r¦   rÜ   rÞ   Úsourcez+Unable to connect to %s BTS (error: "%s"); r‡   z%d bug reports foundzOne bug report found)Úreverse)"r   r   rÚ   rÛ   rÜ   rÝ   rÞ   rÙ   r   r9  ÚCONFIRMr/  r   ZSYSTEMSrœ   r  r  rG  rz   rw   rx   r8   Úset_progress_labelZget_reportsÚ	Exceptionr   r   r   r   r¶   ÚsortedÚlistÚmapr   )ra   r    rÚ   rÝ   rÛ   rÜ   rÙ   ZscreenrÞ   rŒ  r-  r¦   ÚbuglistÚmbox_reader_cmdZlatest_firstZsysinfoÚrootZpkgnameZprogress_labelÚcountÚsectitleZ	hierarchyr  ÚerrmsgÚreportÚcategoryZbugsr«   r   r   r   r  þ  s^    



&
þ


z%HandleBTSQueryPage.sync_pre_operationc                 C   s   t tƒ | j ¡  d S r(   rA  rt   r   r   r   r(  B  s    zHandleBTSQueryPage.setup_focusc                 C   s¬  t tƒ tjdd}tjdd| _| | jddd¡ tjdd}tjdd}| |ddd¡ t ¡ | _	| | j	ddd¡ t 
¡ }| tj tjtjj¡¡ | tjj¡ | d	| j¡ | |ddd¡ | |ddd¡ t ¡ | _| j d¡ t| jƒ}g d
¢| _t| jttt| jƒƒƒƒD ]8}tj|d t  ¡ |d d}| !d¡ | j "|¡ q| |ddd¡ tj
dd}| tj tj#tjj$¡¡ | d	| j%¡ | |ddd¡ |S )NrJ   rI   zCList of bugs. Select a bug to retrieve and submit more information.rK   FTzFilter:r   rî   )ZIDZTagZPackager~  ZStatusZ	SubmitterZDateZSeverityZVersionz
Filed datezModified dater‡   rt  z#Retrieve and submit bug information)&r   r   r   rR   rY   rL   rT   rU   ro   rp   rï   rñ   rV   rW   ZSTOCK_CLEARrX   ZMENUZ
set_reliefZReliefStyleZNONEr@   Úon_filter_clearrk  r“   rl  r.   ÚcolumnsÚzipr’  rÃ   rµ   rv  rw  Zset_reorderableru  Z
STOCK_INFOrò   Úon_retrieve_info)ra   rS   rd   rL   rö   r-   ÚcolÚcolumnr   r   r   r  F  s:    




z HandleBTSQueryPage.create_widgetc                 C   s6   t tƒ t | ¡ | j d| j¡ | j d| j¡ d S )Nr}  rC  )	r   r   r^  r$  r“   r@   rŸ  rp   Úon_filter_changedrt   r   r   r   r$  i  s    
z"HandleBTSQueryPage.connect_signalsc                 C   s   t tƒ | j d¡ d S r   )r   r   rp   r   r÷   r   r   r   rœ  o  s    z"HandleBTSQueryPage.on_filter_clearc                 C   s&   t tƒ | ¡  ¡ | j_| j ¡  d S r(   )r   r   rs   ÚlowerrN  Úfilter_textÚfilterZrefilter)ra   rp   r   r   r   r¢  s  s    z$HandleBTSQueryPage.on_filter_changedc              	   G   sd   t tƒ t | ¡}|s"tdƒ d S t| j| jƒ}|D ]"}| || j	| j
| j| j| j¡ q4| ¡  d S )NzPlease select one or more bugs)r   r   r^  ru   rE   rû   r8   rÙ   r  rÚ   rÛ   rÜ   rÝ   rÞ   rB   )ra   r3   Zbug_idsrD   rž   r   r   r   rŸ  x  s    
 z#HandleBTSQueryPage.on_retrieve_infoc                 C   s   t tƒ dS r  r  r	  r   r   r   r6  „  s    zHandleBTSQueryPage.is_validc                 C   s   t tƒ d S r(   r  rt   r   r   r   ru   ˆ  s    zHandleBTSQueryPage.get_valuec                 C   sv   t tƒ d}tt| jƒƒD ],}| j ||¡}|r|| j ||¡d 7 }q| ¡ }| jj 	d¡D ]}||v r^ dS q^dS )Nr   r  TF)
r   r   rÃ   rµ   r  rN  ru   r£  r¤  r³   )ra   rs  r[  r   r~   Útokenr   r   r   Úmatch_filter  s    zHandleBTSQueryPage.match_filterc                 C   sR   t tƒ |  |¡}| j |¡sN|sN| |¡}|rJ|  |¡r>dS | |¡}q,dS |S r7  )r   r   r§  rN  Ziter_parentZiter_childrenZ	iter_next)ra   rN  rs  Z	user_dataZmatchesÚitr   r   r   Úfilter_visible_func  s    


z&HandleBTSQueryPage.filter_visible_funcc              	   C   sÒ   t tƒ t | jjd| ¡ tjtgt	| j
ƒ Ž | _|D ]T}d gt	| j
ƒ }|d |d< | j d |¡}|d D ]}| j |ttt|ƒƒ¡ qnq8| j tjj¡ d| j_| j ¡ | _| j | j¡ | j | j¡ d S )Nz^%s. Double-click a bug to retrieve and submit more information, or press 'Next' if none match.r   é   r‡   r   )r   r   r   r  rL   r   r   Z	TreeStorerG  rµ   r  rN  r¶   r’  r“  r`  rm  rc  rd  r¤  Z
filter_newr¥  Zset_visible_funcr©  r“   rH  )ra   r”  r˜  r›  rq  rs  r«   r   r   r   r&  «  s    zHandleBTSQueryPage.execute)Nr   FNr‡  FNNNNF)N)rg   rh   ri   r.  rf  r  r(  r  r$  rœ  r¢  rŸ  r6  ru   r§  r©  r&  r   r   r   r   r†  ú  s"      þ
D#
r†  c                   @   s:   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zddd„ZdS )ÚShowReportPageTc              
   C   s*   t tƒ t| jd d d d d d d d ƒ	| _| jS r(   )r   r   rÑ   r8   r   rt   r   r   r   r  Â  s    zShowReportPage.create_widgetc                 C   s   t tƒ d S r(   r  rt   r   r   r   ru   Ç  s    zShowReportPage.get_valuec                 C   s   t tƒ dS r  r  r	  r   r   r   r6  Ë  s    zShowReportPage.is_validc                 O   s$   t tƒ | d¡rtjj| _||fS )NrÙ   )r   r   rœ   r   r9  rŽ  r/  r  r   r   r   r  Ï  s    

z!ShowReportPage.sync_pre_operationFr   r‡  Nc
           
      C   sV   t tƒ || j_|| j_|| j_|| j_|| j_|| j_|| j_	| j 
¡  |  ¡  d S r(   )r   r   r   rØ   rÚ   rÛ   rÜ   rÝ   rÙ   rÞ   rÿ   r8  )
ra   rØ   ÚsystemrÛ   rÜ   rÝ   rÙ   r-  rÞ   r•  r   r   r   r&  Õ  s    
zShowReportPage.execute)Fr   r‡  N)	rg   rh   ri   r.  r  ru   r6  r  r&  r   r   r   r   r«  ¿  s   r«  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚDisplayReportPageTc                 C   s,   t tƒ t ¡ | _| j d¡ t| jƒ}|S r
  )r   r   r   r   r“   rŽ   r.   )ra   r-   r   r   r   r  å  s
    

zDisplayReportPage.create_widgetc                 G   s(   t tƒ |r|| }| j ¡  |¡ d S r(   )r   r   r“   r   r   ©ra   rC   r3   r   r   r   r&  ì  s    zDisplayReportPage.executeN©rg   rh   ri   r.  r  r&  r   r   r   r   r­  â  s   r­  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚLongMessagePageTc                 C   s`   t tƒ t ¡ | _| j d¡ | j tjj¡ | j 	d¡ | j 
dd¡ t ¡ }| | j¡ |S )NTrM   F)r   r   r   rY   rL   rZ   r[   r\   r]   r^   r_   rÖ   r+   )ra   Zebr   r   r   r  ÷  s    
zLongMessagePage.create_widgetc                 G   sL   t tƒ || }d dd„ | ¡ D ƒ¡}d|v r8d| }t | jj|¡ d S )Nz

c                 s   s   | ]}|r|V  qd S r(   r   )r‰  r„  r   r   r   Ú	<genexpr>  r5   z*LongMessagePage.execute.<locals>.<genexpr>ZnnnnnnzThank you for your report.

)r   r   rz   rÈ   r   r  rL   r   r®  r   r   r   r&    s    zLongMessagePage.executeNr¯  r   r   r   r   r°  ô  s   r°  c                   @   s    e Zd ZejjZdZdd„ ZdS )ÚFinalMessagePageTc                 O   s$   t tƒ tj| g|¢R i |¤Ž d S r(   )r   r   r°  r&  r  r   r   r   r&    s    zFinalMessagePage.executeN)	rg   rh   ri   r   r9  rŽ  r/  r.  r&  r   r   r   r   r²    s   r²  c                   @   sF   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zddd„Z	dS )Ú
EditorPagec                    sÚ  t tƒ tjdd}tjdd}| tjddddd¡ t ¡ | _| | jddd¡ | |ddd¡ t	 
¡ | _t	j| jd	| _| j t d
¡¡ | j tjj¡ td u rÆzdd laW n   taY n0 tturÚt | j¡ t| jƒ}| |ddd¡ tj d¡}t ¡ }| t d
¡¡ | d¡ | ¡ | _t|ƒ}| |¡ | |ddd¡ ttu rÖt ¡ ‰ tjdd}|  d¡ | !d¡ | "d¡ | #dd¡ ˆ  |¡ ˆ  $tj%j&| j'¡ ˆ  (d‡ fdd„¡ | ˆ ddd¡ |S )NrJ   rI   rÒ   rÀ   rK   FTr   )rU  Z	MonospacezOther system informationzDPlease install <b>python3-gtkspellcheck</b> to enable spell checkingrM   zbutton-press-eventc                     s   ˆ   ¡ S r(   r0   )r3   ©Zboxr   r   r4   G  r5   z*EditorPage.create_widget.<locals>.<lambda>))r   r   r   rR   rU   rT   rY   ro   r©   r	   ZBufferÚinfo_bufferZViewr“   Zmodify_fontr   ZFontDescriptionZset_wrap_moder€  r  ÚgtkspellcheckÚNotImplementedZSpellCheckerr.   r‹   rŒ   r   rŽ   r   Úothers_bufferr+   rÖ   r>  rZ   r^   r_   Z	modify_bgZ	StateTypeZNORMALr;  r@   )ra   rS   rd   r-   r’   r“   rL   r   r´  r   r    sP    











zEditorPage.create_widgetc                 C   sR   t tƒ |  ¡ d at| jddd}| t¡ W d   ƒ n1 sD0    Y  d S )Nr   ÚwÚbackslashreplace)Úerrors)r   r   ru   Úreport_messageÚopenÚfilenameÚwrite)ra   Úfr   r   r   r4  K  s    zEditorPage.switch_outc                 C   s,   t tƒ | j d| j¡ | j d| j¡ d S rW  )r   r   rµ  r@   r8  r©   rt   r   r   r   r$  R  s    zEditorPage.connect_signalsc                 C   sp   t tƒ | j | j ¡ | j ¡ d¡}| ¡ s0d S | j ¡  ¡ }| ¡ sJd S | j 	|¡ | j 
|¡}||| jkfS r  )r   r   rµ  rs   rX  rY  r&   r©   rš  rÄ   rÐ   rC   )ra   rª   r©   rC   r   r   r   ru   W  s    þzEditorPage.get_valuec                 C   s   t tƒ | j d| j¡| _d S )Nzfocus-in-event)r   r   r“   r@   Úon_view_focus_in_eventÚfocus_in_idrt   r   r   r   Úhandle_first_infof  s    zEditorPage.handle_first_infoc                 G   s$   t tƒ | j d¡ | | j¡ d S r   )r   r   rµ  r   Z
disconnectrÂ  )ra   r“   r3   r   r   r   rÁ  j  s    z!EditorPage.on_view_focus_in_eventúutf-8c                 C   sz   t tƒ || _t|ƒ| _|| _|| _| j | j 	¡ ¡ | j
 | j ¡ ¡ | j ¡ }| ¡ dkrjd}|  ¡  | j |¡ d S )NzDear Maintainer,zXPlease type your report here.
The text will be wrapped to be max 79 chars long per line.)r   r   rC   r®   rš  r¾  Úcharsetr©   r   rÂ   r¸  r½   r¾   r&   rÃ  rµ  )ra   rC   r¾  ZeditorrÅ  rª   r   r   r   r&  p  s    

zEditorPage.executeN)rÄ  )
rg   rh   ri   r  r4  r$  ru   rÃ  rÁ  r&  r   r   r   r   r³    s   3r³  c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚSelectOptionsPageFc                 C   s\   t tƒ t ¡ | _| j d¡ | j tjj¡ tj	dd| _
| j
 | jddd¡ d | _| j
S )NTrJ   rI   F)r   r   r   rY   rL   rZ   r[   r\   r]   rR   rS   rT   rM  rt   r   r   r   r  „  s    
zSelectOptionsPage.create_widgetc                 C   s"   t tƒ | j |¡ | j ¡  d S r(   ©r   r   rw   rø   r8   rù   )ra   rö   Úmenuoptr   r   r   Ú
on_clickedŽ  s    zSelectOptionsPage.on_clickedc                 C   s   t tƒ ttƒ d S r(   )r   r   r˜   r¼  r÷   r   r   r   Úon_display_clicked“  s    z$SelectOptionsPage.on_display_clickedc                 C   s:   t tƒ | jr6d| jj_d| jj_| j ¡  | j ¡  d S r  )r   r   rM  ZpropsZcan_defaultZhas_defaultZgrab_defaultr2  rt   r   r   r   r(  ˜  s    


zSelectOptionsPage.setup_focusc           	      C   s.  t tƒ | dd¡}t | jj|¡ g }|D ]Ô}|| ¡  }d|v rFq,d|v rPq,d|v r~tj	dd}| 
d| j¡ | |¡ q,t 	¡ }tj|| ¡  d}| |¡ | 
d| j| ¡ ¡ | ¡ rö| d	| ¡  ¡ || _| d
t ¡ ¡ | d
|¡ q,| |¡ q,|D ]}| j |ddd
¡ q| j ¡  d S )Nz(e to edit)r   zChange editorz"Pipe the message through the pagerzPrint message to stdoutzDisplay message in a text viewrK   rî   r   r   FT)r   r   rD  r   r  rL   r   r£  r   rï   r@   rÊ  r¶   rY   r+   rÉ  ÚisupperÚ
set_markuprs   rM  ÚinsertZ
HSeparatorrS   rT   rB   )	ra   rJ  ZmenuoptsrK  rb   rÈ  rô   rö   rL   r   r   r   r&     s6    
zSelectOptionsPage.executeN)	rg   rh   ri   r.  r  rÉ  rÊ  r(  r&  r   r   r   r   rÆ    s   
rÆ  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú
SystemPageFc                 C   st   t tƒ t ¡ }t ¡ | _| j d¡ | j d| j	¡ | 
| jddd¡ t ¡ }| | j ¡ ¡ | 
|ddd¡ |S )NTzchild-exitedr   F)r   r   r   rU   ÚVteZTerminalÚterminalZset_cursor_blink_moder@   Úon_child_exitedrT   Z
VScrollbarZset_adjustmentZget_vadjustment)ra   rd   Z	scrollbarr   r   r   r  Ê  s    
zSystemPage.create_widgetc                 C   s"   t tƒ | j |¡ | j ¡  d S r(   rÇ  )ra   rÐ  Z
exitstatusr   r   r   rÑ  Ù  s    zSystemPage.on_child_exitedc              	   C   s8   t tƒ | j tjjtjd dd|gg t	j
jd d ¡ d S )NÚHOMEz	/bin/bashz-c)r   r   rÐ  Z
spawn_syncrÏ  ZPtyFlagsZDEFAULTÚosÚenvironr   Z
SpawnFlagsZDO_NOT_REAP_CHILD)ra   Zcmdliner   r   r   r&  Þ  s    zSystemPage.executeN)rg   rh   ri   r.  r  rÑ  r&  r   r   r   r   rÎ  Ç  s   rÎ  c                   @   s4   e Zd ZejjZdd„ Zdd„ Zdd„ Z	dd„ Z
d	S )
ÚProgressPagec                 C   s   t tƒ | j ¡  dS r  )r   r   rá   ræ   rt   r   r   r   ræ   æ  s    
zProgressPage.pulsec                 C   s†   t tƒ tjdd}t ¡ | _| j d¡ | j tjj	¡ t 
¡ | _| j d¡ | | jddd¡ | | jddd¡ t d| j¡ |S )NrJ   rI   TrÓ   Fr   rH   )r   r   r   rR   rY   rL   rZ   r[   r\   r]   rà   rá   râ   rT   r   rå   ræ   rq   r   r   r   r  ë  s    

zProgressPage.create_widgetc                 C   s   t tƒ t | jj|¡ d S r(   )r   r   r   r  rL   r   rZ  r   r   r   Ú	set_labelø  s    zProgressPage.set_labelc                 C   s   t tƒ |  d¡ d S )NzThis operation may take a while)r   r   rÖ  rt   r   r   r   Úreset_labelü  s    zProgressPage.reset_labelN)rg   rh   ri   r   r9  ZPROGRESSr/  ræ   r  rÖ  r×  r   r   r   r   rÕ  ã  s
   rÕ  c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚReportbugAssistantc                 C   sj   t tƒ tj | ¡ || _|  d¡ |  ¡  d | _d | _	d | _
|  dd¡ |  | j¡ |  ¡  |  ¡  d S )Nr6   rü   r™   )r   r   r   Ú	AssistantrO   rw   rA   Úhack_buttonsÚshowing_pageÚrequested_pageÚprogress_pager›   Zset_forward_page_funcÚforwardr$  Úsetup_pages©ra   rw   r   r   r   rO     s    
zReportbugAssistant.__init__c                 C   sÜ   t tƒ t|tjƒrÀ| ¡ dkr2| d| j¡ d S | ¡ dkrP| d| j¡ d S | ¡ dkrˆtj 	tj
tjj¡}| d¡ | |¡ d S | ¡ dkrÀtj 	tjtjj¡}| d¡ | |¡ d S t|tjƒrØ| | j¡ d S )Nzgtk-go-backr'  z	gtk-applyz
gtk-cancelZ_Quitzgtk-go-forwardZ	_Continue)r   r   r  r   rï   Z	get_labelr@   Úon_back_showrV   rW   Z
STOCK_QUITrX   rò   rÖ  rñ   ZSTOCK_GO_FORWARDÚ	ContainerZforallÚ_hack_buttons)ra   r,   re   r   r   r   rã    s,    
ÿ



z ReportbugAssistant._hack_buttonsc                 C   s   t tƒ |  | ¡ d S r(   )r   r   rã  rt   r   r   r   rÚ  ,  s    zReportbugAssistant.hack_buttonsc                 C   sD   t tƒ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ d S )NZcancelZpreparezdelete-eventZapply)r   r   r@   Úconfirm_exitÚ
on_prepareÚclosert   r   r   r   r$  0  s
    z"ReportbugAssistant.connect_signalsc                 C   s   t tƒ | ¡  d S r(   )r   r   ZhiderR  r   r   r   rá  7  s    zReportbugAssistant.on_back_showc                 C   s|   t tƒ | jrL| j| jkrL|  ¡ | jjkrL| j ¡  | jj 	d¡ | j 
¡  |j| _| j| jkrj| j ¡  t | jj¡ d S r
  )r   r   rÛ  rÜ  Zget_current_pager   rw   r  r,   Zset_sensitiver4  r   rÝ  r×  r   r  r(  )ra   r8   r,   r   r   r   rå  ;  s    "


zReportbugAssistant.on_preparec                 G   s   t tƒ t d¡ d S ra  r”   rþ   r   r   r   ræ  L  s    zReportbugAssistant.closec                 G   sX   t tƒ t d tjjtjjB tjjtj	j
d¡}| ¡ }| ¡  |tjjkrTt d¡ d S )Nz(Are you sure you want to quit Reportbug?r   )r   r   r   r7   r9   r:   r;   r<   ÚWARNINGr>   ÚYES_NOrê   r1   rl   ÚYESrˆ   r‰   )ra   r3   rD   r/   r   r   r   rä  P  s    þzReportbugAssistant.confirm_exitc                 C   s   t tƒ |d S r†   r  )ra   r   r   r   r   rÞ  Z  s    zReportbugAssistant.forwardc                 C   s    t tƒ |  |  | jj¡¡ d S r(   )r   r   Úset_current_pagerÞ  rÛ  r   rt   r   r   r   rù   ^  s    zReportbugAssistant.forward_pagec                 C   s*   t tƒ || _| j| jkr&|  |j¡ d S r(   )r   r   rÜ  rÛ  rÝ  rê  r   )ra   r   r   r   r   r1  b  s    z ReportbugAssistant.set_next_pagec                 O   s   t tƒ | j || ¡ d S r(   )r   r   rÝ  rÖ  )ra   r[  r3   rc   r   r   r   r  i  s    z%ReportbugAssistant.set_progress_labelc                 C   s:   t tƒ t| ƒ| _| j ¡  t| ƒ| _| j ¡  dt_d S r†   )	r   r   r<  rÛ  r#  rÕ  rÝ  r  r  rt   r   r   r   rß  m  s    



zReportbugAssistant.setup_pagesN)rg   rh   ri   rO   rã  rÚ  r$  rá  rå  ræ  rä  rÞ  rù   r1  r  rß  r   r   r   r   rØ    s   
rØ  c                   @   s&   e Zd Zdd„ Zdd„ Zd
dd	„ZdS )ÚYesNoDialogc                 C   sH   t tƒ tj | ttjjtjjB tj	j
tjj¡ || _|  d| j¡ d S ©Nr/   )r   r   r   r7   rO   r8   r9   r:   r;   r<   ZQUESTIONr>   rè  rw   r@   r‘   rà  r   r   r   rO   z  s    ÿzYesNoDialog.__init__c                 C   s2   t tƒ | j |tjjk¡ | j ¡  |  ¡  d S r(   )	r   r   rw   rø   r   rl   ré  r  r1   r•   r   r   r   r‘     s    
zYesNoDialog.on_responseNTFc                 C   s@   t tƒ |  |¡ |r&|  tjj¡ n|  tjj¡ |  ¡  d S r(   )	r   r   rÌ  rP   r   rl   ré  ZNOrB   )ra   rÊ   ZyeshelpZnohelprM  Znowrapr   r   r   r  ‡  s    
zYesNoDialog.execute_operation)NNTF©rg   rh   ri   rO   r‘   r  r   r   r   r   rë  y  s   rë  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDisplayFailureDialogc                 C   sH   t tƒ tj | ttjjtjjB tj	j
tjj¡ || _|  d| j¡ d S rì  )r   r   r   r7   rO   r8   r9   r:   r;   r<   rç  r>   r?   rw   r@   r‘   rà  r   r   r   rO   ’  s    ÿzDisplayFailureDialog.__init__c                 C   s   t tƒ | j ¡  |  ¡  d S r(   )r   r   rw   r  r1   r•   r   r   r   r‘   ™  s    
z DisplayFailureDialog.on_responsec                 G   s"   t tƒ |  || ¡ |  ¡  d S r(   )r   r   rÌ  rB   )ra   rÊ   r3   r   r   r   r  ž  s    z&DisplayFailureDialog.execute_operationNrí  r   r   r   r   rî  ‘  s   rî  c                   @   s&   e Zd Zdd„ Zdd„ Zd	dd„ZdS )
ÚGetFilenameDialogc                 C   sH   t tƒ tjj| dttjtjjtj	tjj
fd || _|  d| j¡ d S )Nr   )rb   r/   )r   r   r   ÚFileChooserDialogrO   r8   rk   rl   rm   Z
STOCK_OPENÚOKrw   r@   r‘   rà  r   r   r   rO   ¥  s    
ÿzGetFilenameDialog.__init__c                 C   sB   t tƒ d }|tjjkr |  ¡ }| j |¡ | j ¡  |  	¡  d S r(   )
r   r   r   rl   rñ  Úget_filenamerw   rø   r  r1   )ra   rD   r–   r~   r   r   r   r‘   ¬  s    
zGetFilenameDialog.on_responseFc                 C   s"   t tƒ |  t|ƒ¡ |  ¡  d S r(   )r   r   rA   r'   rB   )ra   r-  rL  r   r   r   r  ¶  s    z#GetFilenameDialog.execute_operationN)Frí  r   r   r   r   rï  ¤  s   
rï  c                  O   s&   t tƒ tjtjg| ¢R i |¤Ž d S r(   )r   r   rw   rx   r8   r  ©r3   rc   r   r   r   Úlog_message¼  s    rô  c                  O   s&   t tƒ d|d< d|d< t| i |¤ŽS )NTrh  r!  )r   r   Úmenuró  r   r   r   Úselect_multipleÁ  s    rö  c                 O   s@   t tƒ d| v r&t| g|¢R i |¤ŽS t| g|¢R i |¤ŽS d S )NZENTER)r   r   Úget_listÚ_get_multiline)rJ  r3   rc   r   r   r   Úget_multilineÈ  s    rù  )Z
get_stringZget_passwordrõ  Zhandle_bts_queryZshow_reportZlong_messageZdisplay_reportZfinal_messageZspawn_editorZselect_optionsr÷  r¬  rø  )Zyes_norò  Zdisplay_failurec                    s   t tƒ ‡ ‡fdd„}|S )Nc               
      sz   t tƒ t ˆ ˆ¡}z|j| i |¤Ž\} }W n* tyV } z|jW  Y d }~S d }~0 0 tj|jg| ¢R i |¤Ž t 	¡ S r(   )
r   r   rw   r  r  r  r  rx   r  r  )r3   rc   Úopr  ©ÚklassÚparentr   r   r  æ  s    zcreate_forwarder.<locals>.funcr„   )rý  rü  r  r   rû  r   Úcreate_forwarderä  s    	rþ  c                 C   s.   t tƒ | ¡ D ]\}}t| |ƒtƒ |< qd S r(   )r   r   rƒ  rþ  Úglobals)rý  Z
operationsZ	operationrü  r   r   r   Úforward_operationsò  s    r   c               
   C   s$  zt  dd¡ ddlma W nŒ ttfy¨   d} t d tjj	tjj
B tjjtjjd ¡}| | d ¡ | ¡  | ¡  t ¡ rˆt ¡  qvtj ¡ s¢t dddd	¡ Y d
S 0 t ¡ at ¡ sÂtdƒ‚t ¡  tj ¡ a tj!}t" #|¡t_!tj$ %t&¡ t'ƒ a(t( )¡  t*t(t+ƒ t( ,t-t(¡a.t*t.t/ƒ dS )NrÏ  z2.91r   )rÏ  zxPlease install the %s package to use the GTK+ (known as 'gtk' in reportbug) interface.
Falling back to 'text' interface.z<b>gir1.2-vte-2.91</b>zx-terminal-emulatorz-ezreportbug -u textFz"Could not acquire new main-contextT)0ÚgiÚrequire_versionÚgi.repositoryrÏ  ÚImportErrorÚ
ValueErrorr   r7   r9   r:   r;   r<   r=   r>   r?   rÌ  rê   r1   Zevents_pendingZmain_iterationrˆ   ÚstdoutÚisattyrÓ  Úexeclpr   r   r   rã   r   rä   rM  r   rƒ   rv   r…   ZWindowZset_default_icon_from_filer:  r  rw   rÿ   r   Údialogsr  rØ  r8   Úpages)rC   rD   r‚   r   r   r   Ú
initializeø  s<    ÿ




r  c                   C   s   t tƒ dS r  r„   r   r   r   r   Ú	can_input)  s    r  )F)^Zreportbug.exceptionsr   rÓ  rÔ  r  r  r  r   r   r   r   r   r   r	   Zrequire_foreignr  r¶  rˆ   Úrer{   r  r
   rÔ   rÉ   r   r   r   Z	reportbugr   Zreportbug.urlutilsr   ZISATTYr:  r   r   r   Úcompiler    r"   r'   r.   rE   rN   rF   rj   rv   r˜   Úobjectr   r®   rÖ   rÕ   rÑ   rû   r  r  r  r  r  r<  r@  rQ  rS  r^  rj  rw  rx  Ztype_registerr|  r†  r«  r­  r°  r²  r³  rÆ  rÎ  rÕ  rÙ  rØ  r7   rë  rî  rð  rï  rô  rö  rù  r
  r	  rþ  r   r  r  r   r   r   r   Ú<module>   sÌ   	

	%, T~BZ1'O
E F#
jFxôþ1