Change to mysql and QSqlTableModel

This commit is contained in:
Christopher T. Johnson
2025-02-12 10:25:05 -05:00
parent c18ae64a84
commit 860cbe8ff0

View File

@@ -1,22 +1,24 @@
#!venv/bin/python3 #!venv/bin/python3
import datetime import datetime
import re
import sys import sys
from typing import Any, cast from typing import Any, cast
from PySide6.QtCore import ( from PySide6.QtCore import (
QCoreApplication, QCoreApplication,
QDate,
QEvent,
QModelIndex, QModelIndex,
QObject,
QPersistentModelIndex, QPersistentModelIndex,
QRect, QRect,
QSize, QSize,
Qt,
Signal, Signal,
Slot, Slot,
) )
from PySide6.QtGui import QColor, QPainter, QTextDocument from PySide6.QtGui import QColor, QPainter, QTextDocument
from PySide6.QtSql import ( from PySide6.QtSql import (
QSqlDatabase, QSqlDatabase,
QSqlQuery,
QSqlTableModel, QSqlTableModel,
) )
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
@@ -31,7 +33,6 @@ from PySide6.QtWidgets import (
) )
from docketModel import docketModel from docketModel import docketModel
from lib.utils import query_error
from ui.MainWindow import Ui_MainWindow from ui.MainWindow import Ui_MainWindow
from workers import loadCases, updateThread from workers import loadCases, updateThread
@@ -39,9 +40,8 @@ translate = QCoreApplication.translate
class dateDelegate(QStyledItemDelegate): class dateDelegate(QStyledItemDelegate):
def displayText(self, value: int, _: Any) -> str: def displayText(self, value: QDate, _: Any) -> str:
date = datetime.date.fromtimestamp(value) return value.toString("MMMM d, yyyy")
return date.strftime("%B %-d, %Y")
class QStyleOptionViewItemInit(QStyleOptionViewItem): class QStyleOptionViewItemInit(QStyleOptionViewItem):
@@ -61,7 +61,7 @@ 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(6).data() == 0: if index.siblingAtColumn(5).data() == 0:
options.backgroundBrush = QColor(0x444444) options.backgroundBrush = QColor(0x444444)
return return
@@ -80,6 +80,16 @@ class documentDelegate(QStyledItemDelegate):
options.backgroundBrush = QColor(0x444444) options.backgroundBrush = QColor(0x444444)
return return
def eventFilter(self, object: QObject, event: QEvent) -> bool:
if event.type() in [ QEvent.Type.MouseButtonPress,
QEvent.Type.MouseButtonRelease]:
return False
return super().eventFilter(object, event)
def event(self, ev:QEvent) -> bool:
print(ev)
return super(documentDelegate,self).event(ev)
def paint( def paint(
self, self,
painter: QPainter, painter: QPainter,
@@ -130,15 +140,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.loadThread.finished.connect(self.updateDone) self.loadThread.finished.connect(self.updateDone)
self.loadThread.start() self.loadThread.start()
# model = QSqlQueryModel()
model = QSqlTableModel() model = QSqlTableModel()
query = QSqlQuery( model.setTable("cases")
"SELECT * FROM cases ORDER BY SUBSTR(docket_id,1,3), " model.select()
"CAST(SUBSTR(docket_id,4) AS INT)" model.setHeaderData(1, Qt.Orientation.Horizontal, "Docket")
) model.setHeaderData(2, Qt.Orientation.Horizontal, "Petitioners")
if not query.exec(): model.setHeaderData(3, Qt.Orientation.Horizontal, "Respondents")
query_error(query)
model.setQuery(query)
self.casesView.setModel(model) self.casesView.setModel(model)
self.casesView.setSelectionMode( self.casesView.setSelectionMode(
@@ -148,14 +155,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
QAbstractItemView.SelectionBehavior.SelectRows QAbstractItemView.SelectionBehavior.SelectRows
) )
self.casesView.hideColumn(0) self.casesView.hideColumn(0)
self.casesView.hideColumn(2)
self.casesView.setItemDelegateForColumn(5, dateDelegate())
self.casesView.setItemDelegate(activeDelegate()) self.casesView.setItemDelegate(activeDelegate())
self.casesView.setItemDelegateForColumn(4, dateDelegate())
self.casesView.resizeColumnToContents(1) self.casesView.resizeColumnToContents(1)
self.casesView.resizeColumnToContents(5) self.casesView.resizeColumnToContents(5)
header = self.casesView.horizontalHeader() header = self.casesView.horizontalHeader()
header.setSectionResizeMode(2, QHeaderView.ResizeMode.Fixed)
header.setSectionResizeMode(3, QHeaderView.ResizeMode.Fixed) header.setSectionResizeMode(3, QHeaderView.ResizeMode.Fixed)
header.setSectionResizeMode(4, QHeaderView.ResizeMode.Fixed)
self.show() self.show()
remaining = ( remaining = (
self.casesView.width() self.casesView.width()
@@ -163,8 +169,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
- header.sectionSize(5) - header.sectionSize(5)
- 5 - 5
) )
self.casesView.setColumnWidth(2, int(remaining * 0.5))
self.casesView.setColumnWidth(3, int(remaining * 0.5)) self.casesView.setColumnWidth(3, int(remaining * 0.5))
self.casesView.setColumnWidth(4, int(remaining * 0.5))
self.casesView.verticalHeader().hide() self.casesView.verticalHeader().hide()
self.casesView.resizeRowsToContents() self.casesView.resizeRowsToContents()
self.casesView.doubleClicked.connect(self.rowClicked) self.casesView.doubleClicked.connect(self.rowClicked)
@@ -205,6 +211,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.updateThread.start() self.updateThread.start()
return return
@Slot(QModelIndex) # type: ignore
def on_docketView_clicked(self, index: QModelIndex) -> None:
print(f"view clicked, cell: {index.column()}, {index.row()}")
return
@Slot() @Slot()
def updateDone(self) -> None: def updateDone(self) -> None:
self.updateThread = None self.updateThread = None