# 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()