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.py237
1 files changed, 237 insertions, 0 deletions
diff --git a/window.py b/window.py
new file mode 100644
index 0000000..68754d3
--- /dev/null
+++ b/window.py
@@ -0,0 +1,237 @@
+# -*- coding: utf-8 -*-
+#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.
+
+from constants import *
+import pygtk
+pygtk.require('2.0')
+import gtk
+from gettext import gettext as _
+import math
+
+try:
+ from sugar.graphics import style
+ GRID_CELL_SIZE = style.GRID_CELL_SIZE
+except:
+ GRID_CELL_SIZE = 0
+
+from sprite_factory import *
+
+class Window: pass
+
+#
+# handle launch from both within and without of Sugar environment
+#
+def new_window(canvas, path, parent=None):
+
+
+
+ # store class variables here
+ tw = Window()
+ 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.add_events(gtk.gdk.POINTER_MOTION_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.canvas.connect("motion-notify-event", _mouse_move_cb, tw)
+ tw.width = gtk.gdk.screen_width()
+ tw.height = gtk.gdk.screen_height()-GRID_CELL_SIZE
+ tw.area = tw.canvas.window
+ tw.gc = tw.area.new_gc()
+ tw.cm = tw.gc.get_colormap()
+ tw.msgcolor = tw.cm.alloc_color('black')
+ tw.sprites = []
+ tw.scale = 1
+ tw.answers_on_top = False
+
+ # Open the sliders
+ y = 50
+ tw.deck = [Sprite(tw,"CartaCristo",100,100,100,198,False),\
+ Sprite(tw,"CartaGranMuralla",250,100,100,198,False),\
+ Sprite(tw,"CartaMacchu",400,100,100,198,False)]
+ tw.cards = [tw.deck[0],tw.deck[1],tw.deck[2]]
+ tw.numbers = [Sprite(tw,"Carta1",100,100,100,198,False),\
+ Sprite(tw,"Carta2",250,100,100,198,False),\
+ Sprite(tw,"Carta3",400,100,100,198,False)]
+
+ tw.questions = [Sprite(tw,"tab",100,320,100,50,True),\
+ Sprite(tw,"tab",250,320,100,50,True),\
+ Sprite(tw,"tab",400,320,100,50,True)]
+
+ tw.qa_block = Sprite(tw,"tab",0,0,tw.width,tw.height,False)
+ tw.answers = [Sprite(tw,"tab",100,420,100,50,True),\
+ Sprite(tw,"tab",100,520,100,50,True),\
+ Sprite(tw,"tab",100,620,100,50,True),\
+ Sprite(tw,"tab",250,420,100,50,True),\
+ Sprite(tw,"tab",250,520,100,50,True),\
+ Sprite(tw,"tab",250,620,100,50,True),\
+ Sprite(tw,"tab",400,420,100,50,True),\
+ Sprite(tw,"tab",400,520,100,50,True),\
+ Sprite(tw,"tab",400,620,100,50,True)]
+
+ for i in tw.cards:
+ i.draw_slider_bottom()
+
+ for i in tw.numbers:
+ i.draw_slider_top()
+
+ setlabel(tw.questions[0].spr,_("How are you?"))
+ setlabel(tw.answers[0].spr,_("muy bien"))
+ setlabel(tw.answers[1].spr,_("mas o menos"))
+ setlabel(tw.answers[2].spr,_("muy mal"))
+
+ setlabel(tw.questions[1].spr,"Where are you?")
+ setlabel(tw.answers[3].spr,_("Lima"))
+ setlabel(tw.answers[4].spr,_("Andes"))
+ setlabel(tw.answers[5].spr,_("Cambridge"))
+
+ setlabel(tw.questions[2].spr,"Who are you?")
+ setlabel(tw.answers[6].spr,_("Sebastian"))
+ setlabel(tw.answers[7].spr,_("Kiko"))
+ setlabel(tw.answers[8].spr,_("HernĂ¡n"))
+
+ for i in tw.questions:
+ i.draw_slider_top()
+
+ for i in tw.answers:
+ i.draw_slider_bottom()
+
+ tw.qa_block.draw_slider_middle()
+
+ # Start calculating
+ tw.press = None
+ tw.dragpos = 0,0
+
+ return tw
+
+#
+# Button press
+#
+def _button_press_cb(win, event, tw):
+ win.grab_focus()
+ x, y = map(int, event.get_coords())
+ tw.dragpos = x,y
+ spr = findsprite(tw,(x,y))
+ tw.press = spr
+ return True
+
+#
+# Mouse move
+#
+def _mouse_move_cb(win, event, tw):
+ if tw.press is None:
+ tw.dragpos = 0,0
+ return True
+
+ win.grab_focus()
+ x, y = map(int, event.get_coords())
+ dx = x-tw.dragpos[0]
+ if tw.press == tw.cards[2].spr or tw.press == tw.numbers[2].spr:
+ # everything moves
+ move(tw.cards[0].spr,(tw.cards[0].spr.x+dx,tw.cards[0].spr.y))
+ move(tw.cards[1].spr,(tw.cards[1].spr.x+dx,tw.cards[1].spr.y))
+ move(tw.cards[2].spr,(tw.cards[2].spr.x+dx,tw.cards[2].spr.y))
+ move(tw.numbers[0].spr,(tw.numbers[0].spr.x+dx,tw.numbers[0].spr.y))
+ move(tw.numbers[1].spr,(tw.numbers[1].spr.x+dx,tw.numbers[1].spr.y))
+ move(tw.numbers[2].spr,(tw.numbers[2].spr.x+dx,tw.numbers[2].spr.y))
+ # reset drag position
+ tw.dragpos = x,y
+
+#
+# Button release
+#
+def _button_release_cb(win, event, tw):
+ if tw.press == None:
+ tw.dragpos = 0,0
+ return True
+
+ if tw.press == tw.cards[1].spr:
+ x = tw.cards[2].spr.x
+ move(tw.cards[2].spr,(tw.cards[1].spr.x,tw.cards[2].spr.y))
+ move(tw.cards[1].spr,(x,tw.cards[1].spr.y))
+ elif tw.press == tw.cards[0].spr:
+ tw.cards[0].draw_slider_bottom()
+ tw.cards[1].draw_slider_bottom()
+ tw.cards[2].draw_slider_bottom()
+ tw.numbers[0].draw_slider_top()
+ tw.numbers[1].draw_slider_top()
+ tw.numbers[2].draw_slider_top()
+ elif tw.press == tw.numbers[1].spr:
+ x = tw.numbers[2].spr.x
+ move(tw.numbers[2].spr,(tw.numbers[1].spr.x,tw.numbers[2].spr.y))
+ move(tw.numbers[1].spr,(x,tw.numbers[1].spr.y))
+ elif tw.press == tw.numbers[0].spr:
+ tw.cards[0].draw_slider_top()
+ tw.cards[1].draw_slider_top()
+ tw.cards[2].draw_slider_top()
+ tw.numbers[0].draw_slider_bottom()
+ tw.numbers[1].draw_slider_bottom()
+ tw.numbers[2].draw_slider_bottom()
+ elif tw.press == tw.questions[0].spr:
+ if tw.answers_on_top is True:
+ for i in tw.answers:
+ i.draw_slider_bottom()
+ tw.answers_on_top = False
+ else:
+ tw.answers[0].draw_slider_top()
+ tw.answers[1].draw_slider_top()
+ tw.answers[2].draw_slider_top()
+ tw.answers_on_top = True
+
+
+ tw.press = None
+ update_label(tw)
+
+def update_label(tw):
+ # calculate the values for D, C, and D*C (under the redicule)
+ tw.activity.results_label.set_text( "my label changed " + str(tw.dragpos))
+ tw.activity.results_label.show()
+ return True
+
+def _calc_C(tw):
+ return "foo"
+def _calc_D(tw):
+ return "bar"
+def _calc_DC(tw):
+ return "usmp"
+
+def _expose_cb(win, event, tw):
+ redrawsprites(tw)
+ return True
+
+def _destroy_cb(win, event, tw):
+ gtk.main_quit()