def main(stdscr): curses.curs_set(0) the_game = SquareGame() the_view = View(the_game) solve_flag = False hints_flag = False status_text = "Hello!" def prompt_key(stdscr, status_text, prompt_text): stdscr.move(21, 0) stdscr.deleteln() stdscr.deleteln() stdscr.addstr(21, 0, status_text) stdscr.addstr(22, 0, prompt_text) return stdscr.getkey() while True: # Show board stdscr.erase() the_view.draw(stdscr, solve_flag, hints_flag) stdscr.refresh() # Handle inputs cmd = prompt_key(stdscr, status_text, "Command?") if cmd == "q": # (q)uit command break elif cmd == "p": # (p)robe command y = prompt_key(stdscr, "Probe", "Y?") x = prompt_key(stdscr, "Probe", "X?") try: the_game.probe(int(y), int(x)) except Exception as e: status_text = e.__str__() status_text = "Done" elif cmd == "s": # (s)olve command solve_flag = not solve_flag status_text = "See solution: {}".format(solve_flag) elif cmd == "h": # (h)elp command hints_flag = not hints_flag status_text = "p = probe, s = toggle sol., " \ "q = quit, h = help, r = reset" elif cmd == "r": # (r)eset command the_game = SquareGame() the_view = View(the_game) solve_flag = False hints_flag = False status_text = "Reset done. Hello!" else: status_text = "Unknown commmand"
def update_views(self, args): view_infos = args.split(",") # Do something if buffer's all view hide after update_views operation. old_view_buffer_ids = list( set(map(lambda v: v.buffer_id, self.view_dict.values()))) new_view_buffer_ids = list( set(map(lambda v: v.split(":")[0], view_infos))) # Call all_views_hide interface when buffer's all views will hide. # We do something in app's buffer interface, such as videoplayer will pause video when all views hide. # Note, we must call this function before last view destroy, # such as QGraphicsVideoItem will report "Internal data stream error" error. for old_view_buffer_id in old_view_buffer_ids: if old_view_buffer_id not in new_view_buffer_ids: self.buffer_dict[old_view_buffer_id].all_views_hide() # Remove old key from view dict and destroy old view. for key in list(self.view_dict): if key not in view_infos: self.view_dict[key].handle_destroy() self.view_dict.pop(key, None) # Create new view and udpate in view dict. if view_infos != ['']: for view_info in view_infos: if view_info not in self.view_dict: (buffer_id, _, _, _, _, _) = view_info.split(":") view = View(self.buffer_dict[buffer_id], view_info) self.view_dict[view_info] = view view.trigger_focus_event.connect(self.focus_emacs_buffer) # Call some_view_show interface when buffer's view switch back. # Note, this must call after new view create, otherwise some buffer, # such as QGraphicsVideoItem will report "Internal data stream error" error. if view_infos != ['']: for new_view_buffer_id in new_view_buffer_ids: if new_view_buffer_id not in old_view_buffer_ids: self.buffer_dict[new_view_buffer_id].some_view_show() # Adjust buffer size along with views change. # Note: just buffer that option `fit_to_view' is False need to adjust, # if buffer option fit_to_view is True, buffer render adjust by view.resizeEvent() for buffer in list(self.buffer_dict.values()): if not buffer.fit_to_view: buffer_views = list( filter(lambda v: v.buffer_id == buffer.buffer_id, list(self.view_dict.values()))) # Adjust buffer size to max view's size. if len(buffer_views) > 0: max_view = max(buffer_views, key=lambda v: v.width * v.height) buffer.buffer_widget.resize(max_view.width, max_view.height) # Adjust buffer size to emacs window size if not match view found. else: buffer.buffer_widget.resize(emacs_width, emacs_height)
def read_views(path): views = [] with open(path, "r") as ins: for line in ins: line = line.replace(" ", "").replace("\n", "") numbers = line.split(",") views.append( View(int(int(numbers[0])), int(int(numbers[1])), int(int(numbers[2])), int(int(numbers[3])))) if len(views) == 0: print(path) return views
def update_views(self, args): ''' Update views.''' from core.view import View view_infos = args.split(",") # Do something if buffer's all view hide after update_views operation. old_view_buffer_ids = list( set(map(lambda v: v.buffer_id, self.view_dict.values()))) new_view_buffer_ids = list( set(map(lambda v: v.split(":")[0], view_infos))) # Call all_views_hide interface when buffer's all views will hide. # We do something in app's buffer interface, such as videoplayer will pause video when all views hide. # Note, we must call this function before last view destroy, # such as QGraphicsVideoItem will report "Internal data stream error" error. for old_view_buffer_id in old_view_buffer_ids: if old_view_buffer_id not in new_view_buffer_ids: if old_view_buffer_id in self.buffer_dict: self.buffer_dict[old_view_buffer_id].all_views_hide() # Remove old key from view dict and destroy old view. for key in list(self.view_dict): if key not in view_infos: self.destroy_view_later(key) # NOTE: # Create new view and REPARENT view to Emacs window. if view_infos != ['']: for view_info in view_infos: if view_info not in self.view_dict: (buffer_id, _, _, _, _, _) = view_info.split(":") view = View(self.buffer_dict[buffer_id], view_info) self.view_dict[view_info] = view # Call some_view_show interface when buffer's view switch back. # Note, this must call after new view create, otherwise some buffer, # such as QGraphicsVideoItem will report "Internal data stream error" error. if view_infos != ['']: for new_view_buffer_id in new_view_buffer_ids: if new_view_buffer_id not in old_view_buffer_ids: if new_view_buffer_id in self.buffer_dict: self.buffer_dict[new_view_buffer_id].some_view_show() # Adjust buffer size along with views change. # Note: just buffer that option `fit_to_view' is False need to adjust, # if buffer option fit_to_view is True, buffer render adjust by view.resizeEvent() for buffer in list(self.buffer_dict.values()): if not buffer.fit_to_view: buffer_views = list( filter(lambda v: v.buffer_id == buffer.buffer_id, list(self.view_dict.values()))) # Adjust buffer size to max view's size. if len(buffer_views) > 0: max_view = max(buffer_views, key=lambda v: v.width * v.height) buffer.buffer_widget.resize(max_view.width, max_view.height) # Adjust buffer size to emacs window size if not match view found. else: buffer.buffer_widget.resize(emacs_width, emacs_height) # Send resize signal to buffer. buffer.resize_view() # NOTE: # When you do switch buffer or kill buffer in Emacs, will call Python function 'update_views. # Screen will flick if destroy old view BEFORE reparent new view. # # So we call function 'destroy_view_now' at last to make sure destroy old view AFTER reparent new view. # Then screen won't flick. self.destroy_view_now()
from core.web import Web from core.view import View web = Web('127.0.0.1', 8000) view = View()
from core.controller import Controller from core.model import Model from core.view import View if __name__ == '__main__': model = Model(50, 50) view = View(model) ctrl = Controller(view, model) view.set_controller(ctrl) ctrl.start()