diff options
Diffstat (limited to 'window.py')
-rw-r--r-- | window.py | 237 |
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() |