U
    F_FP                     @   s6  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ZG dd dejZ	G d	d
 d
e	Z
G dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd  d e
ZG d!d" d"e
ZG d#d$ d$e
Zd%S )&    )CoverLocale)GObject)Gio)Gtkc                   @   s   e Zd ZdZdZdZdZdS )AltControllerCategoryr            N)__name__
__module____qualname__OTHERLOCALONLINEPLAYLIST r   r   G/usr/lib/rhythmbox/plugins/alternative-toolbar/alttoolbar_controller.pyr      s   r   c                       sx   e Zd 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dd Zdd Zdd Z  ZS )AltControllerBasez
    base controller
    c                    s(   || _ | j j| _d| _tt|   dS )
        Initialises the object.
        N)headerfindZ_pixbufsuperr   __init__selfr   	__class__r   r   r   %   s    
zAltControllerBase.__init__c                 C   s   t jS )z<
           return the category type for the source
        )r   r   r   r   r   r   get_category0   s    zAltControllerBase.get_categoryc                 C   s   dS )zm
            return the toolbar visibility
              by default None which means user controlled
        Nr   r   r   r   r   toolbar_visibility7   s    z$AltControllerBase.toolbar_visibilityc                 C   s   |j jr|j jS dS )zR
          return the source icon
        :param source:
        :return:
        N)propsZiconr   sourcer   r   r   	get_gicon?   s    zAltControllerBase.get_giconc                 C   s   dS )zT
          returns bool if the given source is applicable to the controller
        Fr   r"   r   r   r   valid_sourceK   s    zAltControllerBase.valid_sourcec                 C   s   dS )=
           update the button controls on the header
        Nr   r"   r   r   r   update_controlsR   s    z!AltControllerBase.update_controlsc                 C   s   |  D ]}|| qdS )zI
          remove any controls that are contained in a container
        N)get_childrenremove)r   	containerchildr   r   r   remove_controlsY   s    z!AltControllerBase.remove_controlsc                 C   s   dS )z8
          hide controls for a given controller
        Nr   r"   r   r   r   hide_controls`   s    zAltControllerBase.hide_controlsc                 C   s   dS )z
          find the GtkEntry field corresponding to the search entry
          returns 1. the GtkWidget containing the GtkEntry
                  2. the GtkEntry
          returns None if nothing found
        Nr   )r   Ztoolbar_containerr   r   r   get_search_entryg   s    z"AltControllerBase.get_search_entryc                 C   s   dS )zw
          return GtkWidget corresponding to the toolbar within the source
                 None if no toolbar
        Nr   r"   r   r   r   get_toolbarq   s    zAltControllerBase.get_toolbarc                 C   s   dS )zI
          move from toolbar the widget and add to the searchbar
        Nr   )r   toolbarwidget	searchbarr   r   r   moveto_searchbary   s    z"AltControllerBase.moveto_searchbarc                 C   s   | j   dS )zE
          set the centre library song-category button label
        N)r   set_library_labelsr   r   r   r   r4      s    z$AltControllerBase.set_library_labels)r
   r   r   __doc__r   r   r    r$   r%   r'   r,   r-   r.   r/   r3   r4   __classcell__r   r   r   r   r       s   
r   c                       sT   e Zd Zd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  ZS )AltGenericControllerz5
    generic controller for the headerbar (only)
    c                    s    t t| | i | _i | _dS r   )r   r7   r   Zcentre_controlsend_controlsr   r   r   r   r      s    zAltGenericController.__init__c                 C   s   t jS Nr   r   r   r   r   r   r      s    z!AltGenericController.get_categoryc                 C   s(   | j |td\}}|r$|d d S )NzView AllF)r   Zhas_button_with_label_set_visible)r   r#   valZview_buttonr   r   r   r-      s
    z"AltGenericController.hide_controlsc                 C   s"   |  |dd}t| t| |S )NZRBSourceToolbarby_name)r   print)r   r#   r0   r   r   r   r/      s    z AltGenericController.get_toolbarc                 C   sP   |d krt d dS | |dd}|s2t d dS | |dd}t | ||fS )Nzno container to search)NNZRBSearchEntryr>   zno RBSearchEntry foundGtkEntry)r?   r   )r   r*   searchentryr   r   r   r.      s    z%AltGenericController.get_search_entryc                 C   s"   | | |d || d S )NF)r)   r<   add)r   r0   rA   r2   r   r   r   r3      s    

