diff options
| author | Bicker <bickerkards@tuta.io> | 2019-05-22 17:45:37 +0200 |
|---|---|---|
| committer | Bicker <bickerkards@tuta.io> | 2019-05-22 17:45:37 +0200 |
| commit | 25314fd2aed81aa5281bc3d93dbcc7919368ebe1 (patch) | |
| tree | 1995521ee652e419926de5fced0f2e3b655e70fb /gui/windows/form.py | |
Diffstat (limited to 'gui/windows/form.py')
| -rw-r--r-- | gui/windows/form.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gui/windows/form.py b/gui/windows/form.py new file mode 100644 index 0000000..64c05f8 --- /dev/null +++ b/gui/windows/form.py @@ -0,0 +1,68 @@ +from PyQt5.QtCore import pyqtSlot +from PyQt5.QtWidgets import QDialog +from PyQt5.QtWidgets import QDialogButtonBox +from PyQt5.QtWidgets import QFileDialog +from PyQt5.QtWidgets import QFormLayout +from PyQt5.QtWidgets import QGroupBox +from PyQt5.QtWidgets import QMessageBox +from PyQt5.QtWidgets import QVBoxLayout + +from gui.helper import append_file_extension + + +class FormWindow(QDialog): + def __init__(self, form_model): + super(FormWindow, self).__init__() + self.__form_model = form_model + self.__form_group_box = QGroupBox() + + self.setWindowTitle('Form') + self.create_form() + + button_box = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Cancel) + button_box.accepted.connect(self.accept) + button_box.rejected.connect(self.reject) + + main_layout = QVBoxLayout() + main_layout.addWidget(self.form_group_box) + main_layout.addWidget(button_box) + self.setLayout(main_layout) + + @property + def form_model(self): + return self.__form_model + + @property + def form_group_box(self): + return self.__form_group_box + + def create_form(self): + layout = QFormLayout() + + for question in self.form_model.block: + show = question.evaluate_visibility_condition(self.form_model) + question.pyqt5_render(layout, self.form_model, show) + question.widget.on_change(self.form_model.update_questions_on_change) + + self.form_group_box.setLayout(layout) + + @pyqtSlot(name='accept') + def accept(self): + file_name, _ = QFileDialog.getSaveFileName(QFileDialog(), 'Save results', self.form_model.identifier, + 'JSON (*.json);;All Files (*)') + + if file_name: + file_name = append_file_extension(file_name, 'json') + file = open(file_name, 'w') + file.write(self.form_model.to_json()) + file.close() + self.close() + QMessageBox.information(QMessageBox(), 'Submission', 'Your answers have been submitted successfully.', + QMessageBox.Close, QMessageBox.Escape) + else: + QMessageBox.warning(QMessageBox(), 'Warning', 'Questionnaire results were not saved.', + QMessageBox.Close, QMessageBox.Escape) + + @pyqtSlot(name='reject') + def reject(self): + self.hide() |