efl

Форк
0
/
elm_fileselector_button.c 
261 строка · 7.8 Кб
1
#include "private.h"
2

3
typedef struct _Elm_Params_fileselector_button
4
{
5
   Elm_Params base;
6
   const char *label;
7
   Evas_Object *icon;
8

9
   struct {
10
      const char *path;
11
      Eina_Bool is_save:1;
12
      Eina_Bool is_save_set:1;
13
      Eina_Bool folder_only:1;
14
      Eina_Bool folder_only_set:1;
15
      Eina_Bool expandable:1;
16
      Eina_Bool expandable_set:1;
17
      Eina_Bool inwin_mode:1;
18
      Eina_Bool inwin_mode_set:1;
19
   } fs;
20
} Elm_Params_fileselector_button;
21

22
static void
23
external_fileselector_button_state_set(void *data EINA_UNUSED, Evas_Object *obj,
24
                                       const void *from_params,
25
                                       const void *to_params,
26
                                       float pos EINA_UNUSED)
27
{
28
   const Elm_Params_fileselector_button *p;
29

30
   if (to_params) p = to_params;
31
   else if (from_params) p = from_params;
32
   else return;
33

34
   if (p->label)
35
     elm_object_text_set(obj, p->label);
36
   if (p->icon) elm_object_part_content_set(obj, "icon", p->icon);
37
   if (p->fs.path) elm_fileselector_path_set(obj, p->fs.path);
38
   if (p->fs.is_save_set)
39
     elm_fileselector_is_save_set(obj, p->fs.is_save);
40
   if (p->fs.folder_only_set)
41
     elm_fileselector_folder_only_set(obj, p->fs.folder_only);
42
   if (p->fs.expandable_set)
43
     elm_fileselector_expandable_set(obj, p->fs.expandable);
44
   if (p->fs.inwin_mode_set)
45
     elm_fileselector_button_inwin_mode_set(obj, p->fs.inwin_mode);
46
}
47

48
static Eina_Bool
49
external_fileselector_button_param_set(void *data EINA_UNUSED, Evas_Object *obj,
50
                                       const Edje_External_Param *param)
51
{
52
   if (!strcmp(param->name, "label"))
53
     {
54
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
55
          {
56
             elm_object_text_set(obj, param->s);
57
             return EINA_TRUE;
58
          }
59
     }
60
   else if (!strcmp(param->name, "icon"))
61
     {
62
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
63
          {
64
             Evas_Object *icon = external_common_param_icon_get(obj, param);
65
             if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
66
             elm_object_part_content_set(obj, "icon", icon);
67
             return EINA_TRUE;
68
          }
69
     }
70
   else if (!strcmp(param->name, "path"))
71
     {
72
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
73
          {
74
             elm_fileselector_path_set(obj, param->s);
75
             return EINA_TRUE;
76
          }
77
     }
78
   else if (!strcmp(param->name, "save"))
79
     {
80
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
81
          {
82
             elm_fileselector_is_save_set(obj, param->i);
83
             return EINA_TRUE;
84
          }
85
     }
86
   else if (!strcmp(param->name, "folder only"))
87
     {
88
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
89
          {
90
             elm_fileselector_folder_only_set(obj, param->i);
91
             return EINA_TRUE;
92
          }
93
     }
94
   else if (!strcmp(param->name, "expandable"))
95
     {
96
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
97
          {
98
             elm_fileselector_expandable_set(obj, param->i);
99
             return EINA_TRUE;
100
          }
101
     }
102
   else if (!strcmp(param->name, "inwin mode"))
103
     {
104
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
105
          {
106
             elm_fileselector_button_inwin_mode_set(obj, param->i);
107
             return EINA_TRUE;
108
          }
109
     }
110

111
   ERR("unknown parameter '%s' of type '%s'",
112
       param->name, edje_external_param_type_str(param->type));
113

114
   return EINA_FALSE;
115
}
116

117
static Eina_Bool
118
external_fileselector_button_param_get(void *data EINA_UNUSED,
119
                                       const Evas_Object *obj,
120
                                       Edje_External_Param *param)
