mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
When editing a selection, change the other items' text to be '*** EDITING ***'.
This commit is contained in:
parent
43715fb699
commit
2259db6657
@ -4,10 +4,13 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from PyQt5.Qt import (Qt, QDialog, QTableWidgetItem, QIcon, QByteArray, QSize,
|
from PyQt5.Qt import (Qt, QDialog, QTableWidgetItem, QIcon, QByteArray, QSize,
|
||||||
QDialogButtonBox, QTableWidget, QItemDelegate, QApplication)
|
QDialogButtonBox, QTableWidget, QItemDelegate, QApplication,
|
||||||
|
QKeyEvent, pyqtSignal, QEvent)
|
||||||
|
|
||||||
from calibre.gui2.dialogs.tag_list_editor_ui import Ui_TagListEditor
|
from calibre.gui2.dialogs.tag_list_editor_ui import Ui_TagListEditor
|
||||||
|
from calibre.gui2.complete2 import EditWithComplete
|
||||||
from calibre.gui2.dialogs.confirm_delete import confirm
|
from calibre.gui2.dialogs.confirm_delete import confirm
|
||||||
|
from calibre.gui2.widgets import EnLineEdit
|
||||||
from calibre.gui2 import question_dialog, error_dialog, gprefs
|
from calibre.gui2 import question_dialog, error_dialog, gprefs
|
||||||
from calibre.utils.icu import sort_key
|
from calibre.utils.icu import sort_key
|
||||||
from polyglot.builtins import unicode_type
|
from polyglot.builtins import unicode_type
|
||||||
@ -76,8 +79,9 @@ class CountTableWidgetItem(QTableWidgetItem):
|
|||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
return self._count < other._count
|
return self._count < other._count
|
||||||
|
|
||||||
|
|
||||||
class EditColumnDelegate(QItemDelegate):
|
class EditColumnDelegate(QItemDelegate):
|
||||||
|
editing_abandoned = pyqtSignal()
|
||||||
|
editing_started = pyqtSignal(int)
|
||||||
|
|
||||||
def __init__(self, table):
|
def __init__(self, table):
|
||||||
QItemDelegate.__init__(self)
|
QItemDelegate.__init__(self)
|
||||||
@ -88,21 +92,28 @@ class EditColumnDelegate(QItemDelegate):
|
|||||||
self.completion_data = data
|
self.completion_data = data
|
||||||
|
|
||||||
def createEditor(self, parent, option, index):
|
def createEditor(self, parent, option, index):
|
||||||
|
self.editing_started.emit(index.row())
|
||||||
if index.column() == 0:
|
if index.column() == 0:
|
||||||
item = self.table.item(index.row(), 0)
|
self.item = self.table.item(index.row(), 0)
|
||||||
if item.is_deleted:
|
if self.item.is_deleted:
|
||||||
return None
|
return None
|
||||||
if self.completion_data:
|
if self.completion_data:
|
||||||
from calibre.gui2.complete2 import EditWithComplete
|
|
||||||
editor = EditWithComplete(parent)
|
editor = EditWithComplete(parent)
|
||||||
editor.set_separator(None)
|
editor.set_separator(None)
|
||||||
editor.update_items_cache(self.completion_data)
|
editor.update_items_cache(self.completion_data)
|
||||||
else:
|
else:
|
||||||
from calibre.gui2.widgets import EnLineEdit
|
|
||||||
editor = EnLineEdit(parent)
|
editor = EnLineEdit(parent)
|
||||||
return editor
|
return editor
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def eventFilter(self, editor, event):
|
||||||
|
if isinstance(event, QKeyEvent):
|
||||||
|
if event.type() == QEvent.KeyPress:
|
||||||
|
k = event.key()
|
||||||
|
if k == Qt.Key_Escape or k == Qt.Key_Tab or (
|
||||||
|
k == Qt.Key_Return and self.item.text() == self.item.initial_text()):
|
||||||
|
self.editing_abandoned.emit()
|
||||||
|
return super(EditColumnDelegate, self).eventFilter(editor, event)
|
||||||
|
|
||||||
class TagListEditor(QDialog, Ui_TagListEditor):
|
class TagListEditor(QDialog, Ui_TagListEditor):
|
||||||
|
|
||||||
@ -152,6 +163,8 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
|||||||
self.was_order = 1
|
self.was_order = 1
|
||||||
|
|
||||||
self.edit_delegate = EditColumnDelegate(self.table)
|
self.edit_delegate = EditColumnDelegate(self.table)
|
||||||
|
self.edit_delegate.editing_abandoned.connect(self.abandon_edit)
|
||||||
|
self.edit_delegate.editing_started.connect(self.start_edit)
|
||||||
self.table.setItemDelegateForColumn(0, self.edit_delegate)
|
self.table.setItemDelegateForColumn(0, self.edit_delegate)
|
||||||
|
|
||||||
# Add the data
|
# Add the data
|
||||||
@ -188,6 +201,21 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def start_edit(self, on_row):
|
||||||
|
items = self.table.selectedItems()
|
||||||
|
self.table.blockSignals(True)
|
||||||
|
for item in items:
|
||||||
|
if item.row() != on_row:
|
||||||
|
item.setText(_('*** EDITING ***'))
|
||||||
|
self.table.blockSignals(False)
|
||||||
|
|
||||||
|
def abandon_edit(self):
|
||||||
|
items = self.table.selectedItems()
|
||||||
|
for item in items:
|
||||||
|
self.table.blockSignals(True)
|
||||||
|
item.setText(item.initial_text())
|
||||||
|
self.table.blockSignals(False)
|
||||||
|
|
||||||
def vl_box_changed(self):
|
def vl_box_changed(self):
|
||||||
self.fill_in_table(None, None)
|
self.fill_in_table(None, None)
|
||||||
|
|
||||||
@ -299,15 +327,14 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
|||||||
self.table.blockSignals(False)
|
self.table.blockSignals(False)
|
||||||
return
|
return
|
||||||
items = self.table.selectedItems()
|
items = self.table.selectedItems()
|
||||||
|
self.table.blockSignals(True)
|
||||||
for item in items:
|
for item in items:
|
||||||
if edited_item.text() != item.initial_text():
|
id_ = int(item.data(Qt.UserRole))
|
||||||
id_ = int(item.data(Qt.UserRole))
|
self.to_rename[id_] = unicode_type(edited_item.text())
|
||||||
self.to_rename[id_] = unicode_type(item.text())
|
orig = self.table.item(item.row(), 2)
|
||||||
orig = self.table.item(item.row(), 2)
|
item.setText(edited_item.text())
|
||||||
self.table.blockSignals(True)
|
orig.setData(Qt.DisplayRole, item.initial_text())
|
||||||
item.setText(edited_item.text())
|
self.table.blockSignals(False)
|
||||||
orig.setData(Qt.DisplayRole, item.initial_text())
|
|
||||||
self.table.blockSignals(False)
|
|
||||||
|
|
||||||
def undo_edit(self):
|
def undo_edit(self):
|
||||||
indexes = self.table.selectionModel().selectedRows()
|
indexes = self.table.selectionModel().selectedRows()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user