Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/window.py
diff options
context:
space:
mode:
Diffstat (limited to 'window.py')
-rw-r--r--window.py269
1 files changed, 132 insertions, 137 deletions
diff --git a/window.py b/window.py
index e72fe5a..45b7ec9 100644
--- a/window.py
+++ b/window.py
@@ -1,14 +1,13 @@
-#Copyright (c) 2009,10 Walter Bender
+#Copyright (c) 2009-11 Walter Bender
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU General Public License
+# along with this library; if not, write to the Free Software
+# Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA
import pygtk
pygtk.require('2.0')
@@ -21,146 +20,142 @@ try:
except:
GRID_CELL_SIZE = 0
-from grid import *
-from card import *
+from grid import Grid
from sprites import Sprites
from math import sqrt
CARD_DIM = 135
-class taWindow: pass
-
#
# handle launch from both within and without of Sugar environment
#
-def new_window(canvas, path, parent=None):
- tw = taWindow()
- tw.path = path
- tw.activity = parent
-
- # starting from command line
- # we have to do all the work that was done in CardSortActivity.py
- if parent is None:
- tw.sugar = False
- tw.canvas = canvas
-
- # starting from Sugar
- else:
- tw.sugar = True
- tw.canvas = canvas
- parent.show_all()
-
- tw.canvas.set_flags(gtk.CAN_FOCUS)
- tw.canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- tw.canvas.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
- tw.canvas.connect("expose-event", _expose_cb, tw)
- tw.canvas.connect("button-press-event", _button_press_cb, tw)
- tw.canvas.connect("button-release-event", _button_release_cb, tw)
- tw.width = gtk.gdk.screen_width()
- tw.height = gtk.gdk.screen_height()-GRID_CELL_SIZE
- tw.card_dim = CARD_DIM
- tw.scale = 0.8 * tw.height/(tw.card_dim*3)
-
- # Initialize the sprite repository
- tw.sprites = Sprites(tw.canvas)
-
- # Initialize the grid
- tw.grid = Grid(tw)
-
- # Start solving the puzzle
- tw.press = -1
- tw.release = -1
- tw.start_drag = [0,0]
-
- return tw
-
-#
-# Button press
-#
-def _button_press_cb(win, event, tw):
- win.grab_focus()
- x, y = map(int, event.get_coords())
- tw.start_drag = [x,y]
- tw.grid.hide_masks()
- spr = tw.sprites.find_sprite((x,y))
- if spr is None:
- tw.press = -1
- tw.release = -1
- return True
- # take note of card under button press
- tw.press = int(spr.labels[0])
- return True
-
-#
-# Button release
-#
-def _button_release_cb(win, event, tw):
- win.grab_focus()
- tw.grid.hide_masks()
- x, y = map(int, event.get_coords())
- spr = tw.sprites.find_sprite((x,y))
- if spr is None:
- tw.press = -1
- tw.release = -1
+class Game():
+
+ def __init__(self, canvas, path, parent=None):
+ self.activity = parent
+ self.path = path
+
+ # starting from command line
+ # we have to do all the work that was done in CardSortActivity.py
+ if parent is None:
+ self.sugar = False
+ self.canvas = canvas
+
+ # starting from Sugar
+ else:
+ self.sugar = True
+ self.canvas = canvas
+ parent.show_all()
+
+ self.canvas.set_flags(gtk.CAN_FOCUS)
+ self.canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK)
+ self.canvas.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
+ self.canvas.connect("expose-event", self._expose_cb)
+ self.canvas.connect("button-press-event", self._button_press_cb)
+ self.canvas.connect("button-release-event", self._button_release_cb)
+ self.width = gtk.gdk.screen_width()
+ self.height = gtk.gdk.screen_height()-GRID_CELL_SIZE
+ self.card_dim = CARD_DIM
+ self.scale = 0.8 * self.height / (self.card_dim * 3)
+
+ # Initialize the sprite repository
+ self.sprites = Sprites(self.canvas)
+
+ # Initialize the grid
+ self.grid = Grid(self)
+
+ # Start solving the puzzle
+ self.press = -1
+ self.release = -1
+ self.start_drag = [0, 0]
+
+ #
+ # Button press
+ #
+ def _button_press_cb(self, win, event):
+ win.grab_focus()
+ x, y = map(int, event.get_coords())
+ self.start_drag = [x, y]
+ self.grid.hide_masks()
+ spr = self.sprites.find_sprite((x,y))
+ if spr is None:
+ self.press = -1
+ self.release = -1
+ return True
+ # take note of card under button press
+ self.press = int(spr.labels[0])
return True
- # take note of card under button release
- tw.release = int(spr.labels[0])
- # if the same card (click) then rotate
- if tw.press == tw.release:
- # check to see if it was an aborted move
- if distance(tw.start_drag,[x,y]) < 20:
- tw.grid.card_table[tw.press].rotate_ccw()
- # tw.grid.card_table[tw.press].print_card()
- # if different card (drag) then swap
- else:
- tw.grid.swap(tw.press,tw.release)
- # tw.grid.print_grid()
- tw.press = -1
- tw.release = -1
- if tw.test() == True:
- if tw.sugar is True:
- tw.activity.results_label.set_text(_("You solved the puzzle."))
- tw.activity.results_label.show()
+
+ #
+ # Button release
+ #
+ def _button_release_cb(self, win, event):
+ win.grab_focus()
+ self.grid.hide_masks()
+ x, y = map(int, event.get_coords())
+ spr = self.sprites.find_sprite((x, y))
+ if spr is None:
+ self.press = -1
+ self.release = -1
+ return True
+ # take note of card under button release
+ self.release = int(spr.labels[0])
+ # if the same card (click) then rotate
+ if self.press == self.release:
+ # check to see if it was an aborted move
+ if self.distance(self.start_drag, [x, y]) < 20:
+ self.grid.card_table[self.press].rotate_ccw()
+ # self.grid.card_table[self.press].print_card()
+ # if different card (drag) then swap
else:
- tw.win.set_title(_("CardSort") + ": " + \
- _("You solved the puzzle."))
- else:
- if tw.sugar is True:
- tw.activity.results_label.set_text(_("Keep trying."))
- tw.activity.results_label.show()
+ self.grid.swap(self.press,self.release)
+ # self.grid.print_grid()
+ self.press = -1
+ self.release = -1
+ if self.test() == True:
+ if self.sugar is True:
+ self.activity.results_label.set_text(
+ _("You solved the puzzle."))
+ self.activity.results_label.show()
+ else:
+ self.win.set_title(_("CardSort") + ": " + \
+ _("You solved the puzzle."))
else:
- tw.win.set_title(_("CardSort") + ": " + _("Keep trying."))
- return True
-
-#
-# Measure length of drag between button press and button release
-#
-def distance(start,stop):
- dx = start[0]-stop[0]
- dy = start[1]-stop[1]
- return sqrt(dx*dx+dy*dy)
-
-
-#
-# Repaint
-#
-def _expose_cb(tw, win, event):
- ''' Callback to handle window expose events '''
- tw.do_expose_event(event)
- return True
-
-def do_expose_event(tw, event):
- ''' Handle the expose-event by drawing '''
- # Restrict Cairo to the exposed area
- cr = tw.canvas.window.cairo_create()
- cr.rectangle(event.area.x, event.area.y,
- event.area.width, event.area.height)
- cr.clip()
- # Refresh sprite list
- tw.sprites.redraw_sprites(cr=cr)
-
-#
-# callbacks
-#
-def _destroy_cb(win, event, tw):
- gtk.main_quit()
+ if self.sugar is True:
+ self.activity.results_label.set_text(_("Keep trying."))
+ self.activity.results_label.show()
+ else:
+ self.win.set_title(_("CardSort") + ": " + _("Keep trying."))
+ return True
+
+ #
+ # Measure length of drag between button press and button release
+ #
+ def distance(self, start, stop):
+ dx = start[0] - stop[0]
+ dy = start[1] - stop[1]
+ return sqrt(dx * dx + dy * dy)
+
+ #
+ # Repaint
+ #
+ def _expose_cb(self, win, event):
+ ''' Callback to handle window expose events '''
+ self.do_expose_event(event)
+ return True
+
+ def do_expose_event(self, event):
+ ''' Handle the expose-event by drawing '''
+ # Restrict Cairo to the exposed area
+ cr = self.canvas.window.cairo_create()
+ cr.rectangle(event.area.x, event.area.y,
+ event.area.width, event.area.height)
+ cr.clip()
+ # Refresh sprite list
+ self.sprites.redraw_sprites(cr=cr)
+
+ #
+ # callbacks
+ #
+ def _destroy_cb(self, win, event):
+ gtk.main_quit()