# Copyright 2021 (c) Anna Schumaker. import db import audio from gi.repository import Gdk from gi.repository import Gtk from . import footer from . import header from . import view class Panel(Gtk.Box): def __init__(self): Gtk.Box.__init__(self) self.set_orientation(Gtk.Orientation.VERTICAL) self.header = header.Header() self.window = view.PlaylistWindow() self.footer = footer.Footer(self.window.get_filter_model()) self.append(self.header) self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL)) self.append(self.window) self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL)) self.append(self.footer) keypress = Gtk.EventControllerKey.new() keypress.connect("key-pressed", self.key_pressed) self.add_controller(keypress) self.header.get_jump_button().connect("clicked", self.jump_clicked) def get_playlist(self): return self.window.get_playlist() def set_playlist(self, plist): if plist: self.header.set_playlist(plist) self.window.set_playlist(plist) def key_pressed(self, event, keyval, keycode, state): match Gdk.keyval_name(keyval): case "Escape": self.window.clear_selection() case "Delete": playlist = self.get_playlist() if not (playlist and playlist.can_add_remove_tracks()): return False for track in self.selected_tracks(): playlist.remove_track(track) case "f": self.add_selected_tracks(db.user.Table.find("Favorites")) case "q": self.add_selected_tracks(db.user.Table.find("Queued Tracks")) case _: return False return True def jump_clicked(self, button): view = self.window.get_child() view.track_changed(audio.Player, None, audio.Player.track) def selected_tracks(self): for track in self.window.selected_tracks(): yield track def add_selected_tracks(self, plist): for track in self.selected_tracks(): plist.add_track(track) if plist == db.user.Table.find("Queued Tracks"): audio.Player.set_playlist(plist) db.sql.commit()