various changes, new dialogs

This commit is contained in:
WorldTeacher
2024-06-20 14:55:54 +02:00
parent 9a336e1803
commit aabc38d059
18 changed files with 935 additions and 3669 deletions

View File

@@ -51,9 +51,9 @@ from src.ui import (
parsed_titles_ui,
popus_confirm,
reminder_ui,
SearchStatisticPage,
)
from src.ui.widgets.searchPage import SearchStatisticPage
from src.ui.extensions import ValidatorButton
config = OmegaConf.load("config.yaml")
@@ -72,12 +72,6 @@ class Medien(medienadder_ui):
return self.comboBox.currentText()
class MyComboBox(QtWidgets.QComboBox):
def __init__(self, parent=None):
super().__init__(parent)
valid_input = (0, 0, 0, 0, 0, 0)
@@ -100,7 +94,7 @@ class Ui(Ui_Semesterapparat):
self.btn_check_file_threaded
) # default: self.add_media_from_file
self.create_new_app.clicked.connect(self.btn_create_new_apparat)
self.btn_apparat_save.clicked.connect(self.btn_save_apparat)
self.btn_apparat_save.clicked.connect(lambda: self.btn_save_apparat(True))
self.btn_apparat_apply.clicked.connect(self.update_apparat)
self.btn_open_document.clicked.connect(self.open_document)
self.add_medium.clicked.connect(self.btn_add_medium)
@@ -143,19 +137,32 @@ class Ui(Ui_Semesterapparat):
)
)
self.prof_tel_nr.setValidator(QtGui.QIntValidator())
# set the validator for the app name, allow all letters and umlauts
self.app_fach.setValidator(
# set app_fach validator to allow only entries from the present items in self.app_fach and allow manual text entry
# self.app_fach.setValidator(
# QtGui.QRegularExpressionValidator(
# QtCore.QRegularExpression(
# "|".join([f"{subject[1]}" for subject in self.db.getSubjects()])
# )
# )
# )
self.app_fach.setValidator( # validator to allow typing in the app_fach field
QtGui.QRegularExpressionValidator(
QtCore.QRegularExpression(r"[a-zA-Z\s\W]+")
QtCore.QRegularExpression(r"[a-zA-Z0-9\s\W]+")
)
)
self.prof_tel_nr.setValidator(
QtGui.QRegularExpressionValidator(
QtCore.QRegularExpression(r"^\d{3}|^\d{4}-\d{2}|^\+\d{8,}")
)
)
# allow only letters, numbers, whitespaces, symbols for the apparat name
self.app_name.setValidator(
QtGui.QRegularExpressionValidator(
QtCore.QRegularExpression(r"[a-zA-Z0-9\s\W]+")
)
)
self.tableWidget_apparate.addScrollBarWidget(
QtWidgets.QScrollBar(), QtCore.Qt.AlignmentFlag.AlignRight
)
@@ -243,7 +250,11 @@ class Ui(Ui_Semesterapparat):
self.tableWidget_apparat_media.customContextMenuRequested.connect(
self.media_context_menu
)
self.table_elsa_list.setContextMenuPolicy(
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
)
self.table_elsa_list.customContextMenuRequested.connect(self.elsa_context_menu)
# elsa buttons
self.elsa_add_new.clicked.connect(self.add_new_elsa)
self.elsa_cancel_create.clicked.connect(self.cancel_elsa_creation)
@@ -269,13 +280,17 @@ class Ui(Ui_Semesterapparat):
self.mail_thread = None
self.autoGrabber = None
def elsa_context_menu(self, position):
menu = QtWidgets.QMenu()
# TODO: add functions
pass
def toggleButton(self, button):
if button.isChecked():
button.setChecked(False)
def open_about(self):
about = About()
about.exec()
About().exec()
def quit(self):
# delete all temporary files
@@ -316,7 +331,7 @@ class Ui(Ui_Semesterapparat):
or self.elsa_date.text() == ""
):
# warning message
self.confirm_popup("Bitte füllen Sie alle Felder aus")
self.confirm_popup("Bitte füllen Sie alle Felder aus", title="Fehler")
return
prof = self.elsa_prof.currentText()
@@ -391,7 +406,7 @@ class Ui(Ui_Semesterapparat):
self.table_elsa_list.setItem(0, 1, QtWidgets.QTableWidgetItem(scan[2]))
self.table_elsa_list.setItem(0, 2, QtWidgets.QTableWidgetItem(scan[3]))
self.table_elsa_list.setItem(0, 3, QtWidgets.QTableWidgetItem(scan[4]))
self.create_frame_elsa.setEnabled(True)
def addDokumentElsa(self):
print("Add document")
picker = FilePicker()
@@ -447,11 +462,15 @@ class Ui(Ui_Semesterapparat):
self.table_elsa_list.insertRow(0)
ic(row)
chapter_title = row[2]
author = row[0]
book_author = row[3]
book_title = row[4]
signature = row[7]
pages = row[6]
data = {
"chapter": chapter_title,
"book_author": book_author,
"text_author": author,
"title": book_title,
"signature": signature,
"pages": pages,
@@ -459,13 +478,17 @@ class Ui(Ui_Semesterapparat):
self.table_elsa_list.setItem(
0, 0, QtWidgets.QTableWidgetItem(chapter_title)
)
self.table_elsa_list.setItem(0, 1, QtWidgets.QTableWidgetItem(author))
self.table_elsa_list.setItem(
0, 1, QtWidgets.QTableWidgetItem(book_title)
0, 2, QtWidgets.QTableWidgetItem(book_title)
)
self.table_elsa_list.setItem(
0, 2, QtWidgets.QTableWidgetItem(signature)
0, 3, QtWidgets.QTableWidgetItem(signature)
)
self.table_elsa_list.setItem(0, 4, QtWidgets.QTableWidgetItem(pages))
self.table_elsa_list.setItem(
0, 5, QtWidgets.QTableWidgetItem(book_author)
)
self.table_elsa_list.setItem(0, 3, QtWidgets.QTableWidgetItem(pages))
self.db.addElsaMedia(
data,
self.db.getElsaId(
@@ -506,7 +529,6 @@ class Ui(Ui_Semesterapparat):
# documentation.show()
def tabW1_changed(self):
if self.tabWidget.currentIndex() == 1: # Statistics
stats_layout = self.search_statistics.layout()
if stats_layout is not None:
@@ -874,16 +896,8 @@ class Ui(Ui_Semesterapparat):
popup.exec()
return popup.result()
def threads(self):
while True:
self.validate_prof_mail()
self.validate_prof_name()
self.validate_prof_tel()
self.validate_app_name()
self.validate_app_fach()
self.validate_semester()
def thread_check(self):
print("Thread started")
self.prof_mail.textChanged.connect(self.validate_prof_mail)
self.drpdwn_prof_name.editTextChanged.connect(self.validate_prof_name)
self.prof_tel_nr.textChanged.connect(self.validate_prof_tel)
@@ -892,84 +906,70 @@ class Ui(Ui_Semesterapparat):
self.sem_year.textChanged.connect(self.validate_semester)
self.check_eternal_app.stateChanged.connect(self.validate_semester)
def validate_prof_name(self):
if self.app_group_box.isEnabled():
if "," in self.drpdwn_prof_name.currentText():
Icon("valid_true", self.valid_check_profname)
self.profname_mand.setText("")
self.change_state(0, 1)
else:
Icon("valid_false", self.valid_check_profname)
self.profname_mand.setText("*")
self.change_state(0, 0)
else:
pass
# self.drpdwn_prof_name.setStyleSheet("border: 1px solid black;")
# else:
# pass
# # self.drpdwn_prof_name.setStyleSheet("border: 1px solid black;")
# Validators
def __setValidState(self, widget, state, mand, index):
if state:
Icon("valid_true", widget)
mand.setText("")
self.change_state(index, 1)
else:
Icon("valid_false", widget)
mand.setText("*")
self.change_state(index, 0)
def validate_prof_name(self):
if (
self.app_group_box.isEnabled()
and "," in self.drpdwn_prof_name.currentText()
):
self.__setValidState(self.valid_check_profname, 1, self.profname_mand, 0)
else:
self.__setValidState(self.valid_check_profname, 0, self.profname_mand, 0)
def validate_prof_mail(self):
if self.app_group_box.isEnabled():
if self.prof_mail.hasAcceptableInput():
Icon("valid_true", self.valid_check_mail)
self.mail_mand.setText("")
self.change_state(1, 1)
self.__setValidState(self.valid_check_mail, 1, self.mail_mand, 1)
else:
Icon("valid_false", self.valid_check_mail)
self.mail_mand.setText("*")
self.change_state(1, 0)
self.__setValidState(self.valid_check_mail, 0, self.mail_mand, 1)
else:
self.__setValidState(self.valid_check_mail, 0, self.mail_mand, 1)
def validate_prof_tel(self):
if self.app_group_box.isEnabled():
if self.prof_tel_nr.text() != "":
Icon("valid_true", self.valid_check_telnr)
self.telnr_mand.setText("")
self.change_state(2, 1)
if self.prof_tel_nr.text() != "" and self.prof_tel_nr.hasAcceptableInput():
self.__setValidState(self.valid_check_telnr, 1, self.telnr_mand, 2)
else:
Icon("valid_false", self.valid_check_telnr)
self.telnr_mand.setText("*")
self.change_state(2, 0)
self.__setValidState(self.valid_check_telnr, 0, self.telnr_mand, 2)
else:
self.__setValidState(self.valid_check_telnr, 0, self.telnr_mand, 2)
def validate_app_name(self):
if self.app_group_box.isEnabled():
if self.app_name.hasAcceptableInput():
Icon("valid_true", self.valid_check_appname)
self.appname_mand.setText("")
self.change_state(3, 1)
else:
Icon("valid_false", self.valid_check_appname)
self.appname_mand.setText("*")
self.change_state(3, 0)
if self.app_group_box.isEnabled() and self.app_name.hasAcceptableInput():
self.__setValidState(self.valid_check_appname, 1, self.appname_mand, 3)
else:
self.__setValidState(self.valid_check_appname, 0, self.appname_mand, 3)
def validate_app_fach(self):
if self.app_group_box.isEnabled():
if self.app_fach.currentText() != "":
# change color to green to signal that the field is filled
Icon("valid_true", self.valid_check_app_fach)
self.valid_check_app_fach.setToolTip("Fach ist gesetzt")
self.fach_mand.setText("")
self.change_state(4, 1)
else:
# self.app_fach.setStyleSheet("border: 1px solid red;")
Icon("valid_false", self.valid_check_app_fach)
self.valid_check_app_fach.setToolTip("Fach ist nicht gesetzt")
self.fach_mand.setText("*")
self.change_state(4, 0)
if self.app_group_box.isEnabled() and self.app_fach.currentText() != "":
self.__setValidState(self.valid_check_app_fach, 1, self.fach_mand, 4)
else:
self.__setValidState(self.valid_check_app_fach, 0, self.fach_mand, 4)
def validate_semester(self):
if self.app_group_box.isEnabled():
if (
if (
self.app_group_box.isEnabled()
and (
(self.sem_sommer.isChecked() or self.sem_winter.isChecked())
and self.sem_year.text() != ""
and len(self.sem_year.text()) == 4
) or self.check_eternal_app.isChecked():
self._mand.setText("")
self.change_state(5, 1)
self.check_eternal_app.setEnabled(True)
Icon("valid_true", self.valid_check_semester)
else:
self._mand.setText("*")
self.change_state(5, 0)
Icon("valid_false", self.valid_check_semester)
self.check_eternal_app.setEnabled(False)
)
or self.check_eternal_app.isChecked()
):
self.__setValidState(self.valid_check_semester, 1, self._mand, 5)
self.check_eternal_app.setEnabled(True)
else:
self.__setValidState(self.valid_check_semester, 0, self._mand, 5)
self.check_eternal_app.setEnabled(False)
def change_state(self, index, state):
global valid_input
@@ -1227,6 +1227,12 @@ class Ui(Ui_Semesterapparat):
for child in self.app_group_box.findChildren(QtWidgets.QLineEdit):
child.clear()
self.validate_app_fach()
self.validate_app_name()
self.validate_prof_mail()
self.validate_prof_name()
self.validate_prof_tel()
self.validate_semester()
def update_app_media_list(self):
deleted = 0 if not self.chkbx_show_del_media.isChecked() else 1
@@ -1630,6 +1636,7 @@ class Ui(Ui_Semesterapparat):
apparat=appd.appnr, mail="Information zum Semesterapparat", location=""
)
if clear_fields:
print("clearing fields")
self.__clear_fields()
def send_mail_preview(self):
@@ -1930,6 +1937,7 @@ class Ui(Ui_Semesterapparat):
profname = pid
profname = f"{profname.split(" ")[1]} {profname.split(" ")[0]}"
print(profname, pid)
if prof_id:
pmail = self.db.getSpecificProfData(prof_id, ["mail"])
else:
@@ -1955,10 +1963,7 @@ class Ui(Ui_Semesterapparat):
"Bitte erst einen Apparat auswählen!", title="Apparat auswählen"
)
return
else:
self.__contact_dialog(apparat, location, mail, pid=pid)
else:
self.__contact_dialog(apparat, mail=mail, pid=pid, location=location)
self.__contact_dialog(apparat, mail=mail, pid=pid, location=location)
def delete_apparat(self, position):
selected_apparat_id = self.tableWidget_apparate.item(