rind: Parse text entered in the track search entry
And set up a regex pattern that we can use to match tracks later. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
37d621e48d
commit
57d77a5abd
16
emmental.ui
16
emmental.ui
|
@ -951,4 +951,20 @@ audio-volume-medium-symbolic</property>
|
|||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopover" id="track_regex_popover">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="relative_to">track_search</property>
|
||||
<property name="position">bottom</property>
|
||||
<property name="modal">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="track_regex_error">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="tooltip"/>
|
||||
</style>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -5,6 +5,7 @@ from .. import audio
|
|||
from .. import gtk
|
||||
import curds
|
||||
import os
|
||||
import re
|
||||
import unittest
|
||||
from gi.repository import Gdk, GObject, Gtk, Gst
|
||||
|
||||
|
@ -27,8 +28,11 @@ class TestPlaylistView(unittest.TestCase):
|
|||
|
||||
def test_init(self):
|
||||
self.assertIsInstance(view.Entry, Gtk.Entry)
|
||||
self.assertIsInstance(view.Error, Gtk.Label)
|
||||
self.assertIsInstance(view.Loop, Gtk.ToggleButton)
|
||||
self.assertIsInstance(view.Model, model.PlaylistModel)
|
||||
self.assertIsInstance(view.Pattern, re.Pattern)
|
||||
self.assertIsInstance(view.Popover, Gtk.Popover)
|
||||
self.assertIsInstance(view.Random, Gtk.ToggleButton)
|
||||
self.assertIsInstance(view.TreeView, Gtk.TreeView)
|
||||
self.assertIsInstance(view.Selection, Gtk.TreeSelection)
|
||||
|
@ -36,6 +40,7 @@ class TestPlaylistView(unittest.TestCase):
|
|||
|
||||
view.reset()
|
||||
self.assertEqual(view.Model.playlist, curds.playlist.lookup("Collection"))
|
||||
self.assertEqual(view.Pattern.pattern, "")
|
||||
|
||||
def test_show_more_accel(self):
|
||||
signal = GObject.signal_lookup("grab-focus", Gtk.SearchEntry)
|
||||
|
@ -282,3 +287,18 @@ class TestPlaylistView(unittest.TestCase):
|
|||
view.TreeView.emit("button-press-event", event)
|
||||
for track in self.plist.list:
|
||||
self.assertNotIn(track, curds.playlist.UpNext.list)
|
||||
|
||||
def test_filter_error(self):
|
||||
view.Entry.set_text("*v")
|
||||
view.Entry.emit("search-changed")
|
||||
|
||||
self.assertTrue(view.Entry.get_style_context().has_class("warning"))
|
||||
self.assertTrue(view.Popover.is_visible())
|
||||
self.assertEqual(view.Error.get_text(), "Nothing to repeat at position 0")
|
||||
|
||||
view.Entry.set_text("")
|
||||
view.Entry.emit("search-changed")
|
||||
gtk.main_loop(iteration_delay=0.01)
|
||||
|
||||
self.assertFalse(view.Entry.get_style_context().has_class("warning"))
|
||||
self.assertFalse(view.Popover.is_visible())
|
||||
|
|
|
@ -3,11 +3,15 @@ from . import model
|
|||
from .. import audio
|
||||
from .. import gtk
|
||||
import curds
|
||||
import re
|
||||
from gi.repository import Gtk
|
||||
|
||||
Entry = gtk.Builder.get_object("track_search")
|
||||
Error = gtk.Builder.get_object("track_regex_error")
|
||||
Loop = gtk.Builder.get_object("loop_button")
|
||||
Model = None
|
||||
Pattern = re.compile("")
|
||||
Popover = gtk.Builder.get_object("track_regex_popover")
|
||||
Random = gtk.Builder.get_object("random_button")
|
||||
Runtime = gtk.Builder.get_object("runtime")
|
||||
TreeView = gtk.Builder.get_object("playlist_treeview")
|
||||
|
@ -76,6 +80,20 @@ for i, column in enumerate(TreeView.get_columns()):
|
|||
column.connect("clicked", on_column_clicked, i)
|
||||
|
||||
|
||||
def on_search_changed(entry):
|
||||
global Pattern
|
||||
try:
|
||||
Pattern = re.compile(entry.get_text(), re.I)
|
||||
Entry.get_style_context().remove_class("warning")
|
||||
Popover.popdown()
|
||||
except re.error as e:
|
||||
Entry.get_style_context().add_class("warning")
|
||||
Error.set_text(str(e).capitalize())
|
||||
Popover.popup()
|
||||
|
||||
Entry.connect("search-changed", on_search_changed)
|
||||
|
||||
|
||||
def on_add_track(plist, track, index):
|
||||
if plist == Model.playlist:
|
||||
Model.row_inserted(Gtk.TreePath(0), Gtk.TreeIter())
|
||||
|
|
Loading…
Reference in New Issue
Block a user