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:
Charles Haley 2022-01-06 18:42:48 +00:00
parent d16195472c
commit 28257cad31

View File

@ -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