move elementary to trunk base. out of TMP/st.
[framework/uifw/elementary.git] / src / edje_externals / elm_button.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Button
4 {
5    Elm_Params base;
6    const char *label;
7    Evas_Object *icon;
8 } Elm_Params_Button;
9
10 static void
11 external_button_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
12 {
13    const Elm_Params_Button *p;
14
15    if (to_params) p = to_params;
16    else if (from_params) p = from_params;
17    else return;
18
19    if (p->label)
20      elm_button_label_set(obj, p->label);
21    if (p->icon)
22      elm_button_icon_set(obj, p->icon);
23 }
24
25 static Eina_Bool
26 external_button_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
27 {
28    if (!strcmp(param->name, "label"))
29      {
30         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
31           {
32              elm_button_label_set(obj, param->s);
33              return EINA_TRUE;
34           }
35      }
36    else if (!strcmp(param->name, "icon"))
37      {
38         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
39           {
40              Evas_Object *icon = external_common_param_icon_get(obj, param);
41              if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
42              elm_button_icon_set(obj, icon);
43              return EINA_TRUE;
44           }
45      }
46
47    ERR("unknown parameter '%s' of type '%s'",
48        param->name, edje_external_param_type_str(param->type));
49
50    return EINA_FALSE;
51 }
52
53 static Eina_Bool
54 external_button_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
55 {
56    if (!strcmp(param->name, "label"))
57      {
58         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
59           {
60              param->s = elm_button_label_get(obj);
61              return EINA_TRUE;
62           }
63      }
64    else if (!strcmp(param->name, "icon"))
65      {
66         /* not easy to get icon name back from live object */
67         return EINA_FALSE;
68      }
69
70    ERR("unknown parameter '%s' of type '%s'",
71        param->name, edje_external_param_type_str(param->type));
72
73    return EINA_FALSE;
74 }
75
76 static void *
77 external_button_params_parse(void *data __UNUSED__, Evas_Object *obj, const Eina_List *params)
78 {
79    Elm_Params_Button *mem;
80    Edje_External_Param *param;
81    const Eina_List *l;
82
83    mem = ELM_NEW(Elm_Params_Button);
84    if (!mem)
85      return NULL;
86
87    external_common_icon_param_parse(&mem->icon, obj, params);
88
89    EINA_LIST_FOREACH(params, l, param)
90      {
91         if (!strcmp(param->name, "label"))
92           {
93              mem->label = eina_stringshare_add(param->s);
94              break;
95           }
96      }
97
98    return mem;
99 }
100
101 static Evas_Object *external_button_content_get(void *data __UNUSED__,
102                 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
103 {
104         ERR("No content.");
105         return NULL;
106 }
107
108 static void
109 external_button_params_free(void *params)
110 {
111    Elm_Params_Button *mem = params;
112    if (mem->label)
113       eina_stringshare_del(mem->label);
114    free(params);
115 }
116
117 static Edje_External_Param_Info external_button_params[] = {
118    DEFINE_EXTERNAL_COMMON_PARAMS,
119    EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
120    EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
121    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
122 };
123
124 DEFINE_EXTERNAL_ICON_ADD(button, "button");
125 DEFINE_EXTERNAL_TYPE_SIMPLE(button, "Button");