gnome-games r9041 - trunk/gnome-sudoku/src/lib
- From: thomashpa svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-games r9041 - trunk/gnome-sudoku/src/lib
- Date: Sun, 12 Apr 2009 21:33:26 +0000 (UTC)
Author: thomashpa
Date: Sun Apr 12 21:33:26 2009
New Revision: 9041
URL: http://svn.gnome.org/viewvc/gnome-games?rev=9041&view=rev
Log:
Add the new separate file for the dancer. Related to the previous commit 9040
Added:
trunk/gnome-sudoku/src/lib/dancer.py
Added: trunk/gnome-sudoku/src/lib/dancer.py
==============================================================================
--- (empty file)
+++ trunk/gnome-sudoku/src/lib/dancer.py Sun Apr 12 21:33:26 2009
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+import gtk, colors, gobject
+
+class GridDancer:
+
+ DANCE_COLORS = [colors.color_hex_to_float(hx) for hx in
+ [
+ '#cc0000', # red
+ '#ef2929',
+ '#f57900', # orange
+ '#fcaf3e',
+ '#fce94f',
+ '#8ae234', # green
+ '#73d216',
+ '#729fcf', # blue
+ '#3465a4',
+ '#ad7fa8', # violet
+ '#75507b', ]
+ ]
+
+ STEPS_PER_ANIMATION = 10
+
+ def __init__ (self, grid):
+ self.animations = [self.value_dance,
+ self.box_dance,
+ self.col_dance,
+ self.row_dance,]
+ self.current_animation = self.value_dance
+ self.step = 0
+ self.grid = grid
+ self.dancing = False
+ self.adjustment = 0
+
+ def start_dancing (self):
+ for box in self.grid.__entries__.values():
+ box.props.can_focus = False
+ if box.read_only:
+ box.read_only = False
+ box.need_restore = True
+ else:
+ box.need_restore = False
+ self.grid.get_toplevel().child_focus(gtk.DIR_TAB_BACKWARD)
+ self.dancing = True
+ gobject.timeout_add(350, self.dance_grid)
+
+ def stop_dancing (self):
+ self.dancing = False
+ for box in self.grid.__entries__.values():
+ box.props.can_focus = True
+ if box.need_restore:
+ box.read_only = True
+ self.grid.unhighlight_cells()
+
+ def dance_grid (self):
+ if not self.dancing:
+ return
+ if self.step > self.STEPS_PER_ANIMATION:
+ self.rotate_animation()
+ self.adjustment = (self.adjustment + 1) % 9
+ try:
+ self.current_animation()
+ except AttributeError:
+ return True
+ self.step += 1
+ if self.dancing:
+ return True
+
+ def rotate_animation (self):
+ current_index = self.animations.index(self.current_animation)
+ next_index = (current_index + 1) % len(self.animations)
+ self.current_animation = self.animations[next_index]
+ self.step = 0
+
+ def next_color (self, current):
+ result = (current + self.adjustment) % len(self.DANCE_COLORS)
+ return self.DANCE_COLORS[result]
+
+ def col_dance (self):
+ for x in range(9):
+ color = self.next_color(x)
+ for y in range(9):
+ self.grid.__entries__[(x, y)].set_background_color(color)
+
+ def row_dance (self):
+ for y in range(9):
+ color = self.next_color(y)
+ for x in range(9):
+ self.grid.__entries__[(x, y)].set_background_color(color)
+
+ def box_dance (self):
+ for box in range(9):
+ color = self.next_color(box)
+ for x, y in self.grid.grid.box_coords[box]:
+ self.grid.__entries__[(x, y)].set_background_color(color)
+
+ def value_dance (self):
+ for value in range(10):
+ color = self.next_color(value)
+ for x in range(9):
+ for y in range(9):
+ box = self.grid.__entries__[(x, y)]
+ if box.get_value() == value:
+ box.set_background_color(color)
+
+if __name__ == '__main__':
+ def test_dance_grid ():
+ import gsudoku
+ window = gtk.Window()
+ game = '''9 1 6 3 2 8 4 5 7
+ 5 7 4 6 1 9 2 8 3
+ 8 3 2 5 7 4 9 6 1
+ 6 8 7 2 4 1 3 9 5
+ 2 9 5 7 3 6 1 4 8
+ 3 4 1 8 9 5 7 2 6
+ 4 6 9 1 8 7 5 3 2
+ 1 2 8 9 5 3 6 7 4
+ 7 5 3 4 6 2 8 1 9'''
+ gsd = gsudoku.SudokuGameDisplay(game)
+ dancer = GridDancer(gsd)
+
+ button = gtk.Button('toggle')
+ button.connect('clicked',
+ lambda *args: dancer.stop_dancing if dancer.dancing
+ else dancer.start_dancing)
+ vbox = gtk.VBox()
+ vbox.pack_start(gsd)
+ vbox.pack_end(button)
+ window.add(vbox)
+ window.show_all()
+ window.connect('delete-event', gtk.main_quit)
+ gtk.main()
+
+ test_dance_grid()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]