From 7a91da159973984fbdaaae6b6bcfed60b920ec4a Mon Sep 17 00:00:00 2001 From: un-pogaz <46523284+un-pogaz@users.noreply.github.com> Date: Sat, 1 Feb 2025 10:49:26 +0100 Subject: [PATCH] move EditRules from "Look & Feel" to their own widgets --- src/calibre/gui2/preferences/look_feel.py | 28 +----------- src/calibre/gui2/preferences/look_feel.ui | 28 ++++++++++++ .../preferences/look_feel_tabs/__init__.py | 43 +++++++++++++++++++ 3 files changed, 72 insertions(+), 27 deletions(-) diff --git a/src/calibre/gui2/preferences/look_feel.py b/src/calibre/gui2/preferences/look_feel.py index 4cf696b74b..4b93410235 100644 --- a/src/calibre/gui2/preferences/look_feel.py +++ b/src/calibre/gui2/preferences/look_feel.py @@ -5,13 +5,10 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -from qt.core import QIcon, QKeySequence, QListWidgetItem, Qt +from qt.core import QKeySequence, QListWidgetItem, Qt from calibre.gui2.preferences import ConfigWidgetBase, test_widget -from calibre.gui2.preferences.coloring import EditRules -from calibre.gui2.preferences.look_feel_tabs import selected_rows_metadatas from calibre.gui2.preferences.look_feel_ui import Ui_Form -from calibre.gui2.widgets import BusyCursor class ConfigWidget(ConfigWidgetBase, Ui_Form): @@ -19,14 +16,6 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): def genesis(self, gui): self.gui = gui - self.edit_rules = EditRules(self.tabWidget) - self.edit_rules.changed.connect(self.changed_signal) - self.tabWidget.addTab(self.edit_rules, QIcon.ic('format-fill-color.png'), _('Column &coloring')) - - self.icon_rules = EditRules(self.tabWidget) - self.icon_rules.changed.connect(self.changed_signal) - self.tabWidget.addTab(self.icon_rules, QIcon.ic('icon_choose.png'), _('Column &icons')) - self.tabWidget.setCurrentIndex(0) self.tabWidget.tabBar().setVisible(False) keys = [QKeySequence('F11', QKeySequence.SequenceFormat.PortableText), QKeySequence( @@ -45,25 +34,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): def initial_tab_changed(self): self.sections_view.setCurrentRow(self.tabWidget.currentIndex()) - def initialize(self): - ConfigWidgetBase.initialize(self) - - db = self.gui.current_db - mi = selected_rows_metadatas() - self.edit_rules.initialize(db.field_metadata, db.prefs, mi, 'column_color_rules') - self.icon_rules.initialize(db.field_metadata, db.prefs, mi, 'column_icon_rules') - def restore_defaults(self): ConfigWidgetBase.restore_defaults(self) - self.edit_rules.clear() - self.icon_rules.clear() self.changed_signal.emit() - def commit(self, *args): - with BusyCursor(): - self.edit_rules.commit(self.gui.current_db.prefs) - self.icon_rules.commit(self.gui.current_db.prefs) - def refresh_gui(self, gui): m = gui.library_view.model() m.update_db_prefs_cache() diff --git a/src/calibre/gui2/preferences/look_feel.ui b/src/calibre/gui2/preferences/look_feel.ui index db5d1388da..dba93c0d3f 100644 --- a/src/calibre/gui2/preferences/look_feel.ui +++ b/src/calibre/gui2/preferences/look_feel.ui @@ -102,6 +102,24 @@ &Quickview + + + + :/images/format-fill-color.png:/images/format-fill-color.png + + + Column &coloring + + + + + + :/images/icon_choose.png:/images/icon_choose.png + + + Column &icons + + @@ -178,6 +196,16 @@ ConfigWidgetBase
calibre/gui2/preferences/look_feel_tabs/quickview.h
+ + ColumnColorRules + ConfigWidgetBase +
calibre/gui2/preferences/look_feel_tabs.h
+
+ + ColumnIconRules + ConfigWidgetBase +
calibre/gui2/preferences/look_feel_tabs.h
+
diff --git a/src/calibre/gui2/preferences/look_feel_tabs/__init__.py b/src/calibre/gui2/preferences/look_feel_tabs/__init__.py index 4b2ad7211e..9ae9a57cb7 100644 --- a/src/calibre/gui2/preferences/look_feel_tabs/__init__.py +++ b/src/calibre/gui2/preferences/look_feel_tabs/__init__.py @@ -12,6 +12,8 @@ from qt.core import QAbstractListModel, QComboBox, QFormLayout, QIcon, QItemSele from calibre.ebooks.metadata.book.render import DEFAULT_AUTHOR_LINK from calibre.gui2 import choose_files, choose_save_file, error_dialog from calibre.gui2.book_details import get_field_list +from calibre.gui2.preferences import LazyConfigWidgetBase +from calibre.gui2.preferences.coloring import EditRules from calibre.gui2.ui import get_gui @@ -167,6 +169,47 @@ class DisplayedFields(QAbstractListModel): return idx +class LazyEditRulesBase(LazyConfigWidgetBase): + + rule_set_name = None + + def __init__(self, parent=None): + super().__init__(parent) + self.rules_editor = EditRules(parent) + self.setLayout(self.rules_editor.layout()) + + def genesis(self, gui): + self.gui = gui + self.rules_editor.changed.connect(self.changed_signal) + + def lazy_initialize(self): + if not self.rule_set_name: + raise NotImplementedError('You must define the attribut "rule_set_name" in LazyEditRulesBase subclasses') + self.load_rule_set(self.rule_set_name) + + def load_rule_set(self, name): + db = self.gui.current_db + mi = selected_rows_metadatas() + self.rules_editor.initialize(db.field_metadata, db.prefs, mi, name) + + def commit(self): + self.rules_editor.commit(self, self.gui.current_db.prefs) + return LazyConfigWidgetBase.commit(self) + + def restore_defaults(self): + LazyConfigWidgetBase.restore_defaults(self) + self.rules_editor.clear(self) + self.changed_signal.emit() + + +class ColumnColorRules(LazyEditRulesBase): + rule_set_name = 'column_color_rules' + + +class ColumnIconRules(LazyEditRulesBase): + rule_set_name = 'column_icon_rules' + + def export_layout(in_widget, model=None): filename = choose_save_file(in_widget, 'look_feel_prefs_import_export_field_list', _('Save column list to file'),