Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Edje.h edje_main.c edje_private.h 


Log Message:


more fixme's added, more fixed up. external callbakcs are now in. calling
application can emit signals now too.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- Edje.h      19 Jun 2003 14:43:49 -0000      1.3
+++ Edje.h      21 Jun 2003 02:51:01 -0000      1.4
@@ -16,6 +16,9 @@
    double       edje_frametime_get(void);
    Evas_Object *edje_add(Evas *evas);
    void         edje_file_set(Evas_Object *o, const char *file, const char *part);
+   void         edje_signal_callback_add(Evas_Object *o, const char *emission, const 
char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const 
char *source), void *data);
+   void        *edje_signal_callback_del(Evas_Object *o, const char *emission, const 
char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const 
char *source));
+   void         edje_signal_emit(Evas_Object *o, const char *emission, const char 
*source);
        
 #ifdef __cplusplus
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_main.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- edje_main.c 20 Jun 2003 13:41:00 -0000      1.12
+++ edje_main.c 21 Jun 2003 02:51:01 -0000      1.13
@@ -1,15 +1,20 @@
 #include "Edje.h"
 #include "edje_private.h"
 
-/* FIXME: ? somehow handle double click? */
+/* FIXME: edje test need to make in-canvas move & resize controls on edjes */
+/* FIXME: edje test needs to load multiple edjes */
+/* FIXME: sub objects need to be added to smart object */
+/* FIXME: add clicked signal for a mouse up thats a real clicked */
 /* FIXME: free stuff - no more leaks */
-/* FIXME: ? add numeric params to conditions for progs (ranges etc.) */
-/* FIXME: dragables havwe to work */
+/* FIXME: dragables have to work */
 /* FIXME: drag start/top signals etc. */
-/* FIXME: app has to be able to have callbacks called on signal emits */
-/* FIXME: app has to be able to emit signals */
 /* FIXME: named parts need to be able to be "replaced" with new evas objects */
 /* FIXME: need to be able to calculate min & max size of a whole edje */
+/* FIXME: on load don't segv on errors */
+/* FIXME: add code to list collections in an eet */
+
+/* FIXME: ? somehow handle double click? */
+/* FIXME: ? add numeric params to conditions for progs (ranges etc.) */
 
 Edje      *_edje_fetch(Evas_Object *obj);
 Edje      *_edje_add(Evas_Object *obj);
@@ -134,8 +139,8 @@
    
    ed = _edje_fetch(obj);
    if (!ed) return;
-   if (!file) return;
-   if (!part) return;
+   if (!file) file = "";
+   if (!part) part = "";
    if (((ed->path) && (!strcmp(file, ed->path))) &&
        (ed->part) && (!strcmp(part, ed->part)))
      return;
@@ -214,6 +219,64 @@
      }
 }
 
+void
+edje_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, 
void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), 
void *data)
+{
+   Edje *ed;
+   Edje_Signal_Callback *escb;
+   
+   if ((!emission) || (!source) || (!func)) return;
+   ed = _edje_fetch(obj);
+   if (!ed) return;
+   escb = calloc(1, sizeof(Edje_Signal_Callback));
+   escb->signal = strdup(emission);
+   escb->source = strdup(source);
+   escb->func = func;
+   escb->data = data;
+   ed->callbacks = evas_list_append(ed->callbacks, escb);
+}
+
+void *
+edje_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, 
void (*func) (void *data, Evas_Object *o, const char *emission, const char *source))
+{
+   Edje *ed;
+   Evas_List *l;
+   
+   if ((!emission) || (!source) || (!func)) return NULL;
+   ed = _edje_fetch(obj);
+   if (!ed) return;
+   for (l = ed->callbacks; l; l = l->next)
+     {
+       Edje_Signal_Callback *escb;
+       
+       escb = l->data;
+       if ((escb->func == func) && 
+           (!strcmp(escb->signal, emission)) &&
+           (!strcmp(escb->source, source)))
+         {
+            void *data;
+            
+            data = escb->data;
+            free(escb->signal);
+            free(escb->source);
+            free(escb);
+            return data;
+         }
+     }
+   return NULL;
+}
+
+void
+edje_signal_emit(Evas_Object *obj, const char *emission, const char *source)
+{
+   Edje *ed;
+
+   if ((!emission) || (!source)) return;
+   ed = _edje_fetch(obj);
+   if (!ed) return;
+   _edje_emit(ed, emission, source);
+}
+
 /*** internal calls ***/
 
 /* utility functions we will use a lot */
@@ -254,6 +317,7 @@
    if (ed->path) free(ed->path);
    if (ed->part) free(ed->part);
    evas_object_del(ed->clipper);
+   printf("FIXME: leak: ed->callbacks\n");
    free(ed);
 }
 
@@ -723,6 +787,15 @@
                 (_edje_glob_match(ee->source, pr->source)))
               _edje_program_run(ed, pr);
          }
+       for (l = ed->callbacks; l; l = l->next)
+         {
+            Edje_Signal_Callback *escb;
+            
+            escb = l->data;
+            if ((_edje_glob_match(ee->signal, escb->signal)) &&
+                (_edje_glob_match(ee->source, escb->source)))
+              escb->func(escb->data, ed->obj, ee->signal, ee->source);
+         }
        free(ee->signal);
        free(ee->source);
        free(ee);
@@ -1555,6 +1628,7 @@
    ed = _edje_add(obj);
    if (!ed) return;
    evas_object_smart_data_set(obj, ed);
+   ed->obj = obj;
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- edje_private.h      20 Jun 2003 13:41:00 -0000      1.13
+++ edje_private.h      21 Jun 2003 02:51:01 -0000      1.14
@@ -293,6 +293,7 @@
 typedef struct _Edje Edje;
 typedef struct _Edje_Real_Part Edje_Real_Part;
 typedef struct _Edje_Running_Program Edje_Running_Program;
+typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
 typedef struct _Edje_Calc_Params Edje_Calc_Params;
 typedef struct _Edje_Emission Edje_Emission;
 
@@ -305,11 +306,13 @@
    double                x, y, w, h;
    unsigned char         dirty : 1;
    Evas                 *evas; /* the evas this edje belongs to */
+   Evas_Object          *obj; /* the smart object */
    Evas_Object          *clipper; /* a big rect to clip this edje to */
    Edje_File            *file; /* the file the data comes form */
    Edje_Part_Collection *collection; /* the description being used */
    Evas_List            *parts; /* private list of parts */
    Evas_List            *actions; /* currently running actions */   
+   Evas_List            *callbacks;
 };
 
 struct _Edje_Real_Part
@@ -343,6 +346,14 @@
    Edje           *edje;
    Edje_Program   *program;
    double          start_time;
+};
+
+struct _Edje_Signal_Callback
+{
+   char  *signal;
+   char  *source;
+   void (*func) (void *data, Evas_Object *o, const char *emission, const char 
*source);
+   void  *data;
 };
 
 struct _Edje_Calc_Params




-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to