z%AltGenericController.moveto_searchbarc                 C   s  | j |\}}|s*td | j d ntd |d | j d d| j _| |}|sxtd | | j j dS | 	| || j
kr8td i }| | j j t| | |\}}|sdS | j jr| j jd tj | j _| }t| |d }	t }
|
tjj |
| j jddd |
  tj||	 |
|	ddd	 ||
 | j j|	||
d
 | ||| j j |dd | j j| | j jd tj }d}tj |tj!j"}|| | j j| | j j#|d |  |$d| j j% | j j|d< ||d< || j _|| j
|< t| ntd t| j
|  | j
| d }| j jrt| j jd || j _| | j j | j
| d }|| j _| j j  | j j|&  | j j| | j j#|d | j j  dS )r&   zno browser viewFzbrowser view foundTNz:no toolbar so nothing left to do - cleanup endbox and exitzfirst time aroundr   r   r+   Z
old_parentZ
new_parenti,  z"preferences-system-search-symbolicZtoggledr2   search_buttonzsecond time around)'r   Zis_browser_viewr?   Zset_library_box_sensitiver<   Zcurrent_search_buttonr/   r,   Zend_boxr-   r8   r.   r2   r   Z	SearchBarnewr(   ZBoxZset_orientationZOrientationZVERTICALZ
pack_startshow_all	Containerr)   rC   register_moved_controlr3   Zset_size_requestZconnect_entryZToggleButtonZImageZnew_from_icon_nameZIconSizeZSMALL_TOOLBARZreorder_childZconnectZsearch_button_toggledZ
get_active)r   r#   r=   Zbrowser_buttonr0   ZcontrolsrA   rB   ZchildrenfirstZboxrF   ZsymZimager   r   r   r'      s    








z$AltGenericController.update_controls)r
   r   r   r5   Z!_AltGenericController__gtype_namer   r   r-   r/   r.   r3   r'   r6   r   r   r   r   r7      s   	r7   c                       s,   e Zd ZdZd Z fddZdd Z  ZS )AltMusicLibraryControllerz"
    music library controller
    c                    s   t t| | dS r   )r   rL   r   r   r   r   r   r   3  s    z"AltMusicLibraryController.__init__c                 C   s   dt |jkS )
          override
        ZLibrarySourcetyper
   r"   r   r   r   r%   9  s    z&AltMusicLibraryController.valid_source)r
   r   r   r5   Z&_AltMusicLibraryController__gtype_namer   r%   r6   r   r   r   r   rL   -  s   rL   c                       sD   e Zd ZdZd Z fddZdd Zdd Zdd	 Zd
d Z	  Z
S )AltSoundCloudControllerz 
    sound-cloud controller
    c                    s   t t| | d| _dS r   )r   rP   r   _has_toolbarr   r   r   r   r   G  s    z AltSoundCloudController.__init__c                 C   s   dt |jkS )rM   Z
SoundCloudrN   r"   r   r   r   r%   O  s    z$AltSoundCloudController.valid_sourcec                 C   s   t jS r9   r   r   r   r   r   r   r   V  s    z$AltSoundCloudController.get_categoryc                 C   s$   | j r| j S | |dd}|| _ |S )NZbox1by_idrQ   r   r   r#   Z
search_boxr   r   r   r/   Y  s
    z#AltSoundCloudController.get_toolbarc                 C   s2   |  }|| || | jj|||d dS zv
          override - here we want to actually remove the toolbar from the
          source so get the parent
        rD   N)
