예제 #1
0
파일: gui.py 프로젝트: tdryer/netscramble
    def __init__(self):
        builder = Gtk.Builder()
        builder.add_from_file(res("glade/window1.glade"))
        builder.connect_signals(self)
        self.window = builder.get_object("window1")
        self.drawing_area = builder.get_object("drawingarea1")

        super(MainWindow, self).__init__(self.drawing_area, 60)

        self.clicks = 0
        self.start_time = None # when the current game started
        self.submitted_score = False
        self.render_matrix = None
        self.render_matrix_inverted = None
        self.game_grid = None
        self.grid_view = None
        self.on_new_game_action_activate(None)
        new_game_f = lambda: self.on_new_game_action_activate(None)
        self.score_dialog = ScoreDialog(self.window, new_game_f)

        self.window.show()
예제 #2
0
파일: gui.py 프로젝트: tdryer/netscramble
class MainWindow(scene.Scene):
    """Wrapper for the GtkWindow."""

    def __init__(self):
        builder = Gtk.Builder()
        builder.add_from_file(res("glade/window1.glade"))
        builder.connect_signals(self)
        self.window = builder.get_object("window1")
        self.drawing_area = builder.get_object("drawingarea1")

        super(MainWindow, self).__init__(self.drawing_area, 60)

        self.clicks = 0
        self.start_time = None # when the current game started
        self.submitted_score = False
        self.render_matrix = None
        self.render_matrix_inverted = None
        self.game_grid = None
        self.grid_view = None
        self.on_new_game_action_activate(None)
        new_game_f = lambda: self.on_new_game_action_activate(None)
        self.score_dialog = ScoreDialog(self.window, new_game_f)

        self.window.show()

    def on_window1_destroy(self, widget, data=None):
        """End process when window is closed."""
        Gtk.main_quit()

    def on_drawingarea1_button_release_event(self, widget, event, data=None):
        """Handle mouse button presses."""
        cell_pos = self.grid_view.get_grid_coord_at((event.x, event.y))
        if cell_pos and event.button == 1: # left
            tile = self.game_grid.get(*cell_pos)
            # TODO: this logic is ugly
            self.tick_lock(tile)
            self.grid_view.rotate_cell(cell_pos, self._check_game_over,
                                       lambda: self.tick_unlock(tile))
            self.clicks += 1
        elif cell_pos and event.button == 3: # right
            self.grid_view.toggle_cell_lock(cell_pos)
            self.tick_once()

    def _check_game_over(self):
        """Add score if the game is over."""
        if game.is_game_over(self.game_grid) and not self.submitted_score:
            self.submitted_score = True
            self.score_dialog.show_and_add_score(
                GLib.get_real_name(), int(time.time()), self.clicks,
                int(time.time() - self.start_time))

    def on_drawingarea1_draw(self, widget, cr, _data=None):
        """Draw in the drawing area."""
        width = widget.get_allocated_width()
        height = widget.get_allocated_height()
        with Timer(False): # TODO
            self.grid_view.update(1.0 / 60) # TODO: assumes 60 fps
            self.grid_view.draw(cr, (width, height))

    def on_new_game_action_activate(self, action, data=None):
        """Start a new game."""
        self.clicks = 0
        self.start_time = time.time()
        self.submitted_score = False
        self.game_grid = game.new_game_grid()
        self.grid_view = grid_view.GridView(self.game_grid)
        self.tick_once()

    def on_view_scores_action_activate(self, action, data=None):
        """Show the scores dialog."""
        self.score_dialog.show()