U
    ©²F_Œ<  ã                   @   s”   d dl Z 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mZ d dlm	Z	 d dlm
Z
 d dlmZ G d	d
„ d
ejƒZG dd„ dejƒZdS )é    N)ÚCoverLocale)ÚGLib)ÚGio)ÚGtk)ÚPango)ÚPeas)ÚPeasGtkc                       s<   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z‡  ZS )ÚPluginListRowc           
         sÈ  t t| ƒ ¡  || _d| _|| _t ¡ }t 	| 
¡ ¡}| d| d ¡ | tjj¡ tjj|j_| d¡ d|j_| d| j¡ t | ¡ ¡}| tjj¡ tjj|j_| d¡ | d| j¡ d|j_tj ¡ }|| _tjj|j_d}z| ¡ rød}|  | !¡ ¡ W n   Y nX t "¡ }| #tj$j%¡ | &|ddd¡ | &|ddd¡ t "¡ }	|	 #tj$j'¡ |	 &t d	¡ddd¡ |	 &|ddd¡ |	 (|ddd
¡ |  )|	¡ |	| _*|s¶|  +¡  | d| j,¡ d S )NFú<b>ú</b>Té   zquery-tooltipr   é   z  é   znotify::active)-Úsuperr	   Ú__init__ÚpluginÚ_refreshÚ_switch_callbackr   ÚLabelr   Úmarkup_escape_textÚget_nameÚ
set_markupZset_ellipsizer   ZEllipsizeModeÚENDÚAlignÚSTARTÚpropsÚhalignÚset_has_tooltipZ
margin_topÚconnectÚ_display_tooltipÚget_descriptionÚmargin_bottomZSwitchÚnewÚ_switchÚCENTERZvalignÚis_availableÚ
set_activeÚ	is_loadedÚBoxÚset_orientationÚOrientationÚVERTICALÚ
pack_startZ
HORIZONTALÚpack_endÚaddÚouterboxÚ	add_errorÚ_switch_changed)
Úselfr   Zswitch_callbackZlabel1ÚescapeZlabel2ÚswitchZ	sensitiveÚboxr/   ©Ú	__class__© úD/usr/lib/rhythmbox/plugins/alternative-toolbar/alttoolbar_plugins.pyr   !   sT    



zPluginListRow.__init__c                 C   s"   |  ¡  ¡ r| | ¡ ¡ dS dS )NTF)Z
get_layoutZis_ellipsizedZset_textZget_text)r2   ÚlabelÚxÚyÚmodeZtooltipr8   r8   r9   r   X   s    zPluginListRow._display_tooltipc                    s0   ˆ j r
dS dˆ _ ‡ ‡fdd„}t d|d ¡ d S )NFTc                     s,   t dƒ t ˆ ¡ ƒ ˆ  ˆˆ j¡ dˆ _d S )NZswitch_changedF)ÚprintÚ
get_activer   r   r   )Úargs©r2   r4   r8   r9   Údelayd   s    z,PluginListRow._switch_changed.<locals>.delayéú   )r   r   Ztimeout_add)r2   r4   r@   rB   r8   rA   r9   r1   ^   s
    zPluginListRow._switch_changedc                 C   sl   t jdd}t ¡ }d|j_| |tjj¡ | 	¡  | 
d¡ | tdƒ¡ | j |ddd¡ |  d¡ d S )Nzdialog-error-symbolic©Únamer   TzThe plugin cannot be enabledFé   )r   Ú
ThemedIconr   ÚImager   ÚmarginÚset_from_giconÚIconSizeÚBUTTONÚshow_allr   Úset_tooltip_textÚ_r/   r-   Úset_sensitive)r2   ÚiconZerror_imager8   r8   r9   r0   m   s    
zPluginListRow.add_errorc                 G   s\   zB| j  ¡ s|  ¡  | j ¡ | j  ¡ kr.W d S | j | j  ¡ ¡ W n   |  ¡  Y nX d S ©N)r   r%   r0   r#   r?   r'   r&   )r2   r@   r8   r8   r9   Úrefreshx   s    
zPluginListRow.refresh)	Ú__name__Ú
__module__Ú__qualname__r   r   r1   r0   rS   Ú__classcell__r8   r8   r6   r9   r	       s
   7r	   c                       s\   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚPluginDialogc                    sÖ  |r t t| ƒjd|tjjd nt t| ƒj|tjjd || _|| _tj 	¡ }| 
| jd ¡ || _i | _tj ¡ | _| j ¡ }| j d| j¡ | j d| j¡ |D ]8}| ¡ s¢| ¡ s¢t|| jƒ}|| j| ¡ < | |¡ q¢tƒ }| |jj¡ dd„ }tj 	¡ }	|	  ¡ }
|
 !tj"¡ tj# 	¡ }t $¡ }t%j&dd	}t '¡ }d
