Merge "[Copy&Paste] remove "Paste" button when CBHM has no item"
[framework/uifw/elementary.git] / src / edje_externals / elm_frame.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Frame
4 {
5    Elm_Params base;
6    const char *label;
7    Evas_Object *content; /* part name whose obj is to be set as content */
8 } Elm_Params_Frame;
9
10 static void
11 external_frame_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
12 {
13    const Elm_Params_Frame *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) elm_object_text_set(obj, p->label);
20    if (p->content) elm_object_content_set(obj, p->content);
21 }
22
23 static Eina_Bool
24 external_frame_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
25 {
26    if (!strcmp(param->name, "label"))
27      {
28         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
29           {
30              elm_object_text_set(obj, param->s);
31              return EINA_TRUE;
32           }
33      }
34    else if (!strcmp(param->name, "content"))
35      {
36         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
37           {
38              Evas_Object *content =
39                 external_common_param_edje_object_get(obj,param);
40              if ((strcmp(param->s, "")) && (!content)) return EINA_FALSE;
41              elm_object_content_set(obj, content);
42              return EINA_TRUE;
43           }
44      }
45
46    ERR("unknown parameter '%s' of type '%s'",
47        param->name, edje_external_param_type_str(param->type));
48
49    return EINA_FALSE;
50 }
51
52 static Eina_Bool
53 external_frame_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
54 {
55    if (!strcmp(param->name, "label"))
56      {
57         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
58           {
59              param->s = elm_object_text_get(obj);
60              return EINA_TRUE;
61           }
62      }
63    else if (!strcmp(param->name, "content"))
64      {
65         /* not easy to get content name back from live object */
66         return EINA_FALSE;
67      }
68
69    ERR("unknown parameter '%s' of type '%s'",
70        param->name, edje_external_param_type_str(param->type));
71
72    return EINA_FALSE;
73 }
74
75 static void *
76 external_frame_params_parse(void *data __UNUSED__, Evas_Object *obj, const Eina_List *params)
77 {
78    Elm_Params_Frame *mem;
79    Edje_External_Param *param;
80    const Eina_List *l;
81
82    mem = calloc(1, sizeof(Elm_Params_Frame));
83    if (!mem)
84      return NULL;
85
86    EINA_LIST_FOREACH(params, l, param)
87      {
88         if (!strcmp(param->name, "content"))
89           mem->content = external_common_param_edje_object_get(obj, param);
90         else if (!strcmp(param->name, "label"))
91           mem->label = eina_stringshare_add(param->s);
92      }
93
94    return mem;
95 }
96
97 static Evas_Object *external_frame_content_get(void *data __UNUSED__,
98                                                const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
99 {
100    if (!strcmp(content, "content"))
101      return elm_object_content_get(obj);
102
103    ERR("unknown content '%s'", content);
104    return NULL;
105 }
106
107 static void
108 external_frame_params_free(void *params)
109 {
110    Elm_Params_Frame *mem = params;
111
112    if (mem->label)
113       eina_stringshare_del(mem->label);
114    free(params);
115 }
116
117 static Edje_External_Param_Info external_frame_params[] = {
118    DEFINE_EXTERNAL_COMMON_PARAMS,
119    EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
120    EDJE_EXTERNAL_PARAM_INFO_STRING("content"),
121    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
122 };
123
124 DEFINE_EXTERNAL_ICON_ADD(frame, "frame");
125 DEFINE_EXTERNAL_TYPE_SIMPLE(frame, "Frame");