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