|j(_)| |¡ | *|dƒ¡ | +|tj,j-¡ t .¡ }| /|ddd¡ | |¡ |	 0|d¡ | 1d| j2¡ || _3t 4¡ }|  ¡ }
|
 !d¡ | 5tj6j7¡ t $¡ }t%j&dd	}t '¡ }d
|j(_)| |¡ | *|dƒ¡ | +|tj,j-¡ | |¡ | 8|dd¡ | 1d| j9¡ || _:t $¡ }t%j&dd	}t '¡ }d
|j(_)| |¡ | *|dƒ¡ | +|tj,j-¡ | |¡ | 8|dd¡ | 1d| j;¡ || _<tj= 	¡ }d|j(_>|	 0|d¡ |	 8|dd¡ tj# 	¡ }| |¡ |	 0|d¡ t .¡ }| ?tj@jA¡ tjB 	d d ¡}| |¡ d|j(_Cd|j(_D| /|ddd¡ | /|	ddd¡ tEdƒ| j(_F| js˜|  GtjHtjIjJ¡ n|  K¡ }| Ld¡ | M¡  |  N¡ }| |¡ | 1d| jO¡ d S )NT)Úuse_header_barÚparentÚflags)rZ   r[   zunload-pluginzload-pluginc                 S   s.   t   | ¡}tjdd|tjd}| dd¡}|S )Nz\(..\)Ú ©r[   rO   )ÚgettextÚreÚsubÚDOTALLÚreplace)ÚstrZtranslationr8   r8   r9   Úextract_text¨   s    
z+PluginDialog.__init__.<locals>.extract_textzpreferences-system-symbolicrD   r   Z_PreferencesFr   ÚclickedZlinkedz#preferences-system-details-symbolicZ_Aboutznon-homogeneouszhelp-contents-symbolicZ_Helpr   Úexpandé   zConfigure Pluginszrow-selected)Pr   rX   r   r   ÚDialogFlagsÚMODALÚ_has_headerbarZ_parent_windowZListBoxr"   Zset_sort_funcÚ_listbox_sortÚ_listboxÚ_itemsr   ZEngineZget_defaultÚ_peasZget_plugin_listZconnect_afterÚ_on_load_unload_pluginÚ
is_builtinZ	is_hiddenr	   r   Úget_module_namer.   r   Úswitch_localeÚLocaleÚRBZToolbarZget_style_contextZ	add_classZSTYLE_CLASS_INLINE_TOOLBARZToolItemÚButtonr   rG   rH   r   rI   rN   rJ   rK   rL   r(   r,   Úinsertr   Ú_preferences_button_clickedÚ_preferences_buttonZ	ButtonBoxZ
set_layoutZButtonBoxStyler   Zchild_set_propertyÚ_info_button_clickedZ_info_buttonÚ_help_button_clickedÚ_help_buttonZSeparatorToolItemZdrawr)   r*   r+   ZScrolledWindowZhexpandZvexpandrO   ÚtitleÚ
add_buttonÚSTOCK_CLOSEÚResponseTypeÚCLOSEÚget_header_barÚset_show_close_buttonrM   Úget_content_areaÚ_listbox_row_selected)r2   Zparent_windowZhas_headerbarÚlistboxZpluginsr   ÚrowÚclrd   ZtoolbarÚcontextÚitemZbtnrQ   Zimager5   Zminitoolbar_boxZ
contentboxZscrollwindowZ	headerbarÚarear6   r8   r9   r   ‡   sº    þÿ
















zPluginDialog.__init__c                 C   s,   |  ¡ }t|ƒ || jkr(| j|  ¡  d S rR   )rq   r>   rm   rS   )r2   Zenginer   Zmodule_namer8   r8   r9   ro     s    
z#PluginDialog._on_load_unload_pluginc                 G   s   |j  ¡  ¡ |j  ¡  ¡ kS rR   )r   r   Úlower)r2   Zrow1Zrow2r@   r8   r8   r9   rk     s    zPluginDialog._listbox_sortc                 C   s`   |  ¡ }|r | ¡ s | j |¡ |s8| ¡ r8| j |¡ | ¡  ¡ }| j |¡ |  t	|¡ d S rR   )
r?   r'   rn   Zload_pluginZunload_pluginZ
get_parentrl   Z
select_rowr„   rO   )r2   r4   r   Úvaluer†   r8   r8   r9   r     s    zPluginDialog._switch_callbackc                 C   sH   z6| j  |jtjd ¡}| ¡ }tƒ }| |jj	¡ |W S    Y nX d S rR   )
rn   Zcreate_extensionr   r   ZConfigurableZcreate_configure_widgetr   rr   rs   rt   )r2   r†   ZextÚwidgetr‡   r8   r8   r9   Ú_get_preference_widget  s    
þz#PluginDialog._get_preference_widgetc                 C   sR   |rNd}|   |¡}|rd}| j |¡ |j ¡ }|rB| j d¡ n| j d¡ d S )NFT)rŽ   rx   rP   r   Úget_help_urir{   )r2   r…   r†   Zhas_preferencer   Ú	help_linkr8   r8   r9   r„   *  s    

