mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Allow preference widgets to signal than they need a restart
This commit is contained in:
parent
60306d1c90
commit
02153492b9
@ -26,36 +26,36 @@ class ConfigWidgetInterface(object):
|
|||||||
class Setting(object):
|
class Setting(object):
|
||||||
|
|
||||||
def __init__(self, name, config_obj, widget, gui_name=None,
|
def __init__(self, name, config_obj, widget, gui_name=None,
|
||||||
empty_string_is_None=True, choices=None):
|
empty_string_is_None=True, choices=None, restart_required=False):
|
||||||
self.name, self.gui_name = name, gui_name
|
self.name, self.gui_name = name, gui_name
|
||||||
self.empty_string_is_None = empty_string_is_None
|
self.empty_string_is_None = empty_string_is_None
|
||||||
|
self.restart_required = restart_required
|
||||||
self.choices = choices
|
self.choices = choices
|
||||||
if gui_name is None:
|
if gui_name is None:
|
||||||
self.gui_name = 'opt_'+name
|
self.gui_name = 'opt_'+name
|
||||||
self.config_obj = config_obj
|
self.config_obj = config_obj
|
||||||
self.gui_obj = getattr(widget, self.gui_name)
|
self.gui_obj = getattr(widget, self.gui_name)
|
||||||
|
self.widget = widget
|
||||||
|
|
||||||
if isinstance(self.gui_obj, QCheckBox):
|
if isinstance(self.gui_obj, QCheckBox):
|
||||||
self.datatype = 'bool'
|
self.datatype = 'bool'
|
||||||
self.gui_obj.stateChanged.connect(lambda x:
|
self.gui_obj.stateChanged.connect(self.changed)
|
||||||
widget.changed_signal.emit())
|
|
||||||
elif isinstance(self.gui_obj, QAbstractSpinBox):
|
elif isinstance(self.gui_obj, QAbstractSpinBox):
|
||||||
self.datatype = 'number'
|
self.datatype = 'number'
|
||||||
self.gui_obj.valueChanged.connect(lambda x:
|
self.gui_obj.valueChanged.connect(self.changed)
|
||||||
widget.changed_signal.emit())
|
|
||||||
elif isinstance(self.gui_obj, QLineEdit):
|
elif isinstance(self.gui_obj, QLineEdit):
|
||||||
self.datatype = 'string'
|
self.datatype = 'string'
|
||||||
self.gui_obj.textChanged.connect(lambda x:
|
self.gui_obj.textChanged.connect(self.changed)
|
||||||
widget.changed_signal.emit())
|
|
||||||
elif isinstance(self.gui_obj, QComboBox):
|
elif isinstance(self.gui_obj, QComboBox):
|
||||||
self.datatype = 'choice'
|
self.datatype = 'choice'
|
||||||
self.gui_obj.editTextChanged.connect(lambda x:
|
self.gui_obj.editTextChanged.connect(self.changed)
|
||||||
widget.changed_signal.emit())
|
self.gui_obj.currentIndexChanged.connect(self.changed)
|
||||||
self.gui_obj.currentIndexChanged.connect(lambda x:
|
|
||||||
widget.changed_signal.emit())
|
|
||||||
else:
|
else:
|
||||||
raise ValueError('Unknown data type')
|
raise ValueError('Unknown data type')
|
||||||
|
|
||||||
|
def changed(self, *args):
|
||||||
|
self.widget.changed_signal.emit()
|
||||||
|
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
self.gui_obj.blockSignals(True)
|
self.gui_obj.blockSignals(True)
|
||||||
if self.datatype == 'choice':
|
if self.datatype == 'choice':
|
||||||
@ -66,9 +66,15 @@ class Setting(object):
|
|||||||
self.gui_obj.addItem(x[0], QVariant(x[1]))
|
self.gui_obj.addItem(x[0], QVariant(x[1]))
|
||||||
self.set_gui_val(self.get_config_val(default=False))
|
self.set_gui_val(self.get_config_val(default=False))
|
||||||
self.gui_obj.blockSignals(False)
|
self.gui_obj.blockSignals(False)
|
||||||
|
self.initial_value = self.get_gui_val()
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
self.set_config_val(self.get_gui_val())
|
val = self.get_gui_val()
|
||||||
|
oldval = self.get_config_val()
|
||||||
|
changed = val != oldval
|
||||||
|
if changed:
|
||||||
|
self.set_config_val(self.get_gui_val())
|
||||||
|
return changed and self.restart_required
|
||||||
|
|
||||||
def restore_defaults(self):
|
def restore_defaults(self):
|
||||||
self.set_gui_val(self.get_config_val(default=True))
|
self.set_gui_val(self.get_config_val(default=True))
|
||||||
@ -122,10 +128,11 @@ class ConfigWidgetBase(QWidget, ConfigWidgetInterface):
|
|||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = {}
|
self.settings = {}
|
||||||
|
|
||||||
def register(self, name, config_obj, gui_name=None, choices=None, setting=Setting):
|
def register(self, name, config_obj, gui_name=None, choices=None,
|
||||||
|
restart_required=False, setting=Setting):
|
||||||
setting = setting(name, config_obj, self, gui_name=gui_name,
|
setting = setting(name, config_obj, self, gui_name=gui_name,
|
||||||
choices=choices)
|
choices=choices, restart_required=restart_required)
|
||||||
self.register_setting(setting)
|
return self.register_setting(setting)
|
||||||
|
|
||||||
def register_setting(self, setting):
|
def register_setting(self, setting):
|
||||||
self.settings[setting.name] = setting
|
self.settings[setting.name] = setting
|
||||||
@ -136,8 +143,12 @@ class ConfigWidgetBase(QWidget, ConfigWidgetInterface):
|
|||||||
setting.initialize()
|
setting.initialize()
|
||||||
|
|
||||||
def commit(self, *args):
|
def commit(self, *args):
|
||||||
|
restart_required = False
|
||||||
for setting in self.settings.values():
|
for setting in self.settings.values():
|
||||||
setting.commit()
|
rr = setting.commit()
|
||||||
|
if rr:
|
||||||
|
restart_required = True
|
||||||
|
return restart_required
|
||||||
|
|
||||||
def restore_defaults(self, *args):
|
def restore_defaults(self, *args):
|
||||||
for setting in self.settings.values():
|
for setting in self.settings.values():
|
||||||
@ -184,8 +195,12 @@ def test_widget(category, name, gui=None): # {{{
|
|||||||
gui.initialize(db.library_path, db, None, actions, show_gui=False)
|
gui.initialize(db.library_path, db, None, actions, show_gui=False)
|
||||||
w.genesis(gui)
|
w.genesis(gui)
|
||||||
w.initialize()
|
w.initialize()
|
||||||
|
restart_required = False
|
||||||
if d.exec_() == QDialog.Accepted:
|
if d.exec_() == QDialog.Accepted:
|
||||||
w.commit()
|
restart_required = w.commit()
|
||||||
|
if restart_required:
|
||||||
|
from calibre.gui2 import warning_dialog
|
||||||
|
warning_dialog(gui, 'Restart required', 'Restart required', show=True)
|
||||||
if mygui:
|
if mygui:
|
||||||
gui.shutdown()
|
gui.shutdown()
|
||||||
# }}}
|
# }}}
|
||||||
|
@ -20,7 +20,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
|
|
||||||
r = self.register
|
r = self.register
|
||||||
|
|
||||||
r('gui_layout', config, choices=
|
r('gui_layout', config, restart_required=True, choices=
|
||||||
[(_('Wide'), 'wide'), (_('Narrow'), 'narrow')])
|
[(_('Wide'), 'wide'), (_('Narrow'), 'narrow')])
|
||||||
|
|
||||||
r('cover_flow_queue_length', config)
|
r('cover_flow_queue_length', config)
|
||||||
@ -36,15 +36,15 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
choices = [(y, x) for x, y in items]
|
choices = [(y, x) for x, y in items]
|
||||||
# Default language is the autodetected one
|
# Default language is the autodetected one
|
||||||
choices = [(get_language(lang), lang)] + choices
|
choices = [(get_language(lang), lang)] + choices
|
||||||
r('language', prefs, choices=choices)
|
r('language', prefs, choices=choices, restart_required=True)
|
||||||
|
|
||||||
r('show_avg_rating', config)
|
r('show_avg_rating', config)
|
||||||
r('disable_animations', config)
|
r('disable_animations', config)
|
||||||
r('systray_icon', config)
|
r('systray_icon', config, restart_required=True)
|
||||||
r('show_splash_screen', gprefs)
|
r('show_splash_screen', gprefs)
|
||||||
r('disable_tray_notification', config)
|
r('disable_tray_notification', config)
|
||||||
r('use_roman_numerals_for_series_number', config)
|
r('use_roman_numerals_for_series_number', config)
|
||||||
r('separate_cover_flow', config)
|
r('separate_cover_flow', config, restart_required=True)
|
||||||
r('search_as_you_type', config)
|
r('search_as_you_type', config)
|
||||||
|
|
||||||
choices = [(_('Small'), 'small'), (_('Medium'), 'medium'),
|
choices = [(_('Small'), 'small'), (_('Medium'), 'medium'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user