Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruno Coudoin <bcoudoin@src.gnome.org>2005-04-10 22:28:27 (GMT)
committer Bruno Coudoin <bcoudoin@src.gnome.org>2005-04-10 22:28:27 (GMT)
commitc82cdc58bacd893b4906247f86c54f722656d540 (patch)
treec778b0e21aa15e72a5ff1e8f593de6a916c08d4b
parent3c129ea2e83c40d795a15eb1df25eaeaddcbadba (diff)
By Yves and Bruno. Added 2 options to allow gcompris to be used with an external
directory containing a complete independant activity. For e.g. gcompris -L /home/user/myboard => add the activities in this dir to gcompris gcompris -l /reading => run gcompris directly in the reading activity set
-rw-r--r--ChangeLog30
-rw-r--r--README3
-rw-r--r--boards/boardicons/connect4.pngbin0 -> 12298 bytes
-rw-r--r--boards/connect4.xml.in4
-rw-r--r--docs/C/python.html15
-rw-r--r--docs/C/python.xml2
-rw-r--r--po/POTFILES.in1
-rw-r--r--src/boards/py-mod-gcompris.c4
-rw-r--r--src/boards/python.c8
-rw-r--r--src/boards/python/anim.py2
-rw-r--r--src/gcompris/about.c4
-rw-r--r--src/gcompris/bar.c5
-rw-r--r--src/gcompris/board.c6
-rw-r--r--src/gcompris/bonus.c6
-rw-r--r--src/gcompris/gameutil.c67
-rw-r--r--src/gcompris/gcompris-board.h5
-rw-r--r--src/gcompris/gcompris.c30
-rw-r--r--src/gcompris/images_selector.c10
-rw-r--r--src/gcompris/properties.c6
-rw-r--r--src/gcompris/properties.h19
20 files changed, 160 insertions, 67 deletions
diff --git a/ChangeLog b/ChangeLog
index 32e4174..52d9321 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2005-04-11 Bruno coudoin <bruno.coudoin@free.fr>
+
+ By Yves and Bruno. Added 2 options to allow gcompris to be used with an external
+ directory containing a complete independant activity. For e.g.
+ gcompris -L /home/user/myboard => add the activities in this dir to gcompris
+ gcompris -l /reading => run gcompris directly in the reading activity set
+
+
+ * README: update to point the the boards/gletters/README
+ * boards/boardicons/connect4.png:
+ * boards/connect4.xml.in: changed to use the icon already in the game
+ * docs/C/python.html: updated
+ * docs/C/python.xml: -
+ * po/POTFILES.in: updated
+ * src/boards/py-mod-gcompris.c: (python_gcompris_module_init):
+ * src/boards/python.c: (pythonboard_start):
+ * src/boards/python/anim.py:
+ * src/gcompris/about.c: (gcompris_about_start):
+ * src/gcompris/bar.c: (gcompris_bar_set_level), (gcompris_bar_set):
+ * src/gcompris/board.c: (board_play), (board_stop):
+ * src/gcompris/bonus.c: (board_finished), (gcompris_display_bonus):
+ * src/gcompris/gameutil.c: (gcompris_load_pixmap),
+ (gcompris_get_board_from_section), (gcompris_load_menus_dir),
+ (gcompris_load_menus):
+ * src/gcompris/gcompris-board.h:
+ * src/gcompris/gcompris.c: (setup_window), (gcompris_init):
+ * src/gcompris/images_selector.c: (parseImage):
+ * src/gcompris/properties.c: (gcompris_properties_new):
+ * src/gcompris/properties.h:
+
2005-04-10 Bruno coudoin <bruno.coudoin@free.fr>
New sounds package for Swedish
diff --git a/README b/README
index 8355356..68f26a8 100644
--- a/README
+++ b/README
@@ -62,3 +62,6 @@ It is best to choose somebody that speaks and articulate well your language.
What is great with GCompris is that you can use it to practice a foreign
language.
+For the falling letters activity, there is a special directory to look at in
+boards/gletters/README.
+It let you configure this activity for any 'non standard' keyboard.
diff --git a/boards/boardicons/connect4.png b/boards/boardicons/connect4.png
new file mode 100644
index 0000000..9fe3da0
--- /dev/null
+++ b/boards/boardicons/connect4.png
Binary files differ
diff --git a/boards/connect4.xml.in b/boards/connect4.xml.in
index 6939aa4..c1d3814 100644
--- a/boards/connect4.xml.in
+++ b/boards/connect4.xml.in
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<GCompris>
<Board type="python:connect4" section="/boards/."
- name="connect4" icon="boardicons/python.png"
+ name="connect4" icon="boardicons/connect4.png"
difficulty="2" boarddir="connect4"
author="Laurent Lacheny (laurent.lacheny@wanadoo.fr)">
<_title>Connect 4</_title>
@@ -11,4 +11,4 @@
<_manual>Click anywhere in the line in which you want to drop a piece</_manual>
<_credit>Laurent Lacheny. Images and Artificial Intelligence taken from project 4stattack by Jeroen Vloothuis. The original project can be found on http://forcedattack.sourceforge.net</_credit>
</Board>
-</GCompris> \ No newline at end of file
+</GCompris>
diff --git a/docs/C/python.html b/docs/C/python.html
index a98b10f..ee065e5 100644
--- a/docs/C/python.html
+++ b/docs/C/python.html
@@ -1,19 +1,18 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Python wrapper for Gcompris</title><meta name="generator" content="DocBook XSL Stylesheets V1.48"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><div><h2 class="title"><a name="id2379524"></a>Python wrapper for Gcompris</h2></div><div><h3 class="author">Ir.
- Olivier Samyn</h3></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">February 2003</td></tr><tr><td align="left">Revision 0.2</td><td align="left">April 2003</td></tr><tr><td align="left">Revision 0.3</td><td align="left">January 2004</td></tr><tr><td align="left">Revision 0.3</td><td align="left">January 2005</td></tr></table></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="#id2384745">Notes about this wrapper</a></dt><dt><a href="#id2384777">Python board structure</a></dt><dt><a href="#id2431629">GcomprisBoard structure mapping </a></dt><dt><a href="#id2382897">gcompris.h functions and constants Mapping</a></dt><dd><dl><dt><a href="#id2382903">Functions mapping</a></dt><dt><a href="#id2383257">GComprisBarFlags enum mapping</a></dt><dt><a href="#id2383352">Misc constants mapping</a></dt><dt><a href="#id2383418">Colors constants mapping</a></dt><dt><a href="#id2444289">Fonts constants mapping</a></dt><dt><a href="#id2444365">Board font constants mapping</a></dt><dt><a href="#id2444472">Cursor constants mapping</a></dt></dl></dd><dt><a href="#id2444597">gameutil.h functions and constants Mapping</a></dt><dd><dl><dt><a href="#id2444603">Functions mapping</a></dt><dt><a href="#id2444859">Constants mapping</a></dt></dl></dd><dt><a href="#id2444871">bonus.h functions and constants Mapping</a></dt><dd><dl><dt><a href="#id2444877">Functions mapping</a></dt><dt><a href="#id2444940">Constants mapping (BonusStatusList)</a></dt><dt><a href="#id2444996">Constants mapping (BonusList)</a></dt><dt><a href="#id2445079">Constants mapping (BoardFinishedList)</a></dt></dl></dd><dt><a href="#id2445156">score.h functions and constants Mapping</a></dt><dd><dl><dt><a href="#id2445162">Functions mapping</a></dt><dt><a href="#id2445237">Constants mapping</a></dt></dl></dd><dt><a href="#id2445295">sound.h functions and constants Mapping</a></dt><dd><dl><dt><a href="#id2445301">Functions mapping</a></dt><dt><a href="#id2445367">Constants mapping</a></dt></dl></dd><dt><a href="#id2445379">timer.h functions and constants Mapping</a></dt><dd><dl><dt><a href="#id2445385">Functions mapping</a></dt><dt><a href="#id2445491">Constants mapping</a></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2384745"></a>Notes about this wrapper</h2></div></div><p>Generaly speaking, all C gcompris_xxx functions are wrapped to a
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Python wrapper for Gcompris</title><meta name="generator" content="DocBook XSL Stylesheets V1.68.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2449695"></a>Python wrapper for Gcompris</h2></div><div><div class="author"><h3 class="author"><span class="honorific">Ir</span>. <span class="firstname">Olivier</span> <span class="surname">Samyn</span></h3><code class="email">&lt;<a href="mailto:osamyn@ulb.ac.be">osamyn@ulb.ac.be</a>&gt;</code></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">February 2003</td></tr><tr><td align="left">Revision 0.2</td><td align="left">April 2003</td></tr><tr><td align="left">Revision 0.3</td><td align="left">January 2004</td></tr><tr><td align="left">Revision 0.4</td><td align="left">January 2005</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#id2453462">Notes about this wrapper</a></span></dt><dt><span class="sect1"><a href="#id2453493">Python board structure</a></span></dt><dt><span class="sect1"><a href="#id2500327">GcomprisBoard structure mapping </a></span></dt><dt><span class="sect1"><a href="#id2452682">gcompris.h functions and constants Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2451557">Functions mapping</a></span></dt><dt><span class="sect2"><a href="#id2451914">GComprisBarFlags enum mapping</a></span></dt><dt><span class="sect2"><a href="#id2452009">Misc constants mapping</a></span></dt><dt><span class="sect2"><a href="#id2452074">Colors constants mapping</a></span></dt><dt><span class="sect2"><a href="#id2513005">Fonts constants mapping</a></span></dt><dt><span class="sect2"><a href="#id2513081">Board font constants mapping</a></span></dt><dt><span class="sect2"><a href="#id2513188">Cursor constants mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2513313">gameutil.h functions and constants Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2513319">Functions mapping</a></span></dt><dt><span class="sect2"><a href="#id2513575">Constants mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2513587">bonus.h functions and constants Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2513593">Functions mapping</a></span></dt><dt><span class="sect2"><a href="#id2513656">Constants mapping (BonusStatusList)</a></span></dt><dt><span class="sect2"><a href="#id2513712">Constants mapping (BonusList)</a></span></dt><dt><span class="sect2"><a href="#id2513795">Constants mapping (BoardFinishedList)</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2513872">score.h functions and constants Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2513878">Functions mapping</a></span></dt><dt><span class="sect2"><a href="#id2513953">Constants mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2514011">sound.h functions and constants Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2514017">Functions mapping</a></span></dt><dt><span class="sect2"><a href="#id2514083">Constants mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2514095">timer.h functions and constants Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2514101">Functions mapping</a></span></dt><dt><span class="sect2"><a href="#id2514207">Constants mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="#id2514273">anim.h structures Mapping</a></span></dt><dd><dl><dt><span class="sect2"><a href="#id2514285">Animation</a></span></dt><dt><span class="sect2"><a href="#id2514302">CanvasItem</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2453462"></a>Notes about this wrapper</h2></div></div></div><p>Generaly speaking, all C gcompris_xxx functions are wrapped to a
corresponding gcompris.xxx function; parameters and return types remains the same.
Some structures have also been wrapped. See below particular notes about this.</p><p>The wrapped functions are divided into packages. Every package correponds to a
gcompris header file (gameutil.h, score.h, ...)</p><p>For each package/header not all functions have been wrapped.
Only functions that are used/usefull for plugins are wrapped.</p><p>Notice also that not all functions have been tested (with time and new python
plugins implemented they will be, but...). The wrappers have been written, they compiles,
-but there is no warranty on their behaviour... I you find a bug report it!</p></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2384777"></a>Python board structure</h2></div></div><p>Each board written in python must contains a class which name is
+but there is no warranty on their behaviour... I you find a bug report it!</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2453493"></a>Python board structure</h2></div></div></div><p>Each board written in python must contains a class which name is
"Gcompris_xxx" where xxx is the name of the board. Let's take an example: I made
a gcompris board written in python and called "pythontest".</p><p>For this board there is a gcompris pythontest.xml file containing
"pythontest" for the board name and "pythonboard" for the board type. There's
also a pythontest.py file containing the board code. And to finish, this file
contains a "Gcompris_pythontest" class definition which in turns contains the
-needed gcompris board functions.</p><p>The class defined in the python board must contains the following methods:<div class="itemizedlist"><ul type="disc"><li>__init__(self, gcomprisBoard)</li><li>start(self)</li><li>end(self)</li><li>ok(self)</li><li>repeat(self)</li><li>config(self)</li><li>key_press(self, keyval)</li><li>pause(self, pause)</li><li>set_level(self, level)</li></ul></div>
+needed gcompris board functions.</p><p>The class defined in the python board must contains the following methods:</p><div class="itemizedlist"><ul type="disc"><li>__init__(self, gcomprisBoard)</li><li>start(self)</li><li>end(self)</li><li>ok(self)</li><li>repeat(self)</li><li>config(self)</li><li>key_press(self, keyval)</li><li>pause(self, pause)</li><li>set_level(self, level)</li></ul></div><p>
</p><p>For the method role and use, please consult the sample pythontest.py board
-and other C boards.</p></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2431629"></a>GcomprisBoard structure mapping </h2></div></div><p>An instance of this structure in Python will act like an instance of the C
+and other C boards.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2500327"></a>GcomprisBoard structure mapping </h2></div></div></div><p>An instance of this structure in Python will act like an instance of the C
one. Here a some Python call samples:</p><pre class="programlisting">
...
gcomprisBoard.level = 1
@@ -22,8 +21,8 @@ one. Here a some Python call samples:</p><pre class="programlisting">
gcompris.bar_start(gcomprisBoard.canvas)
...
</pre><p>Here are the Python structure member name and type, and a note indicating if the
-attribute is readeable and/or writable.</p><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Structure member</th><th>Type</th><th>Readable</th><th>Writable</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>board_ready</td><td>boolean</td><td>Y</td><td>N</td></tr><tr><td>mode</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>name</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>title</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>description</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>icon_name</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>author</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>boarddir</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>filename</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>difficulty</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>mandatory_sound_file</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>section</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>menuposotion</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>prerequisite</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>goal</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>manual</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>credit</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>width</td><td>int</td><td>Y</td><td>N</td></tr><tr><td>height</td><td>int</td><td>Y</td><td>N</td></tr><tr><td>canvas</td><td>gnome.canvas.Canvas</td><td>Y</td><td>N</td></tr><tr><td>previous_board</td><td>GcomprisBoard</td><td>Y</td><td>N</td></tr><tr><td>level</td><td>int</td><td>Y</td><td>Y</td></tr><tr><td>maxlevel</td><td>int</td><td>Y</td><td>Y</td></tr><tr><td>sublevel</td><td>int</td><td>Y</td><td>Y</td></tr><tr><td>number_of_sublevel</td><td>int</td><td>Y</td><td>Y</td></tr></tbody></table></div></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2382897"></a>gcompris.h functions and constants Mapping</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2382903"></a>Functions mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.end_board()</td><td>void gcompris_end_board(void)</td><td> </td></tr><tr><td>gcompris.bar_start(gnomeCanvas)</td><td>void gcompris_bar_start(GnomeCanvas *theCanvas)</td><td> </td></tr><tr><td>gcompris.set_background(gnomeCanvasGroup, file)</td><td>GnomeCanvasItem *gcompris_set_background(GnomeCanvasGroup *parent, gchar *file)</td><td>return a gnome.canvas.CanvasItem object</td></tr><tr><td>gcompris.bar_set_level(gcomprisBoard)</td><td>void gcompris_bar_set_level(GcomprisBoard *gcomprisBoard)</td><td> </td></tr><tr><td>gcompris.bar_set_repeat_icon(pixmap)</td><td>void gcompris_bar_set_repeat_icon(GdkPixbuf *pixmap)</td><td> </td></tr><tr><td>gcompris.bar_set(flags)</td><td>void gcompris_bar_set(const GComprisBarFlags flags)</td><td> </td></tr><tr><td>gcompris.bar_hide(hide)</td><td>void gcompris_bar_hide(gboolean hide)</td><td> </td></tr><tr><td>gcompris.board_has_help(gcomprisBoard)</td><td>gboolean gcompris_board_has_help(GcomprisBoard *gcomprisBoard)</td><td>return a boolean</td></tr><tr><td>gcompris.help_start(gcomprisBoard)</td><td>void gcompris_help_start(GcomprisBoard *gcomprisBoard)</td><td> </td></tr><tr><td>gcompris.help_stop()</td><td>void gcompris_help_stop(void)</td><td> </td></tr><tr><td>gcompris.get_canvas()</td><td>GnomeCanvas* gcompris_get_canvas()</td><td>return a gnome.canvas.Canvas</td></tr><tr><td>gcompris.get_window()</td><td>GtkWidget* gcompris_get_window(void)</td><td>return a gtk.Widget</td></tr><tr><td>gcompris.get_locale()</td><td>gchar* gcompris_get_locale(void)</td><td>return a string</td></tr><tr><td>gcompris.set_locale(locale)</td><td>void gcompris_set_locale(gchar *locale)</td><td> </td></tr><tr><td>gcompris.set_cursor(cursor_type)</td><td>void gcompris_set_cursor(guint gdk_cursor_type)</td><td> </td></tr><tr><td>gcompris.images_selector_start(gcomprisBoard, dataset, callback)</td><td>void gcompris_images_selector_start (GcomprisBoard *gcomprisBoard, gchar *dataset, ImageSelectorCallBack imscb)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.images_selector_stop()</td><td>void gcompris_images_selector_stop(void)</td><td> </td></tr><tr><td>gcompris.exit()</td><td>void gcompris_exit(void)</td><td> </td></tr><tr><td>gcompris.log_set_reason (gcomprisBoard, expected, got)</td><td>gcompris_log_set_reason (GcomprisBoard *gcomprisBoard, gchar *expected, gchar *got)</td><td> </td></tr><tr><td>gcompris.log_end (gcomprisBoard, status)</td><td>gcompris_log_end (GcomprisBoard *gcomprisBoard, gchar *status)</td><td> </td></tr><tr><td>gcompris.file_selector_load(gcomprisBoard, rootdir, file_types, callback)</td><td>void gcompris_file_selector_load (GcomprisBoard *gcomprisBoard, gchar *rootdir, gchar *file_types, FileSelectorCallBack fscb)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.file_selector_save(gcomprisBoard, rootdir, file_types, callback)</td><td>void gcompris_file_selector_save(GcomprisBoard *gcomprisBoard, gchar *rootdir,gchar *file_types, FileSelectorCallBack fscb)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.file_selector_stop()</td><td>void gcompris_file_selector_stop(void)</td><td> </td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2383257"></a>GComprisBarFlags enum mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.BAR_LEVEL</td><td>GCOMPRIS_BAR_LEVEL</td></tr><tr><td>gcompris.BAR_OK</td><td>GCOMPRIS_BAR_OK</td></tr><tr><td>gcompris.BAR_REPEAT</td><td>GCOMPRIS_BAR_REPEAT</td></tr><tr><td>gcompris.BAR_REPEAT_ICON</td><td>GCOMPRIS_BAR_REPEAT_ICON</td></tr><tr><td>gcompris.BAR_CONFIG</td><td>GCOMPRIS_BAR_CONFIG</td></tr><tr><td>gcompris.BAR_ABOUT</td><td>GCOMPRIS_BAR_ABOUT</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2383352"></a>Misc constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.BOARD_HEIGHT</td><td>BOARDHEIGHT</td></tr><tr><td>gcompris.BOARD_WIDTH</td><td>BOARDWIDTH</td></tr><tr><td>gcompris.BAR_HEIGHT</td><td>BAR_HEIGHT</td></tr><tr><td>gcompris.DEFAULT_SKIN</td><td>DEFAULT_SKIN</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2383418"></a>Colors constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.COLOR_TITLE</td><td>COLOR_TITLE</td></tr><tr><td>gcompris.COLOR_TEXT_BUTTON</td><td>COLOR_TEXT_BUTTON</td></tr><tr><td>gcompris.COLOR_CONTENT</td><td>COLOR_CONTENT</td></tr><tr><td>gcompris.COLOR_SUBTITLE</td><td>COLOR_SUBTITLE</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444289"></a>Fonts constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.FONT_TITLE</td><td>FONT_TITLE</td></tr><tr><td>gcompris.FONT_TITLE_FALLBACK</td><td>FONT_TITLE_FALLBACK</td></tr><tr><td>gcompris.FONT_SUBTITLE</td><td>FONT_SUBTITLE</td></tr><tr><td>gcompris.FONT_SUBTITLE_FALLBACK</td><td>FONT_SUBTITLE_FALLBACK</td></tr><tr><td>gcompris.FONT_CONTENT</td><td>FONT_CONTENT</td></tr><tr><td>gcompris.FONT_CONTENT_FALLBACK</td><td>FONT_CONTENT_FALLBACK</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444365"></a>Board font constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.FONT_BOARD_TINY</td><td>FONT_BOARD_TINY</td></tr><tr><td>gcompris.FONT_BOARD_SMALL</td><td>FONT_BOARD_SMALL</td></tr><tr><td>gcompris.FONT_BOARD_MEDIUM</td><td>FONT_BOARD_MEDIUM</td></tr><tr><td>gcompris.FONT_BOARD_BIG</td><td>FONT_BOARD_BIG</td></tr><tr><td>gcompris.FONT_BOARD_BIG_BOLD</td><td>FONT_BOARD_BIG_BOLD</td></tr><tr><td>gcompris.FONT_BOARD_FIXED</td><td>FONT_BOARD_FIXED</td></tr><tr><td>gcompris.FONT_BOARD_TITLE</td><td>FONT_BOARD_TITLE</td></tr><tr><td>gcompris.FONT_BOARD_TITLE_BOLD</td><td>FONT_BOARD_TITLE_BOLD</td></tr><tr><td>gcompris.FONT_BOARD_HUGE</td><td>FONT_BOARD_HUGE</td></tr><tr><td>gcompris.FONT_BOARD_HUGE_BOLD</td><td>FONT_BOARD_HUGE_BOLD</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444472"></a>Cursor constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.CURSOR_FIRST_CUSTOM</td><td>GCOMPRIS_FIRST_CUSTOM_CURSOR</td></tr><tr><td>gcompris.CURSOR_BIG_RED_ARROW</td><td>GCOMPRIS_BIG_RED_ARROW_CURSOR</td></tr><tr><td>gcompris.CURSOR_BIRD</td><td>GCOMPRIS_BIRD_CURSOR</td></tr><tr><td>gcompris.CURSOR_LINE</td><td>GCOMPRIS_LINE_CURSOR</td></tr><tr><td>gcompris.CURSOR_FILLRECT</td><td>GCOMPRIS_FILLRECT_CURSOR</td></tr><tr><td>gcompris.CURSOR_RECT</td><td>GCOMPRIS_RECT_CURSOR</td></tr><tr><td>gcompris.CURSOR_FILLCIRCLE</td><td>GCOMPRIS_FILLCIRCLE_CURSOR</td></tr><tr><td>gcompris.CURSOR_CIRCLE</td><td>GCOMPRIS_CIRCLE_CURSOR</td></tr><tr><td>gcompris.CURSOR_DEL</td><td>GCOMPRIS_DEL_CURSOR</td></tr><tr><td>gcompris.CURSOR_FILL</td><td>GCOMPRIS_FILL_CURSOR</td></tr><tr><td>gcompris.CURSOR_SELECT</td><td>GCOMPRIS_SELECT_CURSOR</td></tr><tr><td>gcompris.CURSOR_DEFAULT</td><td>GCOMPRIS_DEFAULT_CURSOR</td></tr></tbody></table></div></div></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2444597"></a>gameutil.h functions and constants Mapping</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444603"></a>Functions mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.utils.image_to_skin(imagename)</td><td>gchar *gcompris_image_to_skin(gchar *imagename)</td><td>return a string</td></tr><tr><td>gcompris.utils.load_skin_pixmap(pixmapfile)</td><td>GdkPixbuf *gcompris_load_skin_pixmap(char *pixmapfile)</td><td>return a gtk.gdk.Pixbuf</td></tr><tr><td>gcompris.utils.load_pixmap(pixmapfile)</td><td>GdkPixbuf *gcompris_load_pixmap(char *pixmapfile)</td><td>return a gtk.gdk.Pixbuf</td></tr><tr><td>gcompris.utils.set_image_focus(item, focus)</td><td>void gcompris_set_image_focus(GnomeCanvasItem *item, gboolean focus)</td><td> </td></tr><tr><td>gcompris.utils.item_event_focus(item, event, dest_item)</td><td>gint gcompris_item_event_focus(GnomeCanvasItem *item, GdkEvent *event, GnomeCanvasItem *dest_item)</td><td>return an integer</td></tr><tr><td>gcompris.utils.item_absolute_move(item, x, y)</td><td>void item_absolute_move(GnomeCanvasItem *item, int x, int y)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate(item, angle)</td><td>void item_rotate(GnomeCanvasItem *item, double angle)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate_relative(item, angle)</td><td>void item_rotate_relative(GnomeCanvasItem *item, double angle)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate_with_center(item, angle, x, y)</td><td>void item_rotate_with_center(GnomeCanvasItem *item, double angle, int x, int y)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate_relative_with_center(item, angle, x, y)</td><td>void item_rotate_relative_with_center(GnomeCanvasItem *item, double angle, int x, int y)</td><td> </td></tr><tr><td>gcompris.utils.dialog(str, callback)</td><td>void gcompris_dialog(gchar *str, DialogBoxCallBack callback)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.utils.dialog_close()</td><td>void gcompris_dialog_close()</td><td> </td></tr><tr><td>gcompris.utils.load_pixmap_asset(dataset, categories, mimetype, name)</td><td>GdkPixbuf *gcompris_load_pixmap_asset(gchar *dataset, gchar* categories, gchar* mimetype, gchar* name)</td><td>return a gtk.gdk.Pixbuf</td></tr><tr><td>gcompris.utils.get_asset_file(dataset, categories, mimetype, name)</td><td>gchar *gcompris_get_asset_file(gchar *dataset, gchar* categories, gchar* mimetype, gchar* name)</td><td>return a string</td></tr><tr><td>gcompris.utils.clone_item(item, parent)</td><td>void gcompris_clone_item(GnomeCanvasItem *item, GnomeCanvasGroup *parent)</td><td> </td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444859"></a>Constants mapping</h3></div></div><p>
+attribute is readeable and/or writable.</p><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Structure member</th><th>Type</th><th>Readable</th><th>Writable</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>board_ready</td><td>boolean</td><td>Y</td><td>N</td></tr><tr><td>mode</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>name</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>title</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>description</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>icon_name</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>author</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>boarddir</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>filename</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>difficulty</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>mandatory_sound_file</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>section</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>menuposotion</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>prerequisite</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>goal</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>manual</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>credit</td><td>string</td><td>Y</td><td>N</td></tr><tr><td>width</td><td>int</td><td>Y</td><td>N</td></tr><tr><td>height</td><td>int</td><td>Y</td><td>N</td></tr><tr><td>canvas</td><td>gnome.canvas.Canvas</td><td>Y</td><td>N</td></tr><tr><td>previous_board</td><td>GcomprisBoard</td><td>Y</td><td>N</td></tr><tr><td>level</td><td>int</td><td>Y</td><td>Y</td></tr><tr><td>maxlevel</td><td>int</td><td>Y</td><td>Y</td></tr><tr><td>sublevel</td><td>int</td><td>Y</td><td>Y</td></tr><tr><td>number_of_sublevel</td><td>int</td><td>Y</td><td>Y</td></tr></tbody></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2452682"></a>gcompris.h functions and constants Mapping</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2451557"></a>Functions mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.end_board()</td><td>void gcompris_end_board(void)</td><td> </td></tr><tr><td>gcompris.bar_start(gnomeCanvas)</td><td>void gcompris_bar_start(GnomeCanvas *theCanvas)</td><td> </td></tr><tr><td>gcompris.set_background(gnomeCanvasGroup, file)</td><td>GnomeCanvasItem *gcompris_set_background(GnomeCanvasGroup *parent, gchar *file)</td><td>return a gnome.canvas.CanvasItem object</td></tr><tr><td>gcompris.bar_set_level(gcomprisBoard)</td><td>void gcompris_bar_set_level(GcomprisBoard *gcomprisBoard)</td><td> </td></tr><tr><td>gcompris.bar_set_repeat_icon(pixmap)</td><td>void gcompris_bar_set_repeat_icon(GdkPixbuf *pixmap)</td><td> </td></tr><tr><td>gcompris.bar_set(flags)</td><td>void gcompris_bar_set(const GComprisBarFlags flags)</td><td> </td></tr><tr><td>gcompris.bar_hide(hide)</td><td>void gcompris_bar_hide(gboolean hide)</td><td> </td></tr><tr><td>gcompris.board_has_help(gcomprisBoard)</td><td>gboolean gcompris_board_has_help(GcomprisBoard *gcomprisBoard)</td><td>return a boolean</td></tr><tr><td>gcompris.help_start(gcomprisBoard)</td><td>void gcompris_help_start(GcomprisBoard *gcomprisBoard)</td><td> </td></tr><tr><td>gcompris.help_stop()</td><td>void gcompris_help_stop(void)</td><td> </td></tr><tr><td>gcompris.get_canvas()</td><td>GnomeCanvas* gcompris_get_canvas()</td><td>return a gnome.canvas.Canvas</td></tr><tr><td>gcompris.get_window()</td><td>GtkWidget* gcompris_get_window(void)</td><td>return a gtk.Widget</td></tr><tr><td>gcompris.get_locale()</td><td>gchar* gcompris_get_locale(void)</td><td>return a string</td></tr><tr><td>gcompris.set_locale(locale)</td><td>void gcompris_set_locale(gchar *locale)</td><td> </td></tr><tr><td>gcompris.set_cursor(cursor_type)</td><td>void gcompris_set_cursor(guint gdk_cursor_type)</td><td> </td></tr><tr><td>gcompris.images_selector_start(gcomprisBoard, dataset, callback)</td><td>void gcompris_images_selector_start (GcomprisBoard *gcomprisBoard, gchar *dataset, ImageSelectorCallBack imscb)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.images_selector_stop()</td><td>void gcompris_images_selector_stop(void)</td><td> </td></tr><tr><td>gcompris.exit()</td><td>void gcompris_exit(void)</td><td> </td></tr><tr><td>gcompris.log_set_reason (gcomprisBoard, expected, got)</td><td>gcompris_log_set_reason (GcomprisBoard *gcomprisBoard, gchar *expected, gchar *got)</td><td> </td></tr><tr><td>gcompris.log_end (gcomprisBoard, status)</td><td>gcompris_log_end (GcomprisBoard *gcomprisBoard, gchar *status)</td><td> </td></tr><tr><td>gcompris.file_selector_load(gcomprisBoard, rootdir, file_types, callback)</td><td>void gcompris_file_selector_load (GcomprisBoard *gcomprisBoard, gchar *rootdir, gchar *file_types, FileSelectorCallBack fscb)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.file_selector_save(gcomprisBoard, rootdir, file_types, callback)</td><td>void gcompris_file_selector_save(GcomprisBoard *gcomprisBoard, gchar *rootdir,gchar *file_types, FileSelectorCallBack fscb)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.file_selector_stop()</td><td>void gcompris_file_selector_stop(void)</td><td> </td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2451914"></a>GComprisBarFlags enum mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.BAR_LEVEL</td><td>GCOMPRIS_BAR_LEVEL</td></tr><tr><td>gcompris.BAR_OK</td><td>GCOMPRIS_BAR_OK</td></tr><tr><td>gcompris.BAR_REPEAT</td><td>GCOMPRIS_BAR_REPEAT</td></tr><tr><td>gcompris.BAR_REPEAT_ICON</td><td>GCOMPRIS_BAR_REPEAT_ICON</td></tr><tr><td>gcompris.BAR_CONFIG</td><td>GCOMPRIS_BAR_CONFIG</td></tr><tr><td>gcompris.BAR_ABOUT</td><td>GCOMPRIS_BAR_ABOUT</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2452009"></a>Misc constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.BOARD_HEIGHT</td><td>BOARDHEIGHT</td></tr><tr><td>gcompris.BOARD_WIDTH</td><td>BOARDWIDTH</td></tr><tr><td>gcompris.BAR_HEIGHT</td><td>BAR_HEIGHT</td></tr><tr><td>gcompris.DEFAULT_SKIN</td><td>DEFAULT_SKIN</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2452074"></a>Colors constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.COLOR_TITLE</td><td>COLOR_TITLE</td></tr><tr><td>gcompris.COLOR_TEXT_BUTTON</td><td>COLOR_TEXT_BUTTON</td></tr><tr><td>gcompris.COLOR_CONTENT</td><td>COLOR_CONTENT</td></tr><tr><td>gcompris.COLOR_SUBTITLE</td><td>COLOR_SUBTITLE</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513005"></a>Fonts constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.FONT_TITLE</td><td>FONT_TITLE</td></tr><tr><td>gcompris.FONT_TITLE_FALLBACK</td><td>FONT_TITLE_FALLBACK</td></tr><tr><td>gcompris.FONT_SUBTITLE</td><td>FONT_SUBTITLE</td></tr><tr><td>gcompris.FONT_SUBTITLE_FALLBACK</td><td>FONT_SUBTITLE_FALLBACK</td></tr><tr><td>gcompris.FONT_CONTENT</td><td>FONT_CONTENT</td></tr><tr><td>gcompris.FONT_CONTENT_FALLBACK</td><td>FONT_CONTENT_FALLBACK</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513081"></a>Board font constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.FONT_BOARD_TINY</td><td>FONT_BOARD_TINY</td></tr><tr><td>gcompris.FONT_BOARD_SMALL</td><td>FONT_BOARD_SMALL</td></tr><tr><td>gcompris.FONT_BOARD_MEDIUM</td><td>FONT_BOARD_MEDIUM</td></tr><tr><td>gcompris.FONT_BOARD_BIG</td><td>FONT_BOARD_BIG</td></tr><tr><td>gcompris.FONT_BOARD_BIG_BOLD</td><td>FONT_BOARD_BIG_BOLD</td></tr><tr><td>gcompris.FONT_BOARD_FIXED</td><td>FONT_BOARD_FIXED</td></tr><tr><td>gcompris.FONT_BOARD_TITLE</td><td>FONT_BOARD_TITLE</td></tr><tr><td>gcompris.FONT_BOARD_TITLE_BOLD</td><td>FONT_BOARD_TITLE_BOLD</td></tr><tr><td>gcompris.FONT_BOARD_HUGE</td><td>FONT_BOARD_HUGE</td></tr><tr><td>gcompris.FONT_BOARD_HUGE_BOLD</td><td>FONT_BOARD_HUGE_BOLD</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513188"></a>Cursor constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.CURSOR_FIRST_CUSTOM</td><td>GCOMPRIS_FIRST_CUSTOM_CURSOR</td></tr><tr><td>gcompris.CURSOR_BIG_RED_ARROW</td><td>GCOMPRIS_BIG_RED_ARROW_CURSOR</td></tr><tr><td>gcompris.CURSOR_BIRD</td><td>GCOMPRIS_BIRD_CURSOR</td></tr><tr><td>gcompris.CURSOR_LINE</td><td>GCOMPRIS_LINE_CURSOR</td></tr><tr><td>gcompris.CURSOR_FILLRECT</td><td>GCOMPRIS_FILLRECT_CURSOR</td></tr><tr><td>gcompris.CURSOR_RECT</td><td>GCOMPRIS_RECT_CURSOR</td></tr><tr><td>gcompris.CURSOR_FILLCIRCLE</td><td>GCOMPRIS_FILLCIRCLE_CURSOR</td></tr><tr><td>gcompris.CURSOR_CIRCLE</td><td>GCOMPRIS_CIRCLE_CURSOR</td></tr><tr><td>gcompris.CURSOR_DEL</td><td>GCOMPRIS_DEL_CURSOR</td></tr><tr><td>gcompris.CURSOR_FILL</td><td>GCOMPRIS_FILL_CURSOR</td></tr><tr><td>gcompris.CURSOR_SELECT</td><td>GCOMPRIS_SELECT_CURSOR</td></tr><tr><td>gcompris.CURSOR_DEFAULT</td><td>GCOMPRIS_DEFAULT_CURSOR</td></tr></tbody></table></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2513313"></a>gameutil.h functions and constants Mapping</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513319"></a>Functions mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.utils.image_to_skin(imagename)</td><td>gchar *gcompris_image_to_skin(gchar *imagename)</td><td>return a string</td></tr><tr><td>gcompris.utils.load_skin_pixmap(pixmapfile)</td><td>GdkPixbuf *gcompris_load_skin_pixmap(char *pixmapfile)</td><td>return a gtk.gdk.Pixbuf</td></tr><tr><td>gcompris.utils.load_pixmap(pixmapfile)</td><td>GdkPixbuf *gcompris_load_pixmap(char *pixmapfile)</td><td>return a gtk.gdk.Pixbuf</td></tr><tr><td>gcompris.utils.set_image_focus(item, focus)</td><td>void gcompris_set_image_focus(GnomeCanvasItem *item, gboolean focus)</td><td> </td></tr><tr><td>gcompris.utils.item_event_focus(item, event, dest_item)</td><td>gint gcompris_item_event_focus(GnomeCanvasItem *item, GdkEvent *event, GnomeCanvasItem *dest_item)</td><td>return an integer</td></tr><tr><td>gcompris.utils.item_absolute_move(item, x, y)</td><td>void item_absolute_move(GnomeCanvasItem *item, int x, int y)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate(item, angle)</td><td>void item_rotate(GnomeCanvasItem *item, double angle)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate_relative(item, angle)</td><td>void item_rotate_relative(GnomeCanvasItem *item, double angle)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate_with_center(item, angle, x, y)</td><td>void item_rotate_with_center(GnomeCanvasItem *item, double angle, int x, int y)</td><td> </td></tr><tr><td>gcompris.utils.item_rotate_relative_with_center(item, angle, x, y)</td><td>void item_rotate_relative_with_center(GnomeCanvasItem *item, double angle, int x, int y)</td><td> </td></tr><tr><td>gcompris.utils.dialog(str, callback)</td><td>void gcompris_dialog(gchar *str, DialogBoxCallBack callback)</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.utils.dialog_close()</td><td>void gcompris_dialog_close()</td><td> </td></tr><tr><td>gcompris.utils.load_pixmap_asset(dataset, categories, mimetype, name)</td><td>GdkPixbuf *gcompris_load_pixmap_asset(gchar *dataset, gchar* categories, gchar* mimetype, gchar* name)</td><td>return a gtk.gdk.Pixbuf</td></tr><tr><td>gcompris.utils.get_asset_file(dataset, categories, mimetype, name)</td><td>gchar *gcompris_get_asset_file(gchar *dataset, gchar* categories, gchar* mimetype, gchar* name)</td><td>return a string</td></tr><tr><td>gcompris.utils.clone_item(item, parent)</td><td>void gcompris_clone_item(GnomeCanvasItem *item, GnomeCanvasGroup *parent)</td><td> </td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513575"></a>Constants mapping</h3></div></div></div><p>
There is no constants in this package.
- </p></div></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2444871"></a>bonus.h functions and constants Mapping</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444877"></a>Functions mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.bonus.display(BonusStatusList, BonusList)</td><td>void gcompris_display_bonus(BonusStatusList, BonusList)</td><td> </td></tr><tr><td>gcompris.bonus.board_finished(BoardFinishedList)</td><td>void board_finished(BoardFinishedList)</td><td> </td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444940"></a>Constants mapping (BonusStatusList)</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.bonus.LOOSE</td><td>BOARD_LOOSE</td></tr><tr><td>gcompris.bonus.WIN</td><td>BOARD_WIN</td></tr><tr><td>gcompris.bonus.DRAW</td><td>BOARD_DRAW</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2444996"></a>Constants mapping (BonusList)</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.bonus.TIME_CLICK_TO</td><td>TIME_CLICK_TO_BONUS</td></tr><tr><td>gcompris.bonus.RANDOM</td><td>BONUS_RANDOM</td></tr><tr><td>gcompris.bonus.SMILEY</td><td>BONUS_SMILEY</td></tr><tr><td>gcompris.bonus.FLOWER</td><td>BONUS_FLOWER</td></tr><tr><td>gcompris.bonus.TUX</td><td>BONUS_TUX</td></tr><tr><td>gcompris.bonus.LAST</td><td>BONUS_LAST</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445079"></a>Constants mapping (BoardFinishedList)</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.bonus.FINISHED_RANDOM</td><td>BOARD_FINISHED_RANDOM</td></tr><tr><td>gcompris.bonus.FINISHED_TUXPLANE</td><td>BOARD_FINISHED_TUXPLANE</td></tr><tr><td>gcompris.bonus.FINISHED_TUXLOCO</td><td>BOARD_FINISHED_TUXLOCO</td></tr><tr><td>gcompris.bonus.FINISHED_TOOMANYERRORS</td><td>BOARD_FINISHED_TOOMANYERRORS</td></tr><tr><td>gcompris.bonus.FINISHED_LAST</td><td>BOARD_FINISHED_LAST</td></tr></tbody></table></div></div></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2445156"></a>score.h functions and constants Mapping</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445162"></a>Functions mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.score.start(style, x, y, max)</td><td>void gcompris_score_start(ScoreStyleList style, guint x, guint y, guint max)</td><td> </td></tr><tr><td>gcompris.score.end()</td><td>void gcompris_score_end()</td><td> </td></tr><tr><td>gcompris.score.set(value)</td><td>void gcompris_score_set(guint value)</td><td> </td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445237"></a>Constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.score.STYLE_NOTE</td><td>SCORESTYLE_NOTE</td></tr><tr><td>gcompris.score.STYLE_LIFE</td><td>SCORESTYLE_LIFE</td></tr><tr><td>gcompris.score.LAST</td><td>SCORE_LAST</td></tr></tbody></table></div></div></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2445295"></a>sound.h functions and constants Mapping</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445301"></a>Functions mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.sound.play_ogg_list(list)</td><td>void gcompris_play_ogg_list( GList* files )</td><td>The list argument is a GList</td></tr><tr><td>gcompris.sound.play_ogg(list)</td><td>void gcompris_play_ogg(char *, ...)</td><td>The list argument is a python list containing strings</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445367"></a>Constants mapping</h3></div></div><p>
+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2513587"></a>bonus.h functions and constants Mapping</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513593"></a>Functions mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.bonus.display(BonusStatusList, BonusList)</td><td>void gcompris_display_bonus(BonusStatusList, BonusList)</td><td> </td></tr><tr><td>gcompris.bonus.board_finished(BoardFinishedList)</td><td>void board_finished(BoardFinishedList)</td><td> </td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513656"></a>Constants mapping (BonusStatusList)</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.bonus.LOOSE</td><td>BOARD_LOOSE</td></tr><tr><td>gcompris.bonus.WIN</td><td>BOARD_WIN</td></tr><tr><td>gcompris.bonus.DRAW</td><td>BOARD_DRAW</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513712"></a>Constants mapping (BonusList)</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.bonus.TIME_CLICK_TO</td><td>TIME_CLICK_TO_BONUS</td></tr><tr><td>gcompris.bonus.RANDOM</td><td>BONUS_RANDOM</td></tr><tr><td>gcompris.bonus.SMILEY</td><td>BONUS_SMILEY</td></tr><tr><td>gcompris.bonus.FLOWER</td><td>BONUS_FLOWER</td></tr><tr><td>gcompris.bonus.TUX</td><td>BONUS_TUX</td></tr><tr><td>gcompris.bonus.LAST</td><td>BONUS_LAST</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513795"></a>Constants mapping (BoardFinishedList)</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.bonus.FINISHED_RANDOM</td><td>BOARD_FINISHED_RANDOM</td></tr><tr><td>gcompris.bonus.FINISHED_TUXPLANE</td><td>BOARD_FINISHED_TUXPLANE</td></tr><tr><td>gcompris.bonus.FINISHED_TUXLOCO</td><td>BOARD_FINISHED_TUXLOCO</td></tr><tr><td>gcompris.bonus.FINISHED_TOOMANYERRORS</td><td>BOARD_FINISHED_TOOMANYERRORS</td></tr><tr><td>gcompris.bonus.FINISHED_LAST</td><td>BOARD_FINISHED_LAST</td></tr></tbody></table></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2513872"></a>score.h functions and constants Mapping</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513878"></a>Functions mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.score.start(style, x, y, max)</td><td>void gcompris_score_start(ScoreStyleList style, guint x, guint y, guint max)</td><td> </td></tr><tr><td>gcompris.score.end()</td><td>void gcompris_score_end()</td><td> </td></tr><tr><td>gcompris.score.set(value)</td><td>void gcompris_score_set(guint value)</td><td> </td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2513953"></a>Constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.score.STYLE_NOTE</td><td>SCORESTYLE_NOTE</td></tr><tr><td>gcompris.score.STYLE_LIFE</td><td>SCORESTYLE_LIFE</td></tr><tr><td>gcompris.score.LAST</td><td>SCORE_LAST</td></tr></tbody></table></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2514011"></a>sound.h functions and constants Mapping</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2514017"></a>Functions mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.sound.play_ogg_list(list)</td><td>void gcompris_play_ogg_list( GList* files )</td><td>The list argument is a GList</td></tr><tr><td>gcompris.sound.play_ogg(list)</td><td>void gcompris_play_ogg(char *, ...)</td><td>The list argument is a python list containing strings</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2514083"></a>Constants mapping</h3></div></div></div><p>
There is no constants in this package.
- </p></div></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="id2445379"></a>timer.h functions and constants Mapping</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445385"></a>Functions mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.timer.display(x, y, type, second, callback)</td><td>void gcompris_timer_display (int x, int y, TimerList type, int second, GcomprisTimerEnd gcomprisTimerEnd);</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.timer.add(second)</td><td>void gcompris_timer_add(int second)</td><td> </td></tr><tr><td>gcompris.timer.end()</td><td>void gcompris_timer_end(void)</td><td> </td></tr><tr><td>gcompris.timer.get_remaining()</td><td>guint gcompris_timer_get_remaining()</td><td>Return an integer</td></tr><tr><td>gcompris.timer.pause(pause)</td><td>void gcompris_timer_pause(gboolean pause)</td><td> </td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2445491"></a>Constants mapping</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.timer.TEXT</td><td>GCOMPRIS_TIMER_TEXT</td></tr><tr><td>gcompris.timer.SAND</td><td>GCOMPRIS_TIMER_SAND</td></tr><tr><td>gcompris.timer.BALLOON</td><td>GCOMPRIS_TIMER_BALLOON</td></tr><tr><td>gcompris.timer.CLOCK</td><td>GCOMPRIS_TIMER_CLOCK</td></tr></tbody></table></div></div></div></div></body></html>
+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2514095"></a>timer.h functions and constants Mapping</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2514101"></a>Functions mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.timer.display(x, y, type, second, callback)</td><td>void gcompris_timer_display (int x, int y, TimerList type, int second, GcomprisTimerEnd gcomprisTimerEnd);</td><td>The callback must be a callable object</td></tr><tr><td>gcompris.timer.add(second)</td><td>void gcompris_timer_add(int second)</td><td> </td></tr><tr><td>gcompris.timer.end()</td><td>void gcompris_timer_end(void)</td><td> </td></tr><tr><td>gcompris.timer.get_remaining()</td><td>guint gcompris_timer_get_remaining()</td><td>Return an integer</td></tr><tr><td>gcompris.timer.pause(pause)</td><td>void gcompris_timer_pause(gboolean pause)</td><td> </td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2514207"></a>Constants mapping</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Python constant</th><th>C equivalent</th></tr></thead><tbody><tr><td>gcompris.timer.TEXT</td><td>GCOMPRIS_TIMER_TEXT</td></tr><tr><td>gcompris.timer.SAND</td><td>GCOMPRIS_TIMER_SAND</td></tr><tr><td>gcompris.timer.BALLOON</td><td>GCOMPRIS_TIMER_BALLOON</td></tr><tr><td>gcompris.timer.CLOCK</td><td>GCOMPRIS_TIMER_CLOCK</td></tr></tbody></table></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2514273"></a>anim.h structures Mapping</h2></div></div></div><p>The gcompris.anim module supplies two objects, Animation and CanvasItems, corresponding to GcomprisAnimation and GcomprisAnimCanvasItem respectively.</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2514285"></a>Animation</h3></div></div></div><p>The Animation object represents a set of animation files loaded into memory; it has no methods or members, only a constructor and a destructor. The constructor takes a single argument, the name of a text file containing a space-separated list of animation files. Each animation file in the text file corresponds to an animation state; the animations states are numbered from 0 to n-1.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2514302"></a>CanvasItem</h3></div></div></div><p>The CanvasItem object is a bit more interesting than the Animation object. It represents an active instance of an animation file. Its constructor takes two arguments, an Animation and a GnomeCanvasGroup (the parent of the desired active animation).</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2514315"></a>Members</h4></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Structure member</th><th>Type</th><th>Readable</th><th>Writable</th></tr></thead><tbody><tr><td>gnome_canvas</td><td>gnome.canvas.CanvasPixbuf</td><td>Y</td><td>N</td></tr><tr><td>num_states</td><td>int</td><td>Y</td><td>N</td></tr></tbody></table></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2514388"></a>Functions</h4></div></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Python function</th><th>C equivalent</th><th>Notes</th></tr></thead><tbody><tr><td>gcompris.anim.CanvasItem.setState(int)</td><td>gcompris_set_anim_state(GcomprisAnimCanvasItem*, int)</td><td> </td></tr></tbody></table></div></div></div></div></div></body></html>
diff --git a/docs/C/python.xml b/docs/C/python.xml
index 78bd93b..990f7b7 100644
--- a/docs/C/python.xml
+++ b/docs/C/python.xml
@@ -33,7 +33,7 @@ xsltproc -o python.html http://docbook.sourceforge.net/release/xsl/current/html/
<date>January 2004</date>
</revision>
<revision>
- <revnumber>0.3</revnumber>
+ <revnumber>0.4</revnumber>
<date>January 2005</date>
</revision>
</revhistory>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index bf403e4..702c122 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -202,6 +202,7 @@ src/boards/traffic.c
src/boards/wordsgame.c
src/gcompris/about.c
src/gcompris/board.c
+src/gcompris/bonus.c
src/gcompris/config.c
src/gcompris/file_selector.c
src/gcompris/gameutil.c
diff --git a/src/boards/py-mod-gcompris.c b/src/boards/py-mod-gcompris.c
index a82375e..16dccaf 100644
--- a/src/boards/py-mod-gcompris.c
+++ b/src/boards/py-mod-gcompris.c
@@ -620,7 +620,6 @@ static PyMethodDef PythonGcomprisModule[] = {
{ NULL, NULL, 0, NULL}
};
-
void python_gcompris_module_init(void)
{
PyObject* gcomprisModule;
@@ -682,7 +681,8 @@ void python_gcompris_module_init(void)
PyModule_AddIntConstant(gcomprisModule, "CURSOR_DEFAULT", GCOMPRIS_DEFAULT_CURSOR);
/* Some non gcompris.h constants. */
- PyModule_AddStringConstant(gcomprisModule, "DATA_DIR", PACKAGE_DATA_DIR);
+ GcomprisProperties *properties = gcompris_get_properties();
+ PyModule_AddStringConstant(gcomprisModule, "DATA_DIR", properties->package_data_dir);
/* GetText constants. */
PyModule_AddStringConstant(gcomprisModule, "GETTEXT_PACKAGE", GETTEXT_PACKAGE);
diff --git a/src/boards/python.c b/src/boards/python.c
index 4cb955b..a6b836f 100644
--- a/src/boards/python.c
+++ b/src/boards/python.c
@@ -201,13 +201,17 @@ pythonboard_start (GcomprisBoard *agcomprisBoard){
/* Add the python plugins dir to the python's search path */
#ifndef DISABLE_USER_PLUGIN_DIR
userplugindir = g_strconcat(g_get_home_dir(), "/.gcompris/Plugins/", NULL);
- boarddir = g_strdup_printf("import sys; sys.path.append('%s/python'); sys.path.append('%s')",
- userplugindir, PYTHON_PLUGIN_DIR);
+ boarddir = g_strdup_printf("import sys; sys.path.append('%s/python'); sys.path.append('%s'); sys.path.append('%s')",
+ userplugindir,
+ PYTHON_PLUGIN_DIR,
+ gcomprisBoard->board_dir);
#else
boarddir = g_strdup_printf("import sys; sys.path.append('%s')",PYTHON_PLUGIN_DIR );
#endif
+
PyRun_SimpleString(boarddir);
g_free(boarddir);
+
#ifndef DISABLE_USER_PLUGIN_DIR
g_free(userplugindir);
#endif
diff --git a/src/boards/python/anim.py b/src/boards/python/anim.py
index 2c40f77..f1e19f5 100644
--- a/src/boards/python/anim.py
+++ b/src/boards/python/anim.py
@@ -2360,7 +2360,7 @@ def list_restore(picklelist):
list_images = list_images + im + '\n'
gcompris.utils.dialog(_('Warning: the following images cannot be accessed on your system.\n') +
list_images +
- _('The corresponding items have been skiped.'),
+ _('The corresponding items have been skipped.'),
None)
fles.list_z_last_shot= []
for item in fles.framelist:
diff --git a/src/gcompris/about.c b/src/gcompris/about.c
index 8defda2..0b3064e 100644
--- a/src/gcompris/about.c
+++ b/src/gcompris/about.c
@@ -1,6 +1,6 @@
/* gcompris - about.c
*
- * Time-stamp: <2005/02/13 11:59:55 bruno>
+ * Time-stamp: <2005/04/10 16:48:33 bruno>
*
* Copyright (C) 2000 Bruno Coudoin
*
@@ -249,7 +249,7 @@ void gcompris_about_start ()
// License
item = gnome_canvas_item_new (GNOME_CANVAS_GROUP(rootitem),
gnome_canvas_text_get_type (),
- "text", _("This software is a GNU Package and is released under the GNU Public License"),
+ "text", _("This software is a GNU Package and is released under the GNU General Public License"),
"font", gcompris_skin_font_content,
"x", (double) BOARDWIDTH/2,
"y", (double) y - 80,
diff --git a/src/gcompris/bar.c b/src/gcompris/bar.c
index 810755d..a6c6635 100644
--- a/src/gcompris/bar.c
+++ b/src/gcompris/bar.c
@@ -1,6 +1,6 @@
/* gcompris - bar.c
*
- * Time-stamp: <2003/12/21 17:44:37 bcoudoin>
+ * Time-stamp: <2005/04/10 19:25:52 bruno>
*
* Copyright (C) 2000-2003 Bruno Coudoin
*
@@ -317,7 +317,9 @@ void gcompris_bar_set_level(GcomprisBoard *gcomprisBoard)
{
str = g_strdup_printf("level%d.png", gcomprisBoard->level);
+ GcomprisProperties *properties = gcompris_get_properties();
pixmap = gcompris_load_skin_pixmap(str);
+
g_free(str);
/* Warning changing the image needs to update pixbuf_ref for the focus usage */
g_object_set_data (G_OBJECT (level_item), "pixbuf_ref", pixmap);
@@ -355,6 +357,7 @@ gcompris_bar_set_repeat_icon (GdkPixbuf *pixmap)
void
gcompris_bar_set (const GComprisBarFlags flags)
{
+ GcomprisProperties *properties = gcompris_get_properties();
current_flags = flags;
diff --git a/src/gcompris/board.c b/src/gcompris/board.c
index ec73f98..cca3e55 100644
--- a/src/gcompris/board.c
+++ b/src/gcompris/board.c
@@ -341,6 +341,7 @@ void board_play(GcomprisBoard *gcomprisBoard)
bp = gcomprisBoard->plugin;
set_current_gcompris_board(gcomprisBoard);
+
bp->start_board(gcomprisBoard);
bp_data->playing = TRUE;
return;
@@ -362,9 +363,11 @@ void board_pause(void)
void board_stop(void)
{
+
/* If we are in the upper menu, no need to stop and restart it */
- if (get_current_gcompris_board()->previous_board == NULL)
+ if (get_current_gcompris_board()->previous_board == NULL){
return;
+ }
if (bp_data->playing && get_current_board_plugin())
{
@@ -378,6 +381,7 @@ void board_stop(void)
bp_data->paused = FALSE;
gcompris_end_board();
+
return;
}
bp_data->playing = FALSE;
diff --git a/src/gcompris/bonus.c b/src/gcompris/bonus.c
index 740fa93..51bb379 100644
--- a/src/gcompris/bonus.c
+++ b/src/gcompris/bonus.c
@@ -100,6 +100,8 @@ void end_board_finished() {
#define OFFSET 100
void board_finished(BoardFinishedList type) {
GcomprisBoard *gcomprisBoard = get_current_gcompris_board();
+ GcomprisProperties *properties = gcompris_get_properties();
+
int x,y;
GdkPixbuf *pixmap_door1 = NULL,*pixmap_door2 = NULL,*pixmap_tuxplane = NULL;
char * str = NULL;
@@ -190,13 +192,15 @@ void board_finished(BoardFinishedList type) {
gdk_pixbuf_unref(pixmap_tuxplane);
board_finished_id = gtk_timeout_add (TUX_TIME_STEP, (GtkFunction) end_board_finished, NULL);
+
}
/* ==================================== */
void gcompris_display_bonus(BonusStatusList gamewon, BonusList bonus_id)
{
GcomprisBoard *gcomprisBoard = get_current_gcompris_board();
-
+ GcomprisProperties *properties = gcompris_get_properties();
+
gcompris_bar_hide(TRUE);
if (bonus_display_running)
diff --git a/src/gcompris/gameutil.c b/src/gcompris/gameutil.c
index bd70966..e83d7ce 100644
--- a/src/gcompris/gameutil.c
+++ b/src/gcompris/gameutil.c
@@ -1,6 +1,6 @@
/* gcompris - gameutil.c
*
- * Time-stamp: <2005/02/16 22:11:28 bruno>
+ * Time-stamp: <2005/04/10 23:50:40 bruno>
*
* Copyright (C) 2000 Bruno Coudoin
*
@@ -117,13 +117,19 @@ GdkPixbuf *gcompris_load_pixmap(char *pixmapfile)
{
gchar *filename;
GdkPixbuf *pixmap;
-
+ GcomprisProperties *properties = gcompris_get_properties();
/* Search it on the file system */
- if (!g_path_is_absolute (pixmapfile))
- filename = g_strdup_printf("%s/%s", PACKAGE_DATA_DIR, pixmapfile);
- else
- filename = pixmapfile;
+ if (!g_path_is_absolute (pixmapfile)) {
+ filename = g_strdup_printf("%s/%s", properties->package_data_dir, pixmapfile);
+ if (!g_file_test ((filename), G_FILE_TEST_EXISTS)) {
+ GcomprisBoard *gcomprisBoard = get_current_gcompris_board();
+ g_free(filename);
+ filename = g_strdup_printf("%s/%s", gcomprisBoard->board_dir, pixmapfile);
+ }
+ } else {
+ filename = strdup(pixmapfile);
+ }
if (!g_file_test ((filename), G_FILE_TEST_EXISTS)) {
char *str;
@@ -140,6 +146,8 @@ GdkPixbuf *gcompris_load_pixmap(char *pixmapfile)
pixmap = gdk_pixbuf_new_from_file (filename, NULL);
+ g_free(filename);
+
if(!pixmap)
g_warning("Loading image returned a null pointer");
@@ -575,11 +583,15 @@ GcomprisBoard *gcompris_get_board_from_section(gchar *section)
for(list = boards_list; list != NULL; list = list->next) {
GcomprisBoard *board = list->data;
+ g_warning("gcompris_get_board_from_section searching '%s' in board '%s'\n", section, board->section);
+
if( board->section && (strcmp (board->section, section) == 0))
{
+ g_warning("gcompris_get_board_from_section found '%s' in board '%s'\n", section, board->section);
return board;
}
}
+ g_warning("gcompris_get_board_from_section searching '%s' but NOT FOUND\n", section);
return NULL;
}
@@ -643,25 +655,21 @@ void cleanup_menus() {
}
}
-/* load all the menus xml files in the gcompris path
- * into our memory structures.
+/*
+ * gcompris_load_menus
+ *
+ * Load all the menu it can from the given dirname
+ *
*/
-void gcompris_load_menus()
-{
+void gcompris_load_menus_dir(char *dirname){
struct dirent *one_dirent;
DIR *dir;
int n;
- if(boards_list) {
- cleanup_menus();
- return;
- }
-
- /* Load the Pixpmaps directory file names */
- dir = opendir(PACKAGE_DATA_DIR);
+ dir = opendir(dirname);
if (!dir) {
- g_warning("gcompris_load_menus : no menu found in %s", PACKAGE_DATA_DIR);
+ g_warning("gcompris_load_menus : no menu found in %s", dirname);
} else {
while((one_dirent = readdir(dir)) != NULL) {
@@ -670,7 +678,7 @@ void gcompris_load_menus()
gchar *filename;
filename = g_strdup_printf("%s/%s",
- PACKAGE_DATA_DIR, one_dirent->d_name);
+ dirname, one_dirent->d_name);
if(!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
g_free(filename);
@@ -679,6 +687,7 @@ void gcompris_load_menus()
if(selectMenuXML(one_dirent->d_name)) {
gcomprisBoard = g_malloc0 (sizeof (GcomprisBoard));
+ gcomprisBoard->board_dir = dirname;
/* Need to be initialized here because gcompris_read_xml_file is used also to reread */
/* the locale data */
@@ -694,8 +703,26 @@ void gcompris_load_menus()
}
}
closedir(dir);
+}
+
+/* load all the menus xml files in the gcompris path
+ * into our memory structures.
+ */
+void gcompris_load_menus()
+{
+ GcomprisProperties *properties = gcompris_get_properties();
+
+ if(boards_list) {
+ cleanup_menus();
+ return;
+ }
+
+ gcompris_load_menus_dir(properties->package_data_dir);
+
+ if (properties->local_directory)
+ gcompris_load_menus_dir(properties->local_directory);
- gcompris_get_menulist("/");
+ gcompris_get_menulist(properties->root_menu);
}
/* ======================================= */
diff --git a/src/gcompris/gcompris-board.h b/src/gcompris/gcompris-board.h
index 5c9d876..5d959f2 100644
--- a/src/gcompris/gcompris-board.h
+++ b/src/gcompris/gcompris-board.h
@@ -1,6 +1,6 @@
/* gcompris - gcompris-board.h
*
- * Time-stamp: <2004/06/18 00:26:05 bcoudoin>
+ * Time-stamp: <2005/04/10 22:33:24 bruno>
*
* Copyright (C) 2000 Bruno Coudoin
*
@@ -32,6 +32,9 @@ struct _GcomprisBoard
gchar *type;
gboolean board_ready;
+ /* The directory from which it was started */
+ gchar *board_dir;
+
/* Board specific mode */
gchar *mode;
diff --git a/src/gcompris/gcompris.c b/src/gcompris/gcompris.c
index 970b97f..1403b8c 100644
--- a/src/gcompris/gcompris.c
+++ b/src/gcompris/gcompris.c
@@ -1,6 +1,6 @@
/* gcompris - gcompris.c
*
- * Time-stamp: <2005/04/07 00:03:51 bruno>
+ * Time-stamp: <2005/04/10 20:00:49 bruno>
*
* Copyright (C) 2000-2003 Bruno Coudoin
*
@@ -85,6 +85,10 @@ static int popt_aalias = FALSE;
static int popt_difficulty_filter = FALSE;
static int popt_debug = FALSE;
static int popt_noxrandr = FALSE;
+/* <YC experimental local only options> */
+static char *popt_root_menu = NULL;
+static char *popt_local_activity = NULL;
+/* </YC> */
static struct poptOption options[] = {
{"fullscreen", 'f', POPT_ARG_NONE, &popt_fullscreen, 0,
@@ -107,6 +111,12 @@ static struct poptOption options[] = {
N_("Use the antialiased canvas (slower)."), NULL},
{"noxrandr", 'x', POPT_ARG_NONE, &popt_noxrandr, 0,
N_("Disable XRANDR (No screen resolution change)."), NULL},
+/* <YC experimental local only options> */
+ {"root-menu", 'l', POPT_ARG_STRING, &popt_root_menu, 0,
+ N_("Run gcompris with local menu (e.g -l /reading will let you play only reading activity directory)"), NULL},
+ {"local-activity", 'L', POPT_ARG_STRING, &popt_local_activity, 0,
+ N_("Run gcompris with local activity directory added to menu"), NULL},
+/* </YC> */
#ifndef WIN32
POPT_AUTOHELP
#endif
@@ -571,8 +581,11 @@ static void setup_window ()
gcompris_load_mime_types();
/* Get and Run the root menu */
- gcomprisBoardMenu = gcompris_get_board_from_section("/");
- if(!board_check_file(gcomprisBoardMenu)) {
+ gcomprisBoardMenu = gcompris_get_board_from_section(properties->root_menu);
+ if(!gcomprisBoardMenu) {
+ g_warning("Couldn't find the board menu %s, or plugin execution error", properties->root_menu);
+ exit(1);
+ } else if(!board_check_file(gcomprisBoardMenu)) {
g_error("Couldn't find the board menu, or plugin execution error");
} else {
g_warning("Fine, we got the gcomprisBoardMenu, xml boards parsing went fine");
@@ -896,6 +909,17 @@ gcompris_init (int argc, char *argv[])
properties->filter_style = GCOMPRIS_FILTER_EQUAL;
}
+ if (popt_root_menu){
+ g_warning("Using menu %s as root.", popt_root_menu);
+ properties->root_menu = g_strdup(popt_root_menu);
+ }
+
+ if (popt_local_activity){
+ g_warning("Adding local activies from %s.", popt_local_activity);
+ properties->local_directory = g_strdup(popt_local_activity);
+ }
+
+
poptFreeContext(pctx);
/*------------------------------------------------------------*/
diff --git a/src/gcompris/images_selector.c b/src/gcompris/images_selector.c
index ad0057a..3d9be8b 100644
--- a/src/gcompris/images_selector.c
+++ b/src/gcompris/images_selector.c
@@ -1,6 +1,6 @@
/* gcompris - images_selector.c
*
- * Time-stamp: <2005/03/01 00:27:18 bruno>
+ * Time-stamp: <2005/04/10 16:44:29 bruno>
*
* Copyright (C) 2000 Bruno Coudoin
*
@@ -624,9 +624,9 @@ parseImage (xmlDocPtr doc, xmlNodePtr cur) {
}
if (havePathName && pathname[0] == '~'){
/* replace '~' by home dir */
- pathname = g_strdup_printf("%s%s",g_get_home_dir(),pathname+1);
+ pathname = g_strdup_printf("%s%s",g_get_home_dir(), pathname+1);
if (!g_file_test ((pathname), G_FILE_TEST_IS_DIR)){
- g_warning(_("ImageSet %s pathname home %s image not found. Skipping ImageSet...\n"), imageSetName, pathname);
+ g_warning(_("In ImageSet %s, home pathname %s is not found. Skipping ImageSet...\n"), imageSetName, pathname);
return;
}
havePathName = TRUE;
@@ -661,7 +661,7 @@ parseImage (xmlDocPtr doc, xmlNodePtr cur) {
if(!g_file_test ((absolutepath), G_FILE_TEST_EXISTS) )
{
- g_warning(_("ImageSet %s image not found. Skipping ImageSet...\n"), absolutepath);
+ g_warning(_("In ImageSet %s, an image is not found. Skipping ImageSet...\n"), absolutepath);
return;
}
@@ -687,7 +687,7 @@ parseImage (xmlDocPtr doc, xmlNodePtr cur) {
/* or all files with a given suffix */
if (!g_file_test ((pathname), G_FILE_TEST_IS_DIR)){
- g_warning(_("ImageSet %s directory %s not found. Skipping all the ImageSet...\n"), absolutepath, pathname);
+ g_warning(_("In ImageSet %s, directory %s is not found. Skipping all the ImageSet...\n"), absolutepath, pathname);
return;
}
imageset_directory = g_dir_open (pathname, 0, error);
diff --git a/src/gcompris/properties.c b/src/gcompris/properties.c
index 062d975..54bd842 100644
--- a/src/gcompris/properties.c
+++ b/src/gcompris/properties.c
@@ -1,6 +1,6 @@
/* gcompris - properties.c
*
- * Time-stamp: <2005/03/29 00:58:14 bruno>
+ * Time-stamp: <2005/04/10 23:46:00 bruno>
*
* Copyright (C) 2000,2003 Bruno Coudoin
*
@@ -120,7 +120,9 @@ GcomprisProperties *gcompris_properties_new ()
tmp->difficulty_max = 0;
tmp->filter_style = GCOMPRIS_FILTER_NONE; /* No difficulty filter by default */
tmp->difficulty_filter = 1; /* No difficulty filter by default */
-
+ tmp->root_menu = "/";
+ tmp->local_directory = NULL;
+ tmp->package_data_dir = PACKAGE_DATA_DIR;
home_dir = g_get_home_dir();
diff --git a/src/gcompris/properties.h b/src/gcompris/properties.h
index 86b0edd..a187168 100644
--- a/src/gcompris/properties.h
+++ b/src/gcompris/properties.h
@@ -1,6 +1,6 @@
/* gcompris - properties.h
*
- * Time-stamp: <2005/03/31 23:06:12 bruno>
+ * Time-stamp: <2005/04/10 23:53:34 bruno>
*
* Copyright (C) 2000 Bruno Coudoin
*
@@ -34,6 +34,9 @@ typedef struct {
gint filter_style;
gint difficulty_filter;
gint difficulty_max;
+ gchar *root_menu;
+ gchar *local_directory;
+ gchar *package_data_dir;
gchar *locale;
gchar *skin;
gchar *key;
@@ -49,20 +52,6 @@ void gcompris_properties_disable_board(gchar *boardName);
gboolean gcompris_properties_get_board_status(gchar *boardName);
void gcompris_write_boards_status();
-/* private definitions */
-typedef enum {
- GCOMPRIS_PROP_MUSIC,
- GCOMPRIS_PROP_FX,
- GCOMPRIS_PROP_SCREENSIZE,
- GCOMPRIS_PROP_TIMER,
- GCOMPRIS_PROP_FULLSCREEN,
- GCOMPRIS_PROP_LOCALE,
- GCOMPRIS_PROP_SKIN,
- GCOMPRIS_PROP_AUDIO,
- GCOMPRIS_PROP_DIFFICULTY,
- GCOMPRIS_PROP_FILTER_STYLE
-} GcomprisTokenType;
-
#endif
/* Local Variables: */