Elementary:
authorJonathan Atton <jonathan.atton@gmail.com>
Sun, 1 Aug 2010 17:29:20 +0000 (17:29 +0000)
committerJonathan Atton <jonathan.atton@gmail.com>
Sun, 1 Aug 2010 17:29:20 +0000 (17:29 +0000)
- we can get the content of a external object
- a signal can be send to the content of a external object

SVN revision: 50731

30 files changed:
src/edje_externals/elm.c
src/edje_externals/elm_anchorblock.c
src/edje_externals/elm_anchorview.c
src/edje_externals/elm_bubble.c
src/edje_externals/elm_button.c
src/edje_externals/elm_check.c
src/edje_externals/elm_clock.c
src/edje_externals/elm_fileselector.c
src/edje_externals/elm_fileselector_button.c
src/edje_externals/elm_genlist.c
src/edje_externals/elm_hoversel.c
src/edje_externals/elm_list.c
src/edje_externals/elm_map.c
src/edje_externals/elm_notepad.c
src/edje_externals/elm_notify.c
src/edje_externals/elm_panes.c
src/edje_externals/elm_photocam.c
src/edje_externals/elm_progressbar.c
src/edje_externals/elm_radio.c
src/edje_externals/elm_scrolled_entry.c
src/edje_externals/elm_slider.c
src/edje_externals/elm_slideshow.c
src/edje_externals/elm_spinner.c
src/edje_externals/elm_thumb.c
src/edje_externals/elm_toggle.c
src/edje_externals/elm_toolbar.c
src/edje_externals/private.h
src/lib/Elementary.h.in
src/lib/elm_notify.c
src/lib/elm_panes.c

index b2a815e..af91e60 100644 (file)
@@ -4,9 +4,39 @@
 int _elm_log_dom = -1;
 
 void
-external_signal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *signal, const char *source)
+external_signal(void *data __UNUSED__, Evas_Object *obj, const char *signal, const char *source)
 {
-   printf("External Signal received: '%s' '%s'\n", signal, source);
+       char *_signal = strdup(signal);
+       char *p = _signal;
+       Evas_Object *content;
+
+       while((*p!='\0') && (*p!=']'))
+               p++;
+
+
+       if((*p=='\0') || (*(p+1)!=':'))
+       {
+               ERR("Invalid External Signal received: '%s' '%s'\n", signal, source);
+               free(_signal);
+               return ;
+       }
+
+       *p = '\0';
+       p+=2; //jump ']' and ':'
+
+       Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type");
+       if (!type->content_get)
+       {
+               ERR("external type '%s' from module '%s' does not provide content_get()",
+                               type->module_name, type->module);
+               free(_signal);
+               return ;
+       }
+
+       content = type->content_get(type->data, obj, _signal);
+       free(_signal);
+       if(content)
+               edje_object_signal_emit(content, signal + (p - _signal), source);
 }
 
 const char *
index cb5dc91..0e0c2eb 100644 (file)
@@ -76,6 +76,13 @@ external_anchorblock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUS
    return mem;
 }
 
+static Evas_Object *external_anchorblock_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_anchorblock_params_free(void *params)
 {
index 88ebdff..f4f3d9a 100644 (file)
@@ -76,6 +76,13 @@ external_anchorview_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSE
    return mem;
 }
 
