[gcompris/gcomprixogoo] Added a parameter to file selector to pass a user data.



commit 30891ec192e1b38a8844ce7cf50806a03677f4a1
Author: Bruno Coudoin <bruno coudoin free fr>
Date:   Sun Oct 25 18:39:39 2009 +0100

    Added a parameter to file selector to pass a user data.
    Fixed file selector, ok case was not working.

 src/anim-activity/anim.py        |   14 +++++-----
 src/boards/py-mod-gcompris.c     |   49 ++++++++++++++++++++++---------------
 src/gcompris/file_selector.c     |   42 ++++++++++++++++++--------------
 src/gcompris/gcompris.h          |   17 +++++++-----
 src/goocanvas/src/goocanvassvg.c |   13 +++++----
 5 files changed, 77 insertions(+), 58 deletions(-)
---
diff --git a/src/anim-activity/anim.py b/src/anim-activity/anim.py
index 9645545..c1229c8 100644
--- a/src/anim-activity/anim.py
+++ b/src/anim-activity/anim.py
@@ -224,11 +224,11 @@ class Gcompris_anim:
     if (keyval == gtk.keysyms.F1):
       gcompris.file_selector_save( self.gcomprisBoard,
                                    self.selector_section, self.file_type,
-                                   general_save)
+                                   general_save, self)
     elif (keyval == gtk.keysyms.F2):
       gcompris.file_selector_load( self.gcomprisBoard,
                                    self.selector_section, self.file_type,
-                                   general_restore)
+                                   general_restore, self)
     elif (keyval == gtk.keysyms.Left):
       self.timeline.previous()
       return True
@@ -375,15 +375,16 @@ class Gcompris_anim:
         gcompris.sound.play_ogg("sounds/bleep.wav")
         # Some button have instant effects
         if (self.tools[tool][0] == "SAVE"):
+          print "SAVE"
           gcompris.file_selector_save( self.gcomprisBoard,
                                        self.selector_section, self.file_type,
-                                       general_save)
+                                       general_save, self)
           return False
 
         elif (self.tools[tool][0] == "LOAD"):
           gcompris.file_selector_load( self.gcomprisBoard,
                                        self.selector_section, self.file_type,
-                                       general_restore)
+                                       general_restore, self)
           return False
 
         elif (self.tools[tool][0] == "IMAGE"):
@@ -741,12 +742,11 @@ class Gcompris_anim:
 #             GLOBAL functions
 #
 ###############################################
-def general_save(filename, filetype):
-  global fles
+def general_save(filename, filetype, fles):
   print "filename=%s filetype=%s" %(filename, filetype)
 
 
-def general_restore(filename, filetype):
+def general_restore(filename, filetype, fles):
   print "general_restore : ", filename, " type ",filetype
 
 
diff --git a/src/boards/py-mod-gcompris.c b/src/boards/py-mod-gcompris.c
index 368c1f4..cfa4044 100644
--- a/src/boards/py-mod-gcompris.c
+++ b/src/boards/py-mod-gcompris.c
@@ -528,15 +528,16 @@ py_gc_selector_images_stop(PyObject* self, PyObject* args)
 /* Some functions and variables needed to get the file selector working */
 static PyObject* pyFileSelectorCallBackFunc = NULL;
 
