From da99ac4280e36e34c8e305e66b12a4392ff85138 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 27 Apr 2021 11:15:14 +0530 Subject: [PATCH] Elide long items in the middle when showing the completion popup for tags, to make it easier to use with hierarchical tags. Fixes #1925247 [Enhancement request: Autocomplete elision options](https://bugs.launchpad.net/calibre/+bug/1925247) --- src/calibre/gui2/complete2.py | 6 ++++++ src/calibre/gui2/dialogs/metadata_bulk.py | 2 ++ src/calibre/gui2/library/delegates.py | 2 ++ src/calibre/gui2/metadata/basic_widgets.py | 1 + 4 files changed, 11 insertions(+) diff --git a/src/calibre/gui2/complete2.py b/src/calibre/gui2/complete2.py index 3dcb64f8f4..e9247113a0 100644 --- a/src/calibre/gui2/complete2.py +++ b/src/calibre/gui2/complete2.py @@ -335,6 +335,9 @@ class LineEdit(QLineEdit, LineEditECM): @disable_popup.setter def disable_popup(self, val): self.mcompleter.disable_popup = bool(val) + + def set_elide_mode(self, val): + self.mcompleter.setTextElideMode(val) # }}} def event(self, ev): @@ -474,6 +477,9 @@ class EditWithComplete(EnComboBox): @disable_popup.setter def disable_popup(self, val): self.lineEdit().disable_popup = bool(val) + + def set_elide_mode(self, val): + self.lineEdit().set_elide_mode(val) # }}} def text(self): diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 3fd5ba0d3e..7fad658ffb 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -510,7 +510,9 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): all_tags = self.db.new_api.all_field_names('tags') self.tags.update_items_cache(all_tags) + self.tags.set_elide_mode(Qt.TextElideMode.ElideMiddle) self.remove_tags.update_items_cache(all_tags) + self.remove_tags.set_elide_mode(Qt.TextElideMode.ElideMiddle) self.initialize_combos() diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index f65406ba54..39c5573365 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -358,6 +358,8 @@ class CompleteDelegate(QStyledItemDelegate, UpdateEditorGeometry): # {{{ m.setData(index, self.sep.join(d.tags), Qt.ItemDataRole.EditRole) return None editor = EditWithComplete(parent) + if col == 'tags': + editor.set_elide_mode(Qt.TextElideMode.ElideMiddle) editor.set_separator(self.sep) editor.set_space_before_sep(self.space_before_sep) if self.sep == '&': diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py index 3521b3752a..71a7b2c352 100644 --- a/src/calibre/gui2/metadata/basic_widgets.py +++ b/src/calibre/gui2/metadata/basic_widgets.py @@ -1379,6 +1379,7 @@ class TagsEdit(EditWithComplete, ToMetadataMixin): # {{{ def __init__(self, parent): EditWithComplete.__init__(self, parent) + self.set_elide_mode(Qt.TextElideMode.ElideMiddle) self.currentTextChanged.connect(self.data_changed) self.lineEdit().setMaxLength(655360) # see https://bugs.launchpad.net/bugs/1630944 self.books_to_refresh = set()