get_parentr)   rC   r   rJ   r   r0   r1   r2   Zparent_gridr   r   r   r3   b  s    

z(AltSoundCloudController.moveto_searchbar)r
   r   r   r5   Z$_AltSoundCloudController__gtype_namer   r%   r   r/   r3   r6   r   r   r   r   rP   A  s   	rP   c                       sL   e Zd ZdZd Z fddZdd Zdd Zdd	 Zd
d Z	dd Z
  ZS )AltCoverArtBrowserControllerz$
    CoverArtBrowser controller
    c                    s   t t| | d| _dS r   )r   rY   r   rQ   r   r   r   r   r   w  s    z%AltCoverArtBrowserController.__init__c                 C   s   dt |jkS )rM   ZCoverArtBrowserrN   r"   r   r   r   r%     s    z)AltCoverArtBrowserController.valid_sourcec                 C   s   t jS r9   r:   r   r   r   r   r     s    z)AltCoverArtBrowserController.get_categoryc                 C   s    | j s| |dd}|| _ | j S )Nr0   rS   rT   rU   r   r   r   r/     s    z(AltCoverArtBrowserController.get_toolbarc                 C   s:   |  }|| || |  | jj|||d dS rV   )rW   r)   rC   rH   r   rJ   rX   r   r   r   r3     s    

z-AltCoverArtBrowserController.moveto_searchbarc                 C   s$   |  |dd}|  |dd}||fS )zF
          override - use the GtkEntry in the coverartbrowser
        Zentry_search_alignmentrS   r@   r>   )r   )r   r0   ZentrysearchrB   r   r   r   r.     s    z-AltCoverArtBrowserController.get_search_entry)r
   r   r   r5   Z)_AltCoverArtBrowserController__gtype_namer   r%   r   r/   r3   r.   r6   r   r   r   r   rY   q  s   rY   c                       s<   e Zd ZdZd Z fddZdd Zdd Zdd	 Z  Z	S )
AltCoverArtPlaySourceControllerz'
    CoverArtPlaySource controller
    c                    s   t t| | d| _dS r   )r   rZ   r   rQ   r   r   r   r   r     s    z(AltCoverArtPlaySourceController.__init__c                 C   s   dt |jkS )rM   ZCoverArtPlaySourcerN   r"   r   r   r   r%     s    z,AltCoverArtPlaySourceController.valid_sourcec                 C   s   t jS r9   r:   r   r   r   r   r     s    z,AltCoverArtPlaySourceController.get_categoryc                 C   s(   | j s| |dd| _ td| j  | j S )NZRBButtonBarr>   z############)rQ   r   r?   r"   r   r   r   r/     s    z+AltCoverArtPlaySourceController.get_toolbar)
r
   r   r   r5   Z,_AltCoverArtPlaySourceController__gtype_namer   r%   r   r/   r6   r   r   r   r   rZ     s   rZ   c                       s4   e Zd ZdZd Z fddZdd Zdd Z  ZS )AltQueueControllerz#
    RB QueueSource controller
    c                    s"   t t| | tjdd| _dS )r   zaudio-x-queue-symbolicnameN)r   r[   r   r   
ThemedIcon_giconr   r   r   r   r     s    zAltQueueController.__init__c                 C   s   dt |jkS )NZRBPlayQueueSourcerN   r"   r   r   r   r%     s    zAltQueueController.valid_sourcec                 C   s   | j S r9   r_   r"   r   r   r   r$     s    zAltQueueController.get_gicon)	r
   r   r   r5   Z_AltQueueController__gtype_namer   r%   r$   r6   r   r   r   r   r[     s
   r[   c                       s<   e Zd ZdZd Z fddZdd Zdd Zdd	 Z  Z	S )
AltErrorsControllerz$
    RB ErrorsSource controller
    c                    s,   t t| | tjdd| _ddg| _dS )r   zdialog-error-symbolicr\   ZRBImportErrorsSourceZRBMissingFilesSourceN)r   ra   r   r   r^   r_   _source_typesr   r   r   r   r     s
    zAltErrorsController.__init__c                 C   s2   t t|j | jD ]}|t|jkr dS qd S NTr?   rO   r
   rb   r   r#   Zsource_typer   r   r   r%     s    
