lib: Create a custom filter Popover
For displaying errors in the regex that the user has entered Implements: Issue #4 (Create common filtering widgets) Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
3ae543b8e7
commit
2753480052
|
@ -1,6 +1,7 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import re
|
||||
from gi.repository import Gtk
|
||||
from . import version
|
||||
|
||||
class Regex(Gtk.Filter):
|
||||
def __init__(self):
|
||||
|
@ -24,10 +25,23 @@ class Regex(Gtk.Filter):
|
|||
self.changed(change)
|
||||
|
||||
|
||||
class Popover(Gtk.Popover):
|
||||
def __init__(self):
|
||||
Gtk.Popover.__init__(self)
|
||||
self.set_child(Gtk.Label())
|
||||
self.set_autohide(False)
|
||||
|
||||
def popup(self, text):
|
||||
self.get_child().set_text(text)
|
||||
if not version.TESTING:
|
||||
super().popup()
|
||||
|
||||
|
||||
class Entry(Gtk.SearchEntry):
|
||||
def __init__(self, filter):
|
||||
Gtk.SearchEntry.__init__(self)
|
||||
self.filter = filter
|
||||
self.popover = Popover()
|
||||
|
||||
self.set_margin_top(5)
|
||||
self.set_margin_bottom(5)
|
||||
|
@ -36,10 +50,16 @@ class Entry(Gtk.SearchEntry):
|
|||
|
||||
self.set_property("placeholder-text", "Type to filter")
|
||||
self.connect("search-changed", self.changed)
|
||||
self.popover.set_parent(self)
|
||||
|
||||
def __del__(self):
|
||||
self.popover.unparent()
|
||||
|
||||
def changed(self, entry):
|
||||
try:
|
||||
self.filter.set_pattern(self.get_text())
|
||||
self.remove_css_class("warning")
|
||||
except:
|
||||
self.popover.popdown()
|
||||
except re.error as e:
|
||||
self.add_css_class("warning")
|
||||
self.popover.popup(str(e))
|
||||
|
|
|
@ -40,18 +40,33 @@ class TestRegex(unittest.TestCase):
|
|||
self.assertFalse(filter.search("cde"))
|
||||
|
||||
|
||||
class TestPopover(unittest.TestCase):
|
||||
def test_init(self):
|
||||
popover = lib.filter.Popover()
|
||||
self.assertIsInstance(popover, Gtk.Popover)
|
||||
self.assertIsInstance(popover.get_child(), Gtk.Label)
|
||||
self.assertFalse(popover.get_autohide())
|
||||
|
||||
def test_popup(self):
|
||||
popover = lib.filter.Popover()
|
||||
popover.popup("test")
|
||||
self.assertEqual(popover.get_child().get_text(), "test")
|
||||
|
||||
|
||||
class TestEntry(unittest.TestCase):
|
||||
def test_init(self):
|
||||
filter = lib.filter.Regex()
|
||||
entry = lib.filter.Entry(filter)
|
||||
|
||||
self.assertIsInstance(entry, Gtk.SearchEntry)
|
||||
self.assertIsInstance(entry.popover, lib.filter.Popover)
|
||||
self.assertEqual(entry.get_property("placeholder-text"), "Type to filter")
|
||||
self.assertEqual(entry.get_margin_top(), 5)
|
||||
self.assertEqual(entry.get_margin_bottom(), 5)
|
||||
self.assertEqual(entry.get_margin_start(), 5)
|
||||
self.assertEqual(entry.get_margin_end(), 5)
|
||||
self.assertEqual(entry.filter, filter)
|
||||
self.assertEqual(entry.popover.get_parent(), entry)
|
||||
|
||||
def test_changed(self):
|
||||
filter = lib.filter.Regex()
|
||||
|
|
Loading…
Reference in New Issue