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)
|