Пример #1
0
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"
Пример #2
0
    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)
Пример #3
0
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()
Пример #5
0
from core.web import Web
from core.view import View

web = Web('127.0.0.1', 8000)
view = View()

Пример #6
0
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()