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

View File

@@ -24,7 +24,7 @@ class docketModel(QAbstractTableModel):
return
self.newCase(case_id)
return
def newCase(self, case_id: int) -> None:
self.beginResetModel()
self.entries = []
@@ -48,7 +48,9 @@ class docketModel(QAbstractTableModel):
query_error(q2)
row = []
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:
self.entries.append([None, " ".join(row)])
self.endResetModel()

View File

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

View File

@@ -1,12 +1,13 @@
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QDialog, QVBoxLayout, QWidget
from PySide6.QtPdfWidgets import QPdfView
from PySide6.QtPdf import QPdfDocument
from PySide6.QtPdfWidgets import QPdfView
from PySide6.QtWidgets import QDialog, QVBoxLayout, QWidget
class PDFViewer(QDialog):
pdf_view: QPdfView
pdf_document: QPdfDocument
def __init__(self, parent: QWidget) -> None:
super(PDFViewer, self).__init__(parent)

View File

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