Use overlay for track list on Cover panel (implements #47)

This commit is contained in:
coderkun 2018-03-24 11:41:25 +01:00
commit f98b888344
6 changed files with 427 additions and 603 deletions

View file

@ -7,5 +7,6 @@
<file>gtk.menu.ui</file> <file>gtk.menu.ui</file>
<file>mcg.svg</file> <file>mcg.svg</file>
<file>noise-texture.png</file> <file>noise-texture.png</file>
<file>mcg-tracklist.svg</file>
</gresource> </gresource>
</gresources> </gresources>

View file

@ -1,10 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schemalist> <schemalist>
<enum id="de.coderkun.mcg.TracklistSize">
<value nick="large" value="0" />
<value nick="small" value="1" />
<value nick="hidden" value="2" />
</enum>
<enum id="de.coderkun.mcg.SortOrder"> <enum id="de.coderkun.mcg.SortOrder">
<value nick="artist" value="0" /> <value nick="artist" value="0" />
<value nick="title" value="1" /> <value nick="title" value="1" />
@ -47,11 +42,6 @@
<summary>Last selected panel</summary> <summary>Last selected panel</summary>
<description>The index of the last selected panel.</description> <description>The index of the last selected panel.</description>
</key> </key>
<key enum="de.coderkun.mcg.TracklistSize" name="tracklist-size">
<default>'large'</default>
<summary>Size of tracklist on cover panel</summary>
<description>The size of the tracklist on the cover panel.</description>
</key>
<key type="i" name="item-size"> <key type="i" name="item-size">
<range min="100" max="1000" /> <range min="100" max="1000" />
<default>150</default> <default>150</default>

View file

@ -18,6 +18,16 @@
font-weight:bold; font-weight:bold;
} }
revealer.sidebar > * {
background-color:alpha(@theme_bg_color, 0.8);
box-shadow:0 0 10px @theme_bg_color;
margin-left:20px
}
revealer.sidebar scale mark indicator {
margin-right:5px;
}
actionbar { actionbar {
background-color:@theme_unfocused_bg_color; background-color:@theme_unfocused_bg_color;
} }

View file

