aboutsummaryrefslogtreecommitdiff
path: root/gui/windows/form.py
diff options
context:
space:
mode:
authorBicker <bickerkards@tuta.io>2019-05-22 17:45:37 +0200
committerBicker <bickerkards@tuta.io>2019-05-22 17:45:37 +0200
commit25314fd2aed81aa5281bc3d93dbcc7919368ebe1 (patch)
tree1995521ee652e419926de5fced0f2e3b655e70fb /gui/windows/form.py
Initial commitHEADmaster
Diffstat (limited to 'gui/windows/form.py')
-rw-r--r--gui/windows/form.py68
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()