-void pyFileSelectorCallBack(gchar* file, char* file_type){
+void pyFileSelectorCallBack(gchar* file, char* file_type, void *user_context){
   PyObject* args;
   PyObject* result;
   if(pyFileSelectorCallBackFunc==NULL) return;
 
   /* Build arguments */
-  args  = PyTuple_New(2);
+  args  = PyTuple_New(3);
   PyTuple_SetItem(args, 0, Py_BuildValue("s", file));
   PyTuple_SetItem(args, 1, Py_BuildValue("s", file_type));
+  PyTuple_SetItem(args, 2, Py_BuildValue("O", user_context));
   result = PyObject_CallObject(pyFileSelectorCallBackFunc, args);
   if(result==NULL){
     PyErr_Print();
@@ -550,7 +551,8 @@ void pyFileSelectorCallBack(gchar* file, char* file_type){
 /* void gc_selector_file_load(GcomprisBoard *gcomprisBoard,
                                     gchar *rootdir,
 				    gchar *file_types, (A Comma separated text explaining the different file types)
-                                    FileSelectorCallBack fscb);
+                                    FileSelectorCallBack fscb,
+				    void *pyUserContext);
 */
 static PyObject*
 py_gc_selector_file_load(PyObject* self, PyObject* args){
@@ -559,14 +561,16 @@ py_gc_selector_file_load(PyObject* self, PyObject* args){
   PyObject* pyCallback;
   gchar* rootdir;
   gchar* file_types;
+  void *pyUserContext;
 
   /* Parse arguments */
   if(!PyArg_ParseTuple(args,
-		       "OssO:gc_selector_file_load",
+		       "OssOO:gc_selector_file_load",
 		       &pyGcomprisBoard,
 		       &rootdir,
 		       &file_types,
-		       &pyCallback))
+		       &pyCallback,
+		       &pyUserContext))
     return NULL;
   if(!PyCallable_Check(pyCallback)) return NULL;
   cGcomprisBoard = ((pyGcomprisBoardObject*) pyGcomprisBoard)->cdata;
@@ -574,9 +578,10 @@ py_gc_selector_file_load(PyObject* self, PyObject* args){
   /* Call the corresponding C function */
   pyFileSelectorCallBackFunc = pyCallback;
   gc_selector_file_load(cGcomprisBoard,
-                              rootdir,
-			      file_types,
-                              pyFileSelectorCallBack);
+			rootdir,
+			file_types,
+			pyFileSelectorCallBack,
+			pyUserContext);
 
   /* Create and return the result */
   Py_INCREF(Py_None);
@@ -585,9 +590,10 @@ py_gc_selector_file_load(PyObject* self, PyObject* args){
 
 
 /* void gc_selector_file_save(GcomprisBoard *gcomprisBoard,
-                                    gchar *rootdir,
-				    gchar *file_types, (A Comma separated text explaining the different file types)
-                                    FileSelectorCallBack fscb);
+                              gchar *rootdir,
+			      gchar *file_types, (A Comma separated text explaining the different file types)
+                              FileSelectorCallBack fscb,
+			      void *user_context);
 */
 static PyObject*
 py_gc_selector_file_save(PyObject* self, PyObject* args){
@@ -596,14 +602,16 @@ py_gc_selector_file_save(PyObject* self, PyObject* args){
   PyObject* pyCallback;
   gchar* rootdir;
   char* file_types;
+  void *pyUserContext;
 
   /* Parse arguments */
   if(!PyArg_ParseTuple(args,
-		       "OssO:gc_selector_file_save",
+		       "OssOO:gc_selector_file_save",
 		       &pyGcomprisBoard,
 		       &rootdir,
 		       &file_types,
-		       &pyCallback))
+		       &pyCallback,
+		       &pyUserContext))
     return NULL;
   if(!PyCallable_Check(pyCallback)) return NULL;
   cGcomprisBoard = ((pyGcomprisBoardObject*) pyGcomprisBoard)->cdata;
@@ -611,9 +619,10 @@ py_gc_selector_file_save(PyObject* self, PyObject* args){
   /* Call the corresponding C function */
   pyFileSelectorCallBackFunc = pyCallback;
   gc_selector_file_save(cGcomprisBoard,
-                              rootdir,
-			      file_types,
-                              pyFileSelectorCallBack);
+			rootdir,
+			file_types,
+			pyFileSelectorCallBack,
+			pyUserContext);
 
   /* Create and return the result */
   Py_INCREF(Py_None);
@@ -1286,9 +1295,9 @@ py_gc_board_config_spin_int(PyObject* self, PyObject* args)
   /* Parse arguments */
   if(!PyArg_ParseTuple(args, "Ossiiii:gc_board_config_radio_buttons", &py_bconf, &label, &key, &min, &max, &step, &init))
     return NULL;
-  
+
   bconf = (pyGcomprisBoardConfigObject*)py_bconf;
-  
+
   return (PyObject *)pygobject_new((GObject*) \
 				   gc_board_config_spin_int(bconf->cdata, (const gchar *)label,
 						     key,
@@ -1305,7 +1314,7 @@ static PyObject*
 py_gc_board_conf_separator(PyObject* self, PyObject* args)
 {
   PyObject *py_bconf;
-  pyGcomprisBoardConfigObject * bconf; 
+  pyGcomprisBoardConfigObject * bconf;
 
   /* Parse arguments */
   if(!PyArg_ParseTuple(args, "O:gc_board_conf_separator", &py_bconf))
@@ -1330,7 +1339,7 @@ py_gc_board_config_combo_locales(PyObject* self, PyObject* args)
   if(!PyArg_ParseTuple(args, "Os:gc_board_config_combo_locales", &py_bconf, &init))
     return NULL;
   bconf = (pyGcomprisBoardConfigObject*)py_bconf;
-  
+
   return (PyObject *)pygobject_new((GObject*) \
 				   gc_board_config_combo_locales(bconf->cdata, init));
 }
diff --git a/src/gcompris/file_selector.c b/src/gcompris/file_selector.c
index f7fbd19..44f6b13 100644
--- a/src/gcompris/file_selector.c
+++ b/src/gcompris/file_selector.c
@@ -52,7 +52,8 @@ static int		 display_file_selector(int mode,
 					       GcomprisBoard *gcomprisBoard,
 					       gchar *rootdir,
 					       gchar *file_types,
-					       FileSelectorCallBack iscb);
+					       FileSelectorCallBack iscb,
+					       void *user_context);
 static void		 entry_enter_callback( GtkWidget *widget,
 					       GtkWidget *entry );
 static gboolean		 file_selector_displayed = FALSE;
@@ -64,6 +65,7 @@ static FileSelectorCallBack  fileSelectorCallBack = NULL;
 static GtkWidget            *gtk_combo_filetypes = NULL;
 
 static gchar *current_rootdir = NULL;
+static void *current_user_context = NULL;
 static GtkWidget *widget_entry = NULL;
 
 /* Represent the limits of control area */
@@ -96,19 +98,21 @@ static guint32 directory_label_y;
  */
 
 void gc_selector_file_save (GcomprisBoard *gcomprisBoard, gchar *rootdir,
-				  gchar *file_exts,
-				  FileSelectorCallBack iscb)
+			    gchar *file_exts,
+			    FileSelectorCallBack iscb,
+			    void *user_context)
 {
   display_file_selector(MODE_SAVE, gcomprisBoard, rootdir, file_exts,
-			iscb);
+			iscb, user_context);
 }
 
 void gc_selector_file_load (GcomprisBoard *gcomprisBoard, gchar *rootdir,
-				  gchar *file_exts,
-				  FileSelectorCallBack iscb)
+			    gchar *file_exts,
+			    FileSelectorCallBack iscb,
+			    void *user_context)
 {
   display_file_selector(MODE_LOAD, gcomprisBoard, rootdir, file_exts,
-			iscb);
+			iscb, user_context);
 }
 
 /*
@@ -149,7 +153,8 @@ display_file_selector(int the_mode,
 		      GcomprisBoard *gcomprisBoard,
 		      gchar *rootdir,
 		      gchar *file_exts,
-		      FileSelectorCallBack iscb)
+		      FileSelectorCallBack iscb,
+		      void *user_context)
 {
   GooCanvasItem    *item;
   gchar		   *name = NULL;
@@ -251,7 +256,7 @@ display_file_selector(int the_mode,
 			  "#BUTTON_TEXT",
 			  (mode==MODE_LOAD ? _("LOAD") : _("SAVE")),
 			  (GtkSignalFunc) item_event_file_selector,
-			  "/cancel/");
+			  "/ok/");
 
   file_selector_displayed = TRUE;
 
@@ -259,6 +264,7 @@ display_file_selector(int the_mode,
   gc_util_create_rootdir(full_rootdir);
 
   current_rootdir = full_rootdir;
+  current_user_context = user_context;
 
   display_files(rootitem, full_rootdir);
 
@@ -599,17 +605,17 @@ item_event_file_selector (GooCanvasItem  *item,
 				     gtk_entry_get_text(GTK_ENTRY(widget_entry)),
 				     (file_type ? file_type :  "") );
 
-	  /* Callback with the proper params */
-	  fileSelectorCallBack(result, file_type);
+	    /* Callback with the proper params */
+	    fileSelectorCallBack(result, file_type, current_user_context);
 
-	  if(file_type)
-	    g_free(file_type);
+	    if(file_type)
+	      g_free(file_type);
 
-	  /* DO NOT FREE RESULT OR PYTHON SIDE WILL BE IN TROUBLE */
-	  /* ADDENDUM: DOES NOT HURT ANYMORE, WHY ? */
-	  if(result)
-	    g_free(result);
-	}
+	    /* DO NOT FREE RESULT OR PYTHON SIDE WILL BE IN TROUBLE */
+	    /* ADDENDUM: DOES NOT HURT ANYMORE, WHY ? */
+	    if(result)
+	      g_free(result);
+	  }
 	gc_selector_file_stop();
       }
       else if(!strcmp(data, "/cancel/"))
