Skip to content

Commit

Permalink
Merge pull request #142 from david-swift/main
Browse files Browse the repository at this point in the history
Add preference for changing the details panel's side
  • Loading branch information
mrvladus authored Jan 8, 2024
2 parents a547304 + 7ec9cee commit 52eb7ee
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 13 deletions.
5 changes: 4 additions & 1 deletion data/io.github.mrvladus.List.gschema.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
<key name="sidebar-open" type="b">
<default>false</default>
</key>
<key name="right-sidebar" type="b">
<default>false</default>
</key>
<key name="theme" type="i">
<default>0</default>
</key>
Expand All @@ -35,4 +38,4 @@
<default>""</default>
</key>
</schema>
</schemalist>
</schemalist>
4 changes: 2 additions & 2 deletions errands/utils/gsettings.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ def _check_init(self):
self.init()

@classmethod
def bind(self, setting: str, obj: Gtk.Widget, prop: str) -> None:
def bind(self, setting: str, obj: Gtk.Widget, prop: str, invert: bool = False) -> None:
self._check_init(self)
self.gsettings.bind(setting, obj, prop, 0)
self.gsettings.bind(setting, obj, prop, Gio.SettingsBindFlags.INVERT_BOOLEAN if invert else Gio.SettingsBindFlags.DEFAULT)

@classmethod
def get(self, setting: str):
Expand Down
35 changes: 35 additions & 0 deletions errands/widgets/preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ def __init__(self, win: Adw.ApplicationWindow) -> None:
GSettings.bind("sync-url", self.sync_url, "text")
GSettings.bind("sync-username", self.sync_username, "text")
self.setup_sync()
# Setup details panel
right_sidebar: bool = GSettings.get("right-sidebar")
if right_sidebar:
self.right_sidebar_btn.props.active = True
else:
self.left_sidebar_btn.props.active = True

def build_ui(self):
self.set_transient_for(self.window)
Expand Down Expand Up @@ -105,11 +111,36 @@ def build_ui(self):
self.test_connection_row.add_suffix(test_btn)
self.test_connection_row.set_activatable_widget(test_btn)
sync_group.add(self.test_connection_row)
# Details group
details_group = Adw.PreferencesGroup(
title=_("Details Panel"),
)
# Left Sidebar
self.left_sidebar_btn = Gtk.CheckButton()
self.left_sidebar_btn.connect("toggled", self.on_details_change, False)
left_sidebar_row = Adw.ActionRow(
title=_("Left Sidebar"),
icon_name="sidebar-show-symbolic",
)
left_sidebar_row.add_suffix(self.left_sidebar_btn)
left_sidebar_row.set_activatable_widget(self.left_sidebar_btn)
details_group.add(left_sidebar_row)
# Right Sidebar
self.right_sidebar_btn = Gtk.CheckButton(group=self.left_sidebar_btn)
self.right_sidebar_btn.connect("toggled", self.on_details_change, True)
right_sidebar_row = Adw.ActionRow(
title=_("Right Sidebar"),
icon_name="sidebar-show-right-symbolic",
)
right_sidebar_row.add_suffix(self.right_sidebar_btn)
right_sidebar_row.set_activatable_widget(self.right_sidebar_btn)
details_group.add(right_sidebar_row)

# Page
page = Adw.PreferencesPage()
page.add(theme_group)
page.add(sync_group)
page.add(details_group)
self.add(page)

def setup_sync(self):
Expand Down Expand Up @@ -142,3 +173,7 @@ def on_test_connection_btn_clicked(self, _btn):
def on_theme_change(self, btn: Gtk.Button, theme: int) -> None:
Adw.StyleManager.get_default().set_color_scheme(theme)
GSettings.set("theme", "i", theme)

def on_details_change(self, btn: Gtk.Button, right: bool) -> None:
self.window.update_details(right)
GSettings.set("right-sidebar", "b", right)
54 changes: 45 additions & 9 deletions errands/widgets/task_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from errands.utils.sync import Sync
from errands.utils.logging import Log
from errands.widgets.task import Task
from errands.utils.gsettings import GSettings


class TaskList(Adw.Bin):
Expand All @@ -21,6 +22,8 @@ def __init__(self, window, list_uid: str, parent):
self.list_uid = list_uid
self.parent = parent
self.details = window.details
# Store details panel information
self.right_sidebar: bool = GSettings.get("right-sidebar")
self.build_ui()
self.load_tasks()

