Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBruno 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)
commit690f8ac7446757307ab013b8fb8fe772b4ea0d9d (patch)
treee4d63cd73148bed02780f5255f8e027e48f1db62 /src
parent633c8da35c671fd49bbbcbf10418347339845991 (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.c12
-rw-r--r--src/boards/python/watercycle.py205
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
+