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