1 #include <Elementary.h>
3 # include "elementary_config.h"
5 #ifndef ELM_LIB_QUICKLAUNCH
9 #define LIST_ITEM_MAX 20
11 >>>>>>> remotes/origin/upstream
12 static Elm_Genlist_Item_Class itc;
14 static void _bstatus(void *data, Evas_Object *obj, void *event_info);
15 static void _tstatus(void *data, Evas_Object *obj, void *event_info);
16 static char *_text_get(void *data, Evas_Object *obj, const char *source);
17 static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *source);
18 static Eina_Bool _state_get(void *data, Evas_Object *obj, const char *source);
19 static void _item_del(void *data, Evas_Object *obj);
20 static void _fill_list(Evas_Object *obj);
21 static Eina_Bool _dir_has_subs(const char *path);
25 static Eina_List *dirs = NULL;
27 >>>>>>> remotes/origin/upstream
29 _tstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
31 Elm_Object_Item *tb_it;
34 if (elm_panel_hidden_get((Evas_Object*)data))
38 printf("The top panel is currently %s\n", status);
39 tb_it = elm_toolbar_selected_item_get(obj);
40 elm_toolbar_item_selected_set(tb_it, EINA_FALSE);
44 _bstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
46 Elm_Object_Item *tb_it;
49 if (elm_panel_hidden_get((Evas_Object*)data))
53 printf("The bottom panel is currently %s\n", status);
54 tb_it = elm_toolbar_selected_item_get(obj);
55 elm_toolbar_item_selected_set(tb_it, EINA_FALSE);
59 _text_get(void *data, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
61 return strdup(ecore_file_file_get(data));
65 _content_get(void *data, Evas_Object *obj, const char *source)
67 if (!strcmp(source, "elm.swallow.icon"))
71 ic = elm_icon_add(obj);
72 if (ecore_file_is_dir((char *)data))
73 elm_icon_standard_set(ic, "folder");
75 elm_icon_standard_set(ic, "file");
76 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
84 _state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
90 _item_del(void *data, Evas_Object *obj __UNUSED__)
92 eina_stringshare_del(data);
96 _fill_list(Evas_Object *obj)
101 Eina_List *dirs = NULL, *l;
104 if (!(d = opendir(getenv("HOME")))) return;
105 while ((de = readdir(d)))
109 if (de->d_name[0] == '.') continue;
110 snprintf(buff, sizeof(buff), "%s/%s", getenv("HOME"), de->d_name);
111 if (!ecore_file_is_dir(buff)) continue;
112 real = ecore_file_realpath(buff);
113 dirs = eina_list_append(dirs, real);
117 dirs = eina_list_sort(dirs, eina_list_count(dirs), EINA_COMPARE_CB(strcoll));
126 if (!(d = opendir(getenv("HOME")))) return;
127 while ((de = readdir(d)) && (x < LIST_ITEM_MAX))
131 if (de->d_name[0] == '.') continue;
132 snprintf(buff, sizeof(buff), "%s/%s", getenv("HOME"), de->d_name);
133 if (!ecore_file_is_dir(buff)) continue;
135 real = ecore_file_realpath(buff);
136 dirs = eina_list_sorted_insert(dirs, EINA_COMPARE_CB(strcoll), real);
140 >>>>>>> remotes/origin/upstream
141 EINA_LIST_FOREACH(dirs, l, real)
143 Eina_Bool result = EINA_FALSE;
145 result = _dir_has_subs(real);
147 elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
148 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
150 elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
152 NULL, ELM_GENLIST_ITEM_SUBITEMS,
156 eina_list_free(dirs);
158 NULL, ELM_GENLIST_ITEM_TREE,
161 >>>>>>> remotes/origin/upstream
165 _dir_has_subs(const char *path)
169 Eina_Bool result = EINA_FALSE;
171 if (!path) return result;
172 if (!(d = opendir(path))) return result;
173 while ((de = readdir(d)))
177 if (de->d_name[0] == '.') continue;
178 snprintf(buff, sizeof(buff), "%s/%s", path, de->d_name);
179 if (ecore_file_is_dir(buff))
190 test_panel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
192 Evas_Object *win, *bg, *panel, *bx, *vbx, *toolbar;
195 win = elm_win_add(NULL, "panel", ELM_WIN_BASIC);
196 elm_win_title_set(win, "Panel");
197 elm_win_autodel_set(win, EINA_TRUE);
199 bg = elm_bg_add(win);
200 elm_win_resize_object_add(win, bg);
201 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
202 evas_object_show(bg);
204 vbx = elm_box_add(win);
205 elm_win_resize_object_add(win, vbx);
206 evas_object_size_hint_weight_set(vbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
207 evas_object_size_hint_align_set(vbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
208 evas_object_show(vbx);
210 bx = elm_box_add(win);
211 elm_box_horizontal_set(bx, EINA_TRUE);
212 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
213 evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
214 evas_object_show(bx);
216 panel = elm_panel_add(win);
217 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_TOP);
218 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0);
219 evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
221 toolbar = elm_toolbar_add(win);
222 elm_toolbar_homogeneous_set(toolbar, 0);
223 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_NONE);
224 evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0);
225 evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
226 evas_object_show(toolbar);
228 elm_toolbar_item_append(toolbar, "home", "Hello", _tstatus, panel);
230 elm_object_content_set(panel, toolbar);
231 elm_box_pack_end(vbx, panel);
232 evas_object_show(panel);
234 panel = elm_panel_add(win);
235 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT);
236 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
237 evas_object_size_hint_align_set(panel, 0, EVAS_HINT_FILL);
239 itc.item_style = "default";
240 itc.func.text_get = _text_get;
241 itc.func.content_get = _content_get;
242 itc.func.state_get = _state_get;
243 itc.func.del = _item_del;
245 list = elm_genlist_add(win);
246 evas_object_size_hint_min_set(list, 100, -1);
247 evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
248 evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
249 evas_object_show(list);
251 elm_object_content_set(panel, list);
253 elm_box_pack_end(bx, panel);
254 evas_object_show(panel);
258 panel = elm_panel_add(win);
259 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_RIGHT);
260 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
261 evas_object_size_hint_align_set(panel, 1, EVAS_HINT_FILL);
262 elm_panel_hidden_set(panel, EINA_TRUE);
264 list = elm_genlist_add(win);
265 evas_object_size_hint_min_set(list, 100, -1);
266 evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
267 evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
268 evas_object_show(list);
270 elm_object_content_set(panel, list);
272 elm_box_pack_end(bx, panel);
273 evas_object_show(panel);
280 EINA_LIST_FREE(dirs, dir)
283 >>>>>>> remotes/origin/upstream
285 elm_box_pack_end(vbx, bx);
287 panel = elm_panel_add(win);
288 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_BOTTOM);
289 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0);
290 evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
291 elm_panel_hidden_set(panel, EINA_TRUE);
293 toolbar = elm_toolbar_add(win);
294 elm_toolbar_homogeneous_set(toolbar, 0);
295 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_NONE);
296 evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0);
297 evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
298 evas_object_show(toolbar);
300 elm_toolbar_item_append(toolbar, "home", "Hello", _bstatus, panel);
302 elm_object_content_set(panel, toolbar);
303 elm_box_pack_end(vbx, panel);
304 evas_object_show(panel);
306 evas_object_resize(win, 320, 400);
307 evas_object_show(win);