Expand All @@ -33,18 +36,28 @@ def build_ui(self):
)[0][0]
)
# Toggle sidebar button
self.toggle_sidebar_btn = Gtk.ToggleButton(
self.left_toggle_sidebar_btn = Gtk.ToggleButton(
icon_name="sidebar-show-symbolic",
tooltip_text=_("Toggle Sidebar"),
)
self.right_toggle_sidebar_btn = Gtk.ToggleButton(
icon_name="sidebar-show-right-symbolic",
tooltip_text=_("Toggle Sidebar"),
)
self.right_toggle_sidebar_btn.bind_property(
"active",
self.left_toggle_sidebar_btn,
"active",
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL,
)
toggle_ctrl = Gtk.ShortcutController(scope=1)
toggle_ctrl.add_shortcut(
Gtk.Shortcut(
trigger=Gtk.ShortcutTrigger.parse_string("F9"),
action=Gtk.ShortcutAction.parse_string("activate"),
)
)
self.toggle_sidebar_btn.add_controller(toggle_ctrl)
self.left_toggle_sidebar_btn.add_controller(toggle_ctrl)
# Delete completed button
self.delete_completed_btn = Gtk.Button(
valign="center",
Expand All @@ -63,22 +76,39 @@ def build_ui(self):
sensitive=False,
)
self.scroll_up_btn.connect("clicked", lambda *_: scroll(self.scrl, False))
self.left_toggle_sidebar_bin = Adw.Bin(
child=self.left_toggle_sidebar_btn
)
self.right_toggle_sidebar_bin = Adw.Bin(
child=self.right_toggle_sidebar_btn
)

# Header Bar
hb = Adw.HeaderBar(title_widget=self.title)
hb.pack_start(self.toggle_sidebar_btn)
hb.pack_start(self.left_toggle_sidebar_bin)
hb.pack_start(self.delete_completed_btn)
hb.pack_end(self.right_toggle_sidebar_bin)
hb.pack_end(self.scroll_up_btn)

# ---------- BOTTOMBAR ---------- #

toggle_sidebar_btn = Gtk.ToggleButton(
left_toggle_sidebar_btn = Gtk.ToggleButton(
icon_name="sidebar-show-symbolic",
tooltip_text=_("Toggle Sidebar"),
)
toggle_sidebar_btn.bind_property(
right_toggle_sidebar_btn = Gtk.ToggleButton(
icon_name="sidebar-show-right-symbolic",
tooltip_text=_("Toggle Sidebar"),
)
left_toggle_sidebar_btn.bind_property(
"active",
self.left_toggle_sidebar_btn,
"active",
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL,
)
right_toggle_sidebar_btn.bind_property(
"active",
self.toggle_sidebar_btn,
self.left_toggle_sidebar_btn,
"active",
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL,
)
Expand Down Expand Up @@ -175,10 +205,11 @@ def build_ui(self):
tasks_toolbar_view.add_bottom_bar(
Box(
children=[
toggle_sidebar_btn,
left_toggle_sidebar_btn,
delete_completed_btn,
Gtk.Separator(hexpand=True, css_classes=["spacer"]),
scroll_up_btn,
right_toggle_sidebar_btn
],
css_classes=["toolbar"],
)
Expand All @@ -190,7 +221,12 @@ def build_ui(self):
tasks_brb_bp = Adw.Breakpoint.new(
Adw.breakpoint_condition_parse("max-width: 400px")
)
tasks_brb_bp.add_setter(self.toggle_sidebar_btn, "visible", False)
GSettings.bind("right-sidebar", self.left_toggle_sidebar_bin, "visible", True)
GSettings.bind("right-sidebar", left_toggle_sidebar_btn, "visible", True)
GSettings.bind("right-sidebar", self.right_toggle_sidebar_bin, "visible")
GSettings.bind("right-sidebar", right_toggle_sidebar_btn, "visible")
tasks_brb_bp.add_setter(self.left_toggle_sidebar_btn, "visible", False)
tasks_brb_bp.add_setter(self.right_toggle_sidebar_btn, "visible", False)
tasks_brb_bp.add_setter(self.delete_completed_btn, "visible", False)
tasks_brb_bp.add_setter(self.scroll_up_btn, "visible", False)
tasks_brb_bp.add_setter(tasks_toolbar_view, "reveal-bottom-bars", True)
Expand All @@ -199,7 +235,7 @@ def build_ui(self):
# Split view
self.window.split_view_inner.bind_property(
"show-sidebar",
self.toggle_sidebar_btn,
self.left_toggle_sidebar_btn,
"active",
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL,
)
Expand Down
6 changes: 5 additions & 1 deletion errands/widgets/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from errands.utils.sync import Sync
from errands.utils.gsettings import GSettings
from errands.utils.logging import Log
from errands.widgets.task_list import TaskList


class Window(Adw.ApplicationWindow):
Expand All @@ -35,7 +36,6 @@ def _build_ui(self):
self.props.height_request = 200
# Split view inner
self.split_view_inner = Adw.OverlaySplitView(
sidebar_position="start",
min_sidebar_width=360,
max_sidebar_width=400,
)
Expand Down Expand Up @@ -83,6 +83,7 @@ def _build_ui(self):
title=_("No Task Lists"),
)
self.stack.set_visible_child_name("status")
self.update_details(GSettings.get("right-sidebar"))

# Toast overlay
self.toast_overlay = Adw.ToastOverlay(child=self.split_view)
Expand Down Expand Up @@ -150,3 +151,6 @@ def _sync(*args):
lambda *_: self.props.application.quit(),
["<primary>q", "<primary>w"],
)

def update_details(self, right: bool) -> None:
self.split_view_inner.props.sidebar_position = "end" if right else "start"

0 comments on commit 52eb7ee

Please sign in to comment.