emmental/playlist/sort.py

72 lines
2.6 KiB
Python
Raw Normal View History

# Copyright 2021 (c) Anna Schumaker.
from gi.repository import GObject
from gi.repository import Gtk
class UpDownBox(Gtk.Box):
def __init__(self):
Gtk.Box.__init__(self)
self.append(Gtk.Button.new_from_icon_name("go-up-symbolic"))
self.append(Gtk.Button.new_from_icon_name("go-down-symbolic"))
self.add_css_class("linked")
self.get_first_child().connect("clicked", self.clicked, "move-up")
self.get_last_child().connect("clicked", self.clicked, "move-down")
self.get_first_child().set_sensitive(False)
self.get_last_child().set_sensitive(False)
def set_active(self, active, first, last):
self.get_first_child().set_sensitive(active and not first)
self.get_last_child().set_sensitive(active and not last)
def clicked(self, button, signal):
self.emit(signal)
@GObject.Signal
def move_up(self): pass
@GObject.Signal
def move_down(self): pass
class DirectionButton(Gtk.Button):
def __init__(self):
Gtk.Button.__init__(self, sensitive=False)
self.set_icon_name("view-sort-ascending")
def set_direction(self, direction, active):
sort = "ascending" if direction == "ASC" else "descending"
self.set_icon_name(f"view-sort-{sort}")
self.set_sensitive(active)
class FieldLabel(Gtk.Label):
def __init__(self):
Gtk.Label.__init__(self, sensitive=False, hexpand=True)
def set_field(self, field, active):
self.set_sensitive(active)
self.set_text({ "tracks.number" : "Track Number",
"tracks.title" : "Track Title",
"tracks.length" : "Track Length",
"artists.sort" : "Artist Name",
"albums.sort" : "Album Name",
"discs.subtitle" : "Disc Subtitle",
"albums.release" : "Release Date",
"tracks.playcount" : "Play Count",
"tracks.lastplayed" : "Last Played",
"playlist_map.rowid" : "Order Added"}.get(field, field))
def get_field(self):
text = self.get_text()
return { "Track Number" : "tracks.number",
"Track Title" : "tracks.title",
"Track Length" : "tracks.length",
"Artist Name" : "artists.sort",
"Album Name" : "albums.sort",
"Disc Subtitle" : "discs.subtitle",
"Release Date" : "albums.release",
"Play Count" : "tracks.playcount",
"Last Played" : "tracks.lastplayed",
"Order Added" : "playlist_map.rowid"}.get(text, text)