move EditRules from "Look & Feel" to their own widgets

This commit is contained in:
un-pogaz 2025-02-01 10:49:26 +01:00
parent 78bfa97e03
commit 7a91da1599
3 changed files with 72 additions and 27 deletions

View File

@ -5,13 +5,10 @@ __license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __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 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.preferences.look_feel_ui import Ui_Form
from calibre.gui2.widgets import BusyCursor
class ConfigWidget(ConfigWidgetBase, Ui_Form): class ConfigWidget(ConfigWidgetBase, Ui_Form):
@ -19,14 +16,6 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
def genesis(self, gui): def genesis(self, gui):
self.gui = 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.setCurrentIndex(0)
self.tabWidget.tabBar().setVisible(False) self.tabWidget.tabBar().setVisible(False)
keys = [QKeySequence('F11', QKeySequence.SequenceFormat.PortableText), QKeySequence( keys = [QKeySequence('F11', QKeySequence.SequenceFormat.PortableText), QKeySequence(
@ -45,25 +34,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
def initial_tab_changed(self): def initial_tab_changed(self):
self.sections_view.setCurrentRow(self.tabWidget.currentIndex()) 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): def restore_defaults(self):
ConfigWidgetBase.restore_defaults(self) ConfigWidgetBase.restore_defaults(self)
self.edit_rules.clear()
self.icon_rules.clear()
self.changed_signal.emit() 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): def refresh_gui(self, gui):
m = gui.library_view.model() m = gui.library_view.model()
m.update_db_prefs_cache() m.update_db_prefs_cache()

View File

@ -102,6 +102,24 @@
<string>&amp;Quickview</string> <string>&amp;Quickview</string>
</attribute> </attribute>
</widget> </widget>
<widget class="ColumnColorRules" name="edit_rules">
<attribute name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/format-fill-color.png</normaloff>:/images/format-fill-color.png</iconset>
</attribute>
<attribute name="title">
<string>Column &amp;coloring</string>
</attribute>
</widget>
<widget class="ColumnIconRules" name="icon_rules">
<attribute name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/icon_choose.png</normaloff>:/images/icon_choose.png</iconset>
</attribute>
<attribute name="title">
<string>Column &amp;icons</string>
</attribute>
</widget>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
@ -178,6 +196,16 @@
<extends>ConfigWidgetBase</extends> <extends>ConfigWidgetBase</extends>
<header>calibre/gui2/preferences/look_feel_tabs/quickview.h</header> <header>calibre/gui2/preferences/look_feel_tabs/quickview.h</header>
</customwidget> </customwidget>
<customwidget>
<class>ColumnColorRules</class>
<extends>ConfigWidgetBase</extends>
<header>calibre/gui2/preferences/look_feel_tabs.h</header>
</customwidget>
<customwidget>
<class>ColumnIconRules</class>
<extends>ConfigWidgetBase</extends>
<header>calibre/gui2/preferences/look_feel_tabs.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="../../../../resources/images.qrc"/> <include location="../../../../resources/images.qrc"/>

View File

@ -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.ebooks.metadata.book.render import DEFAULT_AUTHOR_LINK
from calibre.gui2 import choose_files, choose_save_file, error_dialog from calibre.gui2 import choose_files, choose_save_file, error_dialog
from calibre.gui2.book_details import get_field_list 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 from calibre.gui2.ui import get_gui
@ -167,6 +169,47 @@ class DisplayedFields(QAbstractListModel):
return idx 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): def export_layout(in_widget, model=None):
filename = choose_save_file(in_widget, 'look_feel_prefs_import_export_field_list', filename = choose_save_file(in_widget, 'look_feel_prefs_import_export_field_list',
_('Save column list to file'), _('Save column list to file'),