aboutsummaryrefslogtreecommitdiff
path: root/gui/model/form.py
blob: 3f045ce55bdc0011b3058df742a488e08257ced1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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)