From 25314fd2aed81aa5281bc3d93dbcc7919368ebe1 Mon Sep 17 00:00:00 2001 From: Bicker Date: Wed, 22 May 2019 17:45:37 +0200 Subject: Initial commit --- gui/model/form.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 gui/model/form.py (limited to 'gui/model/form.py') diff --git a/gui/model/form.py b/gui/model/form.py new file mode 100644 index 0000000..3f045ce --- /dev/null +++ b/gui/model/form.py @@ -0,0 +1,44 @@ +from json import dumps + + +class FormModel: + def __init__(self, identifier): + self.__identifier = identifier + self.__block = [] + + @property + def identifier(self): + return self.__identifier + + @property + def block(self): + return self.__block + + def to_json(self): + return dumps({question.identifier: question.answer.value.get_json_value() for question in self.block}) + + def find_question_of_widget(self, widget): + for question in self.block: + if question.widget == widget: + return question + + def update_questions_on_change(self, changed_widget): + changed_question = self.find_question_of_widget(changed_widget) + + if changed_question: + new_value = changed_question.widget.get_value(changed_question.answer_type) + changed_question.answer = changed_question.answer_type.get_literal_node(new_value) + + for question in self.block: + result = question.evaluate_visibility_condition(self) + + if result: + question.widget.show() + question.widget_label.show() + else: + question.widget.hide() + question.widget_label.hide() + + if question.computed: + answer_result = str(question.evaluate_answer(self)) + question.widget.setText(answer_result) -- cgit v1.2.3