curds: Replace str(node) with node.get_markup()

This lets us save str(node) to be used for something else, and it gives
playlists a chance to escape their names before returning to the UI

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-12-12 10:57:54 -05:00
parent 0e018473f7
commit 3a939f92e1
8 changed files with 31 additions and 38 deletions

View File

@ -28,9 +28,6 @@ class PlaylistNode(tree.ETree):
nodes[id(self)] = self
self.__init_common__()
def __str__(self):
return f"<big>{self.name}</big>"
def append_child(self, child):
with self.lock:
index = len(self.children)

View File

@ -4,6 +4,7 @@ from .. import notify
from .. import sort
from .. import trak
import random
from gi.repository import GLib
class Playlist(node.PlaylistNode):
def __init__(self, name, icon="", sort=[], can_loop=True, can_random=True):
@ -44,10 +45,6 @@ class Playlist(node.PlaylistNode):
self.random = state["random"]
self.visible = False
def __str__(self):
l = len(self.list)
return f"{self.name}\n{l} Track{'s' if l != 1 else ''}"
def add(self, track):
with self.lock:
if track == None:
@ -73,6 +70,11 @@ class Playlist(node.PlaylistNode):
with self.lock:
return track in self.list
def get_markup(self):
t = GLib.markup_escape_text(self.name)
l = len(self.list)
return f"{t}\n{l} Track{'s' if l != 1 else ''}"
def index(self, track):
with self.lock:
if track != None:

View File

@ -24,7 +24,6 @@ class TestPlaylistNode(unittest.TestCase):
n = node.PlaylistNode("Test Node", "test-icon")
self.assertEqual(n.icon, "test-icon")
self.assertEqual(n.name, "Test Node")
self.assertEqual(str(n), "<big>Test Node</big>")
self.assertEqual(node.nodes.get(id(n)), n)
def test_node_append_child(self):

View File

@ -95,13 +95,6 @@ class TestPlaylist(unittest.TestCase):
self.assertTrue( self.plist.random)
self.assertFalse(self.plist.visible)
def test_playlist__str__(self):
self.assertEqual(str(self.plist), "Test Playlist\n0 Tracks")
self.add_tracks([1])
self.assertEqual(str(self.plist), "Test Playlist\n1 Track")
self.add_tracks([2])
self.assertEqual(str(self.plist), "Test Playlist\n2 Tracks")
def test_playlist_add_append(self):
tracks = self.add_tracks(range(1, 6))
@ -140,6 +133,15 @@ class TestPlaylist(unittest.TestCase):
track = trak.lookup(os.path.join(test_album, f"10 - Test Track 10.ogg"))
self.assertFalse(self.plist.contains(track))
def test_playlist_get_markup(self):
self.assertEqual(self.plist.get_markup(), "Test Playlist\n0 Tracks")
self.add_tracks([1])
self.assertEqual(self.plist.get_markup(), "Test Playlist\n1 Track")
self.add_tracks([2])
self.assertEqual(self.plist.get_markup(), "Test Playlist\n2 Tracks")
self.plist.name = "Test & Playlist"
self.assertEqual(self.plist.get_markup(), "Test &amp; Playlist\n2 Tracks")
def test_playlist_index(self):
tracks = self.add_tracks(range(9, 0, -1))
for i, track in enumerate(tracks):

View File

@ -90,9 +90,9 @@ class TestETree(unittest.TestCase):
self.assertEqual(root.find_child("D", "icon"), d)
self.assertEqual(root.children, [ a, b, c, d ])
def test_etree_get_name(self):
def test_etree_get_markup(self):
etree = tree.ETree("Test Tree", "test-icon")
self.assertEqual(etree.get_name(), "<big>Test Tree</big>")
self.assertEqual(etree.get_markup(), "<big>Test Tree</big>")
def test_etree_get_path(self):
root = tree.ETree()

View File

@ -58,7 +58,7 @@ class ETree:
return node
return self.__insert__(index, self.alloc_child(name, icon))
def get_name(self):
def get_markup(self):
return f"<big>{self.name}</big>"
def get_path(self):

View File

@ -32,30 +32,23 @@ class NodeTreeModel(GObject.GObject, Gtk.TreeModel):
plist = self.iter_playlist(iter)
return Gtk.TreePath(plist.get_path())
def do_get_node_value(self, plist, column):
if column == 1:
return str(plist)
elif column == 2:
area = Treeview.get_cell_area(Gtk.TreePath(0), Treeview.get_column(1))
self.height = max(self.height, area.height)
return self.height
def do_get_playlist_value(self, plist, column):
if column == 1:
text = GLib.markup_escape_text(str(plist))
if plist == curds.playlist.current():
return f"<b>{text}</b>"
return text
elif column == 2:
return -1
def do_get_node_height(self, plist, column):
area = Treeview.get_cell_area(Gtk.TreePath(0), Treeview.get_column(1))
self.height = max(self.height, area.height)
return self.height
def do_get_value(self, iter, column):
plist = self.iter_playlist(iter)
plist = self.iter_playlist(iter)
if column == 0:
return plist.icon
elif column == 1:
if plist == curds.playlist.current():
return f"<b>{plist.get_markup()}</b>"
return plist.get_markup()
if isinstance(plist, curds.Playlist):
return self.do_get_playlist_value(plist, column)
return self.do_get_node_value(plist, column)
return -1
return self.do_get_node_height(plist, column)
def do_iter_children(self, parent):
return self.do_iter_nth_child(parent, 0)

View File

@ -63,7 +63,7 @@ class TestNodeTreeModel(unittest.TestCase):
for child in curds.playlist.Root.walk():
iter.user_data = id(child)
text = str(child)
text = child.get_markup()
height = rect.height
if child == curds.playlist.Root.current[0]:
text = f"<b>{text}</b>"