diff options
author | Bruno Coudoin <bcoudoin@src.gnome.org> | 2003-10-09 21:41:42 (GMT) |
---|---|---|
committer | Bruno Coudoin <bcoudoin@src.gnome.org> | 2003-10-09 21:41:42 (GMT) |
commit | 690f8ac7446757307ab013b8fb8fe772b4ea0d9d (patch) | |
tree | e4d63cd73148bed02780f5255f8e027e48f1db62 /src | |
parent | 633c8da35c671fd49bbbcbf10418347339845991 (diff) |
added config.rpath new created by bruno for watercycle new created by
* .cvsignore: added config.rpath
* boards/boardicons/watercycle.png: new created by bruno for watercycle
* boards/watercycle.xml.in: new created by bruno for watercycle
* boards/watercycle/.cvsignore: new created by bruno for watercycle
* boards/watercycle/README: new created by bruno for watercycle
* boards/watercycle/background.png: new created by bruno for watercycle
* boards/watercycle/badwater.png: new created by bruno for watercycle
* boards/watercycle/badwater_off.png: new created by bruno for watercycle
* boards/watercycle/cleanwater.png: new created by bruno for watercycle
* boards/watercycle/cleanwater_off.png: new created by bruno for watercycle
* boards/watercycle/pumpwater.png: new created by bruno for watercycle
* boards/watercycle/pumpwater_off.png: new created by bruno for watercycle
* boards/watercycle/rain.png: new created by bruno for watercycle
* boards/watercycle/riverempty.png: new created by bruno for watercycle
* boards/watercycle/riverfull.png: new created by bruno for watercycle
* boards/watercycle/snow.png: new created by bruno for watercycle
* boards/watercycle/sun.png: new created by bruno for watercycle
* boards/watercycle/tuxboat.png: new created by bruno for watercycle
* boards/watercycle/vapor.png: new created by bruno for watercycle
* boards/watercycle/watercleaning.png: new created by bruno for watercycle
* boards/watercycle/waterpump.png: new created by bruno for watercycle
* src/boards/py-mod-utils.c: (py_gcompris_set_image_focus),
(py_gcompris_item_event_focus): fixed
* src/boards/python/watercycle.py: completed, now can perform a complete cycle
Diffstat (limited to 'src')
-rw-r--r-- | src/boards/py-mod-utils.c | 12 | ||||
-rw-r--r-- | src/boards/python/watercycle.py | 205 |
2 files changed, 169 insertions, 48 deletions
diff --git a/src/boards/py-mod-utils.c b/src/boards/py-mod-utils.c index ab6c593..c69eaad 100644 --- a/src/boards/py-mod-utils.c +++ b/src/boards/py-mod-utils.c @@ -55,13 +55,15 @@ py_gcompris_set_image_focus(PyObject* self, PyObject* args) GnomeCanvasItem* item; gint pyfocus; gboolean focus; - + printf("ICIC1\n"); /* Parse arguments */ - if(!PyArg_ParseTuple(args, "Oi:gcompris_set_image_focus"), &pyitem, &pyfocus) + if(!PyArg_ParseTuple(args, "Oi:gcompris_set_image_focus", &pyitem, &pyfocus)) return NULL; + printf("ICIC2\n"); item = (GnomeCanvasItem*) pygobject_get(pyitem); if(pyfocus>0) focus = TRUE; else focus = FALSE; + printf("ICIC3 focus =%d\n", focus); /* Call the corresponding C function */ gcompris_set_image_focus(item, focus); @@ -84,18 +86,16 @@ py_gcompris_item_event_focus(PyObject* self, PyObject* args) PyObject* pyevent; GdkEvent* event; PyObject* pydest_item; - GnomeCanvasItem* dest_item; gint result; /* Parse arguments */ - if(!PyArg_ParseTuple(args, "OOO:gcompris_item_event_focus", &pyitem, &pyevent, &pydest_item)) + if(!PyArg_ParseTuple(args, "OO:gcompris_item_event_focus", &pyitem, &pyevent)) return NULL; item = (GnomeCanvasItem*) pygobject_get(pyitem); event = (GdkEvent*) pygobject_get(pyevent); - dest_item = (GnomeCanvasItem*) pygobject_get(pydest_item); /* Call the corresponding C function */ - result = gcompris_item_event_focus(item, event, dest_item); + result = gcompris_item_event_focus(item, event, NULL); /* Create and return the result */ return Py_BuildValue("i", result); diff --git a/src/boards/python/watercycle.py b/src/boards/python/watercycle.py index afdcf92..f5cbaae 100644 --- a/src/boards/python/watercycle.py +++ b/src/boards/python/watercycle.py @@ -38,19 +38,57 @@ class Gcompris_watercycle: "watercycle/background.png") gcompris.bar_set_level(self.gcomprisBoard) + # Create our rootitem. We put each canvas item in it so at the end we + # only have to kill it. The canvas deletes all the items it contains automaticaly. + self.rootitem = self.gcomprisBoard.canvas.root().add( + gnome.canvas.CanvasGroup, + x=0.0, + y=0.0 + ) + + # Take care, the items are stacked on each other in the order you add them. + # If you need, you can reorder them later with raise and lower functions. + + # The River + self.riveritem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/riverempty.png"), + x=150.0, + y=50.0 + ) + self.riverfull = 0 + + # The bad water + self.badwateritem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/badwater_off.png"), + x=360.0, + y=292.0 + ) + + # The clean water + self.cleanwateritem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/cleanwater_off.png"), + x=470.0, + y=130.0 + ) + # The Sun - self.canvasitems[1] = self.gcomprisBoard.canvas.root().add( + self.sunitem = self.rootitem.add( gnome.canvas.CanvasPixbuf, pixbuf = gcompris.utils.load_pixmap("watercycle/sun.png"), x=10.0, y=70.0 ) - self.canvasitems[1].connect("event", self.sun_item_event) + self.sunitem.connect("event", self.sun_item_event) + # This item is clickeable and it must be seen + self.sunitem.connect("event", gcompris.utils.item_event_focus) self.sun_direction = -1 self.sun_on = 0 - # The sun mask object - self.canvasitems[2] = self.gcomprisBoard.canvas.root().add( + # The sun mask object to simulate the see + self.rootitem.add( gnome.canvas.CanvasRect, x1=10.0, y1=89.0, @@ -61,42 +99,86 @@ class Gcompris_watercycle: ) # The tuxboat - self.canvasitems[3] = self.gcomprisBoard.canvas.root().add( + self.tuxboatitem = self.rootitem.add( gnome.canvas.CanvasPixbuf, pixbuf = gcompris.utils.load_pixmap("gcompris/misc/tuxboat.png"), x=10.0, y=470.0 ) + # The Snow + self.snowitem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/snow.png"), + x=180.0, + y=3.0 + ) + self.snowitem.hide() + # The rain - self.canvasitems[5] = self.gcomprisBoard.canvas.root().add( + self.rainitem = self.rootitem.add( gnome.canvas.CanvasPixbuf, pixbuf = gcompris.utils.load_pixmap("watercycle/rain.png"), x=40.0, y=40.0 ) - self.canvasitems[5].hide() + self.rainitem.hide() self.rain_on = 0 # The cloud - self.canvasitems[4] = self.gcomprisBoard.canvas.root().add( + self.clouditem = self.rootitem.add( gnome.canvas.CanvasPixbuf, pixbuf = gcompris.utils.load_pixmap("gcompris/misc/cloud.png"), x=10.0, y=10.0 ) - self.canvasitems[4].hide() - self.canvasitems[4].connect("event", self.cloud_item_event) + self.clouditem.hide() + self.clouditem.connect("event", self.cloud_item_event) + # This item is clickeable and it must be seen + self.clouditem.connect("event", gcompris.utils.item_event_focus) self.cloud_on = 0 # The vapor - self.canvasitems[6] = self.gcomprisBoard.canvas.root().add( + self.vaporitem = self.rootitem.add( gnome.canvas.CanvasPixbuf, pixbuf = gcompris.utils.load_pixmap("watercycle/vapor.png"), x=35.0, y=150.0 ) - self.canvasitems[6].hide() + self.vaporitem.hide() + + # The Waterpump + self.waterpumpitem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/waterpump.png"), + x=165.0, + y=120.0 + ) + self.waterpumpitem.connect("event", self.waterpump_item_event) + # This item is clickeable and it must be seen + self.waterpumpitem.connect("event", gcompris.utils.item_event_focus) + self.waterpump_on = 0 + + # The pump water + self.pumpwateritem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/pumpwater_off.png"), + x=270.0, + y=133.0 + ) + + # The WaterCleaning + self.watercleaningitem = self.rootitem.add( + gnome.canvas.CanvasPixbuf, + pixbuf = gcompris.utils.load_pixmap("watercycle/watercleaning.png"), + x=520.0, + y=380.0 + ) + self.watercleaningitem.connect("event", self.watercleaning_item_event) + # This item is clickeable and it must be seen + self.watercleaningitem.connect("event", gcompris.utils.item_event_focus) + self.watercleaning_on = 0 + # Ready GO self.move_boat() @@ -115,10 +197,10 @@ class Gcompris_watercycle: if self.cloud_timer : gtk.timeout_remove(self.cloud_timer) - # Remove the canvas item we added during this plugin - for item in self.canvasitems.values(): - item.destroy() - print("Gcompris_watercycle end.") + # Remove the root item removes all the others inside it + self.rootitem.destroy() + + print("Gcompris_watercycle end.") def ok(self): @@ -136,67 +218,86 @@ class Gcompris_watercycle: return def move_boat(self): - self.canvasitems[3].move(1, 0) - if( self.canvasitems[3].get_bounds()[2] < 790 ) : + self.tuxboatitem.move(1, 0) + if( self.tuxboatitem.get_bounds()[2] < 790 ) : self.boat_timer = gtk.timeout_add(self.timerinc, self.move_boat) def move_cloud(self): if(self.cloud_on): - self.canvasitems[4].show() + self.clouditem.show() else: - self.canvasitems[4].hide() + self.clouditem.hide() if(self.rain_on): - self.canvasitems[5].show() + self.rainitem.show() + # The snow appear if we are close to the left mountain + if( self.clouditem.get_bounds()[0] < 250): + self.snowitem.show() + # The river + if(not self.riverfull): + self.riveritem.set(pixbuf = gcompris.utils.load_pixmap("watercycle/riverfull.png")); + self.riverfull = 1 + else: - self.canvasitems[5].hide() + self.rainitem.hide() - self.canvasitems[4].move(1, 0); - self.canvasitems[5].move(1, 0); - if( self.canvasitems[4].get_bounds()[0] > 800 ) : - self.canvasitems[4].move(-800, 0); - self.canvasitems[5].move(-800, 0); + self.clouditem.move(1, 0); + self.rainitem.move(1, 0); + if( self.clouditem.get_bounds()[0] > 800 ) : + self.clouditem.move(-800, 0); + self.rainitem.move(-800, 0); self.cloud_on = 0 - self.show_rain = 0 - self.canvasitems[4].hide() - self.canvasitems[5].hide() + self.rain_on = 0 + self.clouditem.hide() + self.rainitem.hide() else: self.cloud_timer = gtk.timeout_add(self.timerinc, self.move_cloud) + def init_vapor(self): + self.vapor_on = 1 + self.vaporitem.show() + self.move_vapor() + def move_vapor(self): - if(self.vapor_on): - self.canvasitems[6].show() - else: - self.canvasitems[6].hide() - - self.canvasitems[6].move(0, -1); - if( self.canvasitems[6].get_bounds()[1] < 20 ) : - self.canvasitems[6].move(0, +100); + self.vaporitem.move(0, -1); + if( self.vaporitem.get_bounds()[1] < 20 ) : + self.vaporitem.move(0, +100); + self.vapor_timer = gtk.timeout_add(self.timerinc, self.move_vapor) def move_sun(self): - self.canvasitems[1].move(0, self.sun_direction); - if( (self.canvasitems[1].get_bounds()[1] > 0 and - self.canvasitems[1].get_bounds()[1] < 70 ) ) : + self.sunitem.move(0, self.sun_direction); + if( (self.sunitem.get_bounds()[1] > 0 and + self.sunitem.get_bounds()[1] < 70 ) ) : self.sun_timer = gtk.timeout_add(self.timerinc, self.move_sun) else : + # The sun is at is top if(self.sun_direction < 0) : # Stop the sun self.sun_timer = gtk.timeout_add(15000, self.move_sun) # Start the vapor - self.vapor_timer = gtk.timeout_add(5000 , self.move_vapor) + self.vapor_timer = gtk.timeout_add(5000 , self.init_vapor) self.vapor_on = 1 # Start the cloud if(not self.cloud_on): self.cloud_timer = gtk.timeout_add(10000, self.move_cloud) self.cloud_on = 1 + # Remove the snow + self.snowitem.hide() else : + # Stop the vapor self.vapor_on = 0 + self.vaporitem.hide() + # Stop the sun self.sun_on = 0 self.sun_direction = self.sun_direction * -1 + def set_cleanwater(self): + self.cleanwateritem.set(pixbuf = gcompris.utils.load_pixmap("watercycle/cleanwater.png")); + + def pause(self, pause): print("Gcompris_watercycle pause. %i" % pause) @@ -219,3 +320,23 @@ class Gcompris_watercycle: return gtk.TRUE return gtk.FALSE + def waterpump_item_event(self, widget, event=None): + if event.type == gtk.gdk.BUTTON_PRESS: + if event.button == 1: + if self.riverfull: + self.waterpump_on = 1 + self.pumpwateritem.set(pixbuf = gcompris.utils.load_pixmap("watercycle/pumpwater.png")); + # Set the water to the house after a timeout to simulate the water castle refill + self.cleanwater_timer = gtk.timeout_add(1000, self.set_cleanwater) + return gtk.TRUE + return gtk.FALSE + + def watercleaning_item_event(self, widget, event=None): + if event.type == gtk.gdk.BUTTON_PRESS: + if event.button == 1: + if self.waterpump_on: + self.watercleaning_on = 1 + self.badwateritem.set(pixbuf = gcompris.utils.load_pixmap("watercycle/badwater.png")); + return gtk.TRUE + return gtk.FALSE + |