Enhancement #1880174: Delete tags in Tag Manager by pressing "delete" key

This commit is contained in:
Charles Haley 2020-05-23 10:28:47 +01:00
parent 1e275fc669
commit ef63b9bff9
3 changed files with 42 additions and 26 deletions

View File

@ -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(
'<p>'+_('Are you sure you want to delete the following items?')+'<br>'+ct,
'tag_list_editor_delete'):
return
if to_undel:
ct = ', '.join([unicode_type(item.text()) for item in to_undel])
if not confirm(
'<p>'+_('Are you sure you want to undelete the following items?')+'<br>'+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:

View File

@ -197,7 +197,7 @@
</layout>
</item>
<item row="2" column="1" colspan="4">
<widget class="QTableWidget" name="table">
<widget class="TleTableWidget" name="table">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
@ -224,6 +224,12 @@
<extends>QLineEdit</extends>
<header>calibre/gui2/widgets.h</header>
</customwidget>
<customwidget>
<class>TleTableWidget</class>
<extends>QTableWidget</extends>
<header>calibre/gui2/dialogs/tag_list_editor_table_widget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../../../../resources/images.qrc"/>

View File

@ -0,0 +1,20 @@
#!/usr/bin/env python2
# vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2008, Kovid Goyal <kovid at kovidgoyal.net>
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)