Button to easily restore default settings on the preferences panel

This commit is contained in:
Kovid Goyal 2016-02-11 16:00:46 +05:30
parent 471cf7741c
commit c1d41d5eab
3 changed files with 37 additions and 4 deletions

View File

@ -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()

View File

@ -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

View File

@ -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]