+static Evas_Object *external_anchorview_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_anchorview_params_free(void *params)
 {
index 76eae78..f8f0f2d 100644 (file)
@@ -130,6 +130,13 @@ external_bubble_params_parse(void *data, Evas_Object *obj, const Eina_List *para
    return mem;
 }
 
+static Evas_Object *external_bubble_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_bubble_params_free(void *params)
 {
index 5b8395e..329cf45 100644 (file)
@@ -86,6 +86,13 @@ external_button_params_parse(void *data, Evas_Object *obj, const Eina_List *para
    return mem;
 }
 
+static Evas_Object *external_button_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_button_params_free(void *params)
 {
index ac167ca..89e4930 100644 (file)
@@ -114,6 +114,13 @@ external_check_params_parse(void *data, Evas_Object *obj, const Eina_List *param
    return mem;
 }
 
+static Evas_Object *external_check_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_check_params_free(void *params)
 {
index 74f0818..13bda6d 100644 (file)
@@ -210,6 +210,13 @@ external_clock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
    return mem;
 }
 
+static Evas_Object *external_clock_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_clock_params_free(void *params)
 {
index 571cd13..c955bc4 100644 (file)
@@ -155,6 +155,13 @@ external_fileselector_params_parse(void *data __UNUSED__, Evas_Object *obj __UNU
    return mem;
 }
 
+static Evas_Object *external_fileselector_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_fileselector_params_free(void *params)
 {
index f4239d3..f17e6bd 100644 (file)
@@ -215,6 +215,13 @@ external_fileselector_button_params_parse(void *data, Evas_Object *obj, const Ei
    return mem;
 }
 
+static Evas_Object *external_fileselector_button_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
  static void
 external_fileselector_button_params_free(void *params)
 {
index bc3f634..a8b2405 100644 (file)
@@ -297,6 +297,13 @@ external_genlist_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__
    return mem;
 }
 
+static Evas_Object *external_genlist_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_genlist_params_free(void *params)
 {
index 41f0f11..2bc49e0 100644 (file)
@@ -117,6 +117,13 @@ external_hoversel_params_parse(void *data, Evas_Object *obj, const Eina_List *pa
    return mem;
 }
 
+static Evas_Object *external_hoversel_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
  static void
 external_hoversel_params_free(void *params)
 {
index 2f6d193..8f782af 100644 (file)
@@ -242,6 +242,13 @@ external_list_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, c
    return mem;
 }
 
+static Evas_Object *external_list_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_list_params_free(void *params)
 {
index 13c0592..3077cf2 100644 (file)
@@ -172,6 +172,13 @@ external_map_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, co
    return mem;
 }
 
+static Evas_Object *external_map_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_map_params_free(void *params)
 {
index 7eaef04..a99eeb6 100644 (file)
@@ -37,6 +37,13 @@ external_notepad_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__
    return NULL;
 }
 
+static Evas_Object *external_notepad_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_notepad_params_free(void *params)
 {
index 54db415..5ec004b 100644 (file)
@@ -186,6 +186,16 @@ static void * external_notify_params_parse(void *data, Evas_Object *obj,
        return mem;
 }
 
+static Evas_Object *external_notify_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       if (!strcmp(content, "content"))
+               return elm_notify_content_get(obj);
+
+       ERR("unknown content '%s'", content);
+       return NULL;
+}
+
 static void external_notify_params_free(void *params) {
        Elm_Params_Notify *mem = params;
 
index e4d1817..336e7e9 100644 (file)
@@ -140,6 +140,20 @@ static void * external_panes_params_parse(void *data, Evas_Object *obj,
        return mem;
 }
 
+static Evas_Object *external_panes_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       if (!strcmp(content, "left"))
+               return elm_panes_content_left_get(obj);
+       else if (!strcmp(content, "right"))
+               return elm_panes_content_right_get(obj);
+
+       ERR("unknown content '%s'", content);
+
+       return NULL;
+}
+
+
 static void external_panes_params_free(void *params) {
        Elm_Params_Panes *mem = params;
 
index 4cb821d..f4b942f 100644 (file)
@@ -175,6 +175,13 @@ external_photocam_params_parse(void *data, Evas_Object *obj, const Eina_List *pa
    return mem;
 }
 
+static Evas_Object *external_photocam_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_photocam_params_free(void *params)
 {
index c289952..295ce61 100644 (file)
@@ -213,6 +213,13 @@ external_progressbar_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUS
    return mem;
 }
 
+static Evas_Object *external_progressbar_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_progressbar_params_free(void *params)
 {
index bb1298a..ab847e4 100644 (file)
@@ -141,6 +141,13 @@ external_radio_params_parse(void *data, Evas_Object *obj, const Eina_List *param
    return mem;
 }
 
+static Evas_Object *external_radio_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_radio_params_free(void *params)
 {
index 446106a..f81ca62 100644 (file)
@@ -153,6 +153,13 @@ external_scrolled_entry_params_parse(void *data __UNUSED__, Evas_Object *obj __U
    return mem;
 }
 
+static Evas_Object *external_scrolled_entry_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_scrolled_entry_params_free(void *params)
 {
index 2c82394..ba76cd4 100644 (file)
@@ -296,6 +296,13 @@ external_slider_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
    return mem;
 }
 
+static Evas_Object *external_slider_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_slider_params_free(void *params)
 {
index 783fa85..23c50a8 100644 (file)
@@ -155,6 +155,13 @@ external_slideshow_params_parse(void *data, Evas_Object *obj, const Eina_List *p
    return mem;
 }
 
+static Evas_Object *external_slideshow_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_slideshow_params_free(void *params)
 {
index ba86ea0..e63e45b 100644 (file)
@@ -211,6 +211,13 @@ external_spinner_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__
    return mem;
 }
 
+static Evas_Object *external_spinner_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_spinner_params_free(void *params)
 {
index a548cbf..311ecc9 100644 (file)
@@ -104,6 +104,13 @@ external_thumb_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
    return mem;
 }
 
+static Evas_Object *external_thumb_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_thumb_params_free(void *params)
 {
index c226b43..90c4d2c 100644 (file)
@@ -176,6 +176,13 @@ external_toggle_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
    return mem;
 }
 
+static Evas_Object *external_toggle_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_toggle_params_free(void *params)
 {
index a41cb69..27c6f24 100644 (file)
@@ -103,6 +103,13 @@ external_toolbar_params_parse(void *data, Evas_Object *obj, const Eina_List *par
    return mem;
 }
 
+static Evas_Object *external_toolbar_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+       ERR("so content");
+       return NULL;
+}
+
 static void
 external_toolbar_params_free(void *params)
 {
index 45591b1..a4b5a88 100644 (file)
@@ -39,6 +39,7 @@ const Edje_External_Type external_##type_name##_type = {\
     .params_parse = external_##type_name##_params_parse,\
     .params_free = external_##type_name##_params_free,  \
     .label_get = external_##type_name##_label_get,      \
+    .content_get = external_##type_name##_content_get,  \
     .description_get = NULL,                            \
     .icon_add = external_##type_name##_icon_add,        \
     .preview_add = NULL,                                \
index 57c1172..c935880 100644 (file)
@@ -685,6 +685,7 @@ extern "C" {
    EAPI Evas_Object *elm_notify_add(Evas_Object *parent);
    EAPI void         elm_notify_content_set(Evas_Object *obj, Evas_Object *content);
    EAPI Evas_Object *elm_notify_content_unset(Evas_Object *obj);
+   EAPI Evas_Object *elm_notify_content_get(const Evas_Object *obj);
    EAPI void        elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent);
    EAPI void        elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient);
    EAPI Elm_Notify_Orient          elm_notify_orient_get(const Evas_Object *obj);
@@ -1506,6 +1507,8 @@ extern "C" {
    EAPI Evas_Object          *elm_panes_add(Evas_Object *parent);
    EAPI void                  elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content);
    EAPI void                  elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content);
+   EAPI Evas_Object             *elm_panes_content_left_get(const Evas_Object *obj);
+   EAPI Evas_Object             *elm_panes_content_right_get(const Evas_Object *obj);
    EAPI double               elm_panes_content_left_size_get(const Evas_Object *obj);
    EAPI void                 elm_panes_content_left_size_set(Evas_Object *obj, double size);
    EAPI void                 elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
index e92532f..9a026dc 100644 (file)
@@ -393,6 +393,25 @@ elm_notify_content_unset(Evas_Object *obj)
 }
 
 /**
+ * Return the content of the notify widget
+ *
+ * @param obj The notify object
+ * @return The content that is being used
+ *
+ * @ingroup Notify
+ */
+EAPI Evas_Object *
+elm_notify_content_get(const Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Evas_Object *content;
+   if (!wd) return NULL;
+   if (!wd->content) return NULL;
+   return wd->content;
+}
+
+/**
  * Set the notify parent
  *
  * @param obj The notify object
index e5b6edc..e880f45 100644 (file)
@@ -220,6 +220,21 @@ EAPI void elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content)
      }
 }
 
+
+EAPI Evas_Object
+*elm_panes_content_left_get(const Evas_Object *obj)
+{
+       Widget_Data *wd = elm_widget_data_get(obj);
+       return wd->contents.left;
+}
+
+EAPI Evas_Object
+*elm_panes_content_right_get(const Evas_Object *obj)
+{
+       Widget_Data *wd = elm_widget_data_get(obj);
+       return wd->contents.right;
+}
+
 EAPI double elm_panes_content_left_size_get(const Evas_Object *obj)
 {
    Widget_Data *wd = elm_widget_data_get(obj);