This commit is contained in:
Christopher T. Johnson
2025-02-14 12:17:43 -05:00
parent bc639c1a95
commit 7c6ffea018
5 changed files with 113 additions and 37 deletions

View File

@@ -1,14 +1,43 @@
from typing import Any, Self, cast 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.QtCore import (
QDate,
QEvent,
QModelIndex,
QObject,
QPersistentModelIndex,
QPoint,
QRect,
QSize,
Qt,
Signal,
Slot,
)
from PySide6.QtGui import (
QColor,
QFont,
QPainter,
QTextDocument,
QTextDocumentFragment,
)
from PySide6.QtSql import QSqlTableModel from PySide6.QtSql import QSqlTableModel
from PySide6.QtWidgets import QAbstractItemView, QHeaderView, QMainWindow, QStyle, QStyleOptionViewItem, QStyledItemDelegate, QTableView, QWidget from PySide6.QtWidgets import (
QAbstractItemView,
QHeaderView,
QMainWindow,
QStyle,
QStyledItemDelegate,
QStyleOptionViewItem,
QTableView,
QWidget,
)
from docketModel import docketModel from docketModel import docketModel
from dockettableview import documentDelegate from dockettableview import documentDelegate
from ui.MainWindow import Ui_MainWindow from ui.MainWindow import Ui_MainWindow
from workers import loadCases, updateThread from workers import loadCases, updateThread
class QStyleOptionViewItemInit(QStyleOptionViewItem): class QStyleOptionViewItemInit(QStyleOptionViewItem):
backgroundBrush: QColor backgroundBrush: QColor
rect: QRect rect: QRect
@@ -16,6 +45,7 @@ class QStyleOptionViewItemInit(QStyleOptionViewItem):
font: QFont font: QFont
text: str text: str
class dateDelegate(QStyledItemDelegate): class dateDelegate(QStyledItemDelegate):
def displayText(self, value: QDate, _: Any) -> str: def displayText(self, value: QDate, _: Any) -> str:
return value.toString("MMMM d, yyyy") return value.toString("MMMM d, yyyy")
@@ -49,7 +79,6 @@ class activeDelegate(QStyledItemDelegate):
return return
class MainWindow(QMainWindow, Ui_MainWindow): class MainWindow(QMainWindow, Ui_MainWindow):
show_entries = Signal(int) show_entries = Signal(int)
@@ -58,9 +87,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self) -> None: def __init__(self) -> None:
super(MainWindow, self).__init__() super(MainWindow, self).__init__()
self.setupUi(self) self.setupUi(self)
#self.loadThread = loadCases() # self.loadThread = loadCases()
#self.loadThread.finished.connect(self.updateDone) # self.loadThread.finished.connect(self.updateDone)
#self.loadThread.start() # self.loadThread.start()
model = QSqlTableModel() model = QSqlTableModel()
model.setTable("cases") model.setTable("cases")
@@ -105,7 +134,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
1, QHeaderView.ResizeMode.Stretch 1, QHeaderView.ResizeMode.Stretch
) )
self.docketView.resizeRowsToContents() self.docketView.resizeRowsToContents()
#self.docketView.setItemDelegateForColumn(1, documentDelegate()) # self.docketView.setItemDelegateForColumn(1, documentDelegate())
return return
@Slot(QModelIndex) # type: ignore @Slot(QModelIndex) # type: ignore
@@ -135,12 +164,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.updateThread.start() self.updateThread.start()
return return
@Slot() @Slot(QPoint) # type: ignore
def clickedEvent(self, pos:QPoint) -> None: def clickedEvent(self, pos: QPoint) -> None:
print(pos) print(pos)
viewport = self.docketView.viewport() viewport = self.docketView.viewport()
print(viewport,viewport.children()) print(viewport, viewport.children())
return return
@Slot() @Slot()
def updateDone(self) -> None: def updateDone(self) -> None:
self.updateThread = None self.updateThread = None

View File

@@ -48,7 +48,9 @@ class docketModel(QAbstractTableModel):
query_error(q2) query_error(q2)
row = [] row = []
while q2.next(): while q2.next():
row.append(f'<a href="{q2.value("url")}">{q2.value("name")}</a>') row.append(
f'<a href="{q2.value("url")}">{q2.value("name")}</a>'
)
if len(row) > 0: if len(row) > 0:
self.entries.append([None, " ".join(row)]) self.entries.append([None, " ".join(row)])
self.endResetModel() self.endResetModel()

View File

