This commit is contained in:
Christopher T. Johnson
2025-02-20 10:14:42 -05:00
parent a48e39d9ac
commit eaaa00890e
5 changed files with 75 additions and 34 deletions

View File

@@ -111,7 +111,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.docketView.horizontalHeader().setSectionResizeMode( self.docketView.horizontalHeader().setSectionResizeMode(
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

View File

@@ -36,21 +36,30 @@ from PySide6.QtWidgets import (
from pdfView import PDFViewer from pdfView import PDFViewer
class docketEntryDelegate(QStyledItemDelegate): class docketEntryDelegate(QStyledItemDelegate):
def __init__(self, view: QAbstractItemView, parent: QWidget|None = None) -> None: def __init__(
self, view: QAbstractItemView, parent: QWidget | None = None
) -> None:
super(docketEntryDelegate, self).__init__(parent) super(docketEntryDelegate, self).__init__(parent)
self.view = view self.view = view
return return
def sizeHint(self, _: QStyleOptionViewItem, index: QModelIndex | QPersistentModelIndex) -> QSize: def sizeHint(
self,
_: QStyleOptionViewItem,
index: QModelIndex | QPersistentModelIndex,
) -> QSize:
widget = self.view.indexWidget(index) widget = self.view.indexWidget(index)
return widget.sizeHint() return widget.sizeHint()
class docketEntry(QTextEdit): class docketEntry(QTextEdit):
def __init__(self, parent: QWidget|None = None) -> None: def __init__(self, parent: QWidget | None = None) -> None:
super(docketEntry, self).__init__(parent) super(docketEntry, self).__init__(parent)
self.setSizePolicy(QSizePolicy.Policy.Preferred , self.setSizePolicy(
QSizePolicy.Policy.Fixed) QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed
)
return return
def mousePressEvent(self, e: QMouseEvent) -> None: def mousePressEvent(self, e: QMouseEvent) -> None:
@@ -73,6 +82,7 @@ class docketEntry(QTextEdit):
docSize = doc.size() docSize = doc.size()
return QSize(size.width(), int(docSize.height())) return QSize(size.width(), int(docSize.height()))
class docketTableView(QTableView): class docketTableView(QTableView):
manager: QNetworkAccessManager manager: QNetworkAccessManager
clickedEvent = Signal(QPoint) clickedEvent = Signal(QPoint)
@@ -81,7 +91,7 @@ class docketTableView(QTableView):
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.setItemDelegateForColumn(1,docketEntryDelegate(self)) self.setItemDelegateForColumn(1, docketEntryDelegate(self))
self.anchorSignal.connect(self.doAnchor) self.anchorSignal.connect(self.doAnchor)
self.manager = QNetworkAccessManager() self.manager = QNetworkAccessManager()
self.manager.finished.connect(self.getDone) self.manager.finished.connect(self.getDone)
@@ -114,10 +124,10 @@ class docketTableView(QTableView):
path = "/".join(dirs) path = "/".join(dirs)
currentDir.mkpath(path) currentDir.mkpath(path)
print(f"Checking for .{url.path()} existance.") print(f"Checking for .{url.path()} existance.")
if not hasattr(self, 'pdf'): if not hasattr(self, "pdf"):
self.pdf = PDFViewer(self) self.pdf = PDFViewer(self)
if QFile("." + url.path()).exists(): if QFile("." + url.path()).exists():
self.pdf.open(QFile('.' + url.path())) self.pdf.open(QFile("." + url.path()))
self.pdf.show() self.pdf.show()
else: else:
print(f"Fetching {url}") print(f"Fetching {url}")

View File

@@ -21,10 +21,10 @@ def query_error(query: QSqlQuery) -> NoReturn:
) )
raise Exception(translate("MainWindow", "SQL Error")) raise Exception(translate("MainWindow", "SQL Error"))
class QStyleOptionViewItemInit(QStyleOptionViewItem): class QStyleOptionViewItemInit(QStyleOptionViewItem):
backgroundBrush: QColor backgroundBrush: QColor
rect: QRect rect: QRect
widget: QWidget widget: QWidget
font: QFont font: QFont
text: str text: str

View File

@@ -4,35 +4,54 @@ from PySide6.QtCore import QFile, QModelIndex, QPoint, Signal, Slot
from PySide6.QtPdf import QPdfBookmarkModel, QPdfDocument from PySide6.QtPdf import QPdfBookmarkModel, QPdfDocument
from PySide6.QtPdfWidgets import QPdfView from PySide6.QtPdfWidgets import QPdfView
from PySide6.QtWidgets import QComboBox, QDialog, QMenuBar, QSpinBox, QWidget from PySide6.QtWidgets import QComboBox, QDialog, QMenuBar, QSpinBox, QWidget
from ui.pdfViewer import Ui_pdfViewer from ui.pdfViewer import Ui_pdfViewer
ZOOM_MULTIPLIER = math.sqrt(2.0) ZOOM_MULTIPLIER = math.sqrt(2.0)
class ZoomSelector(QComboBox): class ZoomSelector(QComboBox):
zoom_mode_changed = Signal(QPdfView.ZoomMode) zoom_mode_changed = Signal(QPdfView.ZoomMode)
zoom_factor_changed = Signal(float) zoom_factor_changed = Signal(float)
def __init__(self, parent: QWidget|None = None) -> None: def __init__(self, parent: QWidget | None = None) -> None:
super(ZoomSelector, self).__init__(parent) super(ZoomSelector, self).__init__(parent)
self.setEditable(True) self.setEditable(True)
for text in [ 'Fit Width', 'Fit Page', '12%', '25%', '33%', '50%', '66%', '75%', '100%', '125%', '150%', '200%', '400%']: for text in [
"Fit Width",
"Fit Page",
"12%",
"25%",
"33%",
"50%",
"66%",
"75%",
"100%",
"125%",
"150%",
"200%",
"400%",
]:
self.addItem(text) self.addItem(text)
self.currentTextChanged.connect(self.on_current_text_changed) self.currentTextChanged.connect(self.on_current_text_changed)
lineEdit = self.lineEdit() lineEdit = self.lineEdit()
assert lineEdit is not None assert lineEdit is not None
lineEdit.editingFinished.connect(self._editing_finished) lineEdit.editingFinished.connect(self._editing_finished)
return return
@Slot(float) # type: ignore
@Slot(float) # type: ignore
def set_zoom_factor(self, zoomFactor: float) -> None: def set_zoom_factor(self, zoomFactor: float) -> None:
percent = int(zoomFactor * 100) percent = int(zoomFactor * 100)
self.setCurrentText(f"{percent}%") self.setCurrentText(f"{percent}%")
return return
@Slot() @Slot()
def reset(self) -> None: def reset(self) -> None:
self.setCurrentIndex(8) # 100% self.setCurrentIndex(8) # 100%
return return
@Slot(str) # type: ignore
@Slot(str) # type: ignore
def on_current_text_changed(self, text: str) -> None: def on_current_text_changed(self, text: str) -> None:
if text == "Fit Width": if text == "Fit Width":
self.zoom_mode_changed.emit(QPdfView.ZoomMode.FitToWidth) self.zoom_mode_changed.emit(QPdfView.ZoomMode.FitToWidth)
@@ -44,6 +63,7 @@ class ZoomSelector(QComboBox):
self.zoom_mode_changed.emit(QPdfView.ZoomMode.Custom) self.zoom_mode_changed.emit(QPdfView.ZoomMode.Custom)
self.zoom_factor_changed.emit(factor) self.zoom_factor_changed.emit(factor)
return return
@Slot() @Slot()
def _editing_finished(self) -> None: def _editing_finished(self) -> None:
lineEdit = self.lineEdit() lineEdit = self.lineEdit()
@@ -75,7 +95,9 @@ class PDFViewer(QDialog, Ui_pdfViewer):
nav.backAvailableChanged.connect(self.actionBack.setEnabled) nav.backAvailableChanged.connect(self.actionBack.setEnabled)
nav.forwardAvailableChanged.connect(self.actionForward.setEnabled) nav.forwardAvailableChanged.connect(self.actionForward.setEnabled)
self.zoomSelector.zoom_mode_changed.connect(self.pdfView.setZoomMode) self.zoomSelector.zoom_mode_changed.connect(self.pdfView.setZoomMode)
self.zoomSelector.zoom_factor_changed.connect(self.pdfView.setZoomFactor) self.zoomSelector.zoom_factor_changed.connect(
self.pdfView.setZoomFactor
)
self.zoomSelector.reset() self.zoomSelector.reset()
bookmark_model = QPdfBookmarkModel(self) bookmark_model = QPdfBookmarkModel(self)
@@ -84,25 +106,29 @@ class PDFViewer(QDialog, Ui_pdfViewer):
self.bookmarkView.setModel(bookmark_model) self.bookmarkView.setModel(bookmark_model)
self.bookmarkView.activated.connect(self.bookmark_selected) self.bookmarkView.activated.connect(self.bookmark_selected)
self.tabWidget.setTabEnabled(1, False) # disable pages tabwidget self.tabWidget.setTabEnabled(1, False) # disable pages tabwidget
self.pdfView.setDocument(self.document) self.pdfView.setDocument(self.document)
self.pdfView.zoomFactorChanged.connect(self.zoomSelector.set_zoom_factor) self.pdfView.zoomFactorChanged.connect(
self.zoomSelector.set_zoom_factor
)
return return
@Slot(QFile) # type: ignore @Slot(QFile) # type: ignore
def open(self, file: QFile) -> None: def open(self, file: QFile) -> None:
#assert file.exists() # assert file.exists()
#if not file.isOpen(): # if not file.isOpen():
#file.open(QFile.OpenModeFlag.ReadOnly) # file.open(QFile.OpenModeFlag.ReadOnly)
#self.document.load(file) # self.document.load(file)
self.document.load(file.fileName()) self.document.load(file.fileName())
document_title = self.document.metaData(QPdfDocument.MetaDataField.Title) document_title = self.document.metaData(
QPdfDocument.MetaDataField.Title
)
self.setWindowTitle(document_title if document_title else "PDF Viewer") self.setWindowTitle(document_title if document_title else "PDF Viewer")
self.page_selected(0) self.page_selected(0)
self.pageSelector.setMaximum(self.document.pageCount() -1 ) self.pageSelector.setMaximum(self.document.pageCount() - 1)
return return
@Slot(QModelIndex) # type: ignore @Slot(QModelIndex) # type: ignore
def bookmark_selected(self, index: QModelIndex) -> None: def bookmark_selected(self, index: QModelIndex) -> None:
if not index.isValid(): if not index.isValid():
return return
@@ -114,7 +140,7 @@ class PDFViewer(QDialog, Ui_pdfViewer):
nav.jump(page, QPoint(), zoom_level) nav.jump(page, QPoint(), zoom_level)
return return
@Slot(int) # type: ignore @Slot(int) # type: ignore
def page_selected(self, page: int) -> None: def page_selected(self, page: int) -> None:
nav = self.pdfView.pageNavigator() nav = self.pdfView.pageNavigator()
nav.jump(page, QPoint(), nav.currentZoom()) nav.jump(page, QPoint(), nav.currentZoom())
@@ -157,7 +183,11 @@ class PDFViewer(QDialog, Ui_pdfViewer):
@Slot() @Slot()
def on_actionContinuous_triggered(self) -> None: def on_actionContinuous_triggered(self) -> None:
cont_checked = self.actionContinuous.isChecked() cont_checked = self.actionContinuous.isChecked()
mode = QPdfView.PageMode.MultiPage if cont_checked else QPdfView.PageMode.SinglePage mode = (
QPdfView.PageMode.MultiPage
if cont_checked
else QPdfView.PageMode.SinglePage
)
self.pdfView.setPageMode(mode) self.pdfView.setPageMode(mode)
return return
@@ -170,4 +200,3 @@ class PDFViewer(QDialog, Ui_pdfViewer):
def on_actionForward_triggered(self) -> None: def on_actionForward_triggered(self) -> None:
self.pdfView.pageNavigator().forward() self.pdfView.pageNavigator().forward()
return return

View File

@@ -1,6 +1,7 @@
#!venv/bin/python3 #!venv/bin/python3
import sys
import faulthandler import faulthandler
import sys
from PySide6.QtSql import ( from PySide6.QtSql import (
QSqlDatabase, QSqlDatabase,
) )
@@ -12,6 +13,7 @@ faulthandler.enable()
from MainWindow import MainWindow from MainWindow import MainWindow
def main() -> int: def main() -> int:
# #
app = QApplication(sys.argv) app = QApplication(sys.argv)