Add StatusBar information

Updated workers.py to hold "current" values.
Status bar is three widgets, status label, progressbar and load button.

Fixes: #8, #9
This commit is contained in:
Christopher T. Johnson
2025-02-25 15:24:34 -05:00
parent dd9f08aa5e
commit 7a02bbb262
2 changed files with 120 additions and 29 deletions

View File

@@ -1,12 +1,10 @@
from typing import Any, cast
from PySide6.QtCore import (
QByteArray,
QDate,
QModelIndex,
QPersistentModelIndex,
QPoint,
QSettings,
Qt,
Signal,
Slot,
@@ -15,19 +13,25 @@ from PySide6.QtGui import (
QCloseEvent,
QColor,
)
from PySide6.QtSql import QSqlTableModel
from PySide6.QtSql import QSqlQuery, QSqlTableModel
from PySide6.QtWidgets import (
QAbstractItemView,
QHBoxLayout,
QHeaderView,
QLabel,
QMainWindow,
QProgressBar,
QPushButton,
QSizePolicy,
QStyledItemDelegate,
QStyleOptionViewItem,
QWidget,
)
from docketModel import docketModel
from lib.utils import QStyleOptionViewItemInit, readGeometry, writeGeometry
from lib.utils import QStyleOptionViewItemInit, query_error, readGeometry, writeGeometry
from ui.MainWindow import Ui_MainWindow
from workers import updateThread
from workers import loadCases, updateThread
class dateDelegate(QStyledItemDelegate):
@@ -115,7 +119,8 @@ class casesModel(QSqlTableModel):
class MainWindow(QMainWindow, Ui_MainWindow):
show_entries = Signal(int)
update_status = Signal()
loadThread = None
def __init__(self) -> None:
@@ -169,6 +174,28 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.docketView.horizontalHeader().setSectionResizeMode(
1, QHeaderView.ResizeMode.Stretch
)
widget = QWidget()
layout = QHBoxLayout(widget)
self.status = QLabel("Status")
layout.addWidget(self.status)
layout.addStretch()
self.progress = QProgressBar()
self.progress.setRange(0,100)
self.progress.setValue(0)
self.progress.setMinimumWidth(150)
self.progress.setMaximumWidth(150)
self.progress.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred)
layout.addWidget(self.progress)
self.loadButton = QPushButton()
self.loadButton.setObjectName("loadButton")
self.loadButton.setText("Load Cases")
layout.addWidget(self.loadButton)
self.statusbar.addWidget(widget,10)
self.loadButton.clicked.connect(self.loadCases)
self.update_status.connect(self.statusBarUpdate)
self.update_status.emit()
return
def closeEvent(self, event: QCloseEvent) -> None:
@@ -176,6 +203,48 @@ class MainWindow(QMainWindow, Ui_MainWindow):
super().closeEvent(event)
return
@Slot()
def loadCases(self) -> None:
if self.loadThread is None:
self.loadThread = loadCases()
self.loadThread.caseLoaded.connect(self.progress.setValue)
self.loadThread.finished.connect(self.loadCasesDone)
self.loadButton.setEnabled(False)
self.loadThread.start()
return
@Slot()
def loadCasesDone(self) -> None:
self.loadButton.setEnabled(True)
self.update_status.emit()
return
@Slot()
def statusBarUpdate(self) -> None:
if self.loadThread is None:
year = ''
max = 'unknown'
else:
year = self.loadThread.year
max = self.loadThread.number
query = QSqlQuery()
query.prepare("SELECT COUNT(*) AS number_active FROM cases WHERE active=1")
if not query.exec():
query_error(query)
if query.next():
active = query.value('number_active')
query.prepare("select SUBSTRING(docket_id,1,2) AS year, "
"SUBSTRING(docket_id,3,1) AS type, "
"MAX(CAST(SUBSTRING(docket_id,4) AS INTEGER)) AS number "
"FROM cases "
"GROUP BY year, type "
"ORDER BY type, year, number"
"LIMIT 2")
#if not query.exec():
# query_error(query)
msg=f"Oldest: {year}, Active: {active}, Max. Case: {max}"
self.status.setText(msg)
return
@Slot(QModelIndex) # type: ignore
def rowClicked(self, index: QModelIndex) -> None:
if not index.isValid():