@ -1,91 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.4 --> <!-- Generated with glade 3.22.1 -->
<interface> <interface>
<requires lib="gtk+" version="3.20"/> <requires lib="gtk+" version="3.20"/>
<object class="GtkPopover" id="cover-toolbar-popover">
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="cover-toolbar-tracklist">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Tracklist</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="cover-toolbar-tracklist-large">
<property name="label" translatable="yes">large tracklist</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_cover-toolbar-tracklist_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="cover-toolbar-tracklist-small">
<property name="label" translatable="yes">small tracklist</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">cover-toolbar-tracklist-large</property>
<signal name="toggled" handler="on_cover-toolbar-tracklist_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="cover-toolbar-tracklist-hidden">
<property name="label" translatable="yes">hide tracklist</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">cover-toolbar-tracklist-large</property>
<signal name="toggled" handler="on_cover-toolbar-tracklist_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkHeaderBar" id="headerbar-library-standalone"> <object class="GtkHeaderBar" id="headerbar-library-standalone">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
@ -364,6 +280,325 @@
<signal name="destroy" handler="on_appwindow_destroy" swapped="no"/> <signal name="destroy" handler="on_appwindow_destroy" swapped="no"/>
<signal name="size-allocate" handler="on_appwindow_size_allocate" swapped="no"/> <signal name="size-allocate" handler="on_appwindow_size_allocate" swapped="no"/>
<signal name="window-state-event" handler="on_appwindow_window_state_event" swapped="no"/> <signal name="window-state-event" handler="on_appwindow_window_state_event" swapped="no"/>
<child type="titlebar">
<object class="GtkHeaderBar" id="headerbar">
<property name="name">headerbar</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="show_close_button">True</property>
<child>
<object class="GtkSwitch" id="headerbar-connection">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Connect or disconnect</property>
<signal name="notify::active" handler="on_headerbar-connection_active_notify" swapped="no"/>
<signal name="state-set" handler="on_headerbar-connection_state_set" swapped="no"/>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="headerbar-playpause">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Switch between play and pause</property>
<signal name="toggled" handler="on_headerbar-playpause_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">media-playback-start</property>
</object>
</child>
</object>
<packing>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkVolumeButton" id="headerbar-volume">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Adjust the volume</property>
<property name="relief">none</property>
<property name="orientation">vertical</property>
<property name="icons">audio-volume-muted
audio-volume-high
audio-volume-low
audio-volume-medium</property>
<signal name="button-press-event" handler="on_headerbar-volume_button_press_event" swapped="no"/>
<signal name="button-release-event" handler="on_headerbar-volume_button_release_event" swapped="no"/>
<signal name="value-changed" handler="on_headerbar-volume_value_changed" swapped="no"/>
<child internal-child="plus_button">
<object class="GtkButton">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="relief">none</property>
</object>
</child>
<child internal-child="minus_button">
<object class="GtkButton">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="relief">none</property>
</object>
</child>
</object>
<packing>
<property name="position">4</property>
</packing>
</child>
<child type="title">
<object class="GtkStack" id="headerbar-title-stack">
<property name="name">headerbar-connection</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="transition_duration">100</property>
<property name="transition_type">crossfade</property>
<child>
<object class="GtkLabel" id="headerbar-connectionn-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Connect to MPD</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="name">page1</property>
<property name="title">page1</property>
</packing>
</child>
<child>
<object class="GtkStackSwitcher" id="header-panelswitcher">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stack">panelstack</property>
</object>
<packing>
<property name="name">page0</property>
<property name="title">page0</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkStack" id="toolbarstack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButtonBox" id="cover-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cover-toolbar-fullscreen">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Show the cover in fullscreen mode</property>
<signal name="clicked" handler="on_cover-toolbar-fullscreen_clicked" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">view-fullscreen-symbolic</property>
</object>
</child>
<accelerator key="F11" signal="activate"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">cover</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="server-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="name">server</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="playlist-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkToggleButton" id="playlist-toolbar-select">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Select multiple albums</property>
<signal name="toggled" handler="on_playlist-toolbar-select_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">object-select-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkButton" id="playlist-toolbar-clear">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Clear the playlist</property>
<signal name="clicked" handler="on_playlist-toolbar-clear_clicked" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">edit-clear</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">playlist</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="library-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkToggleButton" id="library-toolbar-search">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Search the library</property>
<signal name="toggled" handler="on_library-toolbar-search_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">system-search-symbolic</property>
</object>
</child>
<accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="library-toolbar-select">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Select multiple albums</property>
<signal name="toggled" handler="on_library-toolbar-select_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">object-select-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Settings and actions</property>
<property name="popover">library-toolbar-popover</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">open-menu-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">library</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="pack_type">end</property>
<property name="position">4</property>
</packing>
</child>
</object>
</child>
<child> <child>
<object class="GtkOverlay"> <object class="GtkOverlay">
<property name="visible">True</property> <property name="visible">True</property>
@ -1056,10 +1291,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox" id="cover-panel"> <object class="GtkOverlay" id="cover-panel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="homogeneous">True</property>
<child> <child>
<object class="GtkStack" id="cover-stack"> <object class="GtkStack" id="cover-stack">
<property name="visible">True</property> <property name="visible">True</property>
@ -1108,20 +1342,20 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="index">-1</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child type="overlay">
<object class="GtkRevealer" id="cover-info-revealer"> <object class="GtkRevealer" id="cover-info-revealer">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">end</property>
<property name="transition_type">slide-right</property> <property name="transition_type">slide-right</property>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="halign">start</property>
<property name="hscrollbar_policy">never</property> <property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">never</property> <property name="vscrollbar_policy">never</property>
<child> <child>
@ -1133,12 +1367,17 @@
<object class="GtkBox" id="cover-info-box"> <object class="GtkBox" id="cover-info-box">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">start</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkGrid"> <object class="GtkGrid">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_top">5</property> <property name="margin_left">5</property>
<property name="margin_bottom">5</property> <property name="margin_bottom">5</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<property name="column_homogeneous">True</property> <property name="column_homogeneous">True</property>
@ -1146,8 +1385,10 @@
<object class="GtkLabel" id="cover-album"> <object class="GtkLabel" id="cover-album">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label">Album</property> <property name="label">Album</property>
<property name="wrap">True</property> <property name="wrap">True</property>
<property name="xalign">0</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -1158,8 +1399,10 @@
<object class="GtkLabel" id="cover-date"> <object class="GtkLabel" id="cover-date">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label">Date</property> <property name="label">Date</property>
<property name="wrap">True</property> <property name="wrap">True</property>
<property name="xalign">0</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -1170,8 +1413,10 @@
<object class="GtkLabel" id="cover-artist"> <object class="GtkLabel" id="cover-artist">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label">Artist</property> <property name="label">Artist</property>
<property name="wrap">True</property> <property name="wrap">True</property>
<property name="xalign">0</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -1195,6 +1440,8 @@
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="restrict_to_fill_level">False</property>
<property name="digits">0</property>
<property name="draw_value">False</property> <property name="draw_value">False</property>
<signal name="button-press-event" handler="on_cover-songs_button_press_event" swapped="no"/> <signal name="button-press-event" handler="on_cover-songs_button_press_event" swapped="no"/>
<signal name="button-release-event" handler="on_cover-songs_button_release_event" swapped="no"/> <signal name="button-release-event" handler="on_cover-songs_button_release_event" swapped="no"/>
@ -1202,6 +1449,7 @@
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
@ -1211,12 +1459,11 @@
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="sidebar"/>
<class name="background"/>
</style>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -1695,347 +1942,6 @@
</child> </child>
</object> </object>
</child> </child>
<child type="titlebar">
<object class="GtkHeaderBar" id="headerbar">
<property name="name">headerbar</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="show_close_button">True</property>
<child>
<object class="GtkSwitch" id="headerbar-connection">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Connect or disconnect</property>
<signal name="notify::active" handler="on_headerbar-connection_active_notify" swapped="no"/>
<signal name="state-set" handler="on_headerbar-connection_state_set" swapped="no"/>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="headerbar-playpause">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Switch between play and pause</property>
<signal name="toggled" handler="on_headerbar-playpause_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">media-playback-start</property>
</object>
</child>
</object>
<packing>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkVolumeButton" id="headerbar-volume">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Adjust the volume</property>
<property name="relief">none</property>
<property name="orientation">vertical</property>
<property name="icons">audio-volume-muted
audio-volume-high
audio-volume-low
audio-volume-medium</property>
<signal name="button-press-event" handler="on_headerbar-volume_button_press_event" swapped="no"/>
<signal name="button-release-event" handler="on_headerbar-volume_button_release_event" swapped="no"/>
<signal name="value-changed" handler="on_headerbar-volume_value_changed" swapped="no"/>
<child internal-child="plus_button">
<object class="GtkButton">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="relief">none</property>
</object>
</child>
<child internal-child="minus_button">
<object class="GtkButton">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="relief">none</property>
</object>
</child>
</object>
<packing>
<property name="position">4</property>
</packing>
</child>
<child type="title">
<object class="GtkStack" id="headerbar-title-stack">
<property name="name">headerbar-connection</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="transition_duration">100</property>
<property name="transition_type">crossfade</property>
<child>
<object class="GtkLabel" id="headerbar-connectionn-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Connect to MPD</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="name">page1</property>
<property name="title">page1</property>
</packing>
</child>
<child>
<object class="GtkStackSwitcher" id="header-panelswitcher">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stack">panelstack</property>
</object>
<packing>
<property name="name">page0</property>
<property name="title">page0</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkStack" id="toolbarstack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButtonBox" id="cover-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cover-toolbar-fullscreen">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Show the cover in fullscreen mode</property>
<signal name="clicked" handler="on_cover-toolbar-fullscreen_clicked" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">view-fullscreen-symbolic</property>
</object>
</child>
<accelerator key="F11" signal="activate"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Settings and actions</property>
<property name="popover">cover-toolbar-popover</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">open-menu-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">cover</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="server-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="name">server</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="playlist-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkToggleButton" id="playlist-toolbar-select">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Select multiple albums</property>
<signal name="toggled" handler="on_playlist-toolbar-select_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">object-select-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkButton" id="playlist-toolbar-clear">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Clear the playlist</property>
<signal name="clicked" handler="on_playlist-toolbar-clear_clicked" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">edit-clear</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">playlist</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="library-toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkToggleButton" id="library-toolbar-search">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Search the library</property>
<signal name="toggled" handler="on_library-toolbar-search_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">system-search-symbolic</property>
</object>
</child>
<accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="library-toolbar-select">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Select multiple albums</property>
<signal name="toggled" handler="on_library-toolbar-select_toggled" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">object-select-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Settings and actions</property>
<property name="popover">library-toolbar-popover</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">open-menu-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">library</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="pack_type">end</property>
<property name="position">5</property>
</packing>
</child>
</object>
</child>
<style> <style>
<class name="bg-texture"/> <class name="bg-texture"/>
</style> </style>
@ -2054,6 +1960,9 @@
<property name="website">http://www.suruatoel.xyz/codes/mcg</property> <property name="website">http://www.suruatoel.xyz/codes/mcg</property>
<property name="logo">mcg.svg</property> <property name="logo">mcg.svg</property>
<property name="license_type">gpl-3-0</property> <property name="license_type">gpl-3-0</property>
<child>
<placeholder/>
</child>
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkBox"> <object class="GtkBox">
<property name="can_focus">False</property> <property name="can_focus">False</property>
@ -2081,8 +1990,5 @@
</child> </child>
</object> </object>
</child> </child>
<child>
<placeholder/>
</child>
</object> </object>
</interface> </interface>

