mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Enhancement #2015114: Offer to rename enumerated values
This commit is contained in:
parent
c33df89ce2
commit
cbcb17655c
@ -1,10 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
# License: GPLv3 Copyright: 2020, Charles Haley
|
||||
|
||||
from qt.core import (QDialog, QColor, QDialogButtonBox, QHeaderView,
|
||||
QGridLayout, QTableWidget,
|
||||
QTableWidgetItem, QVBoxLayout, QToolButton, QIcon,
|
||||
QAbstractItemView, QComboBox)
|
||||
from qt.core import (Qt, QDialog, QColor, QDialogButtonBox, QHeaderView,
|
||||
QGridLayout, QTableWidget, QTableWidgetItem, QVBoxLayout,
|
||||
QToolButton, QIcon, QAbstractItemView, QComboBox)
|
||||
|
||||
from calibre.gui2 import error_dialog, gprefs
|
||||
|
||||
@ -53,12 +52,13 @@ class EnumValuesEdit(QDialog):
|
||||
t.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
|
||||
tl.addWidget(t)
|
||||
|
||||
self.key = key
|
||||
self.fm = fm = db.field_metadata[key]
|
||||
permitted_values = fm.get('display', {}).get('enum_values', '')
|
||||
colors = fm.get('display', {}).get('enum_colors', '')
|
||||
t.setRowCount(len(permitted_values))
|
||||
for i,v in enumerate(permitted_values):
|
||||
t.setItem(i, 0, QTableWidgetItem(v))
|
||||
self.make_name_item(i, v)
|
||||
c = self.make_color_combobox(i, -1)
|
||||
if colors:
|
||||
c.setCurrentIndex(c.findText(colors[i]))
|
||||
@ -85,10 +85,19 @@ class EnumValuesEdit(QDialog):
|
||||
sz.setHeight(max(sz.height(), 400))
|
||||
return sz
|
||||
|
||||
def make_name_item(self, row, txt):
|
||||
it = QTableWidgetItem(txt)
|
||||
it.setData(Qt.ItemDataRole.UserRole, txt)
|
||||
it.setCheckState(Qt.CheckState.Unchecked)
|
||||
it.setToolTip('<p>' + _('Check the box if you change the value and want it renamed in books where it is used') + '</p>')
|
||||
self.table.setItem(row, 0, it)
|
||||
|
||||
def make_color_combobox(self, row, dex):
|
||||
c = QComboBox(self)
|
||||
c.addItem('')
|
||||
c.addItems(QColor.colorNames())
|
||||
c.setToolTip('<p>' + _('Selects the color of the text when displayed in the book list. '
|
||||
'Either all rows must have a color or no rows have a color') + '</p>')
|
||||
self.table.setCellWidget(row, 1, c)
|
||||
if dex >= 0:
|
||||
c.setCurrentIndex(dex)
|
||||
@ -105,12 +114,12 @@ class EnumValuesEdit(QDialog):
|
||||
self.move_row(row, -1)
|
||||
|
||||
def move_row(self, row, direction):
|
||||
t = self.table.item(row, 0).text()
|
||||
t = self.table.takeItem(row, 0)
|
||||
c = self.table.cellWidget(row, 1).currentIndex()
|
||||
self.table.removeRow(row)
|
||||
row += direction
|
||||
self.table.insertRow(row)
|
||||
self.table.setItem(row, 0, QTableWidgetItem(t))
|
||||
self.table.setItem(row, 0, t)
|
||||
self.make_color_combobox(row, c)
|
||||
self.table.setCurrentCell(row, 0)
|
||||
|
||||
@ -135,11 +144,8 @@ class EnumValuesEdit(QDialog):
|
||||
_('Select a cell before clicking the button'), show=True)
|
||||
return
|
||||
self.table.insertRow(row)
|
||||
self.table.setItem(row, 0, QTableWidgetItem())
|
||||
c = QComboBox(self)
|
||||
c.addItem('')
|
||||
c.addItems(QColor.colorNames())
|
||||
self.table.setCellWidget(row, 1, c)
|
||||
self.make_name_item(row, '')
|
||||
self.make_color_combobox(row, -1)
|
||||
|
||||
def save_geometry(self):
|
||||
super().save_geometry(gprefs, 'enum-values-edit-geometry')
|
||||
@ -148,12 +154,18 @@ class EnumValuesEdit(QDialog):
|
||||
disp = self.fm['display']
|
||||
values = []
|
||||
colors = []
|
||||
id_map = {}
|
||||
for i in range(0, self.table.rowCount()):
|
||||
v = str(self.table.item(i, 0).text())
|
||||
it = self.table.item(i, 0)
|
||||
v = str(it.text())
|
||||
if not v:
|
||||
error_dialog(self, _('Empty value'),
|
||||
_('Empty values are not allowed'), show=True)
|
||||
return
|
||||
ov = str(it.data(Qt.ItemDataRole.UserRole))
|
||||
if v != ov and it.checkState() == Qt.CheckState.Checked:
|
||||
fid = self.db.new_api.get_item_id(self.key, ov)
|
||||
id_map[fid] = v
|
||||
values.append(v)
|
||||
c = str(self.table.cellWidget(i, 1).currentText())
|
||||
if c:
|
||||
@ -177,8 +189,11 @@ class EnumValuesEdit(QDialog):
|
||||
disp['enum_colors'] = colors
|
||||
self.db.set_custom_column_metadata(self.fm['colnum'], display=disp,
|
||||
update_last_modified=True)
|
||||
if id_map:
|
||||
self.db.new_api.rename_items(self.key, id_map)
|
||||
self.save_geometry()
|
||||
return QDialog.accept(self)
|
||||
|
||||
def reject(self):
|
||||
self.save_geometry()
|
||||
return QDialog.reject(self)
|
||||
|
@ -213,6 +213,7 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
||||
self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setText(_('&OK'))
|
||||
self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setText(_('&Cancel'))
|
||||
self.buttonBox.accepted.connect(self.accepted)
|
||||
self.buttonBox.rejected.connect(self.rejected)
|
||||
|
||||
self.search_box.initialize('tag_list_search_box_' + cat_name)
|
||||
le = self.search_box.lineEdit()
|
||||
@ -682,3 +683,6 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
||||
def accepted(self):
|
||||
self.links = {self.table.item(r, 0).text():self.table.item(r, 3).text() for r in range(self.table.rowCount())}
|
||||
self.save_geometry()
|
||||
|
||||
def rejected(self):
|
||||
self.save_geometry()
|
||||
|
Loading…
x
Reference in New Issue
Block a user