@@ -1,10 +1,49 @@
from typing import cast from typing import Any, cast
from PySide6.QtCore import QAbstractItemModel, QDir, QEvent, QFile, QModelIndex, QObject, QPersistentModelIndex, QPoint, QRect, QSize, QUrl, Signal, Qt, Slot
from PySide6.QtGui import QColor, QFont, QMouseEvent, QPainter, QPalette, QShowEvent, QTextDocument from PySide6.QtCore import (
from PySide6.QtWidgets import QApplication, QSizePolicy, QStyle, QStyleOptionViewItem, QStyledItemDelegate, QTableView, QTextEdit, QWidget QAbstractItemModel,
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest QDir,
QEvent,
QFile,
QModelIndex,
QObject,
QPersistentModelIndex,
QPoint,
QRect,
QSize,
Qt,
QUrl,
Signal,
Slot,
)
from PySide6.QtGui import (
QColor,
QFont,
QMouseEvent,
QPainter,
QPalette,
QShowEvent,
QTextDocument,
)
from PySide6.QtNetwork import (
QNetworkAccessManager,
QNetworkReply,
QNetworkRequest,
)
from PySide6.QtWidgets import (
QApplication,
QSizePolicy,
QStyle,
QStyledItemDelegate,
QStyleOptionViewItem,
QTableView,
QTextEdit,
QWidget,
)
from pdfView import PDFViewer from pdfView import PDFViewer
class QStyleOptionViewItemInit(QStyleOptionViewItem): class QStyleOptionViewItemInit(QStyleOptionViewItem):
backgroundBrush: QColor backgroundBrush: QColor
rect: QRect rect: QRect
@@ -12,6 +51,7 @@ class QStyleOptionViewItemInit(QStyleOptionViewItem):
font: QFont font: QFont
text: str text: str
class documentDelegate(QStyledItemDelegate): class documentDelegate(QStyledItemDelegate):
def initStyleOption( def initStyleOption(
self, self,
@@ -71,7 +111,7 @@ class docketEntry(QTextEdit):
print(f"self.size(): {self.size()}") print(f"self.size(): {self.size()}")
if anchor: if anchor:
print(f"Anchors away: {anchor}") print(f"Anchors away: {anchor}")
obj = self obj = cast(QObject, self)
while not isinstance(obj, docketTableView) and obj is not None: while not isinstance(obj, docketTableView) and obj is not None:
obj = obj.parent() obj = obj.parent()
assert obj is not None assert obj is not None
@@ -94,8 +134,8 @@ class docketTableView(QTableView):
clickedEvent = Signal(QPoint) clickedEvent = Signal(QPoint)
anchorSignal = Signal(QModelIndex, str) anchorSignal = Signal(QModelIndex, str)
def __init__(self, parent: QWidget|None = None) -> None: def __init__(self, parent: QWidget | None = None) -> None:
super(docketTableView,self).__init__(parent) super(docketTableView, self).__init__(parent)
self.anchorSignal.connect(self.doAnchor) self.anchorSignal.connect(self.doAnchor)
self.manager.finished.connect(self.getDone) self.manager.finished.connect(self.getDone)
return return
@@ -106,9 +146,10 @@ class docketTableView(QTableView):
self.model().modelReset.connect(self.modelReset) self.model().modelReset.connect(self.modelReset)
print("Setting Model") print("Setting Model")
return return
@Slot(QNetworkReply) # type: ignore
def getDone(self, reply:QNetworkReply) -> None: @Slot(QNetworkReply) # type: ignore
dest = QFile('.'+reply.url().path()) def getDone(self, reply: QNetworkReply) -> None:
dest = QFile("." + reply.url().path())
dest.open(QFile.OpenModeFlag.WriteOnly) dest.open(QFile.OpenModeFlag.WriteOnly)
dest.write(reply.readAll()) dest.write(reply.readAll())
dest.close() dest.close()
@@ -118,32 +159,33 @@ class docketTableView(QTableView):
self.pdf.show() self.pdf.show()
return return
@Slot(QModelIndex, str) # type: ignore @Slot(QModelIndex, str) # type: ignore
def doAnchor(self, index: QModelIndex, anchor: str) -> None: def doAnchor(self, index: QModelIndex, anchor: str) -> None:
url = QUrl(anchor) url = QUrl(anchor)
print(f"{index.row()}, {index.column()} -> {url.path()}") print(f"{index.row()}, {index.column()} -> {url.path()}")
dirs = url.path().split('/') dirs = url.path().split("/")
dirs.pop() dirs.pop()
dirs.pop(0) dirs.pop(0)
currentDir = QDir() currentDir = QDir()
path = '/'.join(dirs) path = "/".join(dirs)
currentDir.mkpath(path) currentDir.mkpath(path)
if QDir('.'+url.path()).exists(): if QDir("." + url.path()).exists():
file = QFile('.'+url.path()) file = QFile("." + url.path())
self.pdf = PDFViewer(self) self.pdf = PDFViewer(self)
self.pdf.load_pdf(file) self.pdf.load_pdf(file)
self.pdf.show() self.pdf.show()
else: else:
self.manager.get(QNetworkRequest(url)) self.manager.get(QNetworkRequest(url))
return return
def modelReset(self) -> None: def modelReset(self) -> None:
model = self.model() model = self.model()
red = QPalette() red = QPalette()
red.setColor(QPalette.ColorRole.Base, Qt.GlobalColor.red) red.setColor(QPalette.ColorRole.Base, Qt.GlobalColor.red)
for row in range(0, model.rowCount()): for row in range(0, model.rowCount()):
index = model.index(row,1) index = model.index(row, 1)
widget = docketEntry() widget = docketEntry()
widget.setHtml(model.data(index,Qt.ItemDataRole.DisplayRole)) widget.setHtml(model.data(index, Qt.ItemDataRole.DisplayRole))
widget.setAutoFillBackground(False) widget.setAutoFillBackground(False)
widget.setReadOnly(True) widget.setReadOnly(True)
widget.setPalette(red) widget.setPalette(red)

View File

@@ -1,7 +1,8 @@
from PySide6.QtCore import QFile from PySide6.QtCore import QFile
from PySide6.QtWidgets import QDialog, QVBoxLayout, QWidget
from PySide6.QtPdfWidgets import QPdfView
from PySide6.QtPdf import QPdfDocument from PySide6.QtPdf import QPdfDocument
from PySide6.QtPdfWidgets import QPdfView
from PySide6.QtWidgets import QDialog, QVBoxLayout, QWidget
class PDFViewer(QDialog): class PDFViewer(QDialog):
pdf_view: QPdfView pdf_view: QPdfView

View File

@@ -10,6 +10,7 @@ from PySide6.QtWidgets import (
from MainWindow import MainWindow from MainWindow import MainWindow
def main() -> int: def main() -> int:
# #
app = QApplication(sys.argv) app = QApplication(sys.argv)