Enlightenment CVS committal

Author  : barbieri
Project : e17
Module  : proto

Dir     : e17/proto/python-efl/python-edje/edje


Modified Files:
        edje.c_edje.pxd edje.c_edje_object.pxi 


Log Message:
Implement edje messages.

===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-edje/edje/edje.c_edje.pxd,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- edje.c_edje.pxd     6 May 2007 17:48:00 -0000       1.2
+++ edje.c_edje.pxd     7 Jul 2007 00:42:01 -0000       1.3
@@ -238,3 +238,14 @@
     cdef object _message_handler_cb
     cdef object _signal_callbacks
 
+    cdef void message_send_int(self, int id, int data)
+    cdef void message_send_float(self, int id, float data)
+    cdef void message_send_str(self, int id, char *data)
+    cdef void message_send_str_set(self, int id, data)
+    cdef void message_send_str_int(self, int id, char *s, int i)
+    cdef void message_send_str_float(self, int id, char *s, float f)
+    cdef void message_send_str_int_set(self, int id, char *s, data)
+    cdef void message_send_str_float_set(self, int id, char *s, data)
+    cdef void message_send_int_set(self, int id, data)
+    cdef void message_send_float_set(self, int id, data)
+    cdef message_send_set(self, int id, data)
===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-edje/edje/edje.c_edje_object.pxi,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- edje.c_edje_object.pxi      8 May 2007 19:03:38 -0000       1.6
+++ edje.c_edje_object.pxi      7 Jul 2007 00:42:01 -0000       1.7
@@ -273,8 +273,176 @@
     def part_drag_page(self, char *part, double dx, double dy):
         edje_object_part_drag_page(self.obj, part, dx, dy)
 
