header: Add a BackgroundRow to the popover menu
And wire up the properties so we can save the user's current setting. Implements: #50 ("Background Music Mode") Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
deea9caa37
commit
0e40e6a4e8
|
@ -129,6 +129,8 @@ class Application(Adw.Application):
|
|||
hdr = header.Header(sql=self.db, title=VERSION_STRING)
|
||||
hdr.bind_property("volume", self.player, "volume")
|
||||
for (setting, property) in [("audio.volume", "volume"),
|
||||
("audio.background.enabled", "bg-enabled"),
|
||||
("audio.background.volume", "bg-volume"),
|
||||
("audio.replaygain.enabled", "rg-enabled"),
|
||||
("audio.replaygain.mode", "rg-mode")]:
|
||||
self.db.settings.bind_setting(setting, hdr, property)
|
||||
|
|
|
@ -33,6 +33,8 @@ class Header(Gtk.HeaderBar):
|
|||
sql = GObject.Property(type=db.Connection)
|
||||
title = GObject.Property(type=str)
|
||||
subtitle = GObject.Property(type=str)
|
||||
bg_enabled = GObject.Property(type=bool, default=False)
|
||||
bg_volume = GObject.Property(type=float, default=0.5)
|
||||
rg_enabled = GObject.Property(type=bool, default=False)
|
||||
rg_mode = GObject.Property(type=str, default="auto")
|
||||
volume = GObject.Property(type=float, default=1.0)
|
||||
|
@ -44,11 +46,13 @@ class Header(Gtk.HeaderBar):
|
|||
self._title = Adw.WindowTitle(title=self.title, subtitle=self.subtitle,
|
||||
tooltip_text=gsetup.env_string())
|
||||
self._volume = volume.VolumeRow()
|
||||
self._background = volume.BackgroundRow()
|
||||
self._replaygain = replaygain.ReplayGainRow()
|
||||
|
||||
self._box = Gtk.ListBox(selection_mode=Gtk.SelectionMode.NONE)
|
||||
self._box.add_css_class("boxed-list")
|
||||
self._box.append(self._volume)
|
||||
self._box.append(self._background)
|
||||
self._box.append(self._replaygain)
|
||||
|
||||
icon = _volume_icon(self.volume)
|
||||
|
@ -57,6 +61,10 @@ class Header(Gtk.HeaderBar):
|
|||
|
||||
self.bind_property("title", self._title, "title")
|
||||
self.bind_property("subtitle", self._title, "subtitle")
|
||||
self.bind_property("bg-enabled", self._background, "enabled",
|
||||
GObject.BindingFlags.BIDIRECTIONAL)
|
||||
self.bind_property("bg-volume", self._background, "volume",
|
||||
GObject.BindingFlags.BIDIRECTIONAL)
|
||||
self.bind_property("rg-enabled", self._replaygain, "enabled",
|
||||
GObject.BindingFlags.BIDIRECTIONAL)
|
||||
self.bind_property("rg-mode", self._replaygain, "mode",
|
||||
|
|
|
@ -85,6 +85,23 @@ class TestHeader(tests.util.TestCase):
|
|||
self.assertEqual(self.header._button.get_tooltip_text(),
|
||||
f"volume: {i*10}%\nnormalizing: off")
|
||||
|
||||
def test_background_listening(self):
|
||||
"""Test the background listening mode."""
|
||||
self.assertIsInstance(self.header._background,
|
||||
emmental.header.volume.BackgroundRow)
|
||||
|
||||
self.assertFalse(self.header.bg_enabled)
|
||||
self.header.bg_enabled = True
|
||||
self.assertTrue(self.header._background.enabled)
|
||||
self.header._background.enabled = False
|
||||
self.assertFalse(self.header.bg_enabled)
|
||||
|
||||
self.assertEqual(self.header.bg_volume, 0.5)
|
||||
self.header.bg_volume = 0.75
|
||||
self.assertEqual(self.header._background.volume, 0.75)
|
||||
self.header._background.volume = 0.25
|
||||
self.assertEqual(self.header.bg_volume, 0.25)
|
||||
|
||||
def test_replaygain(self):
|
||||
"""Test that we can configure ReplayGain as expected."""
|
||||
self.assertIsInstance(self.header._replaygain,
|
||||
|
@ -124,4 +141,6 @@ class TestHeader(tests.util.TestCase):
|
|||
self.assertEqual(self.header._box.get_row_at_index(0),
|
||||
self.header._volume)
|
||||
self.assertEqual(self.header._box.get_row_at_index(1),
|
||||
self.header._background)
|
||||
self.assertEqual(self.header._box.get_row_at_index(2),
|
||||
self.header._replaygain)
|
||||
|
|
|
@ -51,6 +51,18 @@ class TestSettings(unittest.TestCase):
|
|||
self.assertEqual(self.app.build_header().volume, 0.5)
|
||||
self.assertEqual(self.player.volume, 0.5)
|
||||
|
||||
def test_save_background_mode(self, mock_stdout: io.StringIO):
|
||||
"""Check saving and loading background mode from the database."""
|
||||
self.assertFalse(self.settings["audio.background.enabled"])
|
||||
self.assertEqual(self.settings["audio.background.volume"], 0.5)
|
||||
|
||||
self.win.header.bg_enabled = True
|
||||
self.win.header.bg_volume = 0.75
|
||||
|
||||
win = self.app.build_window()
|
||||
self.assertTrue(win.header.bg_enabled)
|
||||
self.assertEqual(win.header.bg_volume, 0.75)
|
||||
|
||||
def test_save_replaygain(self, mock_stdout: io.StringIO):
|
||||
"""Check saving and loading replaygain state from the database."""
|
||||
self.assertFalse(self.settings["audio.replaygain.enabled"])
|
||||
|
|
Loading…
Reference in New Issue