diff options
author | Bruno 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) |
commit | c82cdc58bacd893b4906247f86c54f722656d540 (patch) | |
tree | c778b0e21aa15e72a5ff1e8f593de6a916c08d4b | |
parent | 3c129ea2e83c40d795a15eb1df25eaeaddcbadba (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-- | ChangeLog | 30 | ||||
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | boards/boardicons/connect4.png | bin | 0 -> 12298 bytes | |||
-rw-r--r-- | boards/connect4.xml.in | 4 | ||||
-rw-r--r-- | docs/C/python.html | 15 | ||||
-rw-r--r-- | docs/C/python.xml | 2 | ||||
-rw-r--r-- | po/POTFILES.in | 1 | ||||
-rw-r--r-- | src/boards/py-mod-gcompris.c | 4 | ||||
-rw-r--r-- | src/boards/python.c | 8 | ||||
-rw-r--r-- | src/boards/python/anim.py | 2 | ||||
-rw-r--r-- | src/gcompris/about.c | 4 | ||||
-rw-r--r-- | src/gcompris/bar.c | 5 | ||||
-rw-r--r-- | src/gcompris/board.c | 6 | ||||
-rw-r--r-- | src/gcompris/bonus.c | 6 | ||||
-rw-r--r-- | src/gcompris/gameutil.c | 67 | ||||
-rw-r--r-- | src/gcompris/gcompris-board.h | 5 | ||||
-rw-r--r-- | src/gcompris/gcompris.c | 30 | ||||
-rw-r--r-- | src/gcompris/images_selector.c | 10 | ||||
-rw-r--r-- | src/gcompris/properties.c | 6 | ||||
-rw-r--r-- | src/gcompris/properties.h | 19 |
20 files changed, 160 insertions, 67 deletions
@@ -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 @@ -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 Binary files differnew file mode 100644 index 0000000..9fe3da0 --- /dev/null +++ b/boards/boardicons/connect4.png 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"><<a href="mailto:osamyn@ulb.ac.be">osamyn@ulb.ac.be</a>></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: */ |