z AltErrorsController.valid_sourcec                 C   s   t jS r9   r:   r   r   r   r   r     s    z AltErrorsController.get_categoryc                 C   s   | j S r9   r`   r"   r   r   r   r$     s    zAltErrorsController.get_gicon)
r
   r   r   r5   Z _AltErrorsController__gtype_namer   r%   r   r$   r6   r   r   r   r   ra     s   ra   c                       sL   e Zd ZdZd Z fddZdd Zdd Zdd	 Zd
d Z	dd Z
  ZS )AltRadioControllerz#
    RB RadioSource controller
    c                    s"   t t| | tjdd| _dS )r   zaudio-radio-symbolicr\   N)r   rf   r   r   r^   r_   r   r   r   r   r     s    zAltRadioController.__init__c                 C   s   dt |jkS )NZRBIRadioSourcerN   r"   r   r   r   r%     s    zAltRadioController.valid_sourcec                 C   s   | j S r9   r`   r"   r   r   r   r$     s    zAltRadioController.get_giconc                 C   s   t jS r9   rR   r   r   r   r   r     s    zAltRadioController.get_categoryc                 C   s   | j jtdd d S )NZStationsZ
song_label)r   r4   r;   r   r   r   r   r4     s    z%AltRadioController.set_library_labelsc                 C   s   dS rc   r   r   r   r   r   r      s    z%AltRadioController.toolbar_visibility)r
   r   r   r5   Z_AltRadioController__gtype_namer   r%   r$   r   r4   r    r6   r   r   r   r   rf     s   rf   c                       s<   e Zd ZdZd Z fddZdd Zdd Zdd	 Z  Z	S )
AltLastFMControllerz$
    RB LastFMSource controller
    c                    s0   t t| | tjdd| _tjdd| _dS )r   zlibrefm-symbolicr\   zlastfm-symbolicN)r   rh   r   r   r^   _libre_gicon_lastfm_giconr   r   r   r   r   !  s    zAltLastFMController.__init__c                 C   s   dt |jkS )NZRBAudioscrobblerProfilePagerN   r"   r   r   r   r%   *  s    z AltLastFMController.valid_sourcec                 C   s4   t  }||jj |jjtdkr*| jS | jS d S )NzLibre.fm)	r   switch_localeLocaleRBr!   r]   r;   ri   rj   r   r#   clr   r   r   r$   -  s
    zAltLastFMController.get_giconc                 C   s   t jS r9   rR   r   r   r   r   r   7  s    z AltLastFMController.get_category)
r
   r   r   r5   Z _AltLastFMController__gtype_namer   r%   r$   r   r6   r   r   r   r   rh     s   	
rh   c                       s<   e Zd ZdZd Z fddZdd Zdd Zdd	 Z  Z	S )
AltPlaylistControllerz
    playlist controller
    c                    sZ   t t| | tjdd| _tjdd| _tjdd| _tjdd| _tjdd| _	dS )r   zaudio-x-playlist-symbolicr\   z#audio-x-playlist-automatic-symboliczstarred-symbolicz(audio-x-playlist-recently-added-symbolicz)audio-x-playlist-recently-played-symbolicN)
r   rp   r   r   r^   _static_gicon_auto_gicon_toprated_gicon_recentlyadded_gicon_recentlyplayed_giconr   r   r   r   r   A  s    



