header: Create a Settings Adw.ActionRow
This contains all the steps needed to open the settings editor window. I move it into the "Menu" popover list since it's not a common action, so it can be hidden from the main UI. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
a944af7f3e
commit
c49a23b046
|
@ -55,6 +55,10 @@ class Header(Gtk.HeaderBar):
|
||||||
self._menu_box.add_css_class("boxed-list")
|
self._menu_box.add_css_class("boxed-list")
|
||||||
self._menu_box.append(self._open)
|
self._menu_box.append(self._open)
|
||||||
|
|
||||||
|
if __debug__:
|
||||||
|
self._settings = settings.Row(sql)
|
||||||
|
self._menu_box.append(self._settings)
|
||||||
|
|
||||||
icon = "open-menu-symbolic"
|
icon = "open-menu-symbolic"
|
||||||
self._menu_button = buttons.PopoverButton(popover_child=self._menu_box,
|
self._menu_button = buttons.PopoverButton(popover_child=self._menu_box,
|
||||||
icon_name=icon)
|
icon_name=icon)
|
||||||
|
@ -95,12 +99,6 @@ class Header(Gtk.HeaderBar):
|
||||||
GObject.BindingFlags.BIDIRECTIONAL)
|
GObject.BindingFlags.BIDIRECTIONAL)
|
||||||
|
|
||||||
self.pack_start(self._show_sidebar)
|
self.pack_start(self._show_sidebar)
|
||||||
if __debug__:
|
|
||||||
self._window = settings.Window(sql)
|
|
||||||
self._settings = Gtk.Button(icon_name="settings-symbolic",
|
|
||||||
tooltip_text="open settings editor")
|
|
||||||
self._settings.connect("clicked", self.__run_settings)
|
|
||||||
self.pack_start(self._settings)
|
|
||||||
self.pack_start(self._menu_button)
|
self.pack_start(self._menu_button)
|
||||||
|
|
||||||
self.pack_end(self._vol_button)
|
self.pack_end(self._vol_button)
|
||||||
|
|
|
@ -64,3 +64,21 @@ class Window(Adw.Window):
|
||||||
|
|
||||||
def __filter(self, entry: entry.Filter) -> None:
|
def __filter(self, entry: entry.Filter) -> None:
|
||||||
self._selection.get_model().filter(entry.get_query())
|
self._selection.get_model().filter(entry.get_query())
|
||||||
|
|
||||||
|
|
||||||
|
class Row(Adw.ActionRow):
|
||||||
|
"""An Adw.ActionRow for opening the Settings Window."""
|
||||||
|
|
||||||
|
def __init__(self, sql: db.Connection):
|
||||||
|
"""Initialize our settings ActionRow."""
|
||||||
|
super().__init__(activatable=True, title="Edit Settings",
|
||||||
|
subtitle="Open the settings editor (debug only)")
|
||||||
|
self._prefix = Gtk.Image(icon_name="settings-symbolic")
|
||||||
|
self._window = Window(sql)
|
||||||
|
|
||||||
|
self.connect("activated", self.__on_activated)
|
||||||
|
self.add_prefix(self._prefix)
|
||||||
|
|
||||||
|
def __on_activated(self, row: Adw.ActionRow) -> None:
|
||||||
|
self.get_ancestor(Gtk.Popover).popdown()
|
||||||
|
self._window.present()
|
||||||
|
|
|
@ -63,21 +63,11 @@ class TestHeader(tests.util.TestCase):
|
||||||
signal.assert_called_with(self.header, pathlib.Path("/a/b/c/1.ogg"))
|
signal.assert_called_with(self.header, pathlib.Path("/a/b/c/1.ogg"))
|
||||||
|
|
||||||
def test_settings(self):
|
def test_settings(self):
|
||||||
"""Check that the Settings window is set up correctly."""
|
"""Check that the SettingsRow is set up correctly."""
|
||||||
self.assertIsInstance(self.header._settings, Gtk.Button)
|
self.assertIsInstance(self.header._settings,
|
||||||
self.assertIsInstance(self.header._window,
|
emmental.header.settings.Row)
|
||||||
emmental.header.settings.Window)
|
self.assertEqual(self.header._menu_box.get_row_at_index(1),
|
||||||
|
self.header._settings)
|
||||||
self.assertEqual(self.header.sql, self.sql)
|
|
||||||
self.assertEqual(self.header._settings.get_icon_name(),
|
|
||||||
"settings-symbolic")
|
|
||||||
self.assertEqual(self.header._settings.get_tooltip_text(),
|
|
||||||
"open settings editor")
|
|
||||||
|
|
||||||
with unittest.mock.patch.object(self.header._window,
|
|
||||||
"present") as mock_present:
|
|
||||||
self.header._settings.emit("clicked")
|
|
||||||
mock_present.assert_called()
|
|
||||||
|
|
||||||
def test_menu_button(self):
|
def test_menu_button(self):
|
||||||
"""Check that the menu popover button is set up properly."""
|
"""Check that the menu popover button is set up properly."""
|
||||||
|
|
|
@ -141,3 +141,39 @@ class TestWindow(tests.util.TestCase):
|
||||||
emmental.header.settings.ValueRow)
|
emmental.header.settings.ValueRow)
|
||||||
self.assertEqual(columns[1].get_title(), "Value")
|
self.assertEqual(columns[1].get_title(), "Value")
|
||||||
self.assertEqual(columns[1].get_fixed_width(), 100)
|
self.assertEqual(columns[1].get_fixed_width(), 100)
|
||||||
|
|
||||||
|
|
||||||
|
class TestSettingsRow(tests.util.TestCase):
|
||||||
|
"""Test the SettingsRow."""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
"""Set up common variables."""
|
||||||
|
super().setUp()
|
||||||
|
self.row = emmental.header.settings.Row(sql=self.sql)
|
||||||
|
|
||||||
|
def test_init(self):
|
||||||
|
"""Test that the SettingsRow was set up properly."""
|
||||||
|
self.assertIsInstance(self.row, Adw.ActionRow)
|
||||||
|
self.assertIsInstance(self.row._prefix, Gtk.Image)
|
||||||
|
self.assertIsInstance(self.row._window,
|
||||||
|
emmental.header.settings.Window)
|
||||||
|
|
||||||
|
self.assertEqual(self.row.props.title, "Edit Settings")
|
||||||
|
self.assertEqual(self.row.props.subtitle,
|
||||||
|
"Open the settings editor (debug only)")
|
||||||
|
self.assertTrue(self.row.props.activatable)
|
||||||
|
|
||||||
|
self.assertEqual(self.row._prefix.props.icon_name, "settings-symbolic")
|
||||||
|
|
||||||
|
def test_activate(self):
|
||||||
|
"""Test activating a SettingsRow."""
|
||||||
|
listbox = Gtk.ListBox()
|
||||||
|
popover = Gtk.Popover(child=listbox)
|
||||||
|
listbox.append(self.row)
|
||||||
|
|
||||||
|
with unittest.mock.patch.object(popover, "popdown") as mock_popdown:
|
||||||
|
with unittest.mock.patch.object(self.row._window,
|
||||||
|
"present") as mock_present:
|
||||||
|
self.row.emit("activated")
|
||||||
|
mock_popdown.assert_called()
|
||||||
|
mock_present.assert_called()
|
||||||
|
|
Loading…
Reference in New Issue