View file

@ -77,14 +77,6 @@ class Utils:
class TracklistSize:
LARGE = 0
SMALL = 1
HIDDEN = 2
class SortOrder: class SortOrder:
ARTIST = 0 ARTIST = 0
TITLE = 1 TITLE = 1

View file

@ -17,7 +17,6 @@ from gi.repository import Gtk, Gdk, GObject, GdkPixbuf, GLib, Gio
from mcg import client from mcg import client
from mcg.utils import SortOrder from mcg.utils import SortOrder
from mcg.utils import TracklistSize
from mcg.utils import Utils from mcg.utils import Utils
from mcg.zeroconf import ZeroconfProvider from mcg.zeroconf import ZeroconfProvider
@ -83,7 +82,6 @@ class Window():
SETTING_WINDOW_SIZE = 'window-size' SETTING_WINDOW_SIZE = 'window-size'
SETTING_WINDOW_MAXIMIZED = 'window-maximized' SETTING_WINDOW_MAXIMIZED = 'window-maximized'
SETTING_PANEL = 'panel' SETTING_PANEL = 'panel'
SETTING_TRACKLIST_SIZE = 'tracklist-size'
SETTING_ITEM_SIZE = 'item-size' SETTING_ITEM_SIZE = 'item-size'
SETTING_SORT_ORDER = 'sort-order' SETTING_SORT_ORDER = 'sort-order'
SETTING_SORT_TYPE = 'sort-type' SETTING_SORT_TYPE = 'sort-type'
@ -133,7 +131,6 @@ class Window():
if use_keyring: if use_keyring:
self._connection_panel.set_password(keyring.get_password(ZeroconfProvider.KEYRING_SYSTEM, ZeroconfProvider.KEYRING_USERNAME)) self._connection_panel.set_password(keyring.get_password(ZeroconfProvider.KEYRING_SYSTEM, ZeroconfProvider.KEYRING_USERNAME))
self._connection_panel.set_image_dir(self._settings.get_string(Window.SETTING_IMAGE_DIR)) self._connection_panel.set_image_dir(self._settings.get_string(Window.SETTING_IMAGE_DIR))
self._panels[Window._PANEL_INDEX_COVER].set_tracklist_size(self._settings.get_enum(Window.SETTING_TRACKLIST_SIZE))
self._panels[Window._PANEL_INDEX_PLAYLIST].set_item_size(self._settings.get_int(Window.SETTING_ITEM_SIZE)) self._panels[Window._PANEL_INDEX_PLAYLIST].set_item_size(self._settings.get_int(Window.SETTING_ITEM_SIZE))
self._panels[Window._PANEL_INDEX_LIBRARY].set_item_size(self._settings.get_int(Window.SETTING_ITEM_SIZE)) self._panels[Window._PANEL_INDEX_LIBRARY].set_item_size(self._settings.get_int(Window.SETTING_ITEM_SIZE))
self._panels[Window._PANEL_INDEX_LIBRARY].set_sort_order(self._settings.get_enum(Window.SETTING_SORT_ORDER)) self._panels[Window._PANEL_INDEX_LIBRARY].set_sort_order(self._settings.get_enum(Window.SETTING_SORT_ORDER))
@ -147,7 +144,6 @@ class Window():
self._connection_panel.connect('connection-changed', self.on_connection_panel_connection_changed) self._connection_panel.connect('connection-changed', self.on_connection_panel_connection_changed)
self._panels[Window._PANEL_INDEX_SERVER].connect('change-output-device', self.on_server_panel_output_device_changed) self._panels[Window._PANEL_INDEX_SERVER].connect('change-output-device', self.on_server_panel_output_device_changed)
self._panels[Window._PANEL_INDEX_COVER].connect('toggle-fullscreen', self.on_cover_panel_toggle_fullscreen) self._panels[Window._PANEL_INDEX_COVER].connect('toggle-fullscreen', self.on_cover_panel_toggle_fullscreen)
self._panels[Window._PANEL_INDEX_COVER].connect('tracklist-size-changed', self.on_cover_panel_tracklist_size_changed)
self._panels[Window._PANEL_INDEX_COVER].connect('set-song', self.on_cover_panel_set_song) self._panels[Window._PANEL_INDEX_COVER].connect('set-song', self.on_cover_panel_set_song)
self._panels[Window._PANEL_INDEX_PLAYLIST].connect('clear-playlist', self.on_playlist_panel_clear_playlist) self._panels[Window._PANEL_INDEX_PLAYLIST].connect('clear-playlist', self.on_playlist_panel_clear_playlist)
self._panels[Window._PANEL_INDEX_PLAYLIST].connect('remove', self.on_playlist_panel_remove) self._panels[Window._PANEL_INDEX_PLAYLIST].connect('remove', self.on_playlist_panel_remove)
@ -167,7 +163,6 @@ class Window():
self._mcg.connect_signal(client.Client.SIGNAL_LOAD_ALBUMS, self.on_mcg_load_albums) self._mcg.connect_signal(client.Client.SIGNAL_LOAD_ALBUMS, self.on_mcg_load_albums)
self._mcg.connect_signal(client.Client.SIGNAL_ERROR, self.on_mcg_error) self._mcg.connect_signal(client.Client.SIGNAL_ERROR, self.on_mcg_error)
self._settings.connect('changed::'+Window.SETTING_PANEL, self.on_settings_panel_changed) self._settings.connect('changed::'+Window.SETTING_PANEL, self.on_settings_panel_changed)
self._settings.connect('changed::'+Window.SETTING_TRACKLIST_SIZE, self.on_settings_tracklist_size_changed)
self._settings.connect('changed::'+Window.SETTING_ITEM_SIZE, self.on_settings_item_size_changed) self._settings.connect('changed::'+Window.SETTING_ITEM_SIZE, self.on_settings_item_size_changed)
self._settings.connect('changed::'+Window.SETTING_SORT_ORDER, self.on_settings_sort_order_changed) self._settings.connect('changed::'+Window.SETTING_SORT_ORDER, self.on_settings_sort_order_changed)
self._settings.connect('changed::'+Window.SETTING_SORT_TYPE, self.on_settings_sort_type_changed) self._settings.connect('changed::'+Window.SETTING_SORT_TYPE, self.on_settings_sort_type_changed)
@ -315,10 +310,6 @@ class Window():
self._appwindow.unfullscreen() self._appwindow.unfullscreen()
def on_cover_panel_tracklist_size_changed(self, widget, size):
self._settings.set_enum(Window.SETTING_TRACKLIST_SIZE, size)
def on_cover_panel_set_song(self, widget, pos, time): def on_cover_panel_set_song(self, widget, pos, time):
self._mcg.seek(pos, time) self._mcg.seek(pos, time)
@ -422,11 +413,6 @@ class Window():
self._stack.set_visible_child(self._panels[panel_index].get()) self._stack.set_visible_child(self._panels[panel_index].get())
def on_settings_tracklist_size_changed(self, settings, key):
size = settings.get_enum(key)
self._panels[Window._PANEL_INDEX_COVER].set_tracklist_size(size)
def on_settings_item_size_changed(self, settings, key): def on_settings_item_size_changed(self, settings, key):
size = settings.get_int(key) size = settings.get_int(key)
self._panels[Window._PANEL_INDEX_PLAYLIST].set_item_size(size) self._panels[Window._PANEL_INDEX_PLAYLIST].set_item_size(size)
@ -927,7 +913,6 @@ class ServerPanel(GObject.GObject):
class CoverPanel(GObject.GObject): class CoverPanel(GObject.GObject):
__gsignals__ = { __gsignals__ = {
'toggle-fullscreen': (GObject.SIGNAL_RUN_FIRST, None, ()), 'toggle-fullscreen': (GObject.SIGNAL_RUN_FIRST, None, ()),
'tracklist-size-changed': (GObject.SIGNAL_RUN_FIRST, None, (int,)),
'set-song': (GObject.SIGNAL_RUN_FIRST, None, (int, int,)) 'set-song': (GObject.SIGNAL_RUN_FIRST, None, (int, int,))
} }
@ -939,7 +924,6 @@ class CoverPanel(GObject.GObject):
self._cover_pixbuf = None self._cover_pixbuf = None
self._timer = None self._timer = None
self._properties = {} self._properties = {}
self._tracklist_size = TracklistSize.LARGE
self._icon_theme = Gtk.IconTheme.get_default() self._icon_theme = Gtk.IconTheme.get_default()
self._fullscreened = False self._fullscreened = False
@ -949,12 +933,6 @@ class CoverPanel(GObject.GObject):
self._toolbar = builder.get_object('cover-toolbar') self._toolbar = builder.get_object('cover-toolbar')
# Toolbar menu # Toolbar menu
self._toolbar_fullscreen_button = builder.get_object('cover-toolbar-fullscreen') self._toolbar_fullscreen_button = builder.get_object('cover-toolbar-fullscreen')
self._toolbar_tracklist = builder.get_object('cover-toolbar-tracklist')
self._toolbar_tracklist_buttons = {
TracklistSize.LARGE: builder.get_object('cover-toolbar-tracklist-large'),
TracklistSize.SMALL: builder.get_object('cover-toolbar-tracklist-small'),
TracklistSize.HIDDEN: builder.get_object('cover-toolbar-tracklist-hidden')
}
# Cover # Cover
self._cover_stack = builder.get_object('cover-stack') self._cover_stack = builder.get_object('cover-stack')
self._cover_spinner = builder.get_object('cover-spinner') self._cover_spinner = builder.get_object('cover-spinner')
@ -971,7 +949,6 @@ class CoverPanel(GObject.GObject):
self._album_artist_label = builder.get_object('cover-artist') self._album_artist_label = builder.get_object('cover-artist')
# Songs # Songs
self._songs_scale = builder.get_object('cover-songs') self._songs_scale = builder.get_object('cover-songs')
self._songs_scale.override_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1))
# Initial actions # Initial actions
GObject.idle_add(self._enable_tracklist) GObject.idle_add(self._enable_tracklist)
@ -988,7 +965,6 @@ class CoverPanel(GObject.GObject):
def get_signal_handlers(self): def get_signal_handlers(self):
return { return {
'on_cover-toolbar-fullscreen_clicked': self.on_fullscreen_clicked, '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-box_button_press_event': self.on_cover_box_pressed,
'on_cover-scroll_size_allocate': self.on_cover_size_allocate, 'on_cover-scroll_size_allocate': self.on_cover_size_allocate,
'on_cover-songs_button_press_event': self.on_songs_start_change, 'on_cover-songs_button_press_event': self.on_songs_start_change,
@ -1000,12 +976,6 @@ class CoverPanel(GObject.GObject):
self.emit('toggle-fullscreen') self.emit('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): def on_cover_box_pressed(self, widget, event):
if self._current_album and event.type == Gdk.EventType._2BUTTON_PRESS: if self._current_album and event.type == Gdk.EventType._2BUTTON_PRESS:
self.emit('toggle-fullscreen') self.emit('toggle-fullscreen')
@ -1035,36 +1005,13 @@ class CoverPanel(GObject.GObject):
self.emit('set-song', pos, time) self.emit('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): def set_album(self, album):
if album: if album:
# Set labels # Set labels
self._album_title_label.set_label( self._album_title_label.set_label(album.get_title())
GObject.markup_escape_text( self._album_date_label.set_label(', '.join(album.get_dates()))
album.get_title() self._album_artist_label.set_label(', '.join(album.get_albumartists()))
)
)
self._album_date_label.set_markup(
GObject.markup_escape_text(
', '.join(album.get_dates())
)
)
self._album_artist_label.set_markup(
GObject.markup_escape_text(
', '.join(album.get_albumartists())
)
)
# Set tracks # Set tracks
self._set_tracks(album) self._set_tracks(album)
@ -1098,7 +1045,6 @@ class CoverPanel(GObject.GObject):
def set_fullscreen(self, active): def set_fullscreen(self, active):
if active: if active:
self._change_tracklist_size(TracklistSize.HIDDEN, False, False)
self._cover_box.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1)) self._cover_box.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1))
GObject.idle_add(self._resize_image) GObject.idle_add(self._resize_image)
# Hide curser # Hide curser
@ -1108,7 +1054,6 @@ class CoverPanel(GObject.GObject):
self._fullscreened = True self._fullscreened = True
else: else:
self._fullscreened = False self._fullscreened = False
self._change_tracklist_size(self._tracklist_size, False, False)
self._cover_box.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 0)) self._cover_box.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 0))
GObject.idle_add(self._resize_image) GObject.idle_add(self._resize_image)
# Reset cursor # Reset cursor
@ -1145,46 +1090,26 @@ class CoverPanel(GObject.GObject):
cur_length = cur_length + 1 cur_length = cur_length + 1
self._songs_scale.add_mark( self._songs_scale.add_mark(
cur_length, cur_length,
Gtk.PositionType.RIGHT, Gtk.PositionType.RIGHT,
GObject.markup_escape_text( GObject.markup_escape_text(
Utils.create_track_title(track) Utils.create_track_title(track)
) )
) )
length = length + track.get_length() length = length + track.get_length()
self._songs_scale.add_mark(length, Gtk.PositionType.RIGHT, "{0[0]:02d}:{0[1]:02d} minutes".format(divmod(length, 60))) self._songs_scale.add_mark(
length,
Gtk.PositionType.RIGHT,
"{0[0]:02d}:{0[1]:02d} minutes".format(divmod(length, 60))
)
def _enable_tracklist(self): def _enable_tracklist(self):
if self._current_album: if self._current_album:
# enable # enable
self._toolbar_tracklist.set_sensitive(True) self._info_revealer.set_reveal_child(True)
self._change_tracklist_size(self._tracklist_size, False, False)
else: else:
# disable # disable
self._toolbar_tracklist.set_sensitive(False) self._info_revealer.set_reveal_child(False)
self._change_tracklist_size(TracklistSize.HIDDEN, False, False)
def _change_tracklist_size(self, size, notify=True, store=True):
# Set tracklist size
if not self._fullscreened:
if size == TracklistSize.LARGE:
self._panel.set_homogeneous(True)
self._info_revealer.set_reveal_child(True)
elif size == TracklistSize.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.emit('tracklist-size-changed', size)
# Resize image
GObject.idle_add(self._resize_image)
def _playing(self): def _playing(self):