z"PluginDialog._listbox_row_selectedc                 G   s"   | j  ¡ }|j ¡ }t |¡ d S rR   )rl   Úget_selected_rowr   r   Ú
webbrowserÚopen)r2   r@   r†   r   r8   r8   r9   rz   ;  s    

z!PluginDialog._help_button_clickedc                 G   sâ  | j r(tjdtjjd}| ¡  d¡ n"tjtjjd}| tjtj	j
¡ | j ¡ }|j ¡ }|j ¡ }tdƒ|j_| ¡ }t ¡ }| tjj¡ |j ¡ }|j ¡ }	|j ¡ }
|j ¡ }d}dd„ }t ¡ }t |¡}| d| d	 ¡ |  tj!j"¡ d
|j_#| $|dd|¡ |d7 }|rN|tdƒ| ƒ}d
|j_#| $|dd|¡ |d7 }|
r|||
ƒ}d
|j_#| $|dd|¡ |d7 }|	rª||	ƒ}d
|j_#| $|dd|¡ |d7 }|tdƒkr¬t %¡ }tj&j"|j_'t tdƒ¡}tj&j(|j_'| )|dddd¡ t ¡ }tj&j*|j_'d}| |¡ | )|dddd¡ t tdƒ¡}tj&j(|j_'| )|dddd¡ t ¡ }tj&j*|j_'d}| |¡ | )|dddd¡ | $|dd|¡ d
|j_#|d7 }t ¡ }| +d¡ dd„ }t ,tdƒ¡}|rê| -d||¡ n
| .d¡ | $|ddd¡ t ,tdƒ¡}|r(| -d||¡ n
| .d¡ | $t d¡ddd¡ | $t d¡ddd¡ | $|ddd¡ | $|dd|¡ | /¡  tj0 1d¡}d|j_2| 3tj4j5¡ | 6|¡ | /¡  | 6|¡ | 7d¡ | 8¡  | 9¡  d S )NT©rY   r[   r]   zAbout this pluginr   c                 S   s0   t  | ¡} |  d¡ |  t jj¡ |  d¡ | S )NTé<   )r   r   Zset_line_wrapÚset_justifyÚJustificationr$   Zset_max_width_chars)r:   r8   r8   r9   Ú	get_label\  s
    


z4PluginDialog._info_button_clicked.<locals>.get_labelr
   r   r   Fr   z	Version: zAlternative Toolbarz
Developer:z< <a href="https://github.com/fossfreedom">David Mohammed</a>z	Designer:z= <a href="https://github.com/me4oslav">Georgi Karavasilev</a>c                 S   s   t  |¡ d S rR   )r’   r“   )ÚbuttonZurir8   r8   r9   Úlaunch_browser¦  s    z9PluginDialog._info_button_clicked.<locals>.launch_browserZHelpre   ZHomepager\   rg   r   é   ):rj   r   ÚDialogrh   ri   r   r‚   r}   r~   r   r€   rl   r‘   r   r   Zget_versionrO   r   r|   rƒ   r(   r)   r*   r+   Zget_websiteZget_copyrightr    r   r   r   r   r   r–   r—   r$   r!   r,   ZGridr   r   r   Zattachr   Zset_homogeneousru   r   rP   rM   ZFramer"   rI   Zset_shadow_typeZ
ShadowTypeZNONEr.   Úset_resizableÚrunÚdestroy)r2   r@   Údlgr†   r|   ÚversionrŠ   r   ZwebsiteÚ	copyrightZdescriptionÚhelpÚposr˜   r:   r3   ZgridÚlinkÚmr5   rš   r™   Úframer8   r8   r9   ry   A  s°    















z!PluginDialog._info_button_clickedc                 G   s¤   | j  ¡ }|  |¡}|sd S | jrDtjdtjjd}| ¡  	d¡ n"tjtjjd}| 
tjtjj¡ |j ¡ |j_| ¡ }| |¡ | d¡ | ¡  | ¡  d S )NTr”   r]   F)rl   r‘   rŽ   rj   r   rœ   rh   ri   r   r‚   r}   r~   r   r€   r   r   r   r|   rƒ   r.   r   rž   rŸ   )r2   r@   r†   r   r    rŠ   r8   r8   r9   rw   Ì  s    



z(PluginDialog._preferences_button_clicked)rT   rU   rV   r   ro   rk   r   rŽ   r„   rz   ry   rw   rW   r8   r8   r6   r9   rX   †   s   ~ rX   )r^   r_   r’   Zalttoolbar_preferencesr   Zgi.repositoryr   r   r   r   r   r   Z
ListBoxRowr	   rœ   rX   r8   r8   r8   r9   Ú<module>   s   f