Commit 64666f50 authored by Bruno Coudoin's avatar Bruno Coudoin

- Imported these files from the gnome-python module in the gnome CVS

	  Now it is no more needed to have gnome-python installed on your system
	  to have the python plugin support.
	* src/boards/canvas.c:
	* src/boards/canvasmodule.c:

	- Improved makefiles to compile python plugins on windows

	* Makefile.mingw:
	* src/boards/Makefile.am:
	* src/boards/Makefile.mingw:

	- fixed python animation
	- fixed all python code to no more import gnome
parent 25e450ea
2006-10-03 Bruno coudoin <bruno.coudoin@free.fr>
- Imported these files from the gnome-python module in the gnome CVS
Now it is no more needed to have gnome-python installed on your system
to have the python plugin support.
* src/boards/canvas.c:
* src/boards/canvasmodule.c:
- Improved makefiles to compile python plugins on windows
* Makefile.mingw:
* src/boards/Makefile.am:
* src/boards/Makefile.mingw:
- fixed python animation
- fixed all python code to no more import gnome
* src/boards/py-mod-anim.c: (AnimCanvas_getattr):
* src/boards/py-mod-gcompris.c: (pair_in_dict),
(pyGcomprisConfCallback), (py_gc_board_config_combo_box),
(pair_object_in_dict), (py_gc_board_config_radio_buttons),
(py_gc_board_config_spin_int),
(py_gc_board_config_combo_locales_asset), (py_gc_im_reset),
(python_gcompris_module_init):
* src/boards/python.c: (pythonboard_init):
* src/boards/python/admin/board_list.py:
* src/boards/python/admin/class_list.py:
* src/boards/python/admin/group_list.py:
* src/boards/python/admin/group_user_list.py:
* src/boards/python/admin/module.py:
* src/boards/python/admin/module_boards.py:
* src/boards/python/admin/module_groups.py:
* src/boards/python/admin/module_profiles.py:
* src/boards/python/admin/module_users.py:
* src/boards/python/admin/profile_group_list.py:
* src/boards/python/admin/profile_list.py:
* src/boards/python/admin/user_list.py:
* src/boards/python/admin/wordlist.py:
* src/boards/python/administration.py:
* src/boards/python/algorithm.py:
* src/boards/python/anim.py:
* src/boards/python/ballcatch.py:
* src/boards/python/bargame.py:
* src/boards/python/connect4.py:
* src/boards/python/electric.py:
* src/boards/python/followline.py:
* src/boards/python/gnumch.py:
* src/boards/python/guessnumber.py:
* src/boards/python/hexagon.py:
* src/boards/python/login.py:
* src/boards/python/melody.py:
* src/boards/python/mosaic.py:
* src/boards/python/oscar_and_friends.py:
* src/boards/python/pythontest.py:
* src/boards/python/redraw.py:
* src/boards/python/searace.py:
* src/boards/python/sudoku.py:
* src/boards/python/tuxpaint.py:
* src/boards/python/watercycle.py:
* src/gcompris/Makefile.mingw:
2006-10-01 Bruno coudoin <bruno.coudoin@free.fr>
- Added Turkish map by Onur Tolga Sehitoglu
......
......@@ -12,7 +12,7 @@ make install
Warning: You cannot use ~ in the prefix, it must be a full path.
Warning: It has been reported that make -j 2 (or more) break the compilation
This will install GCompris and all its data files under
This will install GCompris and all its data files under
/home/bruno/gcompris
Then, run /home/bruno/gcompris/bin/gcompris
......@@ -26,9 +26,7 @@ gcompris includes several activity written in python.
To enable them, you need to have python installed on your system with the following packages:
libpython
python
gnome-python-canvas
libpython2.2-devel
gnome-python
python-base
python-pyxml
python-sqlite2 (if it's not packaged, download and install it from http://initd.org/tracker/pysqlite)
......@@ -50,7 +48,7 @@ urpmi libglib2.0_0-devel
urpmi libgnome2_0-devel
urpmi libgnomecanvas2_0-devel libgdk_pixbuf2.0_0-devel
urpmi libgnomeui2_0-devel
urpmi libSDL_mixer1.2-devel libSDL1.2-devel
urpmi libSDL_mixer1.2-devel libSDL1.2-devel
urpmi python-gtk-devel gnome-python-canvas
urpmi libpython2.4-devel
urpmi pygtk2.0-devel
......
......@@ -13,11 +13,14 @@ GCOMPRIS_BOARDS = ./src/boards
GCOMPRIS_INSTALL_DIR = ./win32-install-dir
GTK_TOP := /gtk
GLIB_TOP := /glib
GNUWIN32_TOP := /gnuwin32
LIBXML2_TOP := /libxml2
SDL_TOP := /sdl
CANVAS_TOP := /gnomecanvas
CAIRO_TOP := /cairo
GNUCHESS_TOP := /gnuchess
PYTHON_TOP := /c/Python24
MAKENSIS := "/c/Program Files/NSIS/makensis.exe"
......@@ -40,7 +43,7 @@ NEEDED_DLLS = $(GNUCHESS_TOP)/bin/pthreadGC.dll \
$(GTK_TOP)/bin/libart_lgpl_2-2.dll \
$(GTK_TOP)/bin/libgdk-win32-2.0-0.dll \
$(GTK_TOP)/bin/libgdk_pixbuf-2.0-0.dll \
$(GTK_TOP)/bin/libglib-2.0-0.dll \
$(GLIB_TOP)/bin/libglib-2.0-0.dll \
$(GTK_TOP)/bin/libgmodule-2.0-0.dll \
$(GTK_TOP)/bin/libgobject-2.0-0.dll \
$(GTK_TOP)/bin/libpango-1.0-0.dll \
......@@ -55,8 +58,11 @@ NEEDED_DLLS = $(GNUCHESS_TOP)/bin/pthreadGC.dll \
$(GTK_TOP)/expat/bin/xmltok.dll \
$(GTK_TOP)/bin/iconv.dll \
$(GTK_TOP)/bin/intl.dll \
$(GTK_TOP)/bin/libpng12.dll \
$(GTK_TOP)/bin/jpeg62.dll
$(GTK_TOP)/bin/libpng13.dll \
$(GTK_TOP)/bin/jpeg62.dll \
$(GTK_TOP)/bin/libpangocairo-1.0-0.dll \
$(CAIRO_TOP/bin/libcairo-2.dll \
/c/WINDOWS/system32/python24.dll
NEEDED_FILES = README \
COPYING \
......
......@@ -18,7 +18,7 @@ Buildrequires: gnuchess gnucap
Buildrequires: libxml2-devel libgnomeui2-devel libsqlite3_0-devel
Buildrequires: texinfo
# (misc) needed for python support
Buildrequires: gnome-python python-devel pygtk2.0-devel
Buildrequires: python-devel pygtk2.0-devel
Requires: gnome-libs libxml2 gdk-pixbuf %canvaspackage %canvaslib
Requires: gnuchess >= 5.02
Requires: @REQUIRE_PYTHON@
......
......@@ -267,6 +267,7 @@ libpython_la_LDFLAGS = -export-dynamic -module -avoid-version $(PYTHON_LIBS)
libpython_la_LIBADD = $(top_builddir)/src/gcompris/libgcompris-1.la
libpython_la_CFLAGS = -fno-strict-aliasing
libpython_la_SOURCES = python.c \
canvas.c canvasmodule.c \
py-gcompris-board.c py-gcompris-board.h \
py-gcompris-properties.c py-gcompris-properties.h \
py-gcompris-profile.c py-gcompris-profile.h \
......
......@@ -11,11 +11,13 @@
GCOMPRIS_PLUGINS := .
GCOMPRIS_TOP := ../..
GTK_TOP := /gtk
GLIB_TOP := /glib
GNUWIN32_TOP := /gnuwin32
LIBXML2_TOP := /libxml2
SDL_TOP := /sdl
CANVAS_TOP := /gnomecanvas
PYTHON_TOP := /c/Python24
CAIRO_TOP := /cairo
GCOMPRIS_INSTALL_DIR := $(GCOMPRIS_TOP)/win32-install-dir
##
......@@ -44,10 +46,10 @@ include $(GCOMPRIS_TOP)/global_win32.mak
INCLUDE_PATHS += -I$(GCOMPRIS_PLUGINS) \
-I$(GTK_TOP)/include \
-I$(GTK_TOP)/include/gtk-2.0 \
-I$(GTK_TOP)/include/glib-2.0 \
-I$(GLIB_TOP)/include/glib-2.0 \
-I$(GTK_TOP)/include/pango-1.0 \
-I$(GTK_TOP)/include/atk-1.0 \
-I$(GTK_TOP)/lib/glib-2.0/include \
-I$(GLIB_TOP)/lib/glib-2.0/include \
-I$(GTK_TOP)/lib/gtk-2.0/include \
-I$(CANVAS_TOP)/include/libgnomecanvas-2.0 \
-I$(GTK_TOP)/include/atk-1.0 \
......@@ -57,6 +59,7 @@ INCLUDE_PATHS += -I$(GCOMPRIS_PLUGINS) \
-I$(GNUWIN32_TOP)/include \
-I$(GCOMPRIS_TOP) \
-I$(GCOMPRIS_TOP)/src \
-I$(CAIRO_TOP)/include/cairo \
-I$(PYTHON_TOP)/include \
-I$(PYTHON_TOP)/include/pygtk-2.0
......@@ -67,7 +70,7 @@ LIB_PATHS = -L$(GTK_TOP)/lib \
-L$(GNUWIN32_TOP)/lib \
-L$(SDL_TOP)/lib \
-L$(GCOMPRIS_TOP)/src/gcompris \
-L$(PYTHON_TOP)/libs
-L$(PYTHON_TOP)/lib
##
......@@ -90,6 +93,7 @@ LIBS = -lgtk-win32-2.0 \
-lintl \
-lws2_32 \
-lpython24 \
-lpython
libgcompris-1.la
##
......@@ -111,6 +115,8 @@ install:
##
PYTHON_C_SRC = \
python.c \
canvas.c \
canvasmodule.c \
py-gcompris-board.c \
py-gcompris-board.h \
py-gcompris-properties.c \
......
This diff is collapsed.
/* -*- Mode: C; c-basic-offset: 4 -*- */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
/* include this first, before NO_IMPORT_PYGOBJECT is defined */
#include <pygobject.h>
#include <pygtk/pygtk.h>
#include <libgnomecanvas/libgnomecanvas.h>
static PyObject *
gnomecanvaspoints_from_value(const GValue *value)
{
GnomeCanvasPoints *points = (GnomeCanvasPoints *)g_value_get_boxed(value);
PyObject *list;
gint i;
list = PyList_New(0);
if (points)
for (i = 0; i < points->num_points * 2; i++) {
PyObject *item = PyFloat_FromDouble(points->coords[i]);
PyList_Append(list, item);
Py_DECREF(item);
}
return list;
}
static int
gnomecanvaspoints_to_value(GValue *value, PyObject *object)
{
GnomeCanvasPoints *points;
gint i, len;
if (!PySequence_Check(object))
return -1;
len = PySequence_Length(object);
if (len % 2 != 0)
return -1;
points = gnome_canvas_points_new(len / 2);
for (i = 0; i < len; i++) {
PyObject *item = PySequence_GetItem(object, i);
points->coords[i] = PyFloat_AsDouble(item);
if (PyErr_Occurred()) {
gnome_canvas_points_unref(points);
PyErr_Clear();
Py_DECREF(item);
return -1;
}
Py_DECREF(item);
}
g_value_set_boxed(value, points);
gnome_canvas_points_unref(points);
return 0;
}
void pycanvas_register_classes (PyObject *d);
extern PyMethodDef pycanvas_functions[];
DL_EXPORT(void)
initgnomecanvas (void)
{
PyObject *m, *d;
init_pygobject ();
init_pygtk ();
pyg_register_boxed_custom(GNOME_TYPE_CANVAS_POINTS,
gnomecanvaspoints_from_value,
gnomecanvaspoints_to_value);
m = Py_InitModule ("gnomecanvas", pycanvas_functions);
d = PyModule_GetDict (m);
/* ArtPathcode */
#define add_item(short)\
PyModule_AddIntConstant (m, #short, ART_##short)
add_item(MOVETO);
add_item(MOVETO_OPEN);
add_item(CURVETO);
add_item(LINETO);
#undef add_item
pycanvas_register_classes (d);
/* pycanvas_add_constants (d, "GNOME_CANVAS_"); */
}
......@@ -223,7 +223,7 @@ AnimCanvas_free(py_GcomprisAnimCanvas *self)
static PyObject *AnimCanvas_getattr(py_GcomprisAnimCanvas *self, char *name)
{
if(!strcmp(name, "gnome_canvas"))
if(!strcmp(name, "gnomecanvas"))
return (PyObject*) pygobject_new( (GObject*) self->item->canvas );
else if(!strcmp(name, "num_states"))
return Py_BuildValue("i", self->item->anim->numstates);
......
......@@ -3,7 +3,7 @@
* Time-stamp: <2006/08/21 23:36:37 bruno>
*
* Copyright (C) 2003 Olivier Samyn <osamyn@ulb.ac.be>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
......@@ -38,6 +38,7 @@
#include "py-mod-anim.h"
#include "py-mod-admin.h"
void initgnomecanvas (void);
void pair_in_dict(gpointer key,
gpointer value,
......@@ -48,7 +49,7 @@ void pair_in_dict(gpointer key,
pyKey = PyString_FromString((gchar *)key);
Py_INCREF(pyKey);
/* key cannot be NULL. But value can */
if (value==NULL){
......@@ -63,7 +64,7 @@ void pair_in_dict(gpointer key,
g_warning("Hash to dict: pass key %s and value %s",(gchar *)key, (gchar *)value );
}
/* Utility */
PyObject* hash_to_dict(GHashTable *table)
......@@ -1008,7 +1009,7 @@ static void pyGcomprisConfCallback(GHashTable* table){
result = PyObject_CallFunction(pyGcomprisConfCallbackFunc, "O", Py_None);
// This callback can be called multiple time ? not now
Py_DECREF(pyGcomprisConfCallbackFunc);
if(result==NULL){
......@@ -1100,14 +1101,14 @@ py_gc_board_config_combo_box(PyObject* self, PyObject* args)
size = PyList_Size (py_list);
for (i=0; i < size; i ++)
list = g_list_append( list,
list = g_list_append( list,
PyString_AsString( PyList_GetItem( py_list, i)));
/* Call the corresponding C function */
return (PyObject *)pygobject_new((GObject*) \
gc_board_config_combo_box((const gchar *)label,
list,
key,
gc_board_config_combo_box((const gchar *)label,
list,
key,
init));
}
......@@ -1133,13 +1134,13 @@ void pair_object_in_dict(gpointer key,
pyKey = PyString_FromString((gchar *)key);
Py_INCREF(pyKey);
pyValue = pygobject_new((GObject*) value);
Py_INCREF(pyValue);
PyDict_SetItem((PyObject *)dict, pyKey, pyValue);
}
/* Utility */
PyObject* hash_object_to_dict(GHashTable *table)
......@@ -1175,7 +1176,7 @@ py_gc_board_config_radio_buttons(PyObject* self, PyObject* args)
"gc_board_config_radio_buttons second argument must be a dict");
return NULL;
}
PyObject *pykey, *pyvalue;
int pos = 0;
......@@ -1190,8 +1191,8 @@ py_gc_board_config_radio_buttons(PyObject* self, PyObject* args)
g_strdup(PyString_AsString(pyvalue)));
}
result = gc_board_config_radio_buttons(label,
key,
result = gc_board_config_radio_buttons(label,
key,
buttons_label,
init);
......@@ -1212,7 +1213,7 @@ py_gc_board_config_spin_int(PyObject* self, PyObject* args)
return NULL;
return (PyObject *)pygobject_new((GObject*) \
gc_board_config_spin_int((const gchar *)label,
gc_board_config_spin_int((const gchar *)label,
key,
min,
max,
......@@ -1282,8 +1283,8 @@ py_gc_board_config_combo_locales_asset(PyObject* self, PyObject* args)
gchar *file;
/* Parse arguments */
if(!PyArg_ParseTuple(args, "ssz:gc_board_config_combo_locales",
&label,
if(!PyArg_ParseTuple(args, "ssz:gc_board_config_combo_locales",
&label,
&init,
&file))
return NULL;
......@@ -1539,10 +1540,10 @@ py_gc_im_reset (PyObject* self, PyObject* args)
/* Parse arguments */
if(!PyArg_ParseTuple(args, ":gcompris.im_reset"))
return NULL;
/* Call the corresponding C function */
gc_im_reset ();
Py_INCREF(Py_None);
return Py_None;
}
......@@ -1681,6 +1682,7 @@ void python_gcompris_module_init(void)
/* Initialize the sub modules */
initgnomecanvas();
python_gcompris_bonus_module_init();
python_gc_score_module_init();
python_gc_skin_module_init();
......
......@@ -168,12 +168,12 @@ pythonboard_init (GcomprisBoard *agcomprisBoard){
pythonboard_is_ready = FALSE;
g_warning("! Python disabled: Cannot import pygtk modules\n");
} else {
/* Try to import gnome-python modules */
/* Try to import gnomecanvas modules */
g_free(execstr);
execstr = g_strdup("import gnome; import gnome.canvas");
execstr = g_strdup("import gnomecanvas");
if(PyRun_SimpleString(execstr)!=0){
pythonboard_is_ready = FALSE;
g_warning("! Python disabled: Cannot import gnome-python modules\n");
g_warning("! Python disabled: Cannot import gnomecanvas modules\n");
} else {
/* Try to import gcompris modules */
g_free(execstr);
......
......@@ -17,8 +17,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
import gnome
import gnome.canvas
import gnomecanvas
import gcompris
import gcompris.utils
import gcompris.skin
......
# gcompris - class_list.py
#
#
# Copyright (C) 2005 Bruno Coudoin and Yves Combe
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
import gnome
import gnome.canvas
import gnomecanvas
import gcompris
import gcompris.utils
import gcompris.skin
......@@ -52,7 +51,7 @@ class Class_list:
self.cur = db_cursor
self.con = db_connect
self.class_data = []
# ---------------
......@@ -96,7 +95,7 @@ class Class_list:
sw.add(self.treeview_class)
left_box.pack_start(sw, True, True, 0)
# add columns to the tree view
self.__add_columns_class(self.treeview_class)
......@@ -120,7 +119,7 @@ class Class_list:
self.button_remove.show()
# Not removable until one class is selected
self.button_remove.set_sensitive(False)
# User list for the group
user_hbox = gtk.HBox(False, 8)
user_hbox.show()
......@@ -194,7 +193,7 @@ class Class_list:
COLUMN_TEACHER, aclass[COLUMN_TEACHER]
)
def on_remove_class_clicked(self, button, treeview):
selection = treeview.get_selection()
model, iter = selection.get_selected()
......@@ -271,7 +270,7 @@ class Class_list:
while(iter):
path = model.get_path(iter)[0]
tmp_class_id = model.get_value(iter, COLUMN_CLASSID)
if(tmp_class_id == class_id):
# Now update the class_name and class_teacher if provided
......@@ -286,9 +285,9 @@ class Class_list:
updated = True
# It's updated now
break
iter = model.iter_next(iter)
# The job not done yet, it's a new class.
......@@ -308,4 +307,4 @@ class Class_list:
self.list_user.reload(sel_class_id)
print "class_list reload DONE"
# gcompris - group_list.py
#
#
# Copyright (C) 2005 Bruno Coudoin and Yves Combe
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
import gnome
import gnome.canvas
import gnomecanvas
import gcompris
import gcompris.utils
import gcompris.skin
......@@ -58,7 +57,7 @@ class Group_list:
# The group_id selected
self.current_group_id = 0
# ---------------
# Group Management
# ---------------
......@@ -83,11 +82,11 @@ class Group_list:
class_box = gtk.HBox(False, 8)
class_box.show()
label_box.pack_start(class_box, False, False, 0)
class_label = gtk.Label(_('Select a class:'))
class_label.show()
label_box.pack_start(class_label, False, False, 0)
self.cur.execute('SELECT * FROM class WHERE class_id>1 ORDER BY name')
class_list = self.cur.fetchall()
......@@ -97,7 +96,7 @@ class Group_list:
self.combo_class.append_text(aclass[1])
# Save in a list the combo index => the class_id
self.class_list.append(aclass[0])
self.combo_class.set_active(self.current_class_id)
label_box.pack_end(self.combo_class, True, True, 0)
......@@ -114,7 +113,7 @@ class Group_list:
vbox_button.show()
group_hbox.add(vbox_button)
# Create the table
sw = gtk.ScrolledWindow()
sw.show()
......@@ -130,7 +129,7 @@ class Group_list:
sw.add(treeview_group)
grouplist_box.pack_start(sw, True, True, 0)
# add columns to the tree view
self.__add_columns_group(treeview_group)
......@@ -141,7 +140,7 @@ class Group_list:
vbox_button.pack_start(self.button_add, False, False, 0)
self.button_add.show()
self.button_add.set_sensitive(False)
self.button_edit = gtk.Button(stock='gtk-edit')
self.button_edit.connect("clicked", self.on_edit_group_clicked, treeview_group)
vbox_button.pack_start(self.button_edit, False, False, 0)
......@@ -181,7 +180,7 @@ class Group_list:
# Remove all entries in the list
self.group_model.clear()
# Grab the group data
self.cur.execute('SELECT group_id, name, description FROM groups WHERE class_id=? ORDER BY name',
(self.current_class_id,))
......@@ -205,7 +204,7 @@ class Group_list:
def __add_columns_group(self, treeview):
model = treeview.get_model()
# columns for name
......@@ -240,7 +239,7 @@ class Group_list:
COLUMN_DESCRIPTION, agroup[COLUMN_DESCRIPTION]
)
#
def on_add_group_clicked(self, button, model):
group_id = constants.get_next_group_id(self.con, self.cur)
......@@ -249,7 +248,7 @@ class Group_list:
self.current_class_id, self.get_active_text(self.combo_class),
group_id, None, None,
self)
def on_remove_group_clicked(self, button, treeview):
......@@ -274,7 +273,7 @@ class Group_list:
column = cell.get_data("column")
group_id = model.get_value(iter, COLUMN_GROUPID)
if column == COLUMN_NAME:
model.set(iter, column, new_text)
......@@ -340,7 +339,7 @@ class Group_list:
wholegroup_id = constants.get_wholegroup_id(self.con,
self.cur,
self.current_class_id)
if(wholegroup_id == self.current_group_id):
self.button_edit.set_sensitive(False)
self.button_remove.set_sensitive(False)
......@@ -356,7 +355,7 @@ class Group_list:
self.button_remove.set_sensitive(False)
self.button_add.set_sensitive(False)
return
self.button_add.set_sensitive(True)
self.current_class_id = self.class_list[active]
self.reload_group()
......
# gcompris - group_user_list.py
#
#
# Copyright (C) 2005 Bruno Coudoin and Yves Combe
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
import gnome
import gnome.canvas
import gnomecanvas
import gcompris
import gcompris.utils
import gcompris.skin
......@@ -57,16 +56,16 @@ class Group_user_list:
# The group_id to work on
self.group_id = group_id
# ---------------
# User Group Management