efl

Форк
0
345 строк · 10.0 Кб
1
#include "private.h"
2

3
typedef struct _Elm_Params_Slider
4
{
5
   Elm_Params base;
6
   const char *label;
7
   Evas_Object *icon;
8
   const char *indicator, *unit;
9
   double min, max, value;
10
   Evas_Coord span;
11
   Eina_Bool min_exists:1;
12
   Eina_Bool max_exists:1;
13
   Eina_Bool value_exists:1;
14
   Eina_Bool inverted:1;
15
   Eina_Bool inverted_exists:1;
16
   Eina_Bool span_exists:1;
17
   Eina_Bool horizontal:1;
18
   Eina_Bool horizontal_exists:1;
19
} Elm_Params_Slider;
20

21
static void
22
external_slider_state_set(void *data EINA_UNUSED, Evas_Object *obj,
23
                          const void *from_params, const void *to_params,
24
                          float pos EINA_UNUSED)
25
{
26
   const Elm_Params_Slider *p;
27

28
   if (to_params) p = to_params;
29
   else if (from_params) p = from_params;
30
   else return;
31

32
   if (p->label)
33
     elm_object_text_set(obj, p->label);
34
   if (p->icon)
35
     elm_object_part_content_set(obj, "icon", p->icon);
36
   if (p->span_exists)
37
     elm_slider_span_size_set(obj, p->span);
38
   if ((p->min_exists) && (p->max_exists))
39
     elm_slider_min_max_set(obj, p->min, p->max);
40
   else if ((p->min_exists) || (p->max_exists))
41
     {
42
        double min, max;
43
        elm_slider_min_max_get(obj, &min, &max);
44
        if (p->min_exists)
45
          elm_slider_min_max_set(obj, p->min, max);
46
        else
47
          elm_slider_min_max_set(obj, min, p->max);
48
     }
49
   if (p->value_exists)
50
     elm_slider_value_set(obj, p->value);
51
   if (p->inverted_exists)
52
     elm_slider_inverted_set(obj, p->inverted);
53
   if (p->horizontal_exists)
54
     elm_slider_horizontal_set(obj, p->horizontal);
55
   if (p->indicator)
56
     elm_slider_indicator_format_set(obj, p->indicator);
57
   if (p->unit)
58
     elm_slider_unit_format_set(obj, p->unit);
59
}
60

61
static Eina_Bool
62
external_slider_param_set(void *data EINA_UNUSED, Evas_Object *obj,
63
                          const Edje_External_Param *param)
64
{
65
   if (!strcmp(param->name, "label"))
66
     {
67
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
68
          {
69
             elm_object_text_set(obj, param->s);
70
             return EINA_TRUE;
71
          }
72
     }
73
   else if (!strcmp(param->name, "icon"))
74
     {
75
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
76
          {
77
             Evas_Object *icon = external_common_param_icon_get(obj, param);
78
             if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
79
             elm_object_part_content_set(obj, "icon", icon);
80
             return EINA_TRUE;
81
          }
82
     }
83
   else if (!strcmp(param->name, "min"))
84
     {
85
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
86
          {
87
             double min, max;
88
             elm_slider_min_max_get(obj, &min, &max);
89
             elm_slider_min_max_set(obj, param->d, max);
90
             return EINA_TRUE;
91
          }
92
     }
93
   else if (!strcmp(param->name, "max"))
94
     {
95
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
96
          {
97
             double min, max;
98
             elm_slider_min_max_get(obj, &min, &max);
99
             elm_slider_min_max_set(obj, min, param->d);
100
             return EINA_TRUE;
101
          }
102
     }
103
   else if (!strcmp(param->name, "value"))
104
     {
105
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
106
          {
107
             elm_slider_value_set(obj, param->d);
108
             return EINA_TRUE;
109
          }
110
     }
111
   else if (!strcmp(param->name, "horizontal"))
112
     {
113
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
114
          {
115
             elm_slider_horizontal_set(obj, param->i);
116
             return EINA_TRUE;
117
          }
118
     }
119
   else if (!strcmp(param->name, "inverted"))
120
     {
121
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
122
          {
123
             elm_slider_inverted_set(obj, param->i);
124
             return EINA_TRUE;
125
          }
126
     }
127
   else if (!strcmp(param->name, "span"))
128
     {
129
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
130
          {
131
             elm_slider_span_size_set(obj, param->i);
132
             return EINA_TRUE;
133
          }
134
     }
135
   else if (!strcmp(param->name, "unit format"))
136
     {
137
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
138
          {
139
             elm_slider_unit_format_set(obj, param->s);
140
             return EINA_TRUE;
141
          }
142
     }
143
   else if (!strcmp(param->name, "indicator format"))
144
     {
145
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
146
          {
147
             elm_slider_indicator_format_set(obj, param->s);
148
             return EINA_TRUE;
149
          }
150
     }
151

152
   ERR("unknown parameter '%s' of type '%s'",
153
       param->name, edje_external_param_type_str(param->type));
154

155
   return EINA_FALSE;
156
}
157

