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
|
#!/usr/bin/env python
|
||||||
# License: GPLv3 Copyright: 2020, Charles Haley
|
# License: GPLv3 Copyright: 2020, Charles Haley
|
||||||
|
|
||||||
from qt.core import (QDialog, QColor, QDialogButtonBox, QHeaderView,
|
from qt.core import (Qt, QDialog, QColor, QDialogButtonBox, QHeaderView,
|
||||||
QGridLayout, QTableWidget,
|
QGridLayout, QTableWidget, QTableWidgetItem, QVBoxLayout,
|
||||||
QTableWidgetItem, QVBoxLayout, QToolButton, QIcon,
|
QToolButton, QIcon, QAbstractItemView, QComboBox)
|
||||||
QAbstractItemView, QComboBox)
|
|
||||||
|
|
||||||
from calibre.gui2 import error_dialog, gprefs
|
from calibre.gui2 import error_dialog, gprefs
|
||||||
|
|
||||||
@ -53,12 +52,13 @@ class EnumValuesEdit(QDialog):
|
|||||||
t.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
|
t.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
|
||||||
tl.addWidget(t)
|
tl.addWidget(t)
|
||||||
|
|
||||||
|
self.key = key
|
||||||
self.fm = fm = db.field_metadata[key]
|
self.fm = fm = db.field_metadata[key]
|
||||||
permitted_values = fm.get('display', {}).get('enum_values', '')
|
permitted_values = fm.get('display', {}).get('enum_values', '')
|
||||||
colors = fm.get('display', {}).get('enum_colors', '')
|
colors = fm.get('display', {}).get('enum_colors', '')
|
||||||
t.setRowCount(len(permitted_values))
|
t.setRowCount(len(permitted_values))
|
||||||
for i,v in enumerate(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)
|
c = self.make_color_combobox(i, -1)
|
||||||
if colors:
|
if colors:
|
||||||
c.setCurrentIndex(c.findText(colors[i]))
|
c.setCurrentIndex(c.findText(colors[i]))
|
||||||
@ -85,10 +85,19 @@ class EnumValuesEdit(QDialog):
|
|||||||
sz.setHeight(max(sz.height(), 400))
|
sz.setHeight(max(sz.height(), 400))
|
||||||
return sz
|
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):
|
def make_color_combobox(self, row, dex):
|
||||||
c = QComboBox(self)
|
c = QComboBox(self)
|
||||||
c.addItem('')
|
c.addItem('')
|
||||||
c.addItems(QColor.colorNames())
|
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)
|
self.table.setCellWidget(row, 1, c)
|
||||||
if dex >= 0:
|
if dex >= 0:
|
||||||
c.setCurrentIndex(dex)
|
c.setCurrentIndex(dex)
|
||||||
@ -105,12 +114,12 @@ class EnumValuesEdit(QDialog):
|
|||||||
self.move_row(row, -1)
|
self.move_row(row, -1)
|
||||||
|
|
||||||
def move_row(self, row, direction):
|
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()
|
c = self.table.cellWidget(row, 1).currentIndex()
|
||||||
self.table.removeRow(row)
|
self.table.removeRow(row)
|
||||||
row += direction
|
row += direction
|
||||||
self.table.insertRow(row)
|
self.table.insertRow(row)
|
||||||
self.table.setItem(row, 0, QTableWidgetItem(t))
|
self.table.setItem(row, 0, t)
|
||||||
self.make_color_combobox(row, c)
|
self.make_color_combobox(row, c)
|
||||||
self.table.setCurrentCell(row, 0)
|
self.table.setCurrentCell(row, 0)
|
||||||
|
|
||||||
@ -135,11 +144,8 @@ class EnumValuesEdit(QDialog):
|
|||||||
_('Select a cell before clicking the button'), show=True)
|
_('Select a cell before clicking the button'), show=True)
|
||||||
return
|
return
|
||||||
self.table.insertRow(row)
|
self.table.insertRow(row)
|
||||||
self.table.setItem(row, 0, QTableWidgetItem())
|
self.make_name_item(row, '')
|
||||||
c = QComboBox(self)
|
self.make_color_combobox(row, -1)
|
||||||
c.addItem('')
|
|
||||||
c.addItems(QColor.colorNames())
|
|
||||||
self.table.setCellWidget(row, 1, c)
|
|
||||||
|
|
||||||
def save_geometry(self):
|
def save_geometry(self):
|
||||||
super().save_geometry(gprefs, 'enum-values-edit-geometry')
|
super().save_geometry(gprefs, 'enum-values-edit-geometry')
|
||||||
@ -148,12 +154,18 @@ class EnumValuesEdit(QDialog):
|
|||||||
disp = self.fm['display']
|
disp = self.fm['display']
|
||||||
values = []
|
values = []
|
||||||
colors = []
|
colors = []
|
||||||
|
id_map = {}
|
||||||
for i in range(0, self.table.rowCount()):
|
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:
|
if not v:
|
||||||
error_dialog(self, _('Empty value'),
|
error_dialog(self, _('Empty value'),
|
||||||
_('Empty values are not allowed'), show=True)
|
_('Empty values are not allowed'), show=True)
|
||||||
return
|
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)
|
values.append(v)
|
||||||
c = str(self.table.cellWidget(i, 1).currentText())
|
c = str(self.table.cellWidget(i, 1).currentText())
|
||||||
if c:
|
if c:
|
||||||
@ -177,8 +189,11 @@ class EnumValuesEdit(QDialog):
|
|||||||
disp['enum_colors'] = colors
|
disp['enum_colors'] = colors
|
||||||
self.db.set_custom_column_metadata(self.fm['colnum'], display=disp,
|
self.db.set_custom_column_metadata(self.fm['colnum'], display=disp,
|
||||||
update_last_modified=True)
|
update_last_modified=True)
|
||||||
|
if id_map:
|
||||||
|
self.db.new_api.rename_items(self.key, id_map)
|
||||||
self.save_geometry()
|
self.save_geometry()
|
||||||
return QDialog.accept(self)
|
return QDialog.accept(self)
|
||||||
|
|
||||||
def reject(self):
|
def reject(self):
|
||||||
|
self.save_geometry()
|
||||||
return QDialog.reject(self)
|
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.Ok).setText(_('&OK'))
|
||||||
self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setText(_('&Cancel'))
|
self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setText(_('&Cancel'))
|
||||||
self.buttonBox.accepted.connect(self.accepted)
|
self.buttonBox.accepted.connect(self.accepted)
|
||||||
|
self.buttonBox.rejected.connect(self.rejected)
|
||||||
|
|
||||||
self.search_box.initialize('tag_list_search_box_' + cat_name)
|
self.search_box.initialize('tag_list_search_box_' + cat_name)
|
||||||
le = self.search_box.lineEdit()
|
le = self.search_box.lineEdit()
|
||||||
@ -682,3 +683,6 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
|||||||
def accepted(self):
|
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.links = {self.table.item(r, 0).text():self.table.item(r, 3).text() for r in range(self.table.rowCount())}
|
||||||
self.save_geometry()
|
self.save_geometry()
|
||||||
|
|
||||||
|
def rejected(self):
|
||||||
|
self.save_geometry()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user