nowplaying: Create a custom Label for displaying tags
This Label supports setting a prefix that is applied to the displayed string and setting a font size in pixels. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
318b2564ce
commit
c899c15c42
|
@ -6,6 +6,7 @@ import sqlite3
|
||||||
import gi
|
import gi
|
||||||
import xdg.BaseDirectory
|
import xdg.BaseDirectory
|
||||||
|
|
||||||
|
gi.require_version("Pango", "1.0")
|
||||||
gi.require_version("Gdk", "4.0")
|
gi.require_version("Gdk", "4.0")
|
||||||
gi.require_version("Gtk", "4.0")
|
gi.require_version("Gtk", "4.0")
|
||||||
gi.require_version("Adw", "1")
|
gi.require_version("Adw", "1")
|
||||||
|
@ -56,6 +57,9 @@ def print_versions():
|
||||||
__print_version("GStreamer", gi.repository.Gst.version().major,
|
__print_version("GStreamer", gi.repository.Gst.version().major,
|
||||||
gi.repository.Gst.version().minor,
|
gi.repository.Gst.version().minor,
|
||||||
gi.repository.Gst.version().micro)
|
gi.repository.Gst.version().micro)
|
||||||
|
__print_version("Pango", gi.repository.Pango.VERSION_MAJOR,
|
||||||
|
gi.repository.Pango.VERSION_MINOR,
|
||||||
|
gi.repository.Pango.VERSION_MICRO)
|
||||||
__print_version("SQLite", sqlite3.sqlite_version_info[0],
|
__print_version("SQLite", sqlite3.sqlite_version_info[0],
|
||||||
sqlite3.sqlite_version_info[1],
|
sqlite3.sqlite_version_info[1],
|
||||||
sqlite3.sqlite_version_info[2])
|
sqlite3.sqlite_version_info[2])
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
# Copyright 2022 (c) Anna Schumaker.
|
||||||
|
"""A Gtk.Label set up for displaying nowplaying tags."""
|
||||||
|
from gi.repository import GObject
|
||||||
|
from gi.repository import Gtk
|
||||||
|
from gi.repository import Pango
|
||||||
|
|
||||||
|
|
||||||
|
class Label(Gtk.Label):
|
||||||
|
"""A Gtk.Label wrapped in a ScrolledWindow for displaying tags."""
|
||||||
|
|
||||||
|
prefix = GObject.Property(type=str)
|
||||||
|
size = GObject.Property(type=int)
|
||||||
|
|
||||||
|
def __init__(self, prefix="", **kwargs):
|
||||||
|
"""Initialize our Label."""
|
||||||
|
super().__init__(prefix=prefix, xalign=0, **kwargs)
|
||||||
|
self.connect("notify::size", self.__set_size)
|
||||||
|
|
||||||
|
@GObject.Property(type=str)
|
||||||
|
def text(self) -> str:
|
||||||
|
"""Get the text set to the label (without any prefix)."""
|
||||||
|
return self.get_text()[len(self.prefix):]
|
||||||
|
|
||||||
|
@text.setter
|
||||||
|
def text(self, text: str) -> None:
|
||||||
|
"""Set text to the label (adding any prefix)."""
|
||||||
|
text = f"{self.prefix}{text}" if text else ""
|
||||||
|
self.set_text(text)
|
||||||
|
|
||||||
|
def __set_size(self, label: Gtk.Label, param) -> None:
|
||||||
|
# Note that we have to create a new Pango.AttrList here because
|
||||||
|
# Gtk.Label.get_attributes() returns a COPY of the AttrList, so
|
||||||
|
# any modifications won't take effect.
|
||||||
|
attrlist = Pango.AttrList.new()
|
||||||
|
attrlist.insert(Pango.attr_size_new_absolute(self.size * Pango.SCALE))
|
||||||
|
self.set_attributes(attrlist)
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Copyright 2022 (c) Anna Schumaker.
|
||||||
|
"""Tests our modified Gtk.Label."""
|
||||||
|
import unittest
|
||||||
|
import emmental.nowplaying.label
|
||||||
|
from gi.repository import GLib
|
||||||
|
from gi.repository import Gtk
|
||||||
|
from gi.repository import Pango
|
||||||
|
|
||||||
|
|
||||||
|
class TestLabel(unittest.TestCase):
|
||||||
|
"""Test case for our custom Label."""
|
||||||
|
|
||||||
|
def setUp(self, prefix=""):
|
||||||
|
"""Set up common variables."""
|
||||||
|
self.label = emmental.nowplaying.label.Label(prefix=prefix)
|
||||||
|
|
||||||
|
def test_init(self):
|
||||||
|
"""Test that the label is configured correctly."""
|
||||||
|
self.assertIsInstance(self.label, Gtk.Label)
|
||||||
|
|
||||||
|
self.assertIsNone(self.label.get_attributes())
|
||||||
|
self.assertEqual(self.label.get_xalign(), 0)
|
||||||
|
|
||||||
|
label = emmental.nowplaying.label.Label(visible=False)
|
||||||
|
self.assertFalse(label.get_visible())
|
||||||
|
|
||||||
|
def test_set_text(self):
|
||||||
|
"""Test setting label text."""
|
||||||
|
self.assertEqual(self.label.text, "")
|
||||||
|
self.assertEqual(self.label.get_text(), "")
|
||||||
|
|
||||||
|
for text in ["Test Text", ""]:
|
||||||
|
with self.subTest(text=text):
|
||||||
|
self.label.text = text
|
||||||
|
self.assertEqual(self.label.text, text)
|
||||||
|
self.assertEqual(self.label.get_text(), text)
|
||||||
|
|
||||||
|
def test_prefix(self):
|
||||||
|
"""Test the prefix property."""
|
||||||
|
self.setUp(prefix="Prefix ")
|
||||||
|
self.assertEqual(self.label.prefix, "Prefix ")
|
||||||
|
|
||||||
|
self.assertEqual(self.label.text, "")
|
||||||
|
self.assertEqual(self.label.get_text(), "")
|
||||||
|
|
||||||
|
for text in ["Test Text", ""]:
|
||||||
|
with self.subTest(text=text):
|
||||||
|
self.label.text = text
|
||||||
|
self.assertEqual(self.label.text, text)
|
||||||
|
self.assertEqual(self.label.get_text(),
|
||||||
|
"Prefix Test Text" if len(text) else "")
|
||||||
|
|
||||||
|
def test_size(self):
|
||||||
|
"""Test the size property."""
|
||||||
|
self.assertEqual(self.label.size, 0)
|
||||||
|
expected = f"0 {GLib.MAXUINT} absolute-size"
|
||||||
|
|
||||||
|
for size in [42, 20]:
|
||||||
|
with self.subTest(size=size):
|
||||||
|
self.label.size = size
|
||||||
|
self.assertEqual(self.label.get_attributes().to_string(),
|
||||||
|
f"{expected} {size * Pango.SCALE}")
|
|
@ -15,6 +15,7 @@ class TestGSetup(unittest.TestCase):
|
||||||
self.assertEqual(gi.get_required_version("Gtk"), "4.0")
|
self.assertEqual(gi.get_required_version("Gtk"), "4.0")
|
||||||
self.assertEqual(gi.get_required_version("Adw"), "1")
|
self.assertEqual(gi.get_required_version("Adw"), "1")
|
||||||
self.assertEqual(gi.get_required_version("Gst"), "1.0")
|
self.assertEqual(gi.get_required_version("Gst"), "1.0")
|
||||||
|
self.assertEqual(gi.get_required_version("Pango"), "1.0")
|
||||||
|
|
||||||
def test_adw(self):
|
def test_adw(self):
|
||||||
"""Check that libadwaita style has been set."""
|
"""Check that libadwaita style has been set."""
|
||||||
|
|
Loading…
Reference in New Issue