Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/CardSortActivity.py~
diff options
context:
space:
mode:
Diffstat (limited to 'CardSortActivity.py~')
-rw-r--r--CardSortActivity.py~318
1 files changed, 0 insertions, 318 deletions
diff --git a/CardSortActivity.py~ b/CardSortActivity.py~
deleted file mode 100644
index 3d24ad1..0000000
--- a/CardSortActivity.py~
+++ /dev/null
@@ -1,318 +0,0 @@
-#Copyright (c) 2009, Walter Bender
-
-#Permission is hereby granted, free of charge, to any person obtaining a copy
-#of this software and associated documentation files (the "Software"), to deal
-#in the Software without restriction, including without limitation the rights
-#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-#copies of the Software, and to permit persons to whom the Software is
-#furnished to do so, subject to the following conditions:
-
-#The above copyright notice and this permission notice shall be included in
-#all copies or substantial portions of the Software.
-
-#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-#THE SOFTWARE.
-
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gobject
-
-import sugar
-from sugar.activity import activity
-from sugar.bundle.activitybundle import ActivityBundle
-from sugar.activity.widgets import ActivityToolbarButton
-from sugar.activity.widgets import StopButton
-from sugar.graphics.toolbarbox import ToolbarBox
-from sugar.graphics.toolbarbox import ToolbarButton
-from sugar.graphics.toolbutton import ToolButton
-from sugar.graphics.menuitem import MenuItem
-from sugar.graphics.icon import Icon
-from sugar.graphics import style
-from sugar.datastore import datastore
-
-from sugar import profile
-from gettext import gettext as _
-import locale
-import os.path
-from sprites import *
-from math import sqrt
-
-class taWindow: pass
-
-SERVICE = 'org.sugarlabs.CardSortActivity'
-IFACE = SERVICE
-PATH = '/org/augarlabs/CardSortActivity'
-
-CARD_DIM = 135
-CARD_DEFS = ((1,3,-2,-3),(2,3,-3,-2),(2,3,-4,-4),\
- (2,1,-1,-4),(3,4,-4,-3),(4,2,-1,-2),\
- (1,1,-2,-4),(4,2,-3,-4),(1,3,-1,-2))
-
-
-#
-# class for defining 3x3 matrix of cards
-#
-class Grid:
- # 123
- # 456
- # 789
- def __init__(self,tw):
- self.grid = [1,2,3,4,5,6,7,8,9]
- self.card_table = {}
- # Initialize the cards
- i = 0
- x = (tw.width-(CARD_DIM*3))/2
- y = (tw.height-(CARD_DIM*3))/2
- for c in CARD_DEFS:
- self.card_table[i] = Card(tw,c,i,x,y)
- self.card_table[i].draw_card()
- x += CARD_DIM
- if x > (tw.width+(CARD_DIM*2))/2:
- x = (tw.width-(CARD_DIM*3))/2
- y += CARD_DIM
- i += 1
-
- def swap(self,a,b):
- # swap grid elements and x,y positions of sprites
- print "swapping cards " + str(a) + " and " + str(b)
- tmp = self.grid[a]
- x = self.card_table[a].spr.x
- y = self.card_table[a].spr.y
- self.grid[a] = self.grid[b]
- self.card_table[a].spr.x = self.card_table[b].spr.x
- self.card_table[a].spr.y = self.card_table[b].spr.y
- self.grid[b] = tmp
- self.card_table[b].spr.x = x
- self.card_table[b].spr.y = y
-
- def print_grid(self):
- print self.grid
- return
-
- def test(self):
- for i in (0,1,3,4,6,7):
- if self.card_table[self.grid[i]].east + \
- self.card_table[self.grid[i+1]].west != 0:
- return False
- for i in (0,1,2,3,4,5):
- if self.card_table[self.grid[i]].south + \
- self.card_table[self.grid[i+3]].north != 0:
- return False
- return True
-
-
-#
-# class for defining individual cards
-#
-class Card:
- # Spade = 1,-1
- # Heart = 2,-2
- # Club = 3,-3
- # Diamond = 4,-4
- def __init__(self,tw,c,i,x,y):
- self.north = c[0]
- self.east = c[1]
- self.south = c[2]
- self.west = c[3]
- self.rotate = 0
- # create sprite from svg file
- self.spr = sprNew(tw,x,y,self.load_image(tw.path,i))
- self.spr.label = i
-
- def draw_card(self):
- setlayer(self.spr,2000)
- draw(self.spr)
-
- def load_image(self, file, i):
- print "loading " + os.path.join(file + str(i) + '.svg')
- return gtk.gdk.pixbuf_new_from_file(os.path.join(file + \
- str(i) + "x" + \
- '.svg'))
-
- def rotate_ccw(self):
- # print "rotating card " + str(self.spr.label)
- tmp = self.north
- self.north = self.east
- self.east = self.south
- self.south = self.west
- self.west = tmp
- self.rotate += 90
- if self.rotate > 359:
- self.rotate -= 360
- tmp = self.spr.image.rotate_simple(90)
- self.spr.image = tmp
-
- def print_card(self):
- print "(" + str(self.north) + "," + str(self.east) + \
- "," + str(self.south) + "," + str(self.west) + \
- ") " + str(self.rotate) + "ccw" + \
- " x:" + str(self.spr.x) + " y:" + str(self.spr.y)
-
-#
-# Sugar activity
-#
-class CardSortActivity(activity.Activity):
-
- def __init__(self, handle):
- super(CardSortActivity,self).__init__(handle)
-
- # Use 0.86 toolbar design
- toolbar_box = ToolbarBox()
-
- # Buttons added to the Activity toolbar
- activity_button = ActivityToolbarButton(self)
- toolbar_box.toolbar.insert(activity_button, 0)
- activity_button.show()
-
- # Solver button
- self.solve_puzzle = ToolButton( "solve-off" )
- self.solve_puzzle.set_tooltip(_('Solve it'))
- self.solve_puzzle.props.sensitive = True
- self.solve_puzzle.connect('clicked', self._solver_cb)
- toolbar_box.toolbar.insert(self.solve_puzzle, -1)
- self.solve_puzzle.show()
-
- separator = gtk.SeparatorToolItem()
- separator.show()
- toolbar_box.toolbar.insert(separator, -1)
-
- # Label for showing status
- self.results_label = gtk.Label(_("click to rotate; drag to swap"))
- self.results_label.show()
- results_toolitem = gtk.ToolItem()
- results_toolitem.add(self.results_label)
- toolbar_box.toolbar.insert(results_toolitem,-1)
-
- separator = gtk.SeparatorToolItem()
- separator.props.draw = False
- separator.set_expand(True)
- separator.show()
- toolbar_box.toolbar.insert(separator, -1)
-
- # The ever-present Stop Button
- stop_button = StopButton(self)
- stop_button.props.accelerator = '<Ctrl>Q'
- toolbar_box.toolbar.insert(stop_button, -1)
- stop_button.show()
-
- self.set_toolbar_box(toolbar_box)
- toolbar_box.show()
-
- # Create a canvas
- canvas = gtk.DrawingArea()
- canvas.set_size_request(gtk.gdk.screen_width(), \
- gtk.gdk.screen_height())
- self.set_canvas(canvas)
- self.show_all()
-
- # Initialize the canvas
- self.tw = taWindow()
- self.tw.window = canvas
- canvas.set_flags(gtk.CAN_FOCUS)
- canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- canvas.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
- canvas.connect("expose-event", self._expose_cb, self.tw)
- canvas.connect("button-press-event", self._button_press_cb, self.tw)
- canvas.connect("button-release-event", self._button_release_cb, self.tw)
- self.tw.width = gtk.gdk.screen_width()
- self.tw.height = gtk.gdk.screen_height()-style.GRID_CELL_SIZE
- self.tw.area = canvas.window
- self.tw.gc = self.tw.area.new_gc()
- self.tw.scale = 5
- self.tw.cm = self.tw.gc.get_colormap()
- self.tw.msgcolor = self.tw.cm.alloc_color('black')
- self.tw.sprites = []
-
- # Initialize the grid
- self.tw.path = os.path.join(activity.get_bundle_path(),'images/card')
- self.tw.grid = Grid(self.tw)
-
- # Start solving the puzzle
- self.tw.press = -1
- self.tw.release = -1
- self.tw.start_drag = [0,0]
-
- #
- # Solver
- #
- def _solver_cb(self, button):
- self.solve_puzzle.set_icon("solve-on")
- """
- We need to write this code
- """
- self.results_label.set_text(_("I don't know how to solve it."))
- self.results_label.show()
- self.solve_puzzle.set_icon("solve-off")
- return True
-
-
- #
- # Repaint
- #
- def _expose_cb(self, win, event, tw):
- redrawsprites(tw)
- return True
-
- #
- # Button press
- #
- def _button_press_cb(self, win, event, tw):
- win.grab_focus()
- x, y = map(int, event.get_coords())
- tw.start_drag = [x,y]
- spr = findsprite(tw,(x,y))
- if spr is None:
- tw.press = -1
- tw.release = -1
- return True
- # take note of card under button press
- tw.press = spr.label
- return True
-
- #
- # Button release
- #
- def _button_release_cb(self, win, event, tw):
- win.grab_focus()
- x, y = map(int, event.get_coords())
- spr = findsprite(tw,(x,y))
- if spr is None:
- tw.press = -1
- tw.release = -1
- return True
- # take note of card under button release
- tw.release = spr.label
- # if the same card (click) then rotate
- if tw.press == tw.release:
- # check to see if it was an aborted move
- if self.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()
- inval(tw.grid.card_table[tw.press].spr)
- inval(tw.grid.card_table[tw.release].spr)
- redrawsprites(tw)
- tw.press = -1
- tw.release = -1
- if tw.grid.test() == True:
- self.results_label.set_text(_("You solved the puzzle."))
- self.results_label.show()
- else:
- self.results_label.set_text(_("Keep trying."))
- self.results_label.show()
-
- return True
-
- def distance(self,start,stop):
- dx = start[0]-stop[0]
- dy = start[1]-stop[1]
- return sqrt(dx*dx+dy*dy)