emmental/playlist/column.py

96 lines
3.1 KiB
Python
Raw Normal View History

# Copyright 2021 (c) Anna Schumaker.
import audio
import lib
from gi.repository import Gtk, GLib
from lib import settings
class LabelFactory(Gtk.SignalListItemFactory):
def __init__(self, xalign):
Gtk.SignalListItemFactory.__init__(self)
self.connect("setup", self.on_setup)
self.connect("bind", self.on_bind)
self.connect("unbind", self.on_unbind)
self.connect("teardown", self.on_teardown)
self.xalign = xalign
def get_track_text(self, track):
raise NotImplementedError
def on_setup(self, factory, listitem):
listitem.set_child(Gtk.Label(xalign=self.xalign))
def on_bind(self, factory, listitem):
text = self.get_track_text(listitem.get_item())
listitem.get_child().set_text(text)
def on_unbind(self, factory, listitem):
listitem.get_child().set_text("")
def on_teardown(self, factory, listitem):
listitem.set_child(None)
class TracknoFactory(LabelFactory):
def __init__(self): LabelFactory.__init__(self, xalign=1)
def get_track_text(self, track): return f"{track.disc.number}-{track.number:02}"
class Column(Gtk.ColumnViewColumn):
def __init__(self, title, factory, width=-1, **kwargs):
Gtk.ColumnViewColumn.__init__(self, title=title, **kwargs)
self.set_factory(factory)
self.set_resizable(True)
lib.settings.initialize(f"column.{title}", width)
self.set_fixed_width(settings.get_int(f"column.{title}"))
self.connect("notify::fixed-width", self.width_changed)
def width_changed(self, col, param):
lib.settings.set(f"column.{self.get_title()}", self.get_fixed_width())
def TracknoColumn(): return Column("#", TracknoFactory())
class OldColumn(Gtk.ColumnViewColumn):
def __init__(self, title, field, width=-1, expand=False, align=0):
Gtk.ColumnViewColumn.__init__(self)
self.field = field
self.align = align
self.factory = Gtk.SignalListItemFactory()
self.factory.connect("bind", self.on_bind)
self.factory.connect("setup", self.on_setup)
self.factory.connect("teardown", self.on_teardown)
self.factory.connect("unbind", self.on_unbind)
settings.initialize(f"column.{title}", width)
self.set_factory(self.factory)
self.set_fixed_width(settings.get_int(f"column.{title}"))
self.set_expand(expand)
self.set_resizable(True)
self.set_title(title)
self.connect("notify::fixed-width", self.on_width_changed)
def on_width_changed(self, col, param):
settings.set(f"column.{self.get_title()}", self.get_fixed_width())
def on_bind(self, factory, listitem):
track = listitem.get_item()
text = GLib.markup_escape_text(track[self.field])
if track == audio.Player.track:
text = f"<b>{text}</b>"
listitem.get_child().set_markup(text)
listitem.get_child().set_xalign(self.align)
def on_setup(self, factory, listitem):
listitem.set_child(Gtk.Label())
def on_teardown(self, factory, listitem):
listitem.set_child(None)
def on_unbind(self, factory, listitem):
pass