From 8a86cc17345de2ec5e2a676f369146cdfa93716e Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Sat, 7 Mar 2020 15:24:17 +0000 Subject: [PATCH] Enhancement requests #1866405 (Filter available items) and #1866400 (Add languages to categories) --- src/calibre/gui2/dialogs/tag_categories.py | 16 ++++++--- src/calibre/gui2/dialogs/tag_categories.ui | 39 ++++++++++++++++++---- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/calibre/gui2/dialogs/tag_categories.py b/src/calibre/gui2/dialogs/tag_categories.py index af3caeafdb..6436626713 100644 --- a/src/calibre/gui2/dialogs/tag_categories.py +++ b/src/calibre/gui2/dialogs/tag_categories.py @@ -10,7 +10,7 @@ from calibre.gui2.dialogs.tag_categories_ui import Ui_TagCategories from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2 import error_dialog from calibre.constants import islinux -from calibre.utils.icu import sort_key, strcmp +from calibre.utils.icu import sort_key, strcmp, primary_contains from polyglot.builtins import iteritems, unicode_type @@ -72,9 +72,11 @@ class TagCategories(QDialog, Ui_TagCategories): lambda: [t.original_name.replace('|', ',') for t in self.db_categories['authors']], lambda: [t.original_name for t in self.db_categories['series']], lambda: [t.original_name for t in self.db_categories['publisher']], - lambda: [t.original_name for t in self.db_categories['tags']] + lambda: [t.original_name for t in self.db_categories['tags']], + lambda: [t.original_name for t in self.db_categories['languages']] ] - category_names = ['', _('Authors'), ngettext('Series', 'Series', 2), _('Publishers'), _('Tags')] + category_names = ['', _('Authors'), ngettext('Series', 'Series', 2), + _('Publishers'), _('Tags'), _('Languages')] for key,cc in iteritems(self.db.custom_field_metadata()): if cc['datatype'] in ['text', 'series', 'enumeration']: @@ -106,6 +108,7 @@ class TagCategories(QDialog, Ui_TagCategories): self.category_box.currentIndexChanged[int].connect(self.select_category) self.category_filter_box.currentIndexChanged[int].connect( self.display_filtered_categories) + self.item_filter_box.textEdited.connect(self.display_filtered_items) self.delete_category_button.clicked.connect(self.del_category) if islinux: self.available_items_box.itemDoubleClicked.connect(self.apply_tags) @@ -168,14 +171,19 @@ class TagCategories(QDialog, Ui_TagCategories): w.setToolTip(_('Category lookup name: ') + item.label) return w + def display_filtered_items(self, text): + self.display_filtered_categories(None) + def display_filtered_categories(self, idx): idx = idx if idx is not None else self.category_filter_box.currentIndex() self.available_items_box.clear() self.applied_items_box.clear() + item_filter = self.item_filter_box.text() for item in self.all_items_sorted: if idx == 0 or item.label == self.category_labels[idx]: if item.index not in self.applied_items and item.exists: - self.available_items_box.addItem(self.make_list_widget(item)) + if primary_contains(item_filter, item.name): + self.available_items_box.addItem(self.make_list_widget(item)) for index in self.applied_items: self.applied_items_box.addItem(self.make_list_widget(self.all_items[index])) diff --git a/src/calibre/gui2/dialogs/tag_categories.ui b/src/calibre/gui2/dialogs/tag_categories.ui index 198a99d4b2..7274a9bf88 100644 --- a/src/calibre/gui2/dialogs/tag_categories.ui +++ b/src/calibre/gui2/dialogs/tag_categories.ui @@ -33,7 +33,7 @@ category_box - + @@ -64,6 +64,26 @@ + + + + Item &filter: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + item_filter_box + + + + + + + Enter text to filter the available items. Case and accents are ignored. + + + @@ -136,6 +156,13 @@ + + + + + + + @@ -152,7 +179,7 @@ - + true @@ -165,7 +192,7 @@ - + Apply tags to current tag category @@ -189,7 +216,7 @@ - + true @@ -199,7 +226,7 @@ - + Unapply (remove) tag from current tag category @@ -213,7 +240,7 @@ - + Qt::Horizontal