zAltPlaylistController.__init__c                 C   s   dt |jkS )rM   ZPlaylistSourcerN   r"   r   r   r   r%   R  s    z"AltPlaylistController.valid_sourcec                 C   s   t  }||jj t|jj |jjtdks<|jjdkrB| jS |jjtdks^|jjdkrd| j	S |jjtdks|jjdkr| j
S dt|jkr| jS | jS d S )NzMy Top RatedzRecently AddedzRecently PlayedZStaticPlaylistSource)r   rk   rl   rm   r?   r!   r]   r;   rs   rt   ru   rO   r
   rq   rr   rn   r   r   r   r$   X  s$    


zAltPlaylistController.get_giconc                 C   s   t jS r9   )r   r   r   r   r   r   r   n  s    z"AltPlaylistController.get_category)
r
   r   r   r5   Z"_AltPlaylistController__gtype_namer   r%   r$   r   r6   r   r   r   r   rp   ;  s   rp   c                   @   s4   e Zd ZdZd Zdd Zdd Zdd Zdd	 Zd
S )AltPodcastControllerz
    podcast controller
    c                 C   s   dt |jkS )rM   ZRBPodcastMainSourcerN   r"   r   r   r   r%   x  s    z!AltPodcastController.valid_sourcec                 C   s   t jS r9   r:   r   r   r   r   r   ~  s    z!AltPodcastController.get_categoryc                 C   s*   t  }||jj | jjtdd d S )NZPodcastsrg   )r   rk   rl   ZLOCALE_DOMAINr   r4   r;   )r   ro   r   r   r   r4     s    z'AltPodcastController.set_library_labelsc                 C   s   dS rc   r   r   r   r   r   r      s    z'AltPodcastController.toolbar_visibilityN)	r
   r   r   r5   Z!_AltPodcastController__gtype_namer%   r   r4   r    r   r   r   r   rv   r  s   rv   c                       s4   e Zd ZdZd Z fddZdd Zdd Z  ZS )AltStandardOnlineControllerI
      standard controller where we dont need specific customisation
    c                    s    t t| | dddg| _dS )r   ZMagnatuneSourceZRBGriloSourceZRadioBrowserSourceN)r   rw   r   rb   r   r   r   r   r     s
    z$AltStandardOnlineController.__init__c                 C   s2   t t|j | jD ]}|t|jkr dS qdS NTFrd   re   r   r   r   r%     s
    
z(AltStandardOnlineController.valid_sourcec                 C   s   t jS r9   rR   r   r   r   r   r     s    z(AltStandardOnlineController.get_category)	r
   r   r   r5   Z(_AltStandardOnlineController__gtype_namer   r%   r   r6   r   r   r   r   rw     s
   
	rw   c                       s4   e Zd ZdZd Z fddZdd Zdd Z  ZS )AltStandardLocalControllerrx   c                    s   t t| | dg| _dS )r   ZRBMtpSourceN)r   rz   r   rb   r   r   r   r   r     s    z#AltStandardLocalController.__init__c                 C   s2   t t|j | jD ]}|t|jkr dS qdS ry   rd   re   r   r   r   r%     s
    
z'AltStandardLocalController.valid_sourcec                 C   s   t jS r9   r:   r   r   r   r   r     s    z'AltStandardLocalController.get_category)	r
   r   r   r5   Z'_AltStandardLocalController__gtype_namer   r%   r   r6   r   r   r   r   rz     s
   	rz   c                   @   s$   e Zd ZdZd Zdd Zdd ZdS )AltAndroidControllerz
    android controller
    c                 C   s   dt |jkS )rM   ZRBAndroidSourcerN   r"   r   r   r   r%     s    z!AltAndroidController.valid_sourcec                 C   s   t jS r9   r:   r   r   r   r   r     s    z!AltAndroidController.get_categoryN)r
   r   r   r5   Z!_AltAndroidController__gtype_namer%   r   r   r   r   r   r{     s   r{   N)Zalttoolbar_preferencesr   Zgi.repositoryr   r   r   objectr   ZObjectr   r7   rL   rP   rY   rZ   r[   ra   rf   rh   rp   rv   rw   rz   r{   r   r   r   r   <module>   s(   h &09  7