diff --git a/src/calibre/gui2/dialogs/tag_list_editor.py b/src/calibre/gui2/dialogs/tag_list_editor.py index e034bd2b88..ad8493a966 100644 --- a/src/calibre/gui2/dialogs/tag_list_editor.py +++ b/src/calibre/gui2/dialogs/tag_list_editor.py @@ -188,6 +188,7 @@ class TagListEditor(QDialog, Ui_TagListEditor): self.string_contains = contains self.delete_button.clicked.connect(self.delete_tags) + self.table.delete_pressed.connect(self.delete_pressed) self.rename_button.clicked.connect(self.rename_tag) self.undo_button.clicked.connect(self.undo_edit) self.table.itemDoubleClicked.connect(self._rename_tag) @@ -452,6 +453,10 @@ class TagListEditor(QDialog, Ui_TagListEditor): else: self.table.editItem(item) + def delete_pressed(self): + if self.table.currentColumn() == 0: + self.delete_tags() + def delete_tags(self): deletes = self.table.selectedItems() if not deletes: @@ -460,41 +465,26 @@ class TagListEditor(QDialog, Ui_TagListEditor): return to_del = [] - to_undel = [] for item in deletes: - if item.is_deleted: - to_undel.append(item) - else: + if not item.is_deleted: to_del.append(item) + if to_del: ct = ', '.join([unicode_type(item.text()) for item in to_del]) if not confirm( '

'+_('Are you sure you want to delete the following items?')+'
'+ct, 'tag_list_editor_delete'): return - if to_undel: - ct = ', '.join([unicode_type(item.text()) for item in to_undel]) - if not confirm( - '

'+_('Are you sure you want to undelete the following items?')+'
'+ct, - 'tag_list_editor_undelete'): - return + row = self.table.row(deletes[0]) + self.table.blockSignals(True) for item in deletes: - if item.is_deleted: - item.set_is_deleted(False) - self.to_delete.discard(int(item.data(Qt.UserRole))) - orig = self.table.item(item.row(), 2) - self.table.blockSignals(True) - orig.setData(Qt.DisplayRole, '') - self.table.blockSignals(False) - else: - id = int(item.data(Qt.UserRole)) - self.to_delete.add(id) - item.set_is_deleted(True) - orig = self.table.item(item.row(), 2) - self.table.blockSignals(True) - orig.setData(Qt.DisplayRole, item.initial_text()) - self.table.blockSignals(False) + id_ = int(item.data(Qt.UserRole)) + self.to_delete.add(id_) + item.set_is_deleted(True) + orig = self.table.item(item.row(), 2) + orig.setData(Qt.DisplayRole, item.initial_text()) + self.table.blockSignals(False) if row >= self.table.rowCount(): row = self.table.rowCount() - 1 if row >= 0: diff --git a/src/calibre/gui2/dialogs/tag_list_editor.ui b/src/calibre/gui2/dialogs/tag_list_editor.ui index 031e0e2d39..a0373d32c6 100644 --- a/src/calibre/gui2/dialogs/tag_list_editor.ui +++ b/src/calibre/gui2/dialogs/tag_list_editor.ui @@ -197,7 +197,7 @@ - + true @@ -224,6 +224,12 @@ QLineEdit

calibre/gui2/widgets.h
+ + TleTableWidget + QTableWidget +
calibre/gui2/dialogs/tag_list_editor_table_widget.h
+ 1 +
diff --git a/src/calibre/gui2/dialogs/tag_list_editor_table_widget.py b/src/calibre/gui2/dialogs/tag_list_editor_table_widget.py new file mode 100644 index 0000000000..dbda379bbc --- /dev/null +++ b/src/calibre/gui2/dialogs/tag_list_editor_table_widget.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python2 +# vim:fileencoding=utf-8 +# License: GPLv3 Copyright: 2008, Kovid Goyal +from __future__ import absolute_import, division, print_function, unicode_literals + +from PyQt5.Qt import (Qt, QTableWidget, pyqtSignal) + +class TleTableWidget(QTableWidget): + + delete_pressed = pyqtSignal() + + def __init__(self, parent=None): + QTableWidget.__init__(self, parent=parent) + + def keyPressEvent(self, event): + if event.key() == Qt.Key_Delete: + self.delete_pressed.emit() + event.accept() + return + return QTableWidget.keyPressEvent(self, event)