def update_show_condition_on_change(self, changed_widget): changed_question = self.find_question_of_widget(changed_widget) changed_question.answer = BooleanNode(Position(0, 0), TypeBoolean, changed_question.widget.value()) for question in self.block: visitor = ExpressionEvaluator(self) visitor.visit(question.show_condition) if question.show_condition.value: question.widget.show() question.widget_label.show() else: question.widget.hide() question.widget_label.hide()
def p_float(p): """expression : FLOAT""" p[0] = DecimalNode(Position(p.lineno(1), p.lexpos(1)), TypeDecimal, p[1])
def p_number(p): """expression : NUMBER""" p[0] = IntegerNode(Position(p.lineno(1), p.lexpos(1)), TypeInteger, p[1])
def p_greater_than(p): """expression : expression GT expression""" p[0] = GreaterThanOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeBoolean, p[1], p[3], None)
def p_greater_equals(p): """expression : expression GE expression""" p[0] = GreaterEqualsOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeBoolean, p[1], p[3], None)
def p_less_than(p): """expression : expression LT expression""" p[0] = LessThanOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeBoolean, p[1], p[3], None)
def visit(self, node): self.form = Form(node.identifier) self.condition = BooleanNode(Position(0, 0), TypeBoolean, True) for child in node.block: child.accept(self)
def p_question_computed(p): """question : QUESTION VAR COLON type ASSIGN expression""" p[0] = QuestionNode(Position(p.lineno(1), p.lexpos(1)), p[1], p[2], p[4], p[6])
def p_times(p): """expression : expression TIMES expression""" p[0] = MultiplicationOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeUndefined, p[1], p[3], None)
def p_minus(p): """expression : expression MINUS expression""" p[0] = SubtractionOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeUndefined, p[1], p[3], None)
def p_plus(p): """expression : expression PLUS expression""" p[0] = AdditionOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeUndefined, p[1], p[3], None)
def p_or(p): """expression : expression OR expression""" p[0] = OrOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeBoolean, p[1], p[3], None)
def p_and(p): """expression : expression AND expression""" p[0] = AndOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeBoolean, p[1], p[3], None)
def p_not(p): """expression : NOT expression""" p[0] = NegationOperatorNode(Position(p.lineno(1), p.lexpos(1)), TypeBoolean, p[2], None)
def p_variable(p): """expression : VAR""" p[0] = VariableNode(Position(p.lineno(1), p.lexpos(1)), TypeUndefined, p[1], None)
def p_form(p): """form : FORM VAR LBRACKET statements RBRACKET""" p[0] = FormNode(Position(p.lineno(1), p.lexpos(1)), p[4], p[2])
def p_question(p): """question : QUESTION VAR COLON type""" p[0] = QuestionNode(Position(p.lineno(1), p.lexpos(1)), p[1], p[2], p[4], UndefinedNode(Position(0, 0), TypeUndefined, None))
def p_divide(p): """expression : expression DIVIDE expression""" p[0] = DivisionOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeUndefined, p[1], p[3], None)
def p_if(p): """if : IF LPAREN expression RPAREN LBRACKET statements RBRACKET""" p[0] = IfNode(Position(p.lineno(1), p.lexpos(1)), p[6], p[3])
def p_less_equals(p): """expression : expression LE expression""" p[0] = LessEqualsOperatorNode(Position(p.lineno(2), p.lexpos(2)), TypeBoolean, p[1], p[3], None)