diff --git a/emmental/header/__init__.py b/emmental/header/__init__.py index 25528a0..1248d0d 100644 --- a/emmental/header/__init__.py +++ b/emmental/header/__init__.py @@ -34,6 +34,7 @@ class Header(Gtk.HeaderBar): sql = GObject.Property(type=db.Connection) title = GObject.Property(type=str) subtitle = GObject.Property(type=str) + show_sidebar = GObject.Property(type=bool, default=False) 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) @@ -43,6 +44,8 @@ class Header(Gtk.HeaderBar): def __init__(self, sql: db.Connection, title: str): """Initialize the HeaderBar.""" super().__init__(title=title, subtitle=SUBTITLE, sql=sql) + icon = "sidebar-show-symbolic" + self._show_sidebar = Gtk.ToggleButton(icon_name=icon, has_frame=False) self._open = open.Button() self._title = Adw.WindowTitle(title=self.title, subtitle=self.subtitle, tooltip_text=gsetup.env_string()) @@ -68,6 +71,8 @@ class Header(Gtk.HeaderBar): self.bind_property("title", self._title, "title") self.bind_property("subtitle", self._title, "subtitle") + self.bind_property("show-sidebar", self._show_sidebar, "active", + GObject.BindingFlags.BIDIRECTIONAL) self.bind_property("bg-enabled", self._background, "enabled", GObject.BindingFlags.BIDIRECTIONAL) self.bind_property("bg-volume", self._background, "volume", @@ -79,6 +84,7 @@ class Header(Gtk.HeaderBar): self.bind_property("volume", self._volume, "volume", GObject.BindingFlags.BIDIRECTIONAL) + self.pack_start(self._show_sidebar) self.pack_start(self._open) if __debug__: self._window = settings.Window(sql) diff --git a/tests/header/test_header.py b/tests/header/test_header.py index 65eb268..1e5c4ac 100644 --- a/tests/header/test_header.py +++ b/tests/header/test_header.py @@ -36,6 +36,21 @@ class TestHeader(tests.util.TestCase): self.assertEqual(self.header._title.get_tooltip_text(), emmental.gsetup.env_string()) + def test_show_sidebar(self): + """Check that the show sidebar button works as expected.""" + self.assertIsInstance(self.header._show_sidebar, Gtk.ToggleButton) + self.assertEqual(self.header._show_sidebar.props.icon_name, + "sidebar-show-symbolic") + self.assertFalse(self.header._show_sidebar.props.has_frame) + self.assertFalse(self.header._show_sidebar.props.active) + + self.assertFalse(self.header.show_sidebar) + self.header.show_sidebar = True + self.assertTrue(self.header._show_sidebar.props.active) + + self.header._show_sidebar.props.active = False + self.assertFalse(self.header.show_sidebar) + def test_open(self): """Check that the Open button works as expected.""" self.assertIsInstance(self.header._open, emmental.header.open.Button)