add playlist and genre buttons - issue #101 and #102

Esse commit está contido em:
fossfreedom
2012-12-09 18:37:25 +00:00
commit fbaa034d40
7 arquivos alterados com 643 adições e 278 exclusões
+47 -33
Ver Arquivo
@@ -32,7 +32,8 @@ from coverart_browser_prefs import GSetting
from coverart_browser_prefs import CoverLocale
from stars import ReactiveStar
from coverart_timer import ttimer
from coverart_widgets import PlaylistPopupButton
from coverart_widgets import GenrePopupButton
class CoverArtBrowserSource(RB.Source):
'''
@@ -66,7 +67,6 @@ class CoverArtBrowserSource(RB.Source):
self.search_text = ''
self.hasActivated = False
self.last_toolbar_pos = None
self.genre_changed_ignore = False
def _connect_properties(self):
'''
@@ -310,16 +310,23 @@ class CoverArtBrowserSource(RB.Source):
'filter_all_menu_item').get_label())
# genre
self.genre_combobox = ui.get_object('genre_combobox')
#self.genre_combobox = ui.get_object('genre_combobox')
self.genres_model = self.shell.props.library_source.\
get_property_views()[0].get_model()
self.genre_deleted_id = self.genres_model.connect('row-deleted',
self.on_genre_deleted)
#self.genres_model = self.shell.props.library_source.\
# get_property_views()[0].get_model()
#self.genre_deleted_id = self.genres_model.connect('row-deleted',
# self.on_genre_deleted)
self.genre_combobox.set_model(self.genres_model)
self.genre_combobox.set_active(0)
#self.genre_combobox.set_model(self.genres_model)
#self.genre_combobox.set_active(0)
self.genre_button = ui.get_object('genre_button')
self.genre_button.initialise(self.shell, self.genre_filter_callback)
self.on_notify_genre_filter_visible(_)
# get playlist popup
self.playlist_button = ui.get_object('playlist_button')
self.playlist_button.initialise(self.shell, self.filter_by_model)
print "CoverArtBrowser DEBUG - end _toolbar"
def _setup_source(self):
@@ -503,7 +510,8 @@ class CoverArtBrowserSource(RB.Source):
'''
print "CoverArtBrowser DEBUG - on_notify_genre_filter_visible"
self.genre_combobox.set_visible(self.genre_filter_visible)
#self.genre_combobox.set_visible(self.genre_filter_visible)
self.genre_button.set_visible(self.genre_filter_visible)
print "CoverArtBrowser DEBUG - end on_notify_genre_filter_visible"
@@ -549,32 +557,32 @@ class CoverArtBrowserSource(RB.Source):
print "CoverArtBrowser DEBUG - end on_notify_toolbar_pos"
def on_genre_deleted(self, *args):
'''
fills the genre combobox with all current genres found
in the library source
'''
print "CoverArtBrowser DEBUG - on_genre_deleted"
# if the current genre filter doesn't show anything, set the default
# filter back
if self.current_genre not in self.genres_model:
self.genre_combobox.set_active(0)
#def on_genre_deleted(self, *args):
# '''
# fills the genre combobox with all current genres found
# in the library source
# '''
# print "CoverArtBrowser DEBUG - on_genre_deleted"
# # if the current genre filter doesn't show anything, set the default
# # filter back
# if self.current_genre not in self.genres_model:
# self.genre_combobox.set_active(0)
print "CoverArtBrowser DEBUG - end on_genre_deleted"
# print "CoverArtBrowser DEBUG - end on_genre_deleted"
def genre_changed(self, widget):
'''
signal called when genre value changed
'''
print "CoverArtBrowser DEBUG - genre changed"
self.current_genre = widget.get_active_text()
#def genre_changed(self, widget):
# '''
# signal called when genre value changed
# '''
# print "CoverArtBrowser DEBUG - genre changed"
# self.current_genre = widget.get_active_text()
if self.current_genre == 'All':
self.album_manager.model.remove_filter('genre')
else:
self.album_manager.model.replace_filter('genre',
self.current_genre)
print "CoverArtBrowser DEBUG - end genre changed"
# if self.current_genre == 'All':
# self.album_manager.model.remove_filter('genre')
# else:
# self.album_manager.model.replace_filter('genre',
# self.current_genre)
# print "CoverArtBrowser DEBUG - end genre changed"
def on_notify_display_bottom_enabled(self, *args):
'''
@@ -1295,6 +1303,12 @@ class CoverArtBrowserSource(RB.Source):
print "CoverArtBrowser DEBUG - end rating_changed_callback"
def genre_filter_callback(self, genre):
if genre == None:
self.album_manager.model.remove_filter('genre')
else:
self.album_manager.model.replace_filter('genre', genre)
@classmethod
def get_instance(cls, **kwargs):
'''
+233
Ver Arquivo
@@ -0,0 +1,233 @@
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*-
#
# Copyright (C) 2012 - fossfreedom
# Copyright (C) 2012 - Agustin Carrasco
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
from gi.repository import Gtk
from gi.repository import GdkPixbuf
ui_string = \
"""<interface>
<object class="GtkMenu" id="popupbutton_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</interface>"""
# generic class from which implementation inherit from
class PopupButton(Gtk.Button):
# the following vars are to be defined in the inherited classes
#__gtype_name__ = gobject typename
def __init__(self, **kargs):
'''
Initializes the button.
'''
super(PopupButton, self).__init__(
**kargs)
self._builder = Gtk.Builder()
self._builder.add_from_string(ui_string)
self._popup_menu = self._builder.get_object('popupbutton_menu')
self._actiongroup = Gtk.ActionGroup((self.__gtype_name__+"menu"))
def initialise(self, shell, callback):
'''
initialise - derived objects call this first
shell = rhythmbox shell
callback = function to call when a menuitem is selected
'''
self.shell = shell
self.callback = callback
self.set_popup_value(self.get_initial_label())
def clear_popupmenu(self):
'''
reinitialises/clears the current popup menu and associated actions
'''
for menu_item in self._popup_menu:
self._popup_menu.remove(menu_item)
self._popup_menu.show_all()
self.shell.props.ui_manager.ensure_update()
for action in self._actiongroup.list_actions():
self._actiongroup.remove_action(action)
def add_menuitem(self, label, func, val):
'''
add a new menu item to the popup
'''
new_menu_item = Gtk.MenuItem(label=label)
action = Gtk.Action(label=label, name=label,
tooltip='', stock_id=Gtk.STOCK_CLEAR)
action.connect('activate', func, val)
new_menu_item.set_related_action(action)
self._popup_menu.append(new_menu_item)
self._actiongroup.add_action(action)
def show_popup(self):
'''
show the current popup menu
'''
self._popup_menu.show_all()
self.shell.props.ui_manager.ensure_update()
self._popup_menu.popup(None, None, None, None, 0,
Gtk.get_current_event_time())
def set_popup_value(self, val):
'''
set the tooltip according to the popup menu chosen
'''
if val == None:
self.set_tooltip_text(self.get_initial_label())
else:
self.set_tooltip_text(val)
def set_initial_label(self, val):
'''
all popup's should have a default initial value
'''
self._initial_label = val
def get_initial_label(self):
'''
get the first initial value stored in a popup
'''
return self._initial_label
def do_delete_thyself(self):
self.clear_popupmenu()
del self._popupmenu
del self._actiongroup
del self._builder
class PlaylistPopupButton(PopupButton):
__gtype_name__ = 'PlaylistPopupButton'
def __init__(self, **kargs):
'''
Initializes the button.
'''
super(PlaylistPopupButton, self).__init__(
**kargs)
self.set_initial_label(_("Music"))
def do_clicked(self):
'''
when button is clicked, update the popup with current playlists
before displaying the popup
'''
playlist_manager = self.shell.props.playlist_manager
playlists_entries = playlist_manager.get_playlists()
self.clear_popupmenu()
self.add_menuitem( self.get_initial_label(), self._change_playlist_source, None)
if playlists_entries:
for playlist in playlists_entries:
if playlist.props.is_local:
self.add_menuitem( playlist.props.name, self._change_playlist_source, playlist)
self.show_popup()
def _change_playlist_source(self, menu, playlist ):
'''
when a popup menu item is chosen change the button tooltip
before invoking the source callback function
'''
try:
model = playlist.get_query_model()
self.set_popup_value(playlist.props.name)
except:
model = None
self.set_popup_value(self.get_initial_label())
self.callback(model)
class GenrePopupButton(PopupButton):
__gtype_name__ = 'GenrePopupButton'
def __init__(self, **kargs):
'''
Initializes the button.
'''
super(GenrePopupButton, self).__init__(
**kargs)
def get_genres(self):
'''
get all the current genres which happens to be stored in
the main library source
'''
model = self.shell.props.library_source.get_property_views()[0].get_model()
# seems like view [0] is the genre property view
genres = []
for genre in model:
genres.append(genre[0])
return genres #self.set_initial_label( model[0][0])
def initialise(self, shell, callback):
'''
extend the default initialise function
because we need to also resize the picture
associated with the genre button
'''
self.shell = shell
self.set_initial_label( self.get_genres()[0])
super(GenrePopupButton, self).initialise(shell, callback)
what, width, height = Gtk.icon_size_lookup(Gtk.IconSize.BUTTON)
image = self.get_image()
pixbuf = image.get_pixbuf().scale_simple(width, height,
GdkPixbuf.InterpType.BILINEAR)
image.set_from_pixbuf(pixbuf)
def do_clicked(self):
'''
when button is clicked, update the popup with current genres
before displaying the popup
'''
self.clear_popupmenu()
genres = self.get_genres()
for entry in genres:
self.add_menuitem( entry, self._genre_changed, entry)
self.show_popup()
def _genre_changed(self, menu, genre):
'''
called when genre popup menu item chosen
return None if the first entry in popup returned
'''
self.set_popup_value(genre)
if genre == self.get_initial_label():
self.callback(None)
else:
self.callback(genre)
+11
Ver Arquivo
@@ -0,0 +1,11 @@
Developer note:
since we have some custom glade widgets as described in catalog.xml,
to ensure no glade errors when launched use the syntax:
GLADE_CATALOG_SEARCH_PATH=. glade [gladefile].ui
for example
GLADE_CATALOG_SEARCH_PATH=. glade coverart_browser.ui
+22
Ver Arquivo
@@ -0,0 +1,22 @@
<glade-catalog name="coverart_widgets" library="gladepython" domain="glade-3"
depends="gtk+" version="1.0">
<init-function>glade_python_init</init-function>
<glade-widget-classes>
<glade-widget-class title="PlaylistPopupButton" name="PlaylistPopupButton"
generic-name="PlaylistPopupButton" parent="GtkButton"
icon-name="widget-gtk-button"/>
<glade-widget-class title="GenrePopupButton" name="GenrePopupButton"
generic-name="GenrePopupButton" parent="GtkButton"
icon-name="widget-gtk-button"/>
<glade-widget-class title="RBSearchEntry" name="RBSearchEntry"
generic-name="RBSearchEntry" parent="GtkHBox"
icon-name="widget-gtk-box"/>
</glade-widget-classes>
<glade-widget-group name="python" title="Python">
<glade-widget-class-ref name="PlaylistPopupButton"/>
<glade-widget-class-ref name="GenrePopupButton"/>
<glade-widget-class-ref name="RBSearchEntry"/>
</glade-widget-group>
</glade-catalog>
+252 -210
Ver Arquivo
@@ -1,68 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkImage" id="cancel-icon">
<!-- interface-requires coverart_widgets 1.0 -->
<object class="GtkImage" id="arrow_down">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-cancel</property>
<property name="stock">gtk-go-down</property>
</object>
<object class="GtkImage" id="arrow_up">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-up</property>
</object>
<object class="GtkImage" id="arrow_down">
<object class="GtkImage" id="cancel-icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-down</property>
<property name="stock">gtk-cancel</property>
</object>
<object class="GtkMenu" id="filter_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkRadioMenuItem" id="filter_all_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Search using all fields</property>
<property name="label" translatable="yes">Search all fields</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_album_artist_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using album artist names</property>
<property name="label" translatable="yes">Search album artists</property>
<property name="use_underline">True</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_artist_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using track artist names</property>
<property name="label" translatable="yes">Search track artists</property>
<property name="use_underline">True</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_album_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using album titles</property>
<property name="label" translatable="yes">Search albums</property>
<property name="use_underline">True</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_track_title_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using track titles</property>
<property name="label" translatable="yes">Search tracks</property>
<property name="use_underline">True</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
</object>
<object class="GtkImage" id="genre_icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixbuf">genre.png</property>
</object>
<object class="GtkImage" id="playlist_connect">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-connect</property>
</object>
<object class="GtkBox" id="main_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">1</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="margin_top">1</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="toolbar_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkComboBoxText" id="genre_combobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Filter by genre</property>
<property name="has_entry">True</property>
<signal name="changed" handler="genre_changed" swapped="no"/>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry">
<property name="can_focus">False</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="sorting_criteria_button_box">
<property name="visible">True</property>
<property name="spacing">1</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="spacing">1</property>
<property name="layout_style">start</property>
<child>
<object class="GtkRadioButton" id="album_name_sort_radio">
<property name="label" translatable="yes">Album</property>
<property name="tooltip_text" translatable="yes">Sort by album name</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Sort by album name</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<property name="xalign">0.5</property>
<property name="draw_indicator">False</property>
<signal name="toggled" handler="sorting_criteria_changed" swapped="no"/>
</object>
<packing>
@@ -74,12 +134,15 @@
<child>
<object class="GtkRadioButton" id="artist_name_sort_radio">
<property name="label" translatable="yes">Artist</property>
<property name="tooltip_text" translatable="yes">Sort by album artist</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Sort by album artist</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<property name="xalign">0.5</property>
<property name="draw_indicator">False</property>
<property name="group">album_name_sort_radio</property>
<signal name="toggled" handler="sorting_criteria_changed" swapped="no"/>
</object>
@@ -92,12 +155,15 @@
<child>
<object class="GtkRadioButton" id="year_sort_radio">
<property name="label" translatable="yes">Year</property>
<property name="tooltip_text" translatable="yes">Sort by year</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Sort by year</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<property name="xalign">0.5</property>
<property name="draw_indicator">False</property>
<property name="group">album_name_sort_radio</property>
<signal name="toggled" handler="sorting_criteria_changed" swapped="no"/>
</object>
@@ -110,12 +176,15 @@
<child>
<object class="GtkRadioButton" id="rating_sort_radio">
<property name="label" translatable="yes">Rating</property>
<property name="tooltip_text" translatable="yes">Sort by rating</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Sort by rating</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property>
<property name="xalign">0.5</property>
<property name="draw_indicator">False</property>
<property name="group">album_name_sort_radio</property>
<signal name="toggled" handler="sorting_criteria_changed" swapped="no"/>
</object>
@@ -129,22 +198,43 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="sort_order">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="relief">none</property>
<property name="xalign">0.5</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">arrow_up</property>
<property name="relief">half</property>
<signal name="clicked" handler="sorting_direction_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="PlaylistPopupButton" id="playlist_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<signal name="clicked" handler="sorting_direction_changed" swapped="no"/>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">playlist_connect</property>
<property name="relief">half</property>
</object>
<packing>
<property name="expand">False</property>
@@ -152,6 +242,27 @@
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GenrePopupButton" id="genre_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes">All Genres</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">genre_icon</property>
<property name="relief">half</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="entry_search_alignment">
<property name="visible">True</property>
@@ -160,6 +271,7 @@
<property name="xscale">0.25</property>
<child>
<object class="RBSearchEntry" id="search_entry">
<property name="can_focus">False</property>
</object>
</child>
</object>
@@ -177,74 +289,77 @@
</packing>
</child>
<child>
<object class="GtkPaned" id="paned">
<object class="GtkPaned" id="paned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="orientation">vertical</property>
<signal name="button-press-event" handler="paned_button_press_callback" swapped="no"/>
<signal name="button-release-event" handler="on_paned_button_release_event" swapped="no"/>
<child>
<object class="GtkScrolledWindow" id="scrolled_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="shadow_type">in</property>
<signal name="size-allocate" handler="update_iconview_callback" swapped="no"/>
<child>
<object class="GtkIconView" id="covers_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="selection_mode">multiple</property>
<property name="tooltip_column">0</property>
<signal name="button-press-event" handler="mouseclick_callback" swapped="no"/>
<signal name="selection-changed" handler="selectionchanged_callback" swapped="no"/>
<signal name="item-activated" handler="item_activated_callback" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkBox" id="bottom_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolled_window">
<object class="GtkExpander" id="bottom_expander">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkNotebook" id="bottom_notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="shadow_type">in</property>
<signal name="size-allocate" handler="update_iconview_callback" swapped="no"/>
<child>
<object class="GtkIconView" id="covers_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_column">0</property>
<property name="pixbuf_column">1</property>
<property name="selection-mode">3</property>
<signal name="button-press-event" handler="mouseclick_callback" swapped="no"/>
<signal name="selection-changed" handler="selectionchanged_callback" swapped="no"/>
<signal name="item-activated" handler="item_activated_callback" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
<property name="tab_pos">bottom</property>
<signal name="switch-page" handler="notebook_switch_page_callback" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="bottom_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkExpander" id="bottom_expander">
<property name="label" translatable="yes">Tracks &amp; Covers</property>
<property name="visible">True</property>
<signal name="notify::expanded" handler="bottom_expander_expanded_callback" swapped="no"/>
<child>
<object class="GtkNotebook" id="bottom_notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tab_pos">bottom</property>
<property name="vexpand">True</property>
<signal name="switch-page" handler="notebook_switch_page_callback" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
<signal name="button-press-event" handler="paned_button_press_callback" swapped="no"/>
<signal name="button-release-event" handler="on_paned_button_release_event" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">20</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">20</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="status_label">
<property name="can_focus">False</property>
@@ -355,28 +470,28 @@
<property name="use_underline">True</property>
<signal name="select" handler="playlist_menu_item_callback" swapped="no"/>
<child type="submenu">
<object class="GtkMenu" id="playlist_sub_menu_item">
<object class="GtkMenu" id="playlist_sub_menu_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="new_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="new_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Add this album to a new playlist</property>
<property name="label" translatable="yes">New Playlist</property>
<property name="use_underline">True</property>
<signal name="activate" handler="add_playlist_menu_item_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="popup_separator_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
</object>
<property name="tooltip_text" translatable="yes">Add this album to a new playlist</property>
<property name="label" translatable="yes">New Playlist</property>
<property name="use_underline">True</property>
<signal name="activate" handler="add_playlist_menu_item_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="popup_separator_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
</object>
</child>
</object>
</child>
@@ -419,27 +534,27 @@
<property name="use_underline">True</property>
<signal name="select" handler="favourite_playlist_menu_item_callback" swapped="no"/>
<child type="submenu">
<object class="GtkMenu" id="favourite_playlist_sub_menu_item">
<object class="GtkMenu" id="favourite_playlist_sub_menu_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="favourite_new_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="favourite_new_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">New Playlist</property>
<property name="use_underline">True</property>
<signal name="activate" handler="favourite_add_playlist_menu_item_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="favourite_popup_separator_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
</object>
<property name="label" translatable="yes">New Playlist</property>
<property name="use_underline">True</property>
<signal name="activate" handler="favourite_add_playlist_menu_item_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="favourite_popup_separator_playlist">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
</object>
</child>
</object>
</child>
@@ -471,102 +586,29 @@
<child>
<object class="GtkImageMenuItem" id="show_properties_menu_item">
<property name="label">gtk-properties</property>
<property name="tooltip_text" translatable="yes">Show album properties</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Show album properties</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="show_properties_menu_item_callback" swapped="no"/>
</object>
</child>
</object>
<object class="GtkMenu" id="source_menu">
</object>
<object class="GtkMenu" id="source_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="source_search_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search for covers where an album does not currently have one</property>
<property name="label" translatable="yes">Download all the covers</property>
<signal name="activate" handler="search_all_covers_callback" swapped="no"/>
</object>
</child>
</object>
<object class="GtkMenu" id="filter_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkRadioMenuItem" id="filter_all_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using all fields</property>
<property name="label" translatable="yes">Search all fields</property>
<property name="use_underline">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="active">True</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_album_artist_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using album artist names</property>
<property name="label" translatable="yes">Search album artists</property>
<property name="use_underline">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_artist_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using track artist names</property>
<property name="label" translatable="yes">Search track artists</property>
<property name="use_underline">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_album_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using album titles</property>
<property name="label" translatable="yes">Search albums</property>
<property name="use_underline">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="filter_track_title_menu_item">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Search using track titles</property>
<property name="label" translatable="yes">Search tracks</property>
<property name="use_underline">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="group">filter_all_menu_item</property>
<signal name="toggled" handler="filter_menu_callback" swapped="no"/>
</object>
</child>
</object>
</interface>
+78 -35
Ver Arquivo
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<!-- interface-requires coverart_widgets 1.0 -->
<object class="GtkImage" id="arrow_down">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -26,6 +27,16 @@
</object>
</child>
</object>
<object class="GtkImage" id="genre_icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixbuf">genre.png</property>
</object>
<object class="GtkImage" id="playlist_connect">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-connect</property>
</object>
<object class="GtkBox" id="main_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -55,35 +66,14 @@
<property name="xalign">0</property>
<child>
<object class="RBSearchEntry" id="search_entry">
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">20</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="genre_combobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Filter by genre</property>
<property name="halign">end</property>
<property name="has_entry">True</property>
<signal name="changed" handler="genre_changed" swapped="no"/>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry">
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<property name="progress_fraction">0.0099999997764825821</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">30</property>
<property name="position">20</property>
</packing>
</child>
<child>
@@ -186,24 +176,77 @@
</packing>
</child>
<child>
<object class="GtkButton" id="sort_order">
<property name="use_action_appearance">False</property>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">arrow_up</property>
<property name="relief">half</property>
<signal name="clicked" handler="sorting_direction_changed" swapped="no"/>
<child>
<object class="GtkButton" id="sort_order">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">arrow_up</property>
<property name="relief">half</property>
<signal name="clicked" handler="sorting_direction_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="PlaylistPopupButton" id="playlist_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">playlist_connect</property>
<property name="relief">half</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GenrePopupButton" id="genre_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_markup" translatable="yes">All Genres</property>
<property name="tooltip_text" translatable="yes">All Genres</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin_right">1</property>
<property name="use_action_appearance">False</property>
<property name="image">genre_icon</property>
<property name="relief">half</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">50</property>
<property name="fill">True</property>
<property name="position">60</property>
</packing>
</child>
</object>
BIN
Ver Arquivo
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 1.7 KiB