-#    def message_send(self, int type, int id, **kargs):
-#        edje_object_message_send(self.obj, type, id, msg)
+    cdef void message_send_int(self, int id, int data):
+        cdef Edje_Message_Int m
+        m.val = data
+        edje_object_message_send(self.obj, EDJE_MESSAGE_INT, id, <void*>&m)
+
+    cdef void message_send_float(self, int id, float data):
+        cdef Edje_Message_Float m
+        m.val = data
+        edje_object_message_send(self.obj, EDJE_MESSAGE_FLOAT, id, <void*>&m)
+
+    cdef void message_send_str(self, int id, char *data):
+        cdef Edje_Message_String m
+        m.str = data
+        edje_object_message_send(self.obj, EDJE_MESSAGE_STRING, id, <void*>&m)
+
+    cdef void message_send_str_set(self, int id, data):
+        cdef int count, i
+        cdef Edje_Message_String_Set *m
+
+        count = len(data)
+        m = <Edje_Message_String_Set*>python.PyMem_Malloc(
+            sizeof(Edje_Message_String_Set) + (count - 1) * sizeof(char *))
+
+        m.count = count
+        i = 0
+        for s in data:
+            m.str[i] = s
+            i = i + 1
+
+        edje_object_message_send(self.obj, EDJE_MESSAGE_STRING_SET, id,
+                                 <void*>m)
+        python.PyMem_Free(m)
+
+    cdef void message_send_str_int(self, int id, char *s, int i):
+        cdef Edje_Message_String_Int m
+        m.str = s
+        m.val = i
+        edje_object_message_send(self.obj, EDJE_MESSAGE_STRING_INT, id,
+                                 <void*>&m)
+
+    cdef void message_send_str_float(self, int id, char *s, float f):
+        cdef Edje_Message_String_Float m
+        m.str = s
+        m.val = f
+        edje_object_message_send(self.obj, EDJE_MESSAGE_STRING_FLOAT, id,
+                                 <void*>&m)
+
+    cdef void message_send_str_int_set(self, int id, char *s, data):
+        cdef int count, i
+        cdef Edje_Message_String_Int_Set *m
+
+        count = len(data)
+        m = <Edje_Message_String_Int_Set*>python.PyMem_Malloc(
+            sizeof(Edje_Message_String_Int_Set) + (count - 1) * sizeof(int))
+
+        m.str = s
+        m.count = count
+        i = 0
+        for f in data:
+            m.val[i] = f
+            i = i + 1
+
+        edje_object_message_send(self.obj, EDJE_MESSAGE_STRING_INT_SET, id,
+                                 <void*>m)
+        python.PyMem_Free(m)
+
+    cdef void message_send_str_float_set(self, int id, char *s, data):
+        cdef int count, i
+        cdef Edje_Message_String_Float_Set *m
+
+        count = len(data)
+        m = <Edje_Message_String_Float_Set*>python.PyMem_Malloc(
+            sizeof(Edje_Message_String_Float_Set) +
+            (count - 1) * sizeof(double))
+
+        m.str = s
+        m.count = count
+        i = 0
+        for f in data:
+            m.val[i] = f
+            i = i + 1
+
+        edje_object_message_send(self.obj, EDJE_MESSAGE_STRING_FLOAT_SET, id,
+                                 <void*>m)
+        python.PyMem_Free(m)
+
+    cdef void message_send_int_set(self, int id, data):
+        cdef int count, i
+        cdef Edje_Message_Int_Set *m
+
+        count = len(data)
+        m = <Edje_Message_Int_Set*>python.PyMem_Malloc(
+            sizeof(Edje_Message_Int_Set) + (count - 1) * sizeof(int))
+
+        m.count = count
+        i = 0
+        for f in data:
+            m.val[i] = f
+            i = i + 1
+
+        edje_object_message_send(self.obj, EDJE_MESSAGE_INT_SET, id,
+                                 <void*>m)
+        python.PyMem_Free(m)
+
+    cdef void message_send_float_set(self, int id, data):
+        cdef int count, i
+        cdef Edje_Message_Float_Set *m
+
+        count = len(data)
+        m = <Edje_Message_Float_Set*>python.PyMem_Malloc(
+            sizeof(Edje_Message_Float_Set) + (count - 1) * sizeof(double))
+
+        m.count = count
+        i = 0
+        for f in data:
+            m.val[i] = f
+            i = i + 1
+
+        edje_object_message_send(self.obj, EDJE_MESSAGE_FLOAT_SET, id,
+                                 <void*>m)
+        python.PyMem_Free(m)
+
+    cdef message_send_set(self, int id, data):
+        second_item = data[1]
+        item_type = type(second_item)
+        for e in data[2:]:
+            if type(e) != item_type:
+                raise TypeError("every element of data should be the "
+                                "same type '%s'" % item_type.__name__)
+        head = data[0]
+        if isinstance(head, (int, long)):
+            self.message_send_int_set(id, data)
+        elif isinstance(head, float):
+            self.message_send_float_set(id, data)
+        elif isinstance(head, basestring):
+            if issubclass(item_type, basestring):
+                self.message_send_str_set(id, data)
+            elif item_type == int or item_type == long:
+                if len(data) == 2:
+                    self.message_send_str_int(id, head, second_item)
+                else:
+                    self.message_send_str_int_set(id, head, data[2:])
+            elif item_type == float:
+                if len(data) == 2:
+                    self.message_send_str_float(id, head, second_item)
+                else:
+                    self.message_send_str_float_set(id, head, data[2:])
+
+    def message_send(self, int id, data):
+        if isinstance(data, (long, int)):
+            self.message_send_int(id, data)
+        elif isinstance(data, float):
+            self.message_send_float(id, data)
+        elif isinstance(data, basestring):
+            self.message_send_str(id, data)
+        elif isinstance(data, (tuple, list)):
+            if len(data) < 1:
+                return
+            if len(data) < 2:
+                self.message_send(id, data[0])
+                return
+
+            item_type = type(data[0])
+            if item_type not in (long, int, float, str, unicode):
+                raise TypeError("invalid message list type '%s'" %
+                                item_type.__name__)
+
+            self.message_send_set(id, data)
+        else:
+            raise TypeError("invalid message type '%s'" % type(data).__name__)
 
     def message_handler_set(self, func, *args, **kargs):
         if func is None:



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to