1 #include <Elementary.h>
3 # include "elementary_config.h"
5 #ifndef ELM_LIB_QUICKLAUNCH
7 static Elm_Genlist_Item_Class itc;
9 static void _bstatus(void *data, Evas_Object *obj, void *event_info);
10 static void _tstatus(void *data, Evas_Object *obj, void *event_info);
11 static char *_label_get(void *data, Evas_Object *obj, const char *source);
12 static Evas_Object *_icon_get(void *data, Evas_Object *obj, const char *source);
13 static Eina_Bool _state_get(void *data, Evas_Object *obj, const char *source);
14 static void _item_del(void *data, Evas_Object *obj);
15 static void _fill_list(Evas_Object *obj);
16 static Eina_Bool _dir_has_subs(const char *path);
19 _tstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
21 Elm_Toolbar_Item *sel;
24 if (elm_panel_hidden_get((Evas_Object*)data))
28 printf("The top panel is currently %s\n", status);
29 sel = elm_toolbar_selected_item_get(obj);
30 elm_toolbar_item_selected_set(sel, EINA_FALSE);
34 _bstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
36 Elm_Toolbar_Item *sel;
39 if (elm_panel_hidden_get((Evas_Object*)data))
43 printf("The bottom panel is currently %s\n", status);
44 sel = elm_toolbar_selected_item_get(obj);
45 elm_toolbar_item_selected_set(sel, EINA_FALSE);
49 _label_get(void *data, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
51 return strdup(ecore_file_file_get(data));
55 _icon_get(void *data, Evas_Object *obj, const char *source)
57 if (!strcmp(source, "elm.swallow.icon"))
61 ic = elm_icon_add(obj);
62 if (ecore_file_is_dir((char *)data))
63 elm_icon_standard_set(ic, "folder");
65 elm_icon_standard_set(ic, "file");
66 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
74 _state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
80 _item_del(void *data, Evas_Object *obj __UNUSED__)
82 eina_stringshare_del(data);
86 _fill_list(Evas_Object *obj)
90 Eina_List *dirs = NULL, *l;
95 home = evil_homedir_get();
97 home = getenv("HOME");
101 if (!(d = opendir(home))) return;
102 while ((de = readdir(d)))
106 if (de->d_name[0] == '.') continue;
107 snprintf(buff, sizeof(buff), "%s/%s", home, de->d_name);
108 if (!ecore_file_is_dir(buff)) continue;
109 real = ecore_file_realpath(buff);
110 dirs = eina_list_append(dirs, real);
114 dirs = eina_list_sort(dirs, eina_list_count(dirs), EINA_COMPARE_CB(strcoll));
116 EINA_LIST_FOREACH(dirs, l, real)
118 Eina_Bool result = EINA_FALSE;
120 result = _dir_has_subs(real);
122 elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
123 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
125 elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
126 NULL, ELM_GENLIST_ITEM_SUBITEMS,
130 eina_list_free(dirs);
134 _dir_has_subs(const char *path)
138 Eina_Bool result = EINA_FALSE;
140 if (!path) return result;
141 if (!(d = opendir(path))) return result;
142 while ((de = readdir(d)))
146 if (de->d_name[0] == '.') continue;
147 snprintf(buff, sizeof(buff), "%s/%s", path, de->d_name);
148 if (ecore_file_is_dir(buff))
159 test_panel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
161 Evas_Object *win, *bg, *panel, *bx, *vbx, *toolbar;
164 win = elm_win_add(NULL, "panel", ELM_WIN_BASIC);
165 elm_win_title_set(win, "Panel");
166 elm_win_autodel_set(win, EINA_TRUE);
168 bg = elm_bg_add(win);
169 elm_win_resize_object_add(win, bg);
170 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
171 evas_object_show(bg);
173 vbx = elm_box_add(win);
174 elm_win_resize_object_add(win, vbx);
175 evas_object_size_hint_weight_set(vbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
176 evas_object_size_hint_align_set(vbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
177 evas_object_show(vbx);
179 bx = elm_box_add(win);
180 elm_box_horizontal_set(bx, EINA_TRUE);
181 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182 evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
183 evas_object_show(bx);
185 panel = elm_panel_add(win);
186 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_TOP);
187 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0);
188 evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
190 toolbar = elm_toolbar_add(win);
191 elm_toolbar_homogeneous_set(toolbar, 0);
192 elm_toolbar_mode_shrink_set(toolbar, ELM_TOOLBAR_SHRINK_NONE);
193 evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0);
194 evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
195 evas_object_show(toolbar);
197 elm_toolbar_item_append(toolbar, "home", "Hello", _tstatus, panel);
199 elm_object_content_set(panel, toolbar);
200 elm_box_pack_end(vbx, panel);
201 evas_object_show(panel);
203 panel = elm_panel_add(win);
204 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT);
205 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
206 evas_object_size_hint_align_set(panel, 0, EVAS_HINT_FILL);
208 itc.item_style = "default";
209 itc.func.label_get = _label_get;
210 itc.func.icon_get = _icon_get;
211 itc.func.state_get = _state_get;
212 itc.func.del = _item_del;
214 list = elm_genlist_add(win);
215 evas_object_size_hint_min_set(list, 100, -1);
216 evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
217 evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
218 evas_object_show(list);
220 elm_object_content_set(panel, list);
222 elm_box_pack_end(bx, panel);
223 evas_object_show(panel);
227 panel = elm_panel_add(win);
228 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_RIGHT);
229 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
230 evas_object_size_hint_align_set(panel, 1, EVAS_HINT_FILL);
231 elm_panel_hidden_set(panel, EINA_TRUE);
233 list = elm_genlist_add(win);
234 evas_object_size_hint_min_set(list, 100, -1);
235 evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
236 evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
237 evas_object_show(list);
239 elm_object_content_set(panel, list);
241 elm_box_pack_end(bx, panel);
242 evas_object_show(panel);
246 elm_box_pack_end(vbx, bx);
248 panel = elm_panel_add(win);
249 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_BOTTOM);
250 evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0);
251 evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
252 elm_panel_hidden_set(panel, EINA_TRUE);
254 toolbar = elm_toolbar_add(win);
255 elm_toolbar_homogeneous_set(toolbar, 0);
256 elm_toolbar_mode_shrink_set(toolbar, ELM_TOOLBAR_SHRINK_NONE);
257 evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0);
258 evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
259 evas_object_show(toolbar);
261 elm_toolbar_item_append(toolbar, "home", "Hello", _bstatus, panel);
263 elm_object_content_set(panel, toolbar);
264 elm_box_pack_end(vbx, panel);
265 evas_object_show(panel);
267 evas_object_resize(win, 320, 400);
268 evas_object_show(win);