1 #include "private.h"
2 #include <assert.h>
3 
4 typedef struct _Elm_Params_Panes Elm_Params_Panes;
5 
6 struct _Elm_Params_Panes {
7    Elm_Params base;
8    Evas_Object *content_left;
9    Evas_Object *content_right;
10    Eina_Bool is_horizontal;
11    Eina_Bool horizontal;
12    Eina_Bool is_left_size;
13    double left_size;
14    Eina_Bool is_fixed;
15    Eina_Bool fixed;
16 };
17 
external_panes_state_set(void * data EINA_UNUSED,Evas_Object * obj,const void * from_params,const void * to_params,float pos EINA_UNUSED)18 static void external_panes_state_set(void *data EINA_UNUSED,
19       Evas_Object *obj, const void *from_params,
20       const void *to_params, float pos EINA_UNUSED)
21 {
22    const Elm_Params_Panes *p;
23 
24    if (to_params) p = to_params;
25    else if (from_params) p = from_params;
26    else return;
27 
28    if (p->content_left)
29      elm_object_part_content_set(obj, "left", p->content_left);
30 
31    if (p->content_right)
32      elm_object_part_content_set(obj, "right", p->content_right);
33 
34    if (p->is_left_size)
35      elm_panes_content_left_size_set(obj, p->left_size);
36 
37    if (p->is_horizontal)
38      elm_panes_horizontal_set(obj, p->horizontal);
39 
40    if (p->is_fixed)
41      elm_panes_fixed_set(obj, p->fixed);
42 }
43 
external_panes_param_set(void * data EINA_UNUSED,Evas_Object * obj,const Edje_External_Param * param)44 static Eina_Bool external_panes_param_set(void *data EINA_UNUSED,
45       Evas_Object *obj, const Edje_External_Param *param)
46 {
47    if ((!strcmp(param->name, "content left"))
48        && (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING))
49    {
50       Evas_Object *content = external_common_param_elm_layout_get(obj, param);
51       if ((strcmp(param->s, "")) && (!content))
52          return EINA_FALSE;
53       elm_object_part_content_set(obj, "left", content);
54       return EINA_TRUE;
55    }
56    else if ((!strcmp(param->name, "content right"))
57             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING))
58    {
59       Evas_Object *content = external_common_param_elm_layout_get(obj, param);
60       if ((strcmp(param->s, "")) && (!content))
61         return EINA_FALSE;
62       elm_object_part_content_set(obj, "right", content);
63       return EINA_TRUE;
64    }
65    else if ((!strcmp(param->name, "horizontal"))
66             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))
67    {
68       elm_panes_horizontal_set(obj, param->i);
69       return EINA_TRUE;
70    }
71    else if ((!strcmp(param->name, "left size"))
72             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE))
73    {
74       elm_panes_content_left_size_set(obj, param->d);
75       return EINA_TRUE;
76    }
77    else if ((!strcmp(param->name, "fixed"))
78             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))
79    {
80       elm_panes_fixed_set(obj, param->i);
81       return EINA_TRUE;
82    }
83 
84    ERR("unknown parameter '%s' of type '%s'",
85          param->name, edje_external_param_type_str(param->type));
86 
87    return EINA_FALSE;
88 }
89 
90 static Eina_Bool
external_panes_param_get(void * data EINA_UNUSED,const Evas_Object * obj,Edje_External_Param * param)91 external_panes_param_get(void *data EINA_UNUSED, const Evas_Object *obj,
92                          Edje_External_Param *param)
93 {
94    if (!strcmp(param->name, "content left"))
95      {
96         /* not easy to get content name back from live object */
97         return EINA_FALSE;
98      }
99    else if (!strcmp(param->name, "content right"))
100      {
101         /* not easy to get content name back from live object */
102         return EINA_FALSE;
103      }
104    else if ((!strcmp(param->name, "horizontal"))
105             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))
106      {
107         param->i = elm_panes_horizontal_get(obj);
108         return EINA_TRUE;
109      }
110    else if ((!strcmp(param->name, "left size"))
111             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE))
112      {
113         param->d = elm_panes_content_left_size_get(obj);
114         return EINA_TRUE;
115      }
116    else if ((!strcmp(param->name, "fixed"))
117             && (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))
118      {
119         param->i = elm_panes_fixed_get(obj);
120         return EINA_TRUE;
121      }
122 
123    ERR("unknown parameter '%s' of type '%s'",
124        param->name, edje_external_param_type_str(param->type));
125 
126    return EINA_FALSE;
127 }
128 
129 static void *
external_panes_params_parse(void * data EINA_UNUSED,Evas_Object * obj,const Eina_List * params)130 external_panes_params_parse(void *data EINA_UNUSED, Evas_Object *obj,
131                             const Eina_List *params)
132 {
133    Elm_Params_Panes *mem;
134    Edje_External_Param *param;
135    const Eina_List *l;
136 
137    mem = calloc(1, sizeof(Elm_Params_Panes));
138    if (!mem)
139      return NULL;
140 
141    EINA_LIST_FOREACH(params, l, param)
142      {
143         if (!strcmp(param->name, "content left"))
144           mem->content_left = external_common_param_elm_layout_get(obj, param);
145         else if (!strcmp(param->name, "content right"))
146           mem->content_right = external_common_param_elm_layout_get(obj, param);
147         else if (!strcmp(param->name, "horizontal"))
148           {
149              mem->is_horizontal = EINA_TRUE;
150              mem->horizontal = param->i;
151           }
152         else if (!strcmp(param->name, "left size"))
153           {
154              mem->is_left_size = EINA_TRUE;
155              mem->left_size = param->d;
156           }
157         else if (!strcmp(param->name, "fixed"))
158           {
159              mem->is_fixed = EINA_TRUE;
160              mem->fixed = param->i;
161           }
162      }
163 
164    return mem;
165 }
166 
167 static Evas_Object *
external_panes_content_get(void * data EINA_UNUSED,const Evas_Object * obj,const char * content)168 external_panes_content_get(void *data EINA_UNUSED, const Evas_Object *obj,
169                            const char *content)
170 {
171    if (!strcmp(content, "left"))
172      return elm_object_part_content_get(obj, "left");
173    else if (!strcmp(content, "right"))
174      return elm_object_part_content_get(obj, "right");
175 
176    ERR("unknown content '%s'", content);
177 
178    return NULL;
179 }
180 
external_panes_params_free(void * params)181 static void external_panes_params_free(void *params)
182 {
183    free(params);
184 }
185 
186 static Edje_External_Param_Info external_panes_params[] = {
187    DEFINE_EXTERNAL_COMMON_PARAMS,
188    EDJE_EXTERNAL_PARAM_INFO_STRING("content left"),
189    EDJE_EXTERNAL_PARAM_INFO_STRING("content right"),
190    EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"),
191    EDJE_EXTERNAL_PARAM_INFO_DOUBLE("left size"),
192    EDJE_EXTERNAL_PARAM_INFO_BOOL("fixed"),
193    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
194 };
195 
196 DEFINE_EXTERNAL_ICON_ADD(panes, "panes");
197 DEFINE_EXTERNAL_TYPE_SIMPLE(panes, "Panes");
198