This commit is contained in:
Kovid Goyal 2021-05-16 17:35:38 +05:30
commit 0ddbd506cc
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 44 additions and 21 deletions

View File

@ -23,6 +23,10 @@ class AbortCommit(Exception):
pass pass
class AbortInitialize(Exception):
pass
class ConfigWidgetInterface(object): class ConfigWidgetInterface(object):
''' '''
@ -59,7 +63,8 @@ class ConfigWidgetInterface(object):
def initialize(self): def initialize(self):
''' '''
Should set all config values to their initial values (the values Should set all config values to their initial values (the values
stored in the config files). stored in the config files). A "return" statement is optional. Return
False if the dialog is not to be shown.
''' '''
raise NotImplementedError() raise NotImplementedError()

View File

@ -6,22 +6,26 @@ __license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import textwrap, re import re
from functools import partial import textwrap
from collections import OrderedDict from collections import OrderedDict
from functools import partial
from qt.core import ( from qt.core import (
Qt, QIcon, QFont, QWidget, QScrollArea, QStackedWidget, QVBoxLayout, QApplication, QDialog, QDialogButtonBox, QFont, QFrame, QHBoxLayout, QIcon,
QLabel, QFrame, QToolBar, QSize, pyqtSignal, QDialogButtonBox, QLabel, QPainter, QPointF, QScrollArea, QSize, QSizePolicy, QStackedWidget,
QHBoxLayout, QDialog, QSizePolicy, QPainter, QTextLayout, QPointF, QStatusTipEvent, Qt, QTabWidget, QTextLayout, QToolBar, QVBoxLayout, QWidget,
QStatusTipEvent, QApplication, QTabWidget) pyqtSignal
)
from calibre.constants import __appname__, __version__, islinux from calibre.constants import __appname__, __version__, islinux
from calibre.gui2 import (gprefs, min_available_height, available_width,
show_restart_warning)
from calibre.gui2.dialogs.message_box import Icon
from calibre.gui2.preferences import init_gui, AbortCommit, get_plugin
from calibre.customize.ui import preferences_plugins from calibre.customize.ui import preferences_plugins
from calibre.gui2 import (
available_width, gprefs, min_available_height, show_restart_warning
)
from calibre.gui2.dialogs.message_box import Icon
from calibre.gui2.preferences import (
AbortCommit, AbortInitialize, get_plugin, init_gui
)
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type
ICON_SIZE = 32 ICON_SIZE = 32
@ -310,7 +314,10 @@ class Preferences(QDialog):
def show_plugin(self, plugin): def show_plugin(self, plugin):
self.showing_widget = plugin.create_widget(self.scroll_area) self.showing_widget = plugin.create_widget(self.scroll_area)
self.showing_widget.genesis(self.gui) self.showing_widget.genesis(self.gui)
self.showing_widget.initialize() try:
self.showing_widget.initialize()
except AbortInitialize:
return
self.set_tooltips_for_labels() self.set_tooltips_for_labels()
self.scroll_area.setWidget(self.showing_widget) self.scroll_area.setWidget(self.showing_widget)
self.stack.setCurrentIndex(1) self.stack.setCurrentIndex(1)
@ -425,8 +432,8 @@ class Preferences(QDialog):
if __name__ == '__main__': if __name__ == '__main__':
from calibre.gui_launch import init_dbus
from calibre.gui2 import Application from calibre.gui2 import Application
from calibre.gui_launch import init_dbus
init_dbus() init_dbus()
app = Application([]) app = Application([])
app app

View File

@ -2,12 +2,14 @@
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
# License: GPLv3 Copyright: 2010, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2010, Kovid Goyal <kovid at kovidgoyal.net>
import copy, json, traceback import copy
from qt.core import QDialogButtonBox, QDialog import json
import traceback
from qt.core import QDialog, QDialogButtonBox
from calibre.gui2 import error_dialog, warning_dialog from calibre.gui2 import error_dialog, question_dialog, warning_dialog
from calibre.gui2.dialogs.template_dialog import TemplateDialog from calibre.gui2.dialogs.template_dialog import TemplateDialog
from calibre.gui2.preferences import ConfigWidgetBase, test_widget from calibre.gui2.preferences import AbortInitialize, ConfigWidgetBase, test_widget
from calibre.gui2.preferences.template_functions_ui import Ui_Form from calibre.gui2.preferences.template_functions_ui import Ui_Form
from calibre.gui2.widgets import PythonHighlighter from calibre.gui2.widgets import PythonHighlighter
from calibre.utils.formatter_functions import ( from calibre.utils.formatter_functions import (
@ -149,9 +151,18 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.builtins = formatter_functions().get_builtins_and_aliases() self.builtins = formatter_functions().get_builtins_and_aliases()
self.st_funcs = {} self.st_funcs = {}
for v in self.db.prefs.get('user_template_functions', []): try:
if not function_pref_is_python(v): for v in self.db.prefs.get('user_template_functions', []):
self.st_funcs.update({function_pref_name(v):compile_user_function(*v)}) if not function_pref_is_python(v):
self.st_funcs.update({function_pref_name(v):compile_user_function(*v)})
except:
if question_dialog(self, _('Template functions'),
_('The template functions saved in the library are corrupt. '
"Do you want to delete them? Answering 'Yes' will delete all "
"the functions."), det_msg=traceback.format_exc(),
show_copy_button=True):
self.db.prefs['user_template_functions'] = []
raise AbortInitialize()
self.build_function_names_box() self.build_function_names_box()
self.function_name.currentIndexChanged[native_string_type].connect(self.function_index_changed) self.function_name.currentIndexChanged[native_string_type].connect(self.function_index_changed)