From c1d41d5eab4f8a52d2c963b530b58887e0de6f7b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 11 Feb 2016 16:00:46 +0530 Subject: [PATCH] Button to easily restore default settings on the preferences panel --- src/pyj/book_list/prefs.pyj | 27 ++++++++++++++++++++++++++- src/pyj/book_list/ui.pyj | 11 ++++++++--- src/pyj/session.pyj | 3 +++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/pyj/book_list/prefs.pyj b/src/pyj/book_list/prefs.pyj index d2f650f80c..3c0666f4e4 100644 --- a/src/pyj/book_list/prefs.pyj +++ b/src/pyj/book_list/prefs.pyj @@ -4,6 +4,8 @@ from dom import clear from elementmaker import E from book_list.globals import get_session_data +from widgets import create_button +from gettext import gettext as _ # from book_list.theme import get_font_size, get_color @@ -47,13 +49,20 @@ class ConfigItem: get_session_data().set(self.item_data.name, val) def defval(self): - return get_session_data().defval(self.item_data.name) + val = get_session_data().defval(self.item_data.name) + if self.item_data.from_storage: + val = self.item_data.from_storage(val) + return val def ui_value_changed(self): if self.ignore_ui_value_changed: return self.to_storage(self.from_ui()) + def reset_to_default(self): + self.to_ui(self.defval()) + self.ui_value_changed() + def to_ui(self, val): pass @@ -95,6 +104,7 @@ class CheckBox(ConfigItem): control = div.firstChild control.addEventListener('change', self.ui_value_changed.bind(self)) control.addEventListener('focus', onfocus) + div.lastChild.addEventListener('click', self.toggle.bind(self)) @property def control(self): @@ -106,6 +116,10 @@ class CheckBox(ConfigItem): def from_ui(self): return bool(self.control.checked) + def toggle(self): + self.to_ui(not self.from_ui()) + self.ui_value_changed() + class SpinBox(ConfigItem): def __init__(self, item_data, container, onfocus): @@ -211,3 +225,14 @@ class PrefsPanel: else: cls = LineEdit self.widgets.append((new cls(item, div.firstChild, onfocus(item.name))).initialize()) + if self.widgets.length: + c.appendChild( + E.div( + style='margin:1ex 1em; padding: 1em; text-align:center', + create_button(_('Restore default settings'), 'refresh', self.reset_to_defaults.bind(self)) + ) + ) + + def reset_to_defaults(self): + for w in self.widgets: + w.reset_to_default() diff --git a/src/pyj/book_list/ui.pyj b/src/pyj/book_list/ui.pyj index 659224e3f4..bacbb44e0b 100644 --- a/src/pyj/book_list/ui.pyj +++ b/src/pyj/book_list/ui.pyj @@ -90,14 +90,19 @@ class UI: self.panel_map['booklist-sort-menu'] = UIState(ClosePanelBar(_('Sort books')), panel_data=def(): return self.books_view.sort_panel_data(create_item) ) - self.panel_map['booklist-config-tb'] = UIState( - ClosePanelBar(_('Configure Tag Browser'), close_callback=self.search_panel.apply_prefs.bind(self.search_panel)), - main_panel=self.prefs_panel, panel_data=self.search_panel.get_prefs.bind(self.search_panel)) + self.panel_map['booklist-config-tb'] = self.create_prefences_panel( + _('Configure Tag Browser'), close_callback=self.search_panel.apply_prefs.bind(self.search_panel), + panel_data=self.search_panel.get_prefs.bind(self.search_panel)) bss = ClosePanelBar(_('Search for books')) bss.add_button(icon_name='cogs', tooltip=_('Configure Tag Browser'), action=show_panel_action('booklist-config-tb')) self.panel_map['booklist-search'] = UIState(bss, main_panel=self.search_panel) + def create_prefences_panel(self, title, close_callback=None, panel_data=None): + ans = UIState(ClosePanelBar(title), close_callback=close_callback, main_panel=self.prefs_panel, panel_data=panel_data) + ans.add_button(icon_name='refresh', tooltip=_('Restore default settings'), action=self.prefs_panel.reset_to_defaults.bind(self.prefs_panel)) + return ans + def on_resize(self): pass diff --git a/src/pyj/session.pyj b/src/pyj/session.pyj index b8bf25983b..0a48bf8f4c 100644 --- a/src/pyj/session.pyj +++ b/src/pyj/session.pyj @@ -120,6 +120,9 @@ class UserSessionData(SessionData): self.set(key, saved_data[key]) self.echo_changes = True + def defval(self, key): + return defaults[key] + def get(self, key, defval): if defval is undefined: defval = defaults[key]