diff --git a/src/gcompris/gcompris.h b/src/gcompris/gcompris.h
index 063e428..61819f7 100644
--- a/src/gcompris/gcompris.h
+++ b/src/gcompris/gcompris.h
@@ -174,15 +174,18 @@ void		 gc_selector_images_start (GcomprisBoard *gcomprisBoard,
 						 ImageSelectorCallBack imscb);
 void		 gc_selector_images_stop (void);
 
-typedef void     (*FileSelectorCallBack)     (gchar *file, gchar *file_type); /* file_type is one string from file_types in the save */
+typedef void     (*FileSelectorCallBack)     (gchar *file, gchar *file_type,
+					      void *user_context); /* file_type is one string from file_types in the save */
 void		 gc_selector_file_load (GcomprisBoard *gcomprisBoard,
-					      gchar *rootdir,
-					      gchar *file_types, /* A Comma separated text explaining the different file types */
-					      FileSelectorCallBack fscb);
+					gchar *rootdir, /* Relative to property->user_dir */
+					gchar *file_types, /* A Comma separated text explaining the different file types */
+					FileSelectorCallBack fscb,
+					void *user_contact);
 void		 gc_selector_file_save (GcomprisBoard *gcomprisBoard,
-					      gchar *rootdir,
-					      gchar *file_types, /* A Comma separated text explaining the different file types */
-					      FileSelectorCallBack fscb);
+					gchar *rootdir, /* Relative to property->user_dir */
+					gchar *file_types, /* A Comma separated text explaining the different file types */
+					FileSelectorCallBack fscb,
+					void *user_context);
 void		 gc_selector_file_stop (void);
 
 gchar		*gc_db_get_filename();
