Clean up Cases Display

Subclass QTableModel to return checkbox indicators.
Fix column headers
This commit is contained in:
Christopher T. Johnson
2025-02-20 17:41:10 -05:00
parent eaaa00890e
commit 72a262c718

View File

@@ -40,11 +40,10 @@ class dateDelegate(QStyledItemDelegate):
options = cast(QStyleOptionViewItemInit, option) options = cast(QStyleOptionViewItemInit, option)
super().initStyleOption(options, index) super().initStyleOption(options, index)
assert isinstance(index, QModelIndex) assert isinstance(index, QModelIndex)
if index.siblingAtColumn(5).data() == 0: if index.siblingAtColumn(5).data(Qt.ItemDataRole.CheckStateRole) == Qt.CheckState.Unchecked:
options.backgroundBrush = QColor(0x444444) options.backgroundBrush = QColor(0x444444)
return return
class activeDelegate(QStyledItemDelegate): class activeDelegate(QStyledItemDelegate):
def initStyleOption( def initStyleOption(
self, self,
@@ -55,10 +54,35 @@ class activeDelegate(QStyledItemDelegate):
options = cast(QStyleOptionViewItemInit, option) options = cast(QStyleOptionViewItemInit, option)
super().initStyleOption(options, index) super().initStyleOption(options, index)
assert isinstance(index, QModelIndex) assert isinstance(index, QModelIndex)
if index.siblingAtColumn(5).data() == 0: if index.siblingAtColumn(5).data(Qt.ItemDataRole.CheckStateRole) == Qt.CheckState.Unchecked:
options.backgroundBrush = QColor(0x444444) options.backgroundBrush = QColor(0x444444)
return return
class casesModel(QSqlTableModel):
def flags(self, index: QModelIndex | QPersistentModelIndex) -> Qt.ItemFlag:
if not index.isValid():
return Qt.ItemFlag.NoItemFlags
flags = super(casesModel,self).flags(index)
if index.column() == 5:
flags = Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsEditable | Qt.ItemFlag.ItemIsUserCheckable
return flags
def data(self, index: QModelIndex | QPersistentModelIndex, role: int) -> Any:
if not index.isValid():
return None
if index.column() == 5:
if role == Qt.ItemDataRole.CheckStateRole:
value = super(casesModel,self).data(index)
return Qt.CheckState.Checked if value == 1 else Qt.CheckState.Unchecked
elif role == Qt.ItemDataRole.DisplayRole:
return ''
return super().data(index, role)
def setData(self, index: QModelIndex | QPersistentModelIndex, value: Any, role: int) -> bool:
if role == Qt.ItemDataRole.CheckStateRole and index.column() == 5:
super(casesModel,self).setData(index, 1 if value else 0)
return True
return super().setData(index, value, role)
class MainWindow(QMainWindow, Ui_MainWindow): class MainWindow(QMainWindow, Ui_MainWindow):
show_entries = Signal(int) show_entries = Signal(int)
@@ -69,13 +93,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
super(MainWindow, self).__init__() super(MainWindow, self).__init__()
self.setupUi(self) self.setupUi(self)
model = QSqlTableModel() model = casesModel()
model.setTable("cases") model.setTable("cases")
model.sort(1, Qt.SortOrder.AscendingOrder) #model.sort(1, Qt.SortOrder.AscendingOrder)
model.setFilter("1=1 ORDER BY SUBSTRING(docket_id, 1, 3), CAST(SUBSTRING(docket_id,4) AS INTEGER)")
model.select() model.select()
model.setHeaderData(1, Qt.Orientation.Horizontal, "Docket") model.setHeaderData(1, Qt.Orientation.Horizontal, "Docket")
model.setHeaderData(2, Qt.Orientation.Horizontal, "Petitioners") model.setHeaderData(2, Qt.Orientation.Horizontal, "Petitioners")
model.setHeaderData(3, Qt.Orientation.Horizontal, "Respondents") model.setHeaderData(3, Qt.Orientation.Horizontal, "Respondents")
model.setHeaderData(4, Qt.Orientation.Horizontal, "Date")
model.setHeaderData(5, Qt.Orientation.Horizontal, "Active")
self.casesView.setModel(model) self.casesView.setModel(model)
self.casesView.setSelectionMode( self.casesView.setSelectionMode(