New Dialogs

This commit is contained in:
Christopher T. Johnson
2023-12-08 11:24:32 -05:00
parent 43736fc165
commit 6135c5d278
7 changed files with 492 additions and 0 deletions

View File

@@ -1,2 +1,4 @@
from .books import Book
from .read import EditDialog
from .session import SessionDialog
from .person import PersonDialog

12
lib/person.py Normal file
View File

@@ -0,0 +1,12 @@
from main import query_error
from ui.PeopleDialog import Ui_Dialog
from PyQt6.QtCore import Qt, pyqtSlot
from PyQt6.QtSql import QSqlQuery
from PyQt6.QtWidgets import QDialog
class PersonDialog(QDialog, Ui_Dialog):
def __init__(self,*args, **kwargs):
super(PersonDialog, self).__init__(*args, **kwargs)
self.setupUi(self)
self.show()
return

102
lib/session.py Normal file
View File

@@ -0,0 +1,102 @@
from datetime import datetime, timedelta
from PyQt6.QtCore import Qt, QTime, QTimer, pyqtSignal, pyqtSlot
from PyQt6.QtGui import QStandardItem, QStandardItemModel, QTextCursor
from PyQt6.QtSql import QSqlQuery
from PyQt6.QtWidgets import QDialog
from main import query_error
from ui.SessionDialog import Ui_Dialog
class SessionDialog(QDialog, Ui_Dialog):
timer = QTimer()
startTime = datetime.now()
totalTime = 0 # seconds
def __init__(self) -> None:
super(SessionDialog, self).__init__()
self.setupUi(self)
self.wordView.setModel(QStandardItemModel())
self.wordView.setWrapping(True)
#
# Connections
#
self.timer.timeout.connect(self.tickAction)
self.activeBox.stateChanged.connect(self.activeAction)
return
@pyqtSlot(int)
def setPerson(self, person_id) -> None:
query = QSqlQuery()
query.prepare("SELECT * FROM people " "WHERE person_id = :person_id")
query.bindValue(":person_id", person_id)
if not query.exec():
query_error(query)
if not query.next():
raise Exception(f"Bad person_id: {person_id}")
self.nameLbl.setText(query.value("name"))
self.totalTime = timedelta()
return
@pyqtSlot(int)
def activeAction(self, state: int) -> None:
if state:
self.startTime = datetime.now()
self.timer.start()
else:
self.totalTime = self.totalTime + (datetime.now() - self.startTime)
self.timer.stop()
return
@pyqtSlot()
def timerAction(self) -> None:
if self.activeBox.isChecked(): # we are stopping
self.activeBox.setChecked(False)
self.sender().setText("Start")
return
self.timer.setInterval(1000)
self.sender().setText("Stop")
self.activeBox.setChecked(True)
return
@pyqtSlot()
def tickAction(self) -> None:
delta = self.totalTime + (datetime.now() - self.startTime)
seconds = delta.seconds % 60
minutes = int(delta.seconds / 60) % 60
hours = int(delta.seconds / 3600)
self.timerLbl.setText(f"{hours:02d}:{minutes:02d}:{seconds:02d}")
return
@pyqtSlot(int)
def addWord(self, word_id: int) -> None:
if self.activeBox.isChecked():
query = QSqlQuery()
query.prepare("SELECT * FROM words " "WHERE word_id = :word_id")
query.bindValue(":word_id", word_id)
if not query.exec():
query_error(query)
if not query.next():
raise Exception(f"Word_id({word_id}) not found in DB")
word = QStandardItem()
word.setData(query.value("word"), Qt.ItemDataRole.DisplayRole)
word_id = QStandardItem()
word_id.setData(
query.value("word_id"), Qt.ItemDataRole.UserRole + 1
)
model = self.wordView.model()
matches = model.match(
model.createIndex(0, 1),
Qt.ItemDataRole.UserRole + 1,
query.value("word_id"),
1,
Qt.MatchFlag.MatchExactly,
)
if len(matches) > 0:
return
self.wordView.model().appendRow([word, word_id])
self.wordView.model().sort(0)
else:
print(f"Not active: {word_id}")
return