mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Another enum cleanup.
While testing that I found several problems related to adding and editing columns when the table was sorted differently. Also prevented moving rows when the table is sorted by anything but row number ascending. This isn't the nicest fix but making it work with new columns while the sort is descending is harder than I want to deal with tonight.
This commit is contained in:
parent
d16195472c
commit
28257cad31
@ -37,7 +37,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.add_custcol_button.clicked.connect(self.add_custcol)
|
self.add_custcol_button.clicked.connect(self.add_custcol)
|
||||||
self.add_col_button.clicked.connect(self.add_custcol)
|
self.add_col_button.clicked.connect(self.add_custcol)
|
||||||
self.edit_custcol_button.clicked.connect(self.edit_custcol)
|
self.edit_custcol_button.clicked.connect(self.edit_custcol)
|
||||||
self.opt_columns.currentCellChanged.connect(self.current_cell_changed)
|
self.opt_columns.currentItemChanged.connect(self.set_up_down_enabled)
|
||||||
for signal in ('Activated', 'Changed', 'DoubleClicked', 'Clicked'):
|
for signal in ('Activated', 'Changed', 'DoubleClicked', 'Clicked'):
|
||||||
signal = getattr(self.opt_columns, 'item'+signal)
|
signal = getattr(self.opt_columns, 'item'+signal)
|
||||||
signal.connect(self.columns_changed)
|
signal.connect(self.columns_changed)
|
||||||
@ -89,18 +89,22 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
CreateCustomColumn.column_types))
|
CreateCustomColumn.column_types))
|
||||||
|
|
||||||
for row, key in enumerate(colmap):
|
for row, key in enumerate(colmap):
|
||||||
self.setup_row(row, key)
|
self.setup_row(row, key, row)
|
||||||
self.initial_row_count = row
|
self.initial_row_count = row
|
||||||
self.opt_columns.setSortingEnabled(True)
|
self.opt_columns.setSortingEnabled(True)
|
||||||
self.opt_columns.horizontalHeader().setSortIndicator(0, Qt.AscendingOrder)
|
self.opt_columns.horizontalHeader().setSortIndicator(0, Qt.SortOrder.AscendingOrder)
|
||||||
self.restore_geometry()
|
self.restore_geometry()
|
||||||
self.opt_columns.cellDoubleClicked.connect(self.row_double_clicked)
|
self.opt_columns.cellDoubleClicked.connect(self.row_double_clicked)
|
||||||
|
self.opt_columns.setCurrentCell(0, 1)
|
||||||
|
self.set_up_down_enabled(self.opt_columns.currentItem(), None)
|
||||||
self.opt_columns.blockSignals(False)
|
self.opt_columns.blockSignals(False)
|
||||||
|
|
||||||
def current_cell_changed(self, current_row, current_col, prev_row, prev_col):
|
def set_up_down_enabled(self, current_item, _):
|
||||||
if self.opt_columns.horizontalHeader().sortIndicatorSection() == 0:
|
h = self.opt_columns.horizontalHeader()
|
||||||
self.column_up.setEnabled(current_row > 0 and current_row <= self.initial_row_count)
|
row = current_item.row()
|
||||||
self.column_down.setEnabled(current_row < self.initial_row_count)
|
if h.sortIndicatorSection() == 0 and h.sortIndicatorOrder() == Qt.SortOrder.AscendingOrder:
|
||||||
|
self.column_up.setEnabled(row > 0 and row <= self.initial_row_count)
|
||||||
|
self.column_down.setEnabled(row < self.initial_row_count)
|
||||||
|
|
||||||
def columns_changed(self, *args):
|
def columns_changed(self, *args):
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
@ -111,9 +115,12 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
return self.gui.library_view.get_state()
|
return self.gui.library_view.get_state()
|
||||||
|
|
||||||
def table_sorted(self, column):
|
def table_sorted(self, column):
|
||||||
self.column_up.setEnabled(column == 0)
|
h = self.opt_columns.horizontalHeader()
|
||||||
self.column_down.setEnabled(column == 0)
|
enabled = column == 0 and h.sortIndicatorOrder() == Qt.SortOrder.AscendingOrder
|
||||||
|
self.column_up.setEnabled(enabled)
|
||||||
|
self.column_down.setEnabled(enabled)
|
||||||
self.opt_columns.scrollTo(self.opt_columns.currentIndex())
|
self.opt_columns.scrollTo(self.opt_columns.currentIndex())
|
||||||
|
self.set_up_down_enabled(self.opt_columns.currentItem(), _)
|
||||||
|
|
||||||
def row_double_clicked(self, r, c):
|
def row_double_clicked(self, r, c):
|
||||||
self.edit_custcol()
|
self.edit_custcol()
|
||||||
@ -127,7 +134,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
return
|
return
|
||||||
self.opt_columns.resizeColumnsToContents()
|
self.opt_columns.resizeColumnsToContents()
|
||||||
|
|
||||||
def setup_row(self, row, key):
|
def setup_row(self, row, key, order):
|
||||||
flags = Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable
|
flags = Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable
|
||||||
|
|
||||||
if self.is_custom_key(key):
|
if self.is_custom_key(key):
|
||||||
@ -137,9 +144,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
cc = self.field_metadata[key]
|
cc = self.field_metadata[key]
|
||||||
original_key = key
|
original_key = key
|
||||||
|
|
||||||
|
self.opt_columns.setSortingEnabled(False)
|
||||||
item = QTableWidgetItem()
|
item = QTableWidgetItem()
|
||||||
item.setData(Qt.ItemDataRole.DisplayRole, row)
|
item.setData(Qt.ItemDataRole.DisplayRole, order)
|
||||||
item.setToolTip(str(row))
|
item.setToolTip(str(order))
|
||||||
item.setData(Qt.ItemDataRole.UserRole, key)
|
item.setData(Qt.ItemDataRole.UserRole, key)
|
||||||
item.setFlags(flags)
|
item.setFlags(flags)
|
||||||
self.opt_columns.setItem(row, 0, item)
|
self.opt_columns.setItem(row, 0, item)
|
||||||
@ -203,8 +211,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
item.setToolTip(col_status)
|
item.setToolTip(col_status)
|
||||||
item.setFlags(flags)
|
item.setFlags(flags)
|
||||||
self.opt_columns.setItem(row, 5, item)
|
self.opt_columns.setItem(row, 5, item)
|
||||||
|
self.opt_columns.setSortingEnabled(True)
|
||||||
|
|
||||||
def up_column(self):
|
def up_column(self):
|
||||||
|
self.opt_columns.setSortingEnabled(False)
|
||||||
row = self.opt_columns.currentRow()
|
row = self.opt_columns.currentRow()
|
||||||
if row > 0:
|
if row > 0:
|
||||||
for i in range(0, self.opt_columns.columnCount()):
|
for i in range(0, self.opt_columns.columnCount()):
|
||||||
@ -212,12 +222,14 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
upper = self.opt_columns.takeItem(row, i)
|
upper = self.opt_columns.takeItem(row, i)
|
||||||
self.opt_columns.setItem(row, i, lower)
|
self.opt_columns.setItem(row, i, lower)
|
||||||
self.opt_columns.setItem(row-1, i, upper)
|
self.opt_columns.setItem(row-1, i, upper)
|
||||||
self.setup_row(row-1, self.opt_columns.item(row-1, 2).text())
|
self.setup_row(row-1, self.opt_columns.item(row-1, 2).text(), row-1)
|
||||||
self.setup_row(row, self.opt_columns.item(row, 2).text())
|
self.setup_row(row, self.opt_columns.item(row, 2).text(), row)
|
||||||
self.opt_columns.setCurrentCell(row-1, 0)
|
self.opt_columns.setCurrentCell(row-1, 1)
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
|
self.opt_columns.setSortingEnabled(True)
|
||||||
|
|
||||||
def down_column(self):
|
def down_column(self):
|
||||||
|
self.opt_columns.setSortingEnabled(False)
|
||||||
row = self.opt_columns.currentRow()
|
row = self.opt_columns.currentRow()
|
||||||
if row < self.opt_columns.rowCount()-1:
|
if row < self.opt_columns.rowCount()-1:
|
||||||
for i in range(0, self.opt_columns.columnCount()):
|
for i in range(0, self.opt_columns.columnCount()):
|
||||||
@ -225,10 +237,11 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
upper = self.opt_columns.takeItem(row+1, i)
|
upper = self.opt_columns.takeItem(row+1, i)
|
||||||
self.opt_columns.setItem(row+1, i, lower)
|
self.opt_columns.setItem(row+1, i, lower)
|
||||||
self.opt_columns.setItem(row, i, upper)
|
self.opt_columns.setItem(row, i, upper)
|
||||||
self.setup_row(row+1, self.opt_columns.item(row+1, 2).text())
|
self.setup_row(row+1, self.opt_columns.item(row+1, 2).text(), row+1)
|
||||||
self.setup_row(row, self.opt_columns.item(row, 2).text())
|
self.setup_row(row, self.opt_columns.item(row, 2).text(), row)
|
||||||
self.opt_columns.setCurrentCell(row+1, 0)
|
self.opt_columns.setCurrentCell(row+1, 1)
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
|
self.opt_columns.setSortingEnabled(True)
|
||||||
|
|
||||||
def is_new_custom_column(self, cc):
|
def is_new_custom_column(self, cc):
|
||||||
return 'colnum' in cc and cc['colnum'] >= self.initial_created_count
|
return 'colnum' in cc and cc['colnum'] >= self.initial_created_count
|
||||||
@ -255,7 +268,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.opt_columns.removeRow(row)
|
self.opt_columns.removeRow(row)
|
||||||
else:
|
else:
|
||||||
self.custcols[key]['*deleted'] = True
|
self.custcols[key]['*deleted'] = True
|
||||||
self.setup_row(row, key)
|
self.setup_row(row, key, self.column_order_val(row))
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
|
|
||||||
def add_custcol(self):
|
def add_custcol(self):
|
||||||
@ -267,8 +280,15 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.set_new_custom_column(cc)
|
self.set_new_custom_column(cc)
|
||||||
cc['original_key'] = self.cc_column_key
|
cc['original_key'] = self.cc_column_key
|
||||||
row = self.opt_columns.rowCount()
|
row = self.opt_columns.rowCount()
|
||||||
self.opt_columns.setRowCount(row + 1)
|
o = self.opt_columns
|
||||||
self.setup_row(row, self.cc_column_key)
|
o.setRowCount(row + 1)
|
||||||
|
self.setup_row(row, self.cc_column_key, row)
|
||||||
|
# We need to find the new item after sorting
|
||||||
|
for i in range(0, o.rowCount()):
|
||||||
|
if self.column_order_val(i) == row:
|
||||||
|
o.setCurrentCell(i, 1)
|
||||||
|
o.scrollTo(o.currentIndex())
|
||||||
|
break;
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
|
|
||||||
def label_to_lookup_name(self, label):
|
def label_to_lookup_name(self, label):
|
||||||
@ -277,6 +297,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
def is_custom_key(self, key):
|
def is_custom_key(self, key):
|
||||||
return key.startswith('#')
|
return key.startswith('#')
|
||||||
|
|
||||||
|
def column_order_val(self, row):
|
||||||
|
return int(self.opt_columns.item(row, 0).text())
|
||||||
|
|
||||||
def edit_custcol(self):
|
def edit_custcol(self):
|
||||||
model = self.gui.library_view.model()
|
model = self.gui.library_view.model()
|
||||||
row = self.opt_columns.currentRow()
|
row = self.opt_columns.currentRow()
|
||||||
@ -292,7 +315,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
_('The column is to be deleted. Do you want to undelete it?'),
|
_('The column is to be deleted. Do you want to undelete it?'),
|
||||||
show_copy_button=False):
|
show_copy_button=False):
|
||||||
cc.pop('*deleted', None)
|
cc.pop('*deleted', None)
|
||||||
self.setup_row(row, key)
|
self.setup_row(row, key, self.column_order_val(row))
|
||||||
return
|
return
|
||||||
CreateCustomColumn(self.gui, self,
|
CreateCustomColumn(self.gui, self,
|
||||||
self.label_to_lookup_name(self.custcols[key]['label']),
|
self.label_to_lookup_name(self.custcols[key]['label']),
|
||||||
@ -306,7 +329,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
cc = self.custcols[new_key]
|
cc = self.custcols[new_key]
|
||||||
if self.is_new_custom_column(cc):
|
if self.is_new_custom_column(cc):
|
||||||
cc.pop('*edited', None)
|
cc.pop('*edited', None)
|
||||||
self.setup_row(row, new_key)
|
self.setup_row(row, new_key, self.column_order_val(row))
|
||||||
|
self.opt_columns.scrollTo(self.opt_columns.currentIndex())
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
|
Loading…
x
Reference in New Issue
Block a user