emmental/playlist/column.py

46 lines
1.5 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
from lib import settings
from gi.repository import Gtk, GLib
import audio
class Column(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