def throwEvents(self): # check if we passed anything if hasattr(self, "controller"): for item in self.items: coords = self.canvas.coords(item) if coords[0] < 30 and item not in marked: # passed light or entered station t = kind_of_object[item] if t == "STATION": marked[item] = False self.controller.addInput( Event("enter", "tkinter_input", [])) elif t == "RED": marked[item] = True self.controller.addInput( Event("red_light", "tkinter_input", [])) elif t == "YELLOW": marked[item] = True self.controller.addInput( Event("yellow_light", "tkinter_input", [])) elif t == "GREEN": marked[item] = True self.controller.addInput( Event("green_light", "tkinter_input", [])) elif coords[0] < -170 and not marked[item]: self.controller.addInput( Event("leave", "tkinter_input", [])) marked[item] = True self.after(20, self.throwEvents)
def _poll(controller, socket_out): while 1: evt = socket_out.fetch(-1) name, params = evt.getName(), evt.getParameters() if name == "accept_socket": _start_on_daemon_thread(_accept, [controller, params[0]]) elif name == "recv_socket": recv_events[params[0]].set() elif name == "connect_socket": _start_on_daemon_thread(_connect, [controller, params[0], params[1]]) elif name == "create_socket": sock = socket.socket() sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) start_socket_threads(controller, sock) if len(params) == 1: # In case we get an ID to prove which socket it is controller.addInput( Event("created_socket", "socket_in", [sock, params[0]])) else: # Don't care and just send out the socket controller.addInput( Event("created_socket", "socket_in", [sock])) elif name == "close_socket": _start_on_daemon_thread(_close, [controller, params[0]]) elif name == "send_socket": send_data_queues[params[0]].append(params[1]) send_events[params[0]].set() elif name == "bind_socket": _start_on_daemon_thread(_bind, [controller, params[0], params[1]]) elif name == "listen_socket": _start_on_daemon_thread(_listen, [controller, params[0]]) elif name == "stop": break
def receive_from_socket(controller, sock, recv_event): try: while 1: recv_event.wait() recv_event.clear() if not run_sockets[sock]: break data = sock.recv(2**16) controller.addInput( Event("received_socket", "socket_in", [sock, data])) except socket.error as e: controller.addInput(Event("error_socket", "socket_in", [sock, e]))
def _wrapper_func(*args): func = args[0] controller = args[1] sock = args[2] try: func(*args[1:]) except socket.error as e: #print("ERROR " + str(e)) controller.addInput(Event("error_socket", "socket_in", [sock, e])) except Exception as e: print("UNKNOWN ERROR " + str(e)) controller.addInput( Event("unknown_error_socket", "socket_in", [sock, e])) raise
def __handle_event(ev=None): if event == ui.EVENTS.KEY_PRESS : controller.addInput(Event(raise_name, port, [ev.keycode,source])) elif event == ui.EVENTS.MOUSE_CLICK or \ event == ui.EVENTS.MOUSE_MOVE or \ event == ui.EVENTS.MOUSE_PRESS or \ event == ui.EVENTS.MOUSE_RELEASE or \ event == ui.EVENTS.MOUSE_RIGHT_CLICK : controller.addInput(Event(raise_name, port, [ev.x, ev.y, ev.num])) elif event == ui.EVENTS.WINDOW_CLOSE : controller.addInput(Event(raise_name, port, [source])) else : raise Exception('Unsupported event');
def scroller(self, event): self.event_delta = event.delta event_name = "scroll_mousewheel" self.last_x = event.x self.last_y = event.y SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)])) return "break"
def on_key(self, event): event_name = None if event.keysym == 'Escape': event_name = "escape" elif event.keysym == 'Return': event_name = "return" elif event.keysym == 'Delete': event_name = "delete" elif event.keysym == 'Shift_L': event_name = "shift" elif event.keysym == 'Control_L': event_name = "control" elif event.keysym == 'Left': event_name = "left_key" elif event.keysym == 'Right': event_name = "right_key" elif event.keysym == 'Up': event_name = "up_key" elif event.keysym == 'Down': event_name = "down_key" if event_name: SCCDWidget.controller.addInput( Event(event_name, "input", [id(self)])) return "break"
def zoom_out(self, event): event_name = "zoomer_event" self.last_x = event.x self.last_y = event.y if self.zoomer_count >= -6: self.event_delta = -120 self.zoomer_count -= 1 SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)])) return "break"
def on_motion(self, event): Widget.controller.addInput( Event("motion", self.inport, [ self.canvas.canvasx(event.x) - self.canvas.canvasx(self.last_x), self.canvas.canvasy(event.y) - self.canvas.canvasy(self.last_y) ])) self.last_x = event.x self.last_y = event.y
def __init__(self, sccd_object, canvas): self.sccd_object = sccd_object self.inport = self.sccd_object.inports["ball_ui_in"] self.outport = self.sccd_object.outports["ball_ui_out"] Widget.__init__(self, True, self.inport, self.outport) self.canvas = canvas self.listener = self.sccd_object.controller.addOutputListener( self.outport) Widget.controller.addInput(Event("ui_initialized", self.inport))
def __init__(self, sccd_object, window): tk.Button.__init__(self, window) self.sccd_object = sccd_object self.inport = self.sccd_object.inports["button_ui_in"] self.outport = self.sccd_object.outports["button_ui_out"] Widget.__init__(self, False, self.inport, self.outport) self.listener = self.sccd_object.controller.addOutputListener( self.outport) Widget.controller.addInput(Event("ui_initialized", self.inport))
def on_click(self, event): event_name = None if event.num == 1: event_name = "left-click" elif event.num == 2: event_name = "middle-click" elif event.num == 3: event_name = "right-click" if event_name == "left-click": Widget.controller.addInput(Event("clicked", self.inport))
def on_release(self, event): event_name = None if event.num == 1: event_name = "left-release" elif event.num == 2: event_name = "middle-release" elif event.num == 3: event_name = "right-release" if event_name: self.last_x = event.x self.last_y = event.y Widget.controller.addInput(Event(event_name, "input", [id(self)]))
def on_release(self, event): event_name = None if event.num == 1: event_name = "left-release" elif event.num == 2: event_name = "middle-release" elif event.num == 3: event_name = "right-release" if event_name == "left-release": self.last_x = event.x self.last_y = event.y Widget.controller.addInput(Event("unselect_ball", self.inport))
def on_click(self, event): event_name = None if event.num == 1: event_name = "left-click" elif event.num == 2: event_name = "middle-click" elif event.num == 3: event_name = "right-click" if event_name: self.last_x = event.x self.last_y = event.y Widget.controller.addInput(Event(event_name, self.inport))
def on_click(self, event): event_name = None if event.num == 1: event_name = "left-click" elif event.num == 2: event_name = "middle-click" elif event.num == 3: event_name = "right-click" if event_name == "right-click": self.last_x = event.x self.last_y = event.y Widget.controller.addInput( Event("create_ball", self.inport, [self.last_x, self.last_y]))
def send_to_socket(controller, sock, data_queue, send_event): while run_sockets[sock]: send_event.wait() send_event.clear() while data_queue: data = data_queue.pop(0) if sys.version_info[0] > 2: if isinstance(data, str): data = data.encode() send = sock.send(data) controller.addInput(Event("sent_socket", "socket_in", [sock, send])) if not run_sockets[sock]: break
def on_click(self, event): event_name = None if event.num == 1: event_name = "left-click" elif event.num == 2: event_name = "middle-click" elif event.num == 3: event_name = "right-click" if event_name: self.last_x = event.x self.last_y = event.y SCCDWidget.controller.addInput( Event(event_name, "input", [id(self)])) return "break"
def on_key(self, event): event_name = None if event.keysym == 'Escape': event_name = "escape" elif event.keysym == 'Return': event_name = "return" elif event.keysym == 'Delete': event_name = "delete" elif event.keysym == 'Shift_L': event_name = "shift" elif event.keysym == 'Control_L': event_name = "control" if event_name: Widget.controller.addInput(Event(event_name, "input", [id(self)]))
def on_key_release(self, event): event_name = None if event.keysym == 'Escape': event_name = "escape-release" elif event.keysym == 'Return': event_name = "return-release" elif event.keysym == 'Delete': event_name = "delete-release" elif event.keysym == 'Shift_L': event_name = "shift-release" elif event.keysym == 'Control_L': event_name = "control-release" if event_name: Widget.controller.addInput(Event(event_name, self.inport))
def on_key_release(self, event): event_name = None if event.keysym == 'Escape': event_name = "escape-release" elif event.keysym == 'Return': event_name = "return-release" elif event.keysym == 'Delete': event_name = "delete-release" elif event.keysym == 'Shift_L': event_name = "shift-release" elif event.keysym == 'Control_L': event_name = "control-release" if event_name: SCCDWidget.controller.addInput( Event(event_name, "input", [id(self)])) return "break"
def __init__(self, sccd_object): tk.Toplevel.__init__(self) self.sccd_object = sccd_object self.inport = self.sccd_object.inports["window_ui_in"] self.outport = self.sccd_object.outports["window_ui_out"] Widget.__init__(self, True, self.inport, self.outport) self.buttons = {} self.balls = {} self.title('BouncingBalls') self.c = tk.Canvas(self, relief=tk.RIDGE) self.repack() self.set_bindable_and_tagorid(self.c) self.c.bind("<Configure>", self.window_resize_handler) self.listener = self.sccd_object.controller.addOutputListener( self.outport) self.after(40, self.handle_output_events) Widget.controller.addInput( Event("ui_initialized", self.inport, [self.winfo_width(), self.winfo_height()]))
def on_leave(self, event): Widget.controller.addInput(Event("leave", "input", [id(self)]))
def on_enter(self, event): Widget.controller.addInput(Event("enter", "input", [id(self)]))
def on_motion(self, event): self.last_x = event.x self.last_y = event.y Widget.controller.addInput(Event("motion", "input", [id(self)]))
def window_close(self): Widget.controller.addInput(Event("window-close", "input", [id(self)]))
def raw_inputter(): while 1: controller.addInput(Event(raw_input(), "input", []))
def press_awake(): self.controller.addInput(Event("awake", "tkinter_input", []))
def press_close(): self.controller.addInput(Event("close", "tkinter_input", []))
def press_open(): self.controller.addInput(Event("open", "tkinter_input", []))