From ed29006f10bb55c74b667026ebb22442a5d7917f Mon Sep 17 00:00:00 2001 From: coderkun Date: Mon, 1 Aug 2016 10:36:13 +0200 Subject: [PATCH] add options for different tracklist sizes on cover panel --- data/de.coderkun.MCG.gschema.xml | 10 ++ data/gschemas.compiled | Bin 812 -> 928 bytes data/gtk.glade | 245 ++++++++++++++++++++++--------- mcg/mcgGtk.py | 71 ++++++++- 4 files changed, 255 insertions(+), 71 deletions(-) diff --git a/data/de.coderkun.MCG.gschema.xml b/data/de.coderkun.MCG.gschema.xml index c532da1..057448c 100644 --- a/data/de.coderkun.MCG.gschema.xml +++ b/data/de.coderkun.MCG.gschema.xml @@ -37,6 +37,16 @@ Last selected panel The index of the last selected panel. + + 'large' + + + + + + Size of tracklist on cover panel + The size of the tracklist on the cover panel. + 150 diff --git a/data/gschemas.compiled b/data/gschemas.compiled index ec3c06730c5d165c7804c268dd1b309b298427b5..4c938fdd692119bba04b888cca36dd09950f0b7a 100644 GIT binary patch literal 928 zcmYjQziSjh82zHR(OfiMVL-cd*+uTIO`(ESf>;SkO6PXRyCM6F-N}!WMA8T%+N#AB z{sG#Ef<;8jXquFQ+FJ@DT6w-VyB9L>_Pu%E%s1ceH@kdW6-K32>Tvi^WB~pK!vh&;+6*B0jFxr zfSbo~2KwsF%OA)*Z%#JkC%A*+HhPOK`qWMMOZ0%(U+4eOr*6T22z~;5+_^u?TB$ww z&%rN&y}5?VLp=lk9r!(PU5&Pxhq?iOAAAVB{k-7TQ!~#O@Gs!}@7Y-*mcfcty=>au+kb~I= zTc~g?Hl=Ns=ALFuBvwVAGITTat}@1)j>|;Fu~d3sqDZICo)*9KhiW|t%B-;MtUzCf zS``c)nt?MrGJ2)6!BaF^)lHV+rjK^*q#1JQSqP`@!&}> z{SS&DqPI|bY!$(aAc)|xmmWn=#`h*0=m&4#%bRcB{L1Zhom-tcDQgMbn`$*zdKK`& z&kv_$j$M~KvIRbd5i~_6D0K;j+!OLD5Svbv#U_8aopzFFlY{CizbNJ~n^TAd;7W-q zxK@Jw<7@K`j&rT5?8sN}H{ki(mwo!wb@;!)=fL|P%|G<18}PYM0NnWfw4hJToCdfF z96x?i=l-b!_$}}nF#h~th5gj*zX{#|X6L2mdGCXt0UtlL{649f^9poT3^xH&lns#h+8mb68L+$v$sBUb!vxn^BA-h=8 zI+OTtjK2mrjag?{OO#b3Wo;OSIM?)DX$Qb%pbqeTS=<($NrpN#0~#p)W*(XIF63=x zg_A)R>48_=Xq2U?iJU(P&fza3%kj69kXza8< + + False + + + True + False + vertical + + + True + False + vertical + + + True + False + Tracklist + + + False + True + 0 + + + + + large tracklist + True + True + False + True + True + + + + False + True + 1 + + + + + small tracklist + True + True + False + True + True + cover-toolbar-tracklist-large + + + + False + True + 2 + + + + + hide tracklist + True + True + False + True + True + cover-toolbar-tracklist-large + + + + False + True + 3 + + + + + False + True + 2 + + + + + True False @@ -519,85 +603,91 @@ - + True False - vertical + slide-right + True - + True False - 5 - 5 - 5 - True - True - - - True - False - Album - - - 0 - 0 - - - - - True - False - Date - - - 0 - 1 - - - - - True - False - Artist - - - 0 - 2 - - - - - - False - True - 10 - 0 - - - - - True - True - start vertical - False - - + + + True + False + 5 + 5 + 5 + True + True + + + True + False + Album + + + 0 + 0 + + + + + True + False + Date + + + 0 + 1 + + + + + True + False + Artist + + + 0 + 2 + + + + + + False + True + 10 + 0 + + + + + True + True + start + vertical + False + + + + + True + True + 1 + + - - True - True - 1 - False True - 10 - end 1 @@ -1068,6 +1158,27 @@ True + + + True + True + True + cover-toolbar-popover + + + True + False + open-menu-symbolic + + + + + False + False + 1 + True + + cover diff --git a/mcg/mcgGtk.py b/mcg/mcgGtk.py index 53f05f2..bca4d7f 100755 --- a/mcg/mcgGtk.py +++ b/mcg/mcgGtk.py @@ -38,6 +38,7 @@ class Application(Gtk.Application): SETTING_WINDOW_SIZE = 'window-size' SETTING_WINDOW_MAXIMIZED = 'window-maximized' SETTING_PANEL = 'panel' + SETTING_TRACKLIST_SIZE = 'tracklist-size' SETTING_ITEM_SIZE = 'item-size' SETTING_SORT_ORDER = 'sort-order' SETTING_SORT_TYPE = 'sort-type' @@ -169,6 +170,7 @@ class Window(): if use_keyring: self._panels[Window._PANEL_INDEX_CONNECTION].set_password(keyring.get_password(Application.KEYRING_SYSTEM, Application.KEYRING_USERNAME)) self._panels[Window._PANEL_INDEX_CONNECTION].set_image_dir(self._settings.get_string(Application.SETTING_IMAGE_DIR)) + self._panels[Window._PANEL_INDEX_COVER].set_tracklist_size(self._settings.get_string(Application.SETTING_TRACKLIST_SIZE)) self._panels[Window._PANEL_INDEX_PLAYLIST].set_item_size(self._settings.get_int(Application.SETTING_ITEM_SIZE)) self._panels[Window._PANEL_INDEX_LIBRARY].set_item_size(self._settings.get_int(Application.SETTING_ITEM_SIZE)) self._panels[Window._PANEL_INDEX_LIBRARY].set_sort_order(self._settings.get_string(Application.SETTING_SORT_ORDER)) @@ -181,6 +183,7 @@ class Window(): self._header_bar.connect_signal(HeaderBar.SIGNAL_SET_VOLUME, self.on_header_bar_set_volume) self._panels[Window._PANEL_INDEX_CONNECTION].connect_signal(ConnectionPanel.SIGNAL_CONNECTION_CHANGED, self.on_connection_panel_connection_changed) self._panels[Window._PANEL_INDEX_COVER].connect_signal(CoverPanel.SIGNAL_TOGGLE_FULLSCREEN, self.on_cover_panel_toggle_fullscreen) + self._panels[Window._PANEL_INDEX_COVER].connect_signal(CoverPanel.SIGNAL_TRACKLIST_SIZE_CHANGED, self.on_cover_panel_tracklist_size_changed) self._panels[Window._PANEL_INDEX_COVER].connect_signal(CoverPanel.SIGNAL_SET_SONG, self.on_cover_panel_set_song) self._panels[Window._PANEL_INDEX_PLAYLIST].connect_signal(PlaylistPanel.SIGNAL_CLEAR_PLAYLIST, self.on_playlist_panel_clear_playlist) self._panels[Window._PANEL_INDEX_LIBRARY].connect_signal(LibraryPanel.SIGNAL_UPDATE, self.on_library_panel_update) @@ -194,6 +197,7 @@ class Window(): self._mcg.connect_signal(mcg.Client.SIGNAL_LOAD_ALBUMS, self.on_mcg_load_albums) self._mcg.connect_signal(mcg.Client.SIGNAL_ERROR, self.on_mcg_error) self._settings.connect('changed::'+Application.SETTING_PANEL, self.on_settings_panel_changed) + self._settings.connect('changed::'+Application.SETTING_TRACKLIST_SIZE, self.on_settings_tracklist_size_changed) self._settings.connect('changed::'+Application.SETTING_ITEM_SIZE, self.on_settings_item_size_changed) self._settings.connect('changed::'+Application.SETTING_SORT_ORDER, self.on_settings_sort_order_changed) self._settings.connect('changed::'+Application.SETTING_SORT_TYPE, self.on_settings_sort_type_changed) @@ -285,6 +289,10 @@ class Window(): self._appwindow.unfullscreen() + def on_cover_panel_tracklist_size_changed(self, size): + self._settings.set_string(Application.SETTING_TRACKLIST_SIZE, size) + + def on_cover_panel_set_song(self, pos, time): self._mcg.seek(pos, time) @@ -361,6 +369,11 @@ class Window(): self._stack.set_visible_child(self._panels[panel_index].get()) + def on_settings_tracklist_size_changed(self, settings, key): + size = settings.get_string(key) + self._panels[Window._PANEL_INDEX_COVER].set_tracklist_size(size) + + def on_settings_item_size_changed(self, settings, key): size = settings.get_int(key) self._panels[Window._PANEL_INDEX_PLAYLIST].set_item_size(size) @@ -741,7 +754,11 @@ class ConnectionPanel(mcg.Base): class CoverPanel(mcg.Base): SIGNAL_TOGGLE_FULLSCREEN = 'toggle-fullscreen' + SIGNAL_TRACKLIST_SIZE_CHANGED = 'tracklist-size-changed' SIGNAL_SET_SONG = 'set-song' + TRACKLIST_SIZE_LARGE = 'large' + TRACKLIST_SIZE_SMALL = 'small' + TRACKLIST_SIZE_HIDDEN = 'hidden' def __init__(self, builder): @@ -751,11 +768,18 @@ class CoverPanel(mcg.Base): self._cover_pixbuf = None self._timer = None self._properties = {} + self._tracklist_size = CoverPanel.TRACKLIST_SIZE_LARGE # Widgets self._appwindow = builder.get_object('appwindow') self._panel = builder.get_object('cover-panel') self._toolbar = builder.get_object('cover-toolbar') + # Toolbar menu + self._toolbar_tracklist_buttons = { + CoverPanel.TRACKLIST_SIZE_LARGE: builder.get_object('cover-toolbar-tracklist-large'), + CoverPanel.TRACKLIST_SIZE_SMALL: builder.get_object('cover-toolbar-tracklist-small'), + CoverPanel.TRACKLIST_SIZE_HIDDEN: builder.get_object('cover-toolbar-tracklist-hidden') + } # Cover self._cover_stack = builder.get_object('cover-stack') self._cover_spinner = builder.get_object('cover-spinner') @@ -763,6 +787,7 @@ class CoverPanel(mcg.Base): self._cover_box = builder.get_object('cover-box') self._cover_image = builder.get_object('cover-image') # Album Infos + self._info_revealer = builder.get_object('cover-info-revealer') self._info_box = builder.get_object('cover-info-box') self._album_title_label = builder.get_object('cover-album') self._album_date_label = builder.get_object('cover-date') @@ -783,6 +808,7 @@ class CoverPanel(mcg.Base): def get_signal_handlers(self): return { 'on_cover-toolbar-fullscreen_clicked': self.on_fullscreen_clicked, + 'on_cover-toolbar-tracklist_toggled': self.on_tracklist_togged, 'on_cover-box_button_press_event': self.on_cover_box_pressed, 'on_cover-scroll_size_allocate': self.on_cover_size_allocate, 'on_cover-songs_button_press_event': self.on_songs_start_change, @@ -794,6 +820,12 @@ class CoverPanel(mcg.Base): self._callback(self.SIGNAL_TOGGLE_FULLSCREEN) + def on_tracklist_togged(self, widget): + if widget.get_active(): + size = [key for key, value in self._toolbar_tracklist_buttons.items() if value is widget][0] + self._change_tracklist_size(size) + + def on_cover_box_pressed(self, widget, event): if event.type == Gdk.EventType._2BUTTON_PRESS: self._callback(self.SIGNAL_TOGGLE_FULLSCREEN) @@ -823,6 +855,18 @@ class CoverPanel(mcg.Base): self._callback(self.SIGNAL_SET_SONG, pos, time) + def set_tracklist_size(self, size): + if self._tracklist_size != size: + button = self._toolbar_tracklist_buttons[size] + if button and not button.get_active(): + button.set_active(True) + self._change_tracklist_size(size, False) + + + def get_tracklist_size(self): + return self._tracklist_size + + def set_album(self, album): # Set labels self._album_title_label.set_label( @@ -868,8 +912,7 @@ class CoverPanel(mcg.Base): def set_fullscreen(self, active): if active: - self._songs_scale.hide() - self._info_box.hide() + self._change_tracklist_size(CoverPanel.TRACKLIST_SIZE_HIDDEN, False, False) self._cover_box.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1)) GObject.idle_add(self._resize_image) # Hide curser @@ -877,8 +920,7 @@ class CoverPanel(mcg.Base): Gdk.Cursor.new_from_name(Gdk.Display.get_default(), "none") ) else: - self._songs_scale.show() - self._info_box.show() + self._change_tracklist_size(self._tracklist_size, False, False) self._cover_box.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 0)) GObject.idle_add(self._resize_image) # Reset cursor @@ -924,6 +966,27 @@ class CoverPanel(mcg.Base): self._songs_scale.add_mark(length, Gtk.PositionType.RIGHT, "{0[0]:02d}:{0[1]:02d} minutes".format(divmod(length, 60))) + def _change_tracklist_size(self, size, notify=True, store=True): + # Set tracklist size + if size == CoverPanel.TRACKLIST_SIZE_LARGE: + self._panel.set_homogeneous(True) + self._info_revealer.set_reveal_child(True) + elif size == CoverPanel.TRACKLIST_SIZE_SMALL: + self._panel.set_homogeneous(False) + self._info_revealer.set_reveal_child(True) + else: + self._panel.set_homogeneous(False) + self._info_revealer.set_reveal_child(False) + # Store size + if store: + self._tracklist_size = size + # Notify signals + if notify: + self._callback(CoverPanel.SIGNAL_TRACKLIST_SIZE_CHANGED, size) + # Resize image + self._resize_image() + + def _playing(self): value = self._songs_scale.get_value() + 1 self._songs_scale.set_value(value)