158
static Eina_Bool
159
external_slider_param_get(void *data EINA_UNUSED, const Evas_Object *obj, Edje_External_Param *param)
160
{
161
   if (!strcmp(param->name, "label"))
162
     {
163
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
164
          {
165
             param->s = elm_object_text_get(obj);
166
             return EINA_TRUE;
167
          }
168
     }
169
   else if (!strcmp(param->name, "icon"))
170
     {
171
        /* not easy to get icon name back from live object */
172
        return EINA_FALSE;
173
     }
174
   else if (!strcmp(param->name, "min"))
175
     {
176
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
177
          {
178
             double min, max;
179
             elm_slider_min_max_get(obj, &min, &max);
180
             param->d = min;
181
             return EINA_TRUE;
182
          }
183
     }
184
   else if (!strcmp(param->name, "max"))
185
     {
186
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
187
          {
188
             double min, max;
189
             elm_slider_min_max_get(obj, &min, &max);
190
             param->d = max;
191
             return EINA_TRUE;
192
          }
193
     }
194
   else if (!strcmp(param->name, "value"))
195
     {
196
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
197
          {
198
             param->d = elm_slider_value_get(obj);
199
             return EINA_TRUE;
200
          }
201
     }
202
   else if (!strcmp(param->name, "horizontal"))
203
     {
204
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
205
          {
206
             param->i = elm_slider_horizontal_get(obj);
207
             return EINA_TRUE;
208
          }
209
     }
210
   else if (!strcmp(param->name, "inverted"))
211
     {
212
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
213
          {
214
             param->i = elm_slider_inverted_get(obj);
215
             return EINA_TRUE;
216
          }
217
     }
218
   else if (!strcmp(param->name, "span"))
219
     {
220
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
221
          {
222
             param->i = elm_slider_span_size_get(obj);
223
             return EINA_TRUE;
224
          }
225
     }
226
   else if (!strcmp(param->name, "unit format"))
227
     {
228
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
229
          {
230
             param->s = elm_slider_unit_format_get(obj);
231
             return EINA_TRUE;
232
          }
233
     }
234
   else if (!strcmp(param->name, "indicator format"))
235
     {
236
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
237
          {
238
             param->s = elm_slider_indicator_format_get(obj);
239
             return EINA_TRUE;
240
          }
241
     }
242

243
   ERR("unknown parameter '%s' of type '%s'",
244
       param->name, edje_external_param_type_str(param->type));
245

246
   return EINA_FALSE;
247
}
248

249
static void *
250
external_slider_params_parse(void *data EINA_UNUSED,
251
                             Evas_Object *obj EINA_UNUSED,
252
                             const Eina_List *params)
253
{
254
   Elm_Params_Slider *mem;
255
   Edje_External_Param *param;
256
   const Eina_List *l;
257

258
   mem = calloc(1, sizeof(Elm_Params_Slider));
259
   if (!mem)
260
     return NULL;
261

262
   external_common_icon_param_parse(&mem->icon, obj, params);
263

264
   EINA_LIST_FOREACH(params, l, param)
265
     {
266
        if (!strcmp(param->name, "span"))
267
          {
268
             mem->span = param->i;
269
             mem->span_exists = EINA_TRUE;
270
          }
271
        else if (!strcmp(param->name, "min"))
272
          {
273
             mem->min = param->d;
274
             mem->min_exists = EINA_TRUE;
275
          }
276
        else if (!strcmp(param->name, "max"))
277
          {
278
             mem->max = param->d;
279
             mem->max_exists = EINA_TRUE;
280
          }
281
        else if (!strcmp(param->name, "value"))
282
          {
283
             mem->value = param->d;
284
             mem->value_exists = EINA_TRUE;
285
          }
286
        else if (!strcmp(param->name, "inverted"))
287
          {
288
             mem->inverted = param->i;
289
             mem->inverted_exists = EINA_TRUE;
290
          }
291
        else if (!strcmp(param->name, "horizontal"))
292
          {
293
             mem->horizontal = param->i;
294
             mem->horizontal_exists = EINA_TRUE;
295
          }
296
        else if (!strcmp(param->name, "unit format"))
297
          mem->unit = eina_stringshare_add(param->s);
298
        else if (!strcmp(param->name, "indicator format"))
299
          mem->indicator = eina_stringshare_add(param->s);
300
        else if (!strcmp(param->name, "label"))
301
          mem->label = eina_stringshare_add(param->s);
302
     }
303

304
   return mem;
305
}
306

307
static Evas_Object *external_slider_content_get(void *data EINA_UNUSED,
308
                                                const Evas_Object *obj EINA_UNUSED,
309
                                                const char *content EINA_UNUSED)
310
{
311
   ERR("No content.");
312
   return NULL;
313
}
314

315
static void
316
external_slider_params_free(void *params)
317
{
318
   Elm_Params_Slider *mem = params;
319

320
   if (mem->unit)
321
     eina_stringshare_del(mem->unit);
322
   if (mem->indicator)
323
     eina_stringshare_del(mem->indicator);
324
   if (mem->label)
325
     eina_stringshare_del(mem->label);
326
   free(params);
327
}
328

329
static Edje_External_Param_Info external_slider_params[] = {
330
     DEFINE_EXTERNAL_COMMON_PARAMS,
331
     EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
332
     EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
333
     EDJE_EXTERNAL_PARAM_INFO_DOUBLE("min"),
334
     EDJE_EXTERNAL_PARAM_INFO_DOUBLE_DEFAULT("max", 10.0),
335
     EDJE_EXTERNAL_PARAM_INFO_DOUBLE("value"),
336
     EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"),
337
     EDJE_EXTERNAL_PARAM_INFO_BOOL("inverted"),
338
     EDJE_EXTERNAL_PARAM_INFO_INT("span"),
339
     EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("unit format", "%1.2f"),
340
     EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("indicator format", "%1.2f"),
341
     EDJE_EXTERNAL_PARAM_INFO_SENTINEL
342
};
343

344
DEFINE_EXTERNAL_ICON_ADD(slider, "slider");
345
DEFINE_EXTERNAL_TYPE_SIMPLE(slider, "Slider");
346

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.