From 344b12f830ffd94cbdfca5e502b05313d049bc4a Mon Sep 17 00:00:00 2001 From: Jan Feil <11638228+jfeil@users.noreply.github.com> Date: Thu, 4 May 2023 22:06:17 +0200 Subject: [PATCH] Add showing and loading from Regeltest-Archive and export as CSV This enables the user to create CSV for creating PowerPoint-Regeltests and recreate previously made Regeltests --- res/mainwindow.ui | 97 ++++++---- res/regeltest_archive.ui | 163 +++++++++++++++++ res/regeltest_save.ui | 347 ++++++++++++++++++++---------------- src/database.py | 5 +- src/dock_widgets.py | 29 ++- src/main_application.py | 10 ++ src/regeltest_management.py | 79 ++++++++ src/regeltestcreator.py | 14 +- src/ui_mainwindow.py | 14 +- src/ui_regeltest_archive.py | 115 ++++++++++++ src/ui_regeltest_save.py | 175 +++++++++++------- 11 files changed, 775 insertions(+), 273 deletions(-) create mode 100644 res/regeltest_archive.ui create mode 100644 src/regeltest_management.py create mode 100644 src/ui_regeltest_archive.py diff --git a/res/mainwindow.ui b/res/mainwindow.ui index b5b86d2..2c93ed2 100644 --- a/res/mainwindow.ui +++ b/res/mainwindow.ui @@ -54,27 +54,35 @@ Ansicht - + - - - Bearbeiten - - - - - - - - Hilfe - - - - - - - - + + + Bearbeiten + + + + + + + + Hilfe + + + + + + + Regeltest + + + + + + + + + @@ -93,26 +101,26 @@ - toolBar + toolBar - - TopToolBarArea - - - false - - + + TopToolBarArea + + + false + + - - - Neue Kategorie erstellen - - - - - Ansicht zurücksetzen - - + + + Neue Kategorie erstellen + + + + + Ansicht zurücksetzen + + Regeltest löschen @@ -153,6 +161,19 @@ Aus dem Internet + + + Regeltest-Archiv + + + + + false + + + Designs verwalten + + diff --git a/res/regeltest_archive.ui b/res/regeltest_archive.ui new file mode 100644 index 0000000..60bf161 --- /dev/null +++ b/res/regeltest_archive.ui @@ -0,0 +1,163 @@ + + + RegeltestArchiveDialog + + + + 0 + 0 + 639 + 360 + + + + Regeltest-Archiv + + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + true + + + true + + + false + + + false + + + + + + + + + Nr. + + + + + Titel + + + + + Anzahl Fragen + + + + + Maximale Punktzahl + + + + + Datum + + + + + 1 + + + + + A / KK Regeltest + + + + + 15 + + + + + 30 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Laden + + + + + + + Abbrechen + + + + + + + + + + + load_button + clicked() + RegeltestArchiveDialog + accept() + + + 380 + 337 + + + 254 + 179 + + + + + cancel_button + clicked() + RegeltestArchiveDialog + reject() + + + 461 + 337 + + + 254 + 179 + + + + + diff --git a/res/regeltest_save.ui b/res/regeltest_save.ui index 1e1c768..c299d91 100644 --- a/res/regeltest_save.ui +++ b/res/regeltest_save.ui @@ -17,172 +17,211 @@ Save Regeltest - - - - Qt::StrongFocus - - - - - - - - - - - - Titel - - - - - - - - - Auswählen - - + + + + + Auswählen + + + - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - Speicherort - - - - - - - true - - - - - 0 - 0 - 740 - 142 - - - - - - - - - Iconpfad - - - - - - - - - Alle Multiple-Choice aktivieren - - - - - - - Alle Multiple-Choice deaktivieren - - - - - - - - - pt - - - 9 - - - 15 - - - 11 - - - - - - - - + + + + + + Alle Multiple-Choice aktivieren + + + + + + + Alle Multiple-Choice deaktivieren + + + + - - - - Auswählen - - + + + + Iconpfad + + + + + + + Speicherort PDF + + + + + + + Titel + + + + + + + Qt::StrongFocus + + + + + + + + + + + + true + + + + + 0 + 0 + 740 + 96 + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + + + Auswählen + + + + + + + + + + Schriftgröße + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Speicherort CSV + + + + + + + + + + + + + Auswählen + + + + + + + + + + + + + pt + + + 9 + + + 15 + + + 11 + + + + + + + + + + Regeltest zusätzlich im Archiv speichern? + + + true + + - - - - - - - Schriftgröße - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - title_edit - icon_path_edit - icon_edit_button - output_edit - output_edit_button - widget_3 - - - - - buttonBox - accepted() - RegeltestSave - accept() - - - 248 + + title_edit + icon_path_edit + icon_edit_button + pdf_edit + pdf_edit_button + widget_3 + + + + + buttonBox + accepted() + RegeltestSave + accept() + + + 248 254 diff --git a/src/database.py b/src/database.py index 0d49111..eea32bc 100644 --- a/src/database.py +++ b/src/database.py @@ -13,7 +13,7 @@ from sqlalchemy.orm import Session, Query from src.basic_config import database_name, Base, is_bundled, app_dirs -from src.datatypes import QuestionGroup, Question, MultipleChoice +from src.datatypes import QuestionGroup, Question, MultipleChoice, Regeltest database_path = os.path.join(app_dirs.user_data_dir, database_name) @@ -175,6 +175,9 @@ def get_question_group_config(self) -> List[Tuple[QuestionGroup, int, int]]: question_group in question_groups] + def get_regeltests(self) -> List[Regeltest]: + return self.session.query(Regeltest).all() + try: db = DatabaseConnector(database_path) diff --git a/src/dock_widgets.py b/src/dock_widgets.py index 27879f7..f29a28e 100644 --- a/src/dock_widgets.py +++ b/src/dock_widgets.py @@ -1,5 +1,6 @@ from __future__ import annotations +import csv import webbrowser from typing import TYPE_CHECKING @@ -55,7 +56,9 @@ def create_regeltest(self): settings = RegeltestSaveDialog(questions, self) settings.ui.title_edit.setFocus() result = settings.exec() - output_path = settings.ui.output_edit.text() + pdf_path = settings.ui.pdf_edit.text() + csv_path = settings.ui.csv_edit.text() + archive_regeltest = settings.ui.regeltest_archive_checkBox.isChecked() if result == QDialog.Accepted: selected_questions = settings.get_questions() QApplication.setOverrideCursor(Qt.WaitCursor) @@ -65,13 +68,25 @@ def create_regeltest(self): else: icon = None icon_db = None - regeltest = Regeltest(title=settings.ui.title_edit.text(), icon=icon_db, - selected_questions=selected_questions) - db.add_object(regeltest) - document_builder.create_document(selected_questions, output_path, settings.ui.title_edit.text(), - icon=icon, font_size=settings.ui.fontsize_spinBox.value()) + if (pdf_path or csv_path) and archive_regeltest: + regeltest = Regeltest(title=settings.ui.title_edit.text(), icon=icon_db, + selected_questions=selected_questions) + db.add_object(regeltest) + if pdf_path: + document_builder.create_document(selected_questions, pdf_path, settings.ui.title_edit.text(), + icon=icon, font_size=settings.ui.fontsize_spinBox.value()) + webbrowser.open_new(pdf_path) + + if csv_path: + with open(csv_path, 'w+', newline='', encoding='utf-8') as file: + # create the csv writer + writer = csv.writer(file) + + for question in selected_questions: + # write a row to the csv file + writer.writerow([question.question.question.replace("\n", "\\n"), + question.question.answer_text.replace("\n", "\\n")]) QApplication.restoreOverrideCursor() - webbrowser.open_new(output_path) class SelfTestDockWidget(QWidget, Ui_self_test_dockwidget): diff --git a/src/main_application.py b/src/main_application.py index 0030bcf..877e055 100644 --- a/src/main_application.py +++ b/src/main_application.py @@ -13,6 +13,7 @@ from src.datatypes import create_question_groups, create_questions_and_mchoice, QuestionGroup, Question, MultipleChoice from src.dock_widgets import RegeltestCreatorDockwidget, SelfTestDockWidget from src.main_widgets import FirstSetupWidget, QuestionOverviewWidget, SelfTestWidget +from src.regeltest_management import PreviousRegeltests from src.ui_mainwindow import Ui_MainWindow from src.updater import UpdateChecker @@ -182,6 +183,8 @@ def __init__(self, parent=None): self.ui.actionRegeldatensatz_exportieren.triggered.connect(lambda: save_dataset(self)) self.ui.actionNeue_Kategorie_erstellen.triggered.connect(self.add_question_group) + self.ui.actionBisherige_Regeltests.triggered.connect(self.previous_regeltests) + def show(self) -> None: super(MainWindow, self).show() if not is_bundled: @@ -247,3 +250,10 @@ def set_mode(self, mode: ApplicationMode, reset=False): self.ui.actionSelftest.triggered.connect(lambda: self.set_mode(ApplicationMode.question_overview)) self.ui.main_window_dockwidget.setWindowTitle("Selbsttest-Einstellungen") self.ui.main_window_dockwidget.show() + + def previous_regeltests(self): + dialog = PreviousRegeltests(self) + result = dialog.exec() + if result == QDialog.Accepted: + for question in dialog.get_selected_questions(): + self.question_overview_dock.ui.regeltest_list.add_question(question) diff --git a/src/regeltest_management.py b/src/regeltest_management.py new file mode 100644 index 0000000..ef32443 --- /dev/null +++ b/src/regeltest_management.py @@ -0,0 +1,79 @@ +from PySide6.QtWidgets import QDialog, QTableWidgetItem, QHBoxLayout, QTableWidget, QAbstractItemView + +from src.database import db +from src.datatypes import RegeltestQuestion +from src.ui_regeltest_archive import Ui_RegeltestArchiveDialog + + +class PreviousRegeltests(QDialog, Ui_RegeltestArchiveDialog): + def __init__(self, parent): + super().__init__(parent=parent) + self.ui = Ui_RegeltestArchiveDialog() + self.ui.setupUi(self) + + self.ui.regeltestTable.removeRow(0) + self.ui.regeltestTable.setSortingEnabled(False) + + self.ui.regeltestTable.itemDoubleClicked.connect(self.preview) + + self.regeltests = db.get_regeltests() + for index, regeltest in enumerate(self.regeltests): + self.ui.regeltestTable.insertRow(index) + self.ui.regeltestTable.setItem(index, 0, QTableWidgetItem(str(regeltest.id))) + self.ui.regeltestTable.setItem(index, 1, QTableWidgetItem(str(regeltest.title))) + self.ui.regeltestTable.setItem(index, 2, QTableWidgetItem(str(len(regeltest.selected_questions)))) + self.ui.regeltestTable.setItem(index, 3, QTableWidgetItem( + str(sum([x.available_points for x in regeltest.selected_questions])))) + self.ui.regeltestTable.setItem(index, 4, QTableWidgetItem(regeltest.created.strftime("%d.%m.%Y (%H:%M)"))) + + def preview(self, item: QTableWidgetItem): + preview_dialog = QDialog(self) + preview_dialog.setWindowTitle("Fragenübersicht") + preview_dialog.resize(500, 600) + + layout = QHBoxLayout(preview_dialog) + preview_dialog.setLayout(layout) + tableWidget = QTableWidget(0, 5, preview_dialog) + + tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) + tableWidget.setSelectionMode(QAbstractItemView.SingleSelection) + tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) + tableWidget.horizontalHeader().setCascadingSectionResizes(False) + tableWidget.horizontalHeader().setProperty("showSortIndicator", False) + tableWidget.horizontalHeader().setStretchLastSection(True) + tableWidget.verticalHeader().setVisible(False) + tableWidget.verticalHeader().setStretchLastSection(False) + + tableWidget.setHorizontalHeaderItem(0, QTableWidgetItem("Nr")) + tableWidget.setHorizontalHeaderItem(1, QTableWidgetItem("Frage")) + tableWidget.setHorizontalHeaderItem(2, QTableWidgetItem("Antwort")) + tableWidget.setHorizontalHeaderItem(3, QTableWidgetItem("Multiple Choice?")) + tableWidget.setHorizontalHeaderItem(4, QTableWidgetItem("Mögliche Punkte")) + regeltest = self.regeltests[item.row()] + + for index, question in enumerate(regeltest.selected_questions): + question = question # type: RegeltestQuestion + tableWidget.insertRow(index) + + questionWidget = QTableWidgetItem(question.question.question) + questionWidget.setToolTip(question.question.question) + answerWidget = QTableWidgetItem(question.question.answer_text) + answerWidget.setToolTip(question.question.answer_text) + + tableWidget.setItem(index, 0, QTableWidgetItem(str(index + 1))) + tableWidget.setItem(index, 1, questionWidget) + tableWidget.setItem(index, 2, answerWidget) + tableWidget.setItem(index, 3, QTableWidgetItem("Ja" if question.is_multiple_choice else "Nein")) + tableWidget.setItem(index, 4, QTableWidgetItem(str(question.available_points))) + + layout.addWidget(tableWidget) + + preview_dialog.show() + + def get_selected_questions(self): + items = self.ui.regeltestTable.selectedItems() + if not items: + return [] + else: + regeltest = self.regeltests[items[0].row()] + return [question.question for question in regeltest.selected_questions] diff --git a/src/regeltestcreator.py b/src/regeltestcreator.py index 881a0d0..ed546aa 100644 --- a/src/regeltestcreator.py +++ b/src/regeltestcreator.py @@ -114,7 +114,8 @@ def __init__(self, questions: List[Question], parent): self.ui = Ui_RegeltestSave() self.ui.setupUi(self) self.ui.icon_edit_button.clicked.connect(self.open_icon) - self.ui.output_edit_button.clicked.connect(self.create_save) + self.ui.pdf_edit_button.clicked.connect(self.create_pdf_save) + self.ui.csv_edit_button.clicked.connect(self.create_csv_save) self.questions = questions self.question_widgets: List[QuestionEditWidget] = [] @@ -140,11 +141,18 @@ def open_icon(self): return self.ui.icon_path_edit.setText(file_name[0]) - def create_save(self): + def create_pdf_save(self): file_name = QFileDialog.getSaveFileName(self, caption="Regeltest speichern", filter="Regeltest (*.pdf)") if len(file_name) == 0 or file_name[0] == "": return - self.ui.output_edit.setText(file_name[0]) + self.ui.pdf_edit.setText(file_name[0]) + + def create_csv_save(self): + file_name = QFileDialog.getSaveFileName(self, caption="Powerpoint-Regeltest-Vorlage speichern", + filter="Regeltest-Vorlage (*.csv)") + if len(file_name) == 0 or file_name[0] == "": + return + self.ui.csv_edit.setText(file_name[0]) def get_questions(self) -> List[RegeltestQuestion]: return [widget.get_question() for widget in self.question_widgets] diff --git a/src/ui_mainwindow.py b/src/ui_mainwindow.py index cb89b5d..f2379ec 100644 --- a/src/ui_mainwindow.py +++ b/src/ui_mainwindow.py @@ -41,6 +41,11 @@ def setupUi(self, MainWindow): self.actionAus_einer_Datei.setObjectName(u"actionAus_einer_Datei") self.actionAus_dem_Internet = QAction(MainWindow) self.actionAus_dem_Internet.setObjectName(u"actionAus_dem_Internet") + self.actionBisherige_Regeltests = QAction(MainWindow) + self.actionBisherige_Regeltests.setObjectName(u"actionBisherige_Regeltests") + self.actionDesign_erstellen = QAction(MainWindow) + self.actionDesign_erstellen.setObjectName(u"actionDesign_erstellen") + self.actionDesign_erstellen.setEnabled(False) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.centralwidget.setEnabled(True) @@ -65,6 +70,8 @@ def setupUi(self, MainWindow): self.menuBearbeiten.setObjectName(u"menuBearbeiten") self.menu_ber = QMenu(self.menubar) self.menu_ber.setObjectName(u"menu_ber") + self.menuRegeltest = QMenu(self.menubar) + self.menuRegeltest.setObjectName(u"menuRegeltest") MainWindow.setMenuBar(self.menubar) self.main_window_dockwidget = QDockWidget(MainWindow) self.main_window_dockwidget.setObjectName(u"main_window_dockwidget") @@ -85,6 +92,7 @@ def setupUi(self, MainWindow): self.menubar.addAction(self.menuDatei.menuAction()) self.menubar.addAction(self.menuBearbeiten.menuAction()) + self.menubar.addAction(self.menuRegeltest.menuAction()) self.menubar.addAction(self.menuAnsicht.menuAction()) self.menubar.addAction(self.menu_ber.menuAction()) self.menuDatei.addAction(self.menuRegeldatensatz_importieren.menuAction()) @@ -97,13 +105,14 @@ def setupUi(self, MainWindow): self.menuBearbeiten.addAction(self.actionRegeltest_l_schen) self.menu_ber.addAction(self.actionAuf_Updates_pr_fen) self.menu_ber.addAction(self.action_ber) + self.menuRegeltest.addAction(self.actionBisherige_Regeltests) + self.menuRegeltest.addAction(self.actionDesign_erstellen) self.toolBar.addAction(self.actionSelftest) self.retranslateUi(MainWindow) self.stackedWidget.setCurrentIndex(-1) - QMetaObject.connectSlotsByName(MainWindow) # setupUi @@ -123,12 +132,15 @@ def retranslateUi(self, MainWindow): self.actionSelftest.setText(QCoreApplication.translate("MainWindow", u"Selbsttest", None)) self.actionAus_einer_Datei.setText(QCoreApplication.translate("MainWindow", u"Aus einer Datei", None)) self.actionAus_dem_Internet.setText(QCoreApplication.translate("MainWindow", u"Aus dem Internet", None)) + self.actionBisherige_Regeltests.setText(QCoreApplication.translate("MainWindow", u"Regeltest-Archiv", None)) + self.actionDesign_erstellen.setText(QCoreApplication.translate("MainWindow", u"Designs verwalten", None)) self.menuDatei.setTitle(QCoreApplication.translate("MainWindow", u"Datei", None)) self.menuRegeldatensatz_importieren.setTitle( QCoreApplication.translate("MainWindow", u"Regeldatensatz importieren", None)) self.menuAnsicht.setTitle(QCoreApplication.translate("MainWindow", u"Ansicht", None)) self.menuBearbeiten.setTitle(QCoreApplication.translate("MainWindow", u"Bearbeiten", None)) self.menu_ber.setTitle(QCoreApplication.translate("MainWindow", u"Hilfe", None)) + self.menuRegeltest.setTitle(QCoreApplication.translate("MainWindow", u"Regeltest", None)) self.main_window_dockwidget.setWindowTitle("") self.toolBar.setWindowTitle(QCoreApplication.translate("MainWindow", u"toolBar", None)) # retranslateUi diff --git a/src/ui_regeltest_archive.py b/src/ui_regeltest_archive.py new file mode 100644 index 0000000..007b485 --- /dev/null +++ b/src/ui_regeltest_archive.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'regeltest_archive.ui' +## +## Created by: Qt User Interface Compiler version 6.3.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QMetaObject) +from PySide6.QtWidgets import (QAbstractItemView, QHBoxLayout, + QPushButton, QSizePolicy, QSpacerItem, + QTableWidget, QTableWidgetItem, QVBoxLayout) + + +class Ui_RegeltestArchiveDialog(object): + def setupUi(self, RegeltestArchiveDialog): + if not RegeltestArchiveDialog.objectName(): + RegeltestArchiveDialog.setObjectName(u"RegeltestArchiveDialog") + RegeltestArchiveDialog.resize(639, 360) + self.verticalLayout = QVBoxLayout(RegeltestArchiveDialog) + self.verticalLayout.setObjectName(u"verticalLayout") + self.regeltestTable = QTableWidget(RegeltestArchiveDialog) + if (self.regeltestTable.columnCount() < 5): + self.regeltestTable.setColumnCount(5) + __qtablewidgetitem = QTableWidgetItem() + self.regeltestTable.setHorizontalHeaderItem(0, __qtablewidgetitem) + __qtablewidgetitem1 = QTableWidgetItem() + self.regeltestTable.setHorizontalHeaderItem(1, __qtablewidgetitem1) + __qtablewidgetitem2 = QTableWidgetItem() + self.regeltestTable.setHorizontalHeaderItem(2, __qtablewidgetitem2) + __qtablewidgetitem3 = QTableWidgetItem() + self.regeltestTable.setHorizontalHeaderItem(3, __qtablewidgetitem3) + __qtablewidgetitem4 = QTableWidgetItem() + self.regeltestTable.setHorizontalHeaderItem(4, __qtablewidgetitem4) + if (self.regeltestTable.rowCount() < 1): + self.regeltestTable.setRowCount(1) + __qtablewidgetitem5 = QTableWidgetItem() + self.regeltestTable.setVerticalHeaderItem(0, __qtablewidgetitem5) + __qtablewidgetitem6 = QTableWidgetItem() + self.regeltestTable.setItem(0, 0, __qtablewidgetitem6) + __qtablewidgetitem7 = QTableWidgetItem() + self.regeltestTable.setItem(0, 1, __qtablewidgetitem7) + __qtablewidgetitem8 = QTableWidgetItem() + self.regeltestTable.setItem(0, 2, __qtablewidgetitem8) + __qtablewidgetitem9 = QTableWidgetItem() + self.regeltestTable.setItem(0, 3, __qtablewidgetitem9) + self.regeltestTable.setObjectName(u"regeltestTable") + self.regeltestTable.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.regeltestTable.setSelectionMode(QAbstractItemView.SingleSelection) + self.regeltestTable.setSelectionBehavior(QAbstractItemView.SelectRows) + self.regeltestTable.horizontalHeader().setCascadingSectionResizes(False) + self.regeltestTable.horizontalHeader().setProperty("showSortIndicator", True) + self.regeltestTable.horizontalHeader().setStretchLastSection(True) + self.regeltestTable.verticalHeader().setVisible(False) + self.regeltestTable.verticalHeader().setStretchLastSection(False) + + self.verticalLayout.addWidget(self.regeltestTable) + + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer) + + self.load_button = QPushButton(RegeltestArchiveDialog) + self.load_button.setObjectName(u"load_button") + + self.horizontalLayout.addWidget(self.load_button) + + self.cancel_button = QPushButton(RegeltestArchiveDialog) + self.cancel_button.setObjectName(u"cancel_button") + + self.horizontalLayout.addWidget(self.cancel_button) + + self.verticalLayout.addLayout(self.horizontalLayout) + + self.retranslateUi(RegeltestArchiveDialog) + self.load_button.clicked.connect(RegeltestArchiveDialog.accept) + self.cancel_button.clicked.connect(RegeltestArchiveDialog.reject) + + QMetaObject.connectSlotsByName(RegeltestArchiveDialog) + + # setupUi + + def retranslateUi(self, RegeltestArchiveDialog): + RegeltestArchiveDialog.setWindowTitle( + QCoreApplication.translate("RegeltestArchiveDialog", u"Regeltest-Archiv", None)) + ___qtablewidgetitem = self.regeltestTable.horizontalHeaderItem(0) + ___qtablewidgetitem.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Nr.", None)); + ___qtablewidgetitem1 = self.regeltestTable.horizontalHeaderItem(1) + ___qtablewidgetitem1.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Titel", None)); + ___qtablewidgetitem2 = self.regeltestTable.horizontalHeaderItem(2) + ___qtablewidgetitem2.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Anzahl Fragen", None)); + ___qtablewidgetitem3 = self.regeltestTable.horizontalHeaderItem(3) + ___qtablewidgetitem3.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Maximale Punktzahl", None)); + ___qtablewidgetitem4 = self.regeltestTable.horizontalHeaderItem(4) + ___qtablewidgetitem4.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Datum", None)); + + __sortingEnabled = self.regeltestTable.isSortingEnabled() + self.regeltestTable.setSortingEnabled(False) + ___qtablewidgetitem5 = self.regeltestTable.item(0, 0) + ___qtablewidgetitem5.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"1", None)); + ___qtablewidgetitem6 = self.regeltestTable.item(0, 1) + ___qtablewidgetitem6.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"A / KK Regeltest", None)); + ___qtablewidgetitem7 = self.regeltestTable.item(0, 2) + ___qtablewidgetitem7.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"15", None)); + ___qtablewidgetitem8 = self.regeltestTable.item(0, 3) + ___qtablewidgetitem8.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"30", None)); + self.regeltestTable.setSortingEnabled(__sortingEnabled) + + self.load_button.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Laden", None)) + self.cancel_button.setText(QCoreApplication.translate("RegeltestArchiveDialog", u"Abbrechen", None)) + # retranslateUi diff --git a/src/ui_regeltest_save.py b/src/ui_regeltest_save.py index ca7bea4..295664f 100644 --- a/src/ui_regeltest_save.py +++ b/src/ui_regeltest_save.py @@ -10,10 +10,9 @@ from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, Qt) -from PySide6.QtWidgets import (QDialogButtonBox, - QGridLayout, QHBoxLayout, QLabel, QLineEdit, - QPushButton, QScrollArea, QSizePolicy, QSpacerItem, - QSpinBox, QWidget) +from PySide6.QtWidgets import (QCheckBox, QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel, + QLineEdit, QPushButton, QScrollArea, QSizePolicy, + QSpacerItem, QSpinBox, QWidget) class Ui_RegeltestSave(object): @@ -24,87 +23,80 @@ def setupUi(self, RegeltestSave): RegeltestSave.setFocusPolicy(Qt.NoFocus) self.gridLayout = QGridLayout(RegeltestSave) self.gridLayout.setObjectName(u"gridLayout") - self.widget_3 = QWidget(RegeltestSave) - self.widget_3.setObjectName(u"widget_3") - self.widget_3.setFocusPolicy(Qt.StrongFocus) - self.horizontalLayout_3 = QHBoxLayout(self.widget_3) - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") - self.title_edit = QLineEdit(self.widget_3) - self.title_edit.setObjectName(u"title_edit") - - self.horizontalLayout_3.addWidget(self.title_edit) - - self.gridLayout.addWidget(self.widget_3, 0, 2, 1, 1) - - self.label = QLabel(RegeltestSave) - self.label.setObjectName(u"label") - - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - self.widget_2 = QWidget(RegeltestSave) self.widget_2.setObjectName(u"widget_2") self.horizontalLayout_2 = QHBoxLayout(self.widget_2) self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") - self.output_edit = QLineEdit(self.widget_2) - self.output_edit.setObjectName(u"output_edit") + self.pdf_edit = QLineEdit(self.widget_2) + self.pdf_edit.setObjectName(u"pdf_edit") - self.horizontalLayout_2.addWidget(self.output_edit) + self.horizontalLayout_2.addWidget(self.pdf_edit) - self.output_edit_button = QPushButton(self.widget_2) - self.output_edit_button.setObjectName(u"output_edit_button") + self.pdf_edit_button = QPushButton(self.widget_2) + self.pdf_edit_button.setObjectName(u"pdf_edit_button") - self.horizontalLayout_2.addWidget(self.output_edit_button) + self.horizontalLayout_2.addWidget(self.pdf_edit_button) self.gridLayout.addWidget(self.widget_2, 3, 2, 1, 1) - self.buttonBox = QDialogButtonBox(RegeltestSave) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setOrientation(Qt.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) - - self.gridLayout.addWidget(self.buttonBox, 9, 0, 1, 3) + self.horizontalLayout_4 = QHBoxLayout() + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.activate_mc_button = QPushButton(RegeltestSave) + self.activate_mc_button.setObjectName(u"activate_mc_button") - self.label_3 = QLabel(RegeltestSave) - self.label_3.setObjectName(u"label_3") + self.horizontalLayout_4.addWidget(self.activate_mc_button) - self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) + self.deactivate_mc_button = QPushButton(RegeltestSave) + self.deactivate_mc_button.setObjectName(u"deactivate_mc_button") - self.scrollArea = QScrollArea(RegeltestSave) - self.scrollArea.setObjectName(u"scrollArea") - self.scrollArea.setWidgetResizable(True) - self.question_scrollable = QWidget() - self.question_scrollable.setObjectName(u"question_scrollable") - self.question_scrollable.setGeometry(QRect(0, 0, 740, 142)) - self.scrollArea.setWidget(self.question_scrollable) + self.horizontalLayout_4.addWidget(self.deactivate_mc_button) - self.gridLayout.addWidget(self.scrollArea, 8, 0, 1, 3) + self.gridLayout.addLayout(self.horizontalLayout_4, 9, 0, 1, 3) self.label_2 = QLabel(RegeltestSave) self.label_2.setObjectName(u"label_2") self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) - self.horizontalLayout_4 = QHBoxLayout() - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") - self.activate_mc_button = QPushButton(RegeltestSave) - self.activate_mc_button.setObjectName(u"activate_mc_button") + self.label_3 = QLabel(RegeltestSave) + self.label_3.setObjectName(u"label_3") - self.horizontalLayout_4.addWidget(self.activate_mc_button) + self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) - self.deactivate_mc_button = QPushButton(RegeltestSave) - self.deactivate_mc_button.setObjectName(u"deactivate_mc_button") + self.label = QLabel(RegeltestSave) + self.label.setObjectName(u"label") - self.horizontalLayout_4.addWidget(self.deactivate_mc_button) + self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - self.gridLayout.addLayout(self.horizontalLayout_4, 6, 0, 1, 3) + self.widget_3 = QWidget(RegeltestSave) + self.widget_3.setObjectName(u"widget_3") + self.widget_3.setFocusPolicy(Qt.StrongFocus) + self.horizontalLayout_3 = QHBoxLayout(self.widget_3) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.title_edit = QLineEdit(self.widget_3) + self.title_edit.setObjectName(u"title_edit") - self.fontsize_spinBox = QSpinBox(RegeltestSave) - self.fontsize_spinBox.setObjectName(u"fontsize_spinBox") - self.fontsize_spinBox.setMinimum(9) - self.fontsize_spinBox.setMaximum(15) - self.fontsize_spinBox.setValue(11) + self.horizontalLayout_3.addWidget(self.title_edit) + + + self.gridLayout.addWidget(self.widget_3, 0, 2, 1, 1) + + self.scrollArea = QScrollArea(RegeltestSave) + self.scrollArea.setObjectName(u"scrollArea") + self.scrollArea.setWidgetResizable(True) + self.question_scrollable = QWidget() + self.question_scrollable.setObjectName(u"question_scrollable") + self.question_scrollable.setGeometry(QRect(0, 0, 740, 96)) + self.scrollArea.setWidget(self.question_scrollable) + + self.gridLayout.addWidget(self.scrollArea, 11, 0, 1, 3) - self.gridLayout.addWidget(self.fontsize_spinBox, 4, 2, 1, 1) + self.buttonBox = QDialogButtonBox(RegeltestSave) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) + + self.gridLayout.addWidget(self.buttonBox, 12, 0, 1, 3) self.widget = QWidget(RegeltestSave) self.widget.setObjectName(u"widget") @@ -125,17 +117,58 @@ def setupUi(self, RegeltestSave): self.label_4 = QLabel(RegeltestSave) self.label_4.setObjectName(u"label_4") - self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1) + self.gridLayout.addWidget(self.label_4, 7, 0, 1, 1) self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) - self.gridLayout.addItem(self.verticalSpacer, 7, 0, 1, 1) + self.gridLayout.addItem(self.verticalSpacer, 10, 0, 1, 1) + + self.label_5 = QLabel(RegeltestSave) + self.label_5.setObjectName(u"label_5") + + self.gridLayout.addWidget(self.label_5, 5, 0, 1, 1) + + self.widget_4 = QWidget(RegeltestSave) + self.widget_4.setObjectName(u"widget_4") + self.horizontalLayout_5 = QHBoxLayout(self.widget_4) + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.csv_edit = QLineEdit(self.widget_4) + self.csv_edit.setObjectName(u"csv_edit") + + self.horizontalLayout_5.addWidget(self.csv_edit) + + self.csv_edit_button = QPushButton(self.widget_4) + self.csv_edit_button.setObjectName(u"csv_edit_button") + + self.horizontalLayout_5.addWidget(self.csv_edit_button) + + self.gridLayout.addWidget(self.widget_4, 5, 2, 1, 1) + + self.widget_5 = QWidget(RegeltestSave) + self.widget_5.setObjectName(u"widget_5") + self.horizontalLayout_6 = QHBoxLayout(self.widget_5) + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.fontsize_spinBox = QSpinBox(self.widget_5) + self.fontsize_spinBox.setObjectName(u"fontsize_spinBox") + self.fontsize_spinBox.setMinimum(9) + self.fontsize_spinBox.setMaximum(15) + self.fontsize_spinBox.setValue(11) + + self.horizontalLayout_6.addWidget(self.fontsize_spinBox) + + self.gridLayout.addWidget(self.widget_5, 7, 2, 1, 1) + + self.regeltest_archive_checkBox = QCheckBox(RegeltestSave) + self.regeltest_archive_checkBox.setObjectName(u"regeltest_archive_checkBox") + self.regeltest_archive_checkBox.setChecked(True) + + self.gridLayout.addWidget(self.regeltest_archive_checkBox, 8, 0, 1, 3) QWidget.setTabOrder(self.title_edit, self.icon_path_edit) QWidget.setTabOrder(self.icon_path_edit, self.icon_edit_button) - QWidget.setTabOrder(self.icon_edit_button, self.output_edit) - QWidget.setTabOrder(self.output_edit, self.output_edit_button) - QWidget.setTabOrder(self.output_edit_button, self.widget_3) + QWidget.setTabOrder(self.icon_edit_button, self.pdf_edit) + QWidget.setTabOrder(self.pdf_edit, self.pdf_edit_button) + QWidget.setTabOrder(self.pdf_edit_button, self.widget_3) self.retranslateUi(RegeltestSave) self.buttonBox.accepted.connect(RegeltestSave.accept) @@ -147,16 +180,20 @@ def setupUi(self, RegeltestSave): def retranslateUi(self, RegeltestSave): RegeltestSave.setWindowTitle(QCoreApplication.translate("RegeltestSave", u"Save Regeltest", None)) - self.label.setText(QCoreApplication.translate("RegeltestSave", u"Titel", None)) - self.output_edit_button.setText(QCoreApplication.translate("RegeltestSave", u"Ausw\u00e4hlen", None)) - self.label_3.setText(QCoreApplication.translate("RegeltestSave", u"Speicherort", None)) - self.label_2.setText(QCoreApplication.translate("RegeltestSave", u"Iconpfad", None)) + self.pdf_edit_button.setText(QCoreApplication.translate("RegeltestSave", u"Ausw\u00e4hlen", None)) self.activate_mc_button.setText( QCoreApplication.translate("RegeltestSave", u"Alle Multiple-Choice aktivieren", None)) self.deactivate_mc_button.setText( QCoreApplication.translate("RegeltestSave", u"Alle Multiple-Choice deaktivieren", None)) - self.fontsize_spinBox.setSuffix(QCoreApplication.translate("RegeltestSave", u" pt", None)) + self.label_2.setText(QCoreApplication.translate("RegeltestSave", u"Iconpfad", None)) + self.label_3.setText(QCoreApplication.translate("RegeltestSave", u"Speicherort PDF", None)) + self.label.setText(QCoreApplication.translate("RegeltestSave", u"Titel", None)) self.icon_edit_button.setText(QCoreApplication.translate("RegeltestSave", u"Ausw\u00e4hlen", None)) self.label_4.setText(QCoreApplication.translate("RegeltestSave", u"Schriftgr\u00f6\u00dfe", None)) + self.label_5.setText(QCoreApplication.translate("RegeltestSave", u"Speicherort CSV", None)) + self.csv_edit_button.setText(QCoreApplication.translate("RegeltestSave", u"Ausw\u00e4hlen", None)) + self.fontsize_spinBox.setSuffix(QCoreApplication.translate("RegeltestSave", u"pt", None)) + self.regeltest_archive_checkBox.setText( + QCoreApplication.translate("RegeltestSave", u"Regeltest zus\u00e4tzlich im Archiv speichern?", None)) # retranslateUi