73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import audio
|
|
import db
|
|
import lib
|
|
from gi.repository import GObject
|
|
from gi.repository import Gtk
|
|
from . import model
|
|
from . import view
|
|
from . import widgets
|
|
|
|
class Stack(Gtk.Stack):
|
|
def __init__(self):
|
|
Gtk.Stack.__init__(self)
|
|
self.set_transition_type(Gtk.StackTransitionType.OVER_UP_DOWN)
|
|
self.set_vexpand(True)
|
|
|
|
self.add_page(db.user.Table, "Playlists", "audio-x-generic")
|
|
self.add_page(db.artist.Table, "Artists", "avatar-default-symbolic")
|
|
self.add_page(db.genre.Table, "Genres", "emblem-generic")
|
|
self.add_page(db.decade.Table, "Decades", "x-office-calendar")
|
|
self.add_page(db.library.Table, "Libraries", "folder-music")
|
|
|
|
lib.settings.initialize("sidebar.page", "Playlists")
|
|
self.set_visible_child_name(lib.settings.get("sidebar.page"))
|
|
self.connect("notify::visible-child-name", self.change_page)
|
|
|
|
def add_page(self, table, name, icon):
|
|
window = view.TableWindow(table)
|
|
self.add_named(window, name).set_icon_name(icon)
|
|
window.get_selection().connect("selection-changed", self.selection_changed)
|
|
|
|
def change_page(self, stack, param):
|
|
lib.settings.set("sidebar.page", self.get_visible_child_name())
|
|
self.emit("playlist-changed", self.get_visible_child().get_selected_playlist())
|
|
|
|
def selection_changed(self, selection, pos, n_items):
|
|
self.emit("playlist-changed", selection.get_selected_playlist())
|
|
|
|
@GObject.Signal(arg_types=(db.playlist.Playlist,))
|
|
def playlist_changed(self, plist): pass
|
|
|
|
|
|
class Switcher(Gtk.StackSwitcher):
|
|
def __init__(self):
|
|
Gtk.StackSwitcher.__init__(self)
|
|
self.add_css_class("large-icons")
|
|
self.add_css_class("osd")
|
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
|
self.set_stack(Stack())
|
|
|
|
|
|
class Box(Gtk.Box):
|
|
def __init__(self, stack):
|
|
Gtk.Box.__init__(self)
|
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
|
|
|
self.append(audio.Artwork())
|
|
self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
|
|
self.append(lib.filter.Entry(model.TableFilter))
|
|
self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
|
|
self.append(stack)
|
|
self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
|
|
self.append(widgets.AddUpdateBox())
|
|
self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
|
|
self.append(widgets.ProgressBar())
|
|
|
|
def get_add_update_button(self):
|
|
child = self.get_first_child()
|
|
while child:
|
|
if isinstance(child, widgets.AddUpdateBox):
|
|
return child.get_first_child()
|
|
child = child.get_next_sibling()
|