64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
# 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()
|