diff --git a/src/calibre/gui2/dialogs/template_dialog.ui b/src/calibre/gui2/dialogs/template_dialog.ui index cb98554c12..6ad74354f2 100644 --- a/src/calibre/gui2/dialogs/template_dialog.ui +++ b/src/calibre/gui2/dialogs/template_dialog.ui @@ -170,9 +170,7 @@ - - - + T&emplate: @@ -184,20 +182,9 @@ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - Qt::Horizontal - - - - 1 - 0 - - - - + + + @@ -211,15 +198,9 @@ you the value as well as all the local variables</p> - - - QFrame::VLine - - - QFrame::Raised - - - 3 + + + go_button @@ -241,15 +222,9 @@ you the value as well as all the local variables</p> - - - QFrame::VLine - - - QFrame::Raised - - - 3 + + + go_button @@ -303,15 +278,9 @@ you the value as well as all the local variables</p> - - - QFrame::VLine - - - QFrame::Raised - - - 3 + + + go_button @@ -773,11 +742,21 @@ you the value as well as all the local variables</p> QPushButton
calibre/gui2/widgets2.h
+ + FlowLayout + QLayout +
calibre/gui2/widgets2.h
+
BoxLayout QBoxLayout
calibre/gui2/dialogs/template_dialog_box_layout.h
+ + Separator + QWidget +
calibre/gui2/widgets2.h
+
CodeEditor QPlainTextEdit diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index dc94eb7623..701d4ef847 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -533,9 +533,10 @@ class CoverDelegate(QStyledItemDelegate): for i, (kind, column, rule) in enumerate(emblem_rules): icon_name, mi = self.render_emblem(book_id, rule, i, m.cover_grid_emblem_cache, mi, db, m.formatter, m.cover_grid_template_cache) if icon_name is not None: - pixmap = self.cached_emblem(m.cover_grid_bitmap_cache, icon_name) - if pixmap is not None: - emblems.append(pixmap) + for one_icon in filter(None, (i.strip() for i in icon_name.split(':'))): + pixmap = self.cached_emblem(m.cover_grid_bitmap_cache, one_icon) + if pixmap is not None: + emblems.append(pixmap) if marked: emblems.insert(0, self.cached_emblem(m.cover_grid_bitmap_cache, ':marked', m.marked_icon)) if on_device: diff --git a/src/calibre/gui2/preferences/coloring.py b/src/calibre/gui2/preferences/coloring.py index f78274d69d..180d9922b6 100644 --- a/src/calibre/gui2/preferences/coloring.py +++ b/src/calibre/gui2/preferences/coloring.py @@ -6,27 +6,33 @@ __license__ = 'GPL v3' __copyright__ = '2011, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import os, textwrap, json +import json +import os +import textwrap +from qt.core import ( + QAbstractItemView, QAbstractListModel, QApplication, QCheckBox, QComboBox, + QDialog, QDialogButtonBox, QDoubleValidator, QFrame, QGridLayout, QIcon, + QIntValidator, QItemSelectionModel, QLabel, QLineEdit, QListView, QMenu, + QPalette, QPushButton, QScrollArea, QSize, QSizePolicy, QSpacerItem, + QStandardItem, QStandardItemModel, Qt, QToolButton, QVBoxLayout, QWidget, + pyqtSignal +) -from qt.core import (QWidget, QDialog, QLabel, QGridLayout, QComboBox, QSize, - QLineEdit, QIntValidator, QDoubleValidator, QFrame, Qt, QIcon, QHBoxLayout, - QScrollArea, QPushButton, QVBoxLayout, QDialogButtonBox, QToolButton, QItemSelectionModel, - QListView, QAbstractListModel, pyqtSignal, QSizePolicy, QSpacerItem, QPalette, - QApplication, QStandardItem, QStandardItemModel, QCheckBox, QMenu, QAbstractItemView, - QColor, QBrush, QPixmap, QPainter) - -from calibre import prepare_string_for_xml, sanitize_file_name, as_unicode +from calibre import as_unicode, prepare_string_for_xml, sanitize_file_name from calibre.constants import config_dir -from calibre.utils.icu import sort_key -from calibre.gui2 import (error_dialog, choose_files, pixmap_to_data, gprefs, - choose_save_file, open_local_file) +from calibre.gui2 import ( + choose_files, choose_save_file, error_dialog, gprefs, open_local_file, + pixmap_to_data +) from calibre.gui2.dialogs.template_dialog import TemplateDialog from calibre.gui2.metadata.single_download import RichTextDelegate -from calibre.gui2.widgets2 import ColorButton, FlowLayout -from calibre.library.coloring import (Rule, conditionable_columns, - displayable_columns, rule_from_template, color_row_key) +from calibre.gui2.widgets2 import ColorButton, FlowLayout, Separator +from calibre.library.coloring import ( + Rule, color_row_key, conditionable_columns, displayable_columns, + rule_from_template +) +from calibre.utils.icu import lower, sort_key from calibre.utils.localization import lang_map -from calibre.utils.icu import lower from polyglot.builtins import iteritems, unicode_type all_columns_string = _('All columns') @@ -896,33 +902,6 @@ class RulesView(QListView): # {{{ # }}} -class Separator(QWidget): # {{{ - - def __init__(self, parent, widget_for_height): - QWidget.__init__(self, parent) - self.bcol = QColor(QPalette.ColorRole.Text) - self.update_brush() - self.widget_for_height = widget_for_height - self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.MinimumExpanding) - - def update_brush(self): - self.brush = QBrush(self.bcol) - self.update() - - def sizeHint(self): - return QSize(1, self.widget_for_height.height()) - - def paintEvent(self, ev): - painter = QPainter(self) - # Purely subjective: shorten the line a bit to look 'better' - r = ev.rect() - r.setTop(r.top() + 3) - r.setBottom(r.bottom() - 3) - painter.fillRect(r, self.brush) - painter.end() -# }}} - - class EditRules(QWidget): # {{{ changed = pyqtSignal() diff --git a/src/calibre/gui2/widgets2.py b/src/calibre/gui2/widgets2.py index cc6143e0c3..617d93c651 100644 --- a/src/calibre/gui2/widgets2.py +++ b/src/calibre/gui2/widgets2.py @@ -10,7 +10,7 @@ from qt.core import ( QFontInfo, QFontMetrics, QIcon, QKeySequence, QLabel, QLayout, QMenu, QMimeData, QPalette, QPixmap, QPoint, QPushButton, QRect, QScrollArea, QSize, QSizePolicy, QStyle, QStyledItemDelegate, Qt, QTabWidget, QTextBrowser, QToolButton, QTextCursor, - QUndoCommand, QUndoStack, QUrl, QWidget, pyqtSignal + QUndoCommand, QUndoStack, QUrl, QWidget, pyqtSignal, QBrush, QPainter ) from calibre.ebooks.metadata import rating_to_stars @@ -440,6 +440,43 @@ class FlowLayout(QLayout): # {{{ # }}} +class Separator(QWidget): # {{{ + + ''' Vertical separator lines usable in FlowLayout ''' + + def __init__(self, parent, widget_for_height=None): + ''' + You must provide a widget in the layout either here or with setBuddy. + The height of the separator is computed using this widget, + ''' + QWidget.__init__(self, parent) + self.bcol = QColor(QPalette.ColorRole.Text) + self.update_brush() + self.widget_for_height = widget_for_height + self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.MinimumExpanding) + + def update_brush(self): + self.brush = QBrush(self.bcol) + self.update() + + def setBuddy(self, widget_for_height): + ''' See __init__. This is repurposed to support Qt Designer .ui files. ''' + self.widget_for_height = widget_for_height + + def sizeHint(self): + return QSize(1, 1 if self.widget_for_height is None else self.widget_for_height.height()) + + def paintEvent(self, ev): + painter = QPainter(self) + # Purely subjective: shorten the line a bit to look 'better' + r = ev.rect() + r.setTop(r.top() + 3) + r.setBottom(r.bottom() - 3) + painter.fillRect(r, self.brush) + painter.end() +# }}} + + class HTMLDisplay(QTextBrowser): anchor_clicked = pyqtSignal(object)