diff --git a/src/goocanvas/src/goocanvassvg.c b/src/goocanvas/src/goocanvassvg.c
index bd6701e..21ad7e3 100644
--- a/src/goocanvas/src/goocanvassvg.c
+++ b/src/goocanvas/src/goocanvassvg.c
@@ -111,13 +111,14 @@ _search_limits(GooCanvasSvg *canvas_svg,
 }
 
 static void _init_surface(GooCanvasSvg *canvas_svg,
-			  RsvgHandle *svg_handle)
+			  RsvgHandle *svg_handle, double zoom)
 {
+  zoom *= 2;
   g_assert(svg_handle);
   RsvgDimensionData dimension_data;
   rsvg_handle_get_dimensions (svg_handle, &dimension_data);
-  canvas_svg->width = dimension_data.width;
-  canvas_svg->height = dimension_data.height;
+  canvas_svg->width = dimension_data.width * zoom;
+  canvas_svg->height = dimension_data.height * zoom;
   canvas_svg->svg_handle = svg_handle;
   g_object_ref(svg_handle);
 
@@ -213,7 +214,7 @@ goo_canvas_svg_new (GooCanvasItem      *parent,
 
   canvas_svg = (GooCanvasSvg*) item;
   if(svg_handle)
-    _init_surface(canvas_svg, svg_handle);
+    _init_surface(canvas_svg, svg_handle, 1.0);
 
   if (parent)
     {
@@ -300,7 +301,7 @@ goo_canvas_svg_set_common_property (GObject              *object,
       svg_handle = g_value_get_object (value);
       if(canvas_svg->svg_handle)
       g_object_unref (canvas_svg->svg_handle);
-      _init_surface(canvas_svg, svg_handle);
+      _init_surface(canvas_svg, svg_handle, 1.0);
       break;
     case PROP_SVG_ID:
       if(canvas_svg->id)
@@ -310,7 +311,7 @@ goo_canvas_svg_set_common_property (GObject              *object,
       else
         canvas_svg->id = g_value_dup_string(value);
       if (canvas_svg->svg_handle)
-	_init_surface(canvas_svg, canvas_svg->svg_handle);
+	_init_surface(canvas_svg, canvas_svg->svg_handle, 1.0);
       break;
     case PROP_AUTOCROP:
       canvas_svg->autocrop = g_value_get_boolean (value);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]