from typing import Any, Self, cast from PySide6.QtCore import QDate, QEvent, QModelIndex, QObject, QPersistentModelIndex, QPoint, QRect, QSize, Signal, Qt, Slot from PySide6.QtGui import QColor, QFont, QPainter, QTextDocument, QTextDocumentFragment from PySide6.QtSql import QSqlTableModel from PySide6.QtWidgets import QAbstractItemView, QHeaderView, QMainWindow, QStyle, QStyleOptionViewItem, QStyledItemDelegate, QTableView, QWidget from docketModel import docketModel from dockettableview import documentDelegate from ui.MainWindow import Ui_MainWindow from workers import loadCases, updateThread class QStyleOptionViewItemInit(QStyleOptionViewItem): backgroundBrush: QColor rect: QRect widget: QWidget font: QFont text: str class dateDelegate(QStyledItemDelegate): def displayText(self, value: QDate, _: Any) -> str: return value.toString("MMMM d, yyyy") def initStyleOption( self, option: QStyleOptionViewItem, index: QModelIndex | QPersistentModelIndex, /, ) -> None: options = cast(QStyleOptionViewItemInit, option) super().initStyleOption(options, index) assert isinstance(index, QModelIndex) if index.siblingAtColumn(5).data() == 0: options.backgroundBrush = QColor(0x444444) return class activeDelegate(QStyledItemDelegate): def initStyleOption( self, option: QStyleOptionViewItem, index: QModelIndex | QPersistentModelIndex, /, ) -> None: options = cast(QStyleOptionViewItemInit, option) super().initStyleOption(options, index) assert isinstance(index, QModelIndex) if index.siblingAtColumn(5).data() == 0: options.backgroundBrush = QColor(0x444444) return class MainWindow(QMainWindow, Ui_MainWindow): show_entries = Signal(int) loadThread = None def __init__(self) -> None: super(MainWindow, self).__init__() self.setupUi(self) #self.loadThread = loadCases() #self.loadThread.finished.connect(self.updateDone) #self.loadThread.start() model = QSqlTableModel() model.setTable("cases") model.sort(1, Qt.SortOrder.AscendingOrder) model.select() model.setHeaderData(1, Qt.Orientation.Horizontal, "Docket") model.setHeaderData(2, Qt.Orientation.Horizontal, "Petitioners") model.setHeaderData(3, Qt.Orientation.Horizontal, "Respondents") self.casesView.setModel(model) self.casesView.setSelectionMode( QAbstractItemView.SelectionMode.SingleSelection ) self.casesView.setSelectionBehavior( QAbstractItemView.SelectionBehavior.SelectRows ) self.casesView.hideColumn(0) self.casesView.setItemDelegate(activeDelegate()) self.casesView.setItemDelegateForColumn(4, dateDelegate()) self.casesView.resizeColumnToContents(1) self.casesView.resizeColumnToContents(4) header = self.casesView.horizontalHeader() header.setSectionResizeMode(2, QHeaderView.ResizeMode.Fixed) header.setSectionResizeMode(3, QHeaderView.ResizeMode.Fixed) self.show() remaining = ( self.casesView.width() - header.sectionSize(1) - header.sectionSize(4) - 5 ) self.casesView.setColumnWidth(2, int(remaining * 0.5)) self.casesView.setColumnWidth(3, int(remaining * 0.5)) self.casesView.verticalHeader().hide() self.casesView.resizeRowsToContents() self.casesView.doubleClicked.connect(self.rowClicked) self.casesView.clicked.connect(self.rowClicked) self.docketView.clickedEvent.connect(self.clickedEvent) self.docketView.setModel(docketModel()) self.docketView.horizontalHeader().setSectionResizeMode( 1, QHeaderView.ResizeMode.Stretch ) self.docketView.resizeRowsToContents() #self.docketView.setItemDelegateForColumn(1, documentDelegate()) return @Slot(QModelIndex) # type: ignore def rowClicked(self, index: QModelIndex) -> None: if not index.isValid(): raise Exception("Bad index") docket = index.siblingAtColumn(1).data() self.docketLabel.setText(docket) self.show_entries.emit(index.siblingAtColumn(0).data()) model = cast(docketModel, self.docketView.model()) model.newCase(index.siblingAtColumn(0).data()) self.docketView.resizeColumnToContents(0) self.docketView.resizeRowsToContents() return updateThread = None @Slot() def on_updateButton_clicked(self) -> None: text = self.docketInput.toPlainText() print(f"on_updateButton_clicked(): {text}") if not self.updateThread: self.updateThread = updateThread() assert isinstance(self.updateThread, updateThread) self.updateThread.finished.connect(self.updateDone) self.updateThread.setDocketId(text) self.updateThread.start() return @Slot() def clickedEvent(self, pos:QPoint) -> None: print(pos) viewport = self.docketView.viewport() print(viewport,viewport.children()) return @Slot() def updateDone(self) -> None: self.updateThread = None print("Done updating") model: QSqlTableModel = cast(QSqlTableModel, self.casesView.model()) query = model.query() query.exec() model.setQuery(query) return