import FSM import utils as u import menus as m #==================================== State = type("State", (object,), {}) #==================================== class State(object): def __init__(self, FSM): self.FSM = FSM def Enter(self): pass def Execute(self): pass def Exit(self): pass class Calculator(State): def __init__(self,FSM): super(Calculator, self).__init__(FSM) def Enter(self): o = self.FSM.owner o.pub.register("beat", self) self.num1 = '' self.num2 = '' self.op = '' self.result = '' self.labels = ['.', '0', '=', '/', '1', '2', '3', '*', '4', '5', '6', '-', '7', '8', '9', '+', '7', '8', '9', '+'] self.draw_main(o) o.update_display(0) super(Calculator, self).Enter() def Execute(self): o = self.FSM.owner m.menu1_actions(self, o) if o.keyState[16] == 1: m.draw_menu1(o) o.update_display(0) elif o.keyState[16] == 4: self.draw_main(o) o.update_display(0) if o.keyState[16] > 0: pass else: if o.keyState[17] == 1: self.num1 = '' self.num2 = '' self.op = '' self.result = '' self.check_keys(o) def append_num(self, num): ops = ['+', '-', '*', '/'] print('appending num ', num) if num in ops: if self.num1 != '': self.op = num self.num2 = '' self.result = '' elif num == '=': print('this is that') if self.num2 != '': if self.result == '': if self.op == '+': self.result = float(self.num1) + float(self.num2) print(self.result) if self.op == '-': self.result = float(self.num1) - float(self.num2) print(self.result) if self.op == '*': self.result = float(self.num1) * float(self.num2) print(self.result) if self.op == '/': self.result = float(self.num1) / float(self.num2) print(self.result) else: if self.op != '': if self.op == '+': self.result = self.result + float(self.num2) print(self.result) if self.op == '-': self.result = self.result - float(self.num2) print(self.result) if self.op == '*': self.result = self.result * float(self.num2) print(self.result) if self.op == '/': self.result = self.result / float(self.num2) print(self.result) else: if self.result != '': self.num1 = '' self.num2 = '' self.op = '' self.result = '' if self.op == '': self.num1 += num print('---append ', num) else: self.num2 += num print('---append ', num) def check_keys(self, o): _iter = 0 for k in o.keyState: if k == 1: if _iter == 0: if ('.' not in self.num1 and self.num2 == '') or (self.num2 != '' and '.' not in self.num2): self.append_num('.') if _iter == 1: self.append_num('0') if _iter == 2: self.append_num('=') if _iter == 3: self.append_num('/') if _iter == 4: self.append_num('1') if _iter == 5: self.append_num('2') if _iter == 6: self.append_num('3') if _iter == 7: self.append_num('*') if _iter == 8: self.append_num('4') if _iter == 9: self.append_num('5') if _iter == 10: self.append_num('6') if _iter == 11: self.append_num('-') if _iter == 12: self.append_num('7') if _iter == 13: self.append_num('8') if _iter == 14: self.append_num('9') if _iter == 15: self.append_num('+') self.draw_main(o) _iter += 1 def draw_main(self, o): print('drawing ', self.num1) x_size = o.width / 4 y_size = o.height / 5 og_x = 0 o_x = og_x o_y = o.height text_padding = 6 _id = 0 while _id < 20: # lab = "" # for i in self.labels[_id]: # lab += i lab = self.labels[_id] o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.blue) o.center_block(lab, o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey) o_x = o_x + x_size _id += 1 if _id % 4 == 0: o_y -= y_size o_x = og_x #o.draw.rectangle((0, 0, o.width, y_size), outline=0, fill=o.blue) o.draw.rectangle((0, 0, x_size * 3, y_size), outline=0, fill=o.blue) o.draw.rectangle((x_size * 3, 0, o.width, y_size), outline=0, fill=o.blue) o.center_block("Clear", o.h2, [x_size * 3, 0, o.width, y_size], o.light_grey) #o.center_block('where is my fucking text', o.h2, [0, 0, o.width, y_size], o.light_grey) if self.num1 != '': if self.result != '': o.center_block(str(self.result), o.h2, [0, 0, x_size * 3, y_size], o.light_grey) elif self.num2 != '': o.center_block(str(self.num2), o.h2, [0, 0, x_size * 3, y_size], o.light_grey) elif self.op != '': o.center_block(str(self.op), o.h2, [0, 0, x_size * 3, y_size], o.light_grey) else: o.center_block(str(self.num1), o.h2, [0, 0, x_size * 3, y_size], o.light_grey) print('fucking do something') else: print('num1 is empty') o.update_display(0) def ReceiveMessage(self, message): o = self.FSM.owner u.play_seq(o, message) def Exit(self): self.FSM.owner.pub.unregister("beat", self)