121
{
122
   if (!strcmp(param->name, "label"))
123
     {
124
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
125
          {
126
             param->s = elm_object_text_get(obj);
127
             return EINA_TRUE;
128
          }
129
     }
130
   else if (!strcmp(param->name, "icon"))
131
     {
132
        /* not easy to get icon name back from live object */
133
        return EINA_FALSE;
134
     }
135
   else if (!strcmp(param->name, "path"))
136
     {
137
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
138
          {
139
             param->s = elm_fileselector_path_get(obj);
140
             return EINA_TRUE;
141
          }
142
     }
143
   else if (!strcmp(param->name, "save"))
144
     {
145
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
146
          {
147
             param->i = elm_fileselector_is_save_get(obj);
148
             return EINA_TRUE;
149
          }
150
     }
151
   else if (!strcmp(param->name, "folder only"))
152
     {
153
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
154
          {
155
             param->i = elm_fileselector_folder_only_get(obj);
156
             return EINA_TRUE;
157
          }
158
     }
159
   else if (!strcmp(param->name, "expandable"))
160
     {
161
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
162
          {
163
             param->i = elm_fileselector_expandable_get(obj);
164
             return EINA_TRUE;
165
          }
166
     }
167
   else if (!strcmp(param->name, "inwin mode"))
168
     {
169
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
170
          {
171
             param->i = elm_fileselector_button_inwin_mode_get(obj);
172
             return EINA_TRUE;
173
          }
174
     }
175

176
   ERR("unknown parameter '%s' of type '%s'",
177
       param->name, edje_external_param_type_str(param->type));
178

179
   return EINA_FALSE;
180
}
181

182
static void *
183
external_fileselector_button_params_parse(void *data EINA_UNUSED,
184
                                          Evas_Object *obj,
185
                                          const Eina_List *params)
186
{
187
   Elm_Params_fileselector_button *mem;
188
   Edje_External_Param *param;
189
   const Eina_List *l;
190

191
   mem = calloc(1, sizeof(Elm_Params_fileselector_button));
192
   if (!mem)
193
     return NULL;
194

195
   external_common_icon_param_parse(&mem->icon, obj, params);
196

197
   EINA_LIST_FOREACH(params, l, param)
198
     {
199
        if (!strcmp(param->name, "path"))
200
          mem->fs.path = eina_stringshare_add(param->s);
201
        else if (!strcmp(param->name, "save"))
202
          {
203
             mem->fs.is_save = !!param->i;
204
             mem->fs.is_save_set = EINA_TRUE;
205
          }
206
        else if (!strcmp(param->name, "folder only"))
207
          {
208
             mem->fs.folder_only = !!param->i;
209
             mem->fs.folder_only_set = EINA_TRUE;
210
          }
211
        else if (!strcmp(param->name, "expandable"))
212
          {
213
             mem->fs.expandable = !!param->i;
214
             mem->fs.expandable_set = EINA_TRUE;
215
          }
216
        else if (!strcmp(param->name, "inwin mode"))
217
          {
218
             mem->fs.inwin_mode = !!param->i;
219
             mem->fs.inwin_mode_set = EINA_TRUE;
220
          }
221
        else if (!strcmp(param->name, "label"))
222
          mem->label = eina_stringshare_add(param->s);
223
     }
224

225
   return mem;
226
}
227

228
static Evas_Object *external_fileselector_button_content_get(void *data EINA_UNUSED,
229
                                                             const Evas_Object *obj EINA_UNUSED,
230
                                                             const char *content EINA_UNUSED)
231
{
232
   ERR("No content.");
233
   return NULL;
234
}
235

236
 static void
237
external_fileselector_button_params_free(void *params)
238
{
239
   Elm_Params_fileselector_button *mem = params;
240

241
   if (mem->fs.path)
242
     eina_stringshare_del(mem->fs.path);
243
   if (mem->label)
244
      eina_stringshare_del(mem->label);
245
   free(params);
246
}
247

248
static Edje_External_Param_Info external_fileselector_button_params[] = {
249
   DEFINE_EXTERNAL_COMMON_PARAMS,
250
   EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
251
   EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
252
   EDJE_EXTERNAL_PARAM_INFO_STRING("path"),
253
   EDJE_EXTERNAL_PARAM_INFO_BOOL("save"),
254
   EDJE_EXTERNAL_PARAM_INFO_BOOL("folder only"),
255
   EDJE_EXTERNAL_PARAM_INFO_BOOL("expandable"),
256
   EDJE_EXTERNAL_PARAM_INFO_BOOL("inwin mode"),
257
   EDJE_EXTERNAL_PARAM_INFO_SENTINEL
258
};
259

260
DEFINE_EXTERNAL_ICON_ADD(fileselector_button, "fileselector_button");
261
DEFINE_EXTERNAL_TYPE_SIMPLE(fileselector_button, "File Selector Button");
262

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

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

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

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