aboutsummaryrefslogtreecommitdiff
path: root/gui/model/question.py
blob: a45d6e2fff8ad3ea5d80b4587b705783177ddc8e (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from gui.widgets.label import Label
from ql.ast.visitors.expression_evaluator import ExpressionEvaluator


class QuestionModel:
    def __init__(self, label, identifier, answer_type, answer, computed, visibility_condition):
        self.__label = label
        self.__identifier = identifier
        self.__answer_type = answer_type
        self.__answer = answer
        self.__computed = computed
        self.__visibility_condition = visibility_condition
        self.__widget = None
        self.__widget_label = None

    @property
    def label(self):
        return self.__label

    @property
    def identifier(self):
        return self.__identifier

    @property
    def answer_type(self):
        return self.__answer_type

    @property
    def answer(self):
        return self.__answer

    @answer.setter
    def answer(self, value):
        self.__answer = value

    @property
    def computed(self):
        return self.__computed

    @property
    def visibility_condition(self):
        return self.__visibility_condition

    @property
    def widget(self):
        return self.__widget

    @widget.setter
    def widget(self, value):
        self.__widget = value

    @property
    def widget_label(self):
        return self.__widget_label

    @widget_label.setter
    def widget_label(self, value):
        self.__widget_label = value

    def evaluate_visibility_condition(self, form):
        visitor = ExpressionEvaluator(form)
        visitor.visit(self.visibility_condition)
        return visitor.result

    def evaluate_answer(self, form):
        visitor = ExpressionEvaluator(form)
        visitor.visit(self.answer)
        return visitor.result

    def pyqt5_render(self, layout, form, visible=True):
        self.widget_label = Label(self.label)

        if self.computed:
            answer_result = str(self.evaluate_answer(form))
            self.widget = Label(answer_result)
        else:
            self.widget = self.answer_type.pyqt5_default_widget()

        if not visible:
            self.widget.hide()
            self.widget_label.hide()

        layout.addRow(self.widget_label, self.widget)