2bc49e0369538dbe8d87b746d9c80a5f7fa5f98d
[framework/uifw/elementary.git] / src / edje_externals / elm_hoversel.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Hoversel
4 {
5    Elm_Params base;
6    Evas_Object *icon;
7    Eina_Bool horizontal:1;
8    Eina_Bool horizontal_exists:1;
9 } Elm_Params_Hoversel;
10
11 static void
12 external_hoversel_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
13 {
14    const Elm_Params_Hoversel *p;
15
16    if (to_params) p = to_params;
17    else if (from_params) p = from_params;
18    else return;
19
20    if (p->base.label)
21      elm_hoversel_label_set(obj, p->base.label);
22    if (p->icon)
23      elm_hoversel_icon_set(obj, p->icon);
24    if (p->horizontal_exists)
25       elm_hoversel_horizontal_set(obj, p->horizontal);
26 }
27
28 static Eina_Bool
29 external_hoversel_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
30 {
31    if (!strcmp(param->name, "label"))
32      {
33         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
34           {
35              elm_hoversel_label_set(obj, param->s);
36              return EINA_TRUE;
37           }
38      }
39    else if (!strcmp(param->name, "icon"))
40      {
41         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
42           {
43              Evas_Object *icon = external_common_param_icon_get(obj, param);
44              if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
45              elm_hoversel_icon_set(obj, icon);
46              return EINA_TRUE;
47           }
48      }
49    else if (!strcmp(param->name, "horizontal"))
50      {
51         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
52           {
53              elm_hoversel_horizontal_set(obj, param->i);
54              return EINA_TRUE;
55           }
56      }
57
58    ERR("unknown parameter '%s' of type '%s'",
59        param->name, edje_external_param_type_str(param->type));
60
61    return EINA_FALSE;
62 }
63
64 static Eina_Bool
65 external_hoversel_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
66 {
67    if (!strcmp(param->name, "label"))
68      {
69         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
70           {
71              param->s = elm_hoversel_label_get(obj);
72              return EINA_TRUE;
73           }
74      }
75    else if (!strcmp(param->name, "icon"))
76      {
77         /* not easy to get icon name back from live object */
78         return EINA_FALSE;
79      }
80    else if (!strcmp(param->name, "horizontal"))
81      {
82         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
83           {
84              param->i = elm_hoversel_horizontal_get(obj);
85              return EINA_TRUE;
86           }
87      }
88
89    ERR("unknown parameter '%s' of type '%s'",
90        param->name, edje_external_param_type_str(param->type));
91
92    return EINA_FALSE;
93 }
94
95 static void *
96 external_hoversel_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
97 {
98    Elm_Params_Hoversel *mem;
99    Edje_External_Param *param;
100    const Eina_List *l;
101
102    mem = external_common_params_parse(Elm_Params_Hoversel, data, obj, params);
103    if (!mem)
104      return NULL;
105
106    external_common_icon_param_parse(&mem->icon, obj, params);
107
108    EINA_LIST_FOREACH(params, l, param)
109      {
110         if (!strcmp(param->name, "horizontal"))
111           {
112              mem->horizontal = !!param->i;
113              mem->horizontal_exists = EINA_TRUE;
114           }
115      }
116
117    return mem;
118 }
119
120 static Evas_Object *external_hoversel_content_get(void *data __UNUSED__,
121                 const Evas_Object *obj, const char *content)
122 {
123         ERR("so content");
124         return NULL;
125 }
126
127  static void
128 external_hoversel_params_free(void *params)
129 {
130    Elm_Params_Hoversel *mem = params;
131
132    external_common_params_free(params);
133 }
134
135 static Edje_External_Param_Info external_hoversel_params[] = {
136    DEFINE_EXTERNAL_COMMON_PARAMS,
137    EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
138    EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"),
139    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
140 };
141
142 DEFINE_EXTERNAL_ICON_ADD(hoversel, "hoversel");
143 DEFINE_EXTERNAL_TYPE_SIMPLE(hoversel, "Hoversel");