dd42ff3a8a1d32858d9c31fbf81a5403db1112ae
[framework/uifw/elementary.git] / src / bin / test_panel.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 static Elm_Genlist_Item_Class itc;
8
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);
17
18 static void
19 _tstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
20 {
21    Elm_Toolbar_Item *sel;
22    const char *status;
23
24    if (elm_panel_hidden_get((Evas_Object*)data))
25      status = "hidden";
26    else
27      status = "shown";
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);
31 }
32
33 static void
34 _bstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
35 {
36    Elm_Toolbar_Item *sel;
37    const char *status;
38
39    if (elm_panel_hidden_get((Evas_Object*)data))
40      status = "hidden";
41    else
42      status = "shown";
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);
46 }
47
48 static char *
49 _label_get(void *data, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
50 {
51    return strdup(ecore_file_file_get(data));
52 }
53
54 static Evas_Object *
55 _icon_get(void *data, Evas_Object *obj, const char *source)
56 {
57    if (!strcmp(source, "elm.swallow.icon"))
58      {
59         Evas_Object *ic;
60
61         ic = elm_icon_add(obj);
62         if (ecore_file_is_dir((char *)data))
63           elm_icon_standard_set(ic, "folder");
64         else
65           elm_icon_standard_set(ic, "file");
66         evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
67         evas_object_show(ic);
68         return ic;
69      }
70    return NULL;
71 }
72
73 static Eina_Bool
74 _state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
75 {
76    return EINA_FALSE;
77 }
78
79 static void
80 _item_del(void *data, Evas_Object *obj __UNUSED__)
81 {
82    eina_stringshare_del(data);
83 }
84
85 static void
86 _fill_list(Evas_Object *obj)
87 {
88    DIR *d;
89    struct dirent *de;
90    Eina_List *dirs = NULL, *l;
91    char *real;
92    const char *home;
93
94 #ifdef _WIN32
95    home = evil_homedir_get();
96 #else
97    home = getenv("HOME");
98 #endif
99    if (!home)
100      home = "./";
101    if (!(d = opendir(home))) return;
102    while ((de = readdir(d)))
103      {
104         char buff[PATH_MAX];
105
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);
111      }
112    closedir(d);
113
114    dirs = eina_list_sort(dirs, eina_list_count(dirs), EINA_COMPARE_CB(strcoll));
115
116    EINA_LIST_FOREACH(dirs, l, real)
117      {
118         Eina_Bool result = EINA_FALSE;
119
120         result = _dir_has_subs(real);
121         if (!result)
122           elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
123                                   NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
124         else
125           elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
126                                   NULL, ELM_GENLIST_ITEM_SUBITEMS,
127                                   NULL, NULL);
128         free(real);
129      }
130    eina_list_free(dirs);
131 }
132
133 static Eina_Bool
134 _dir_has_subs(const char *path)
135 {
136    DIR *d;
137    struct dirent *de;
138    Eina_Bool result = EINA_FALSE;
139
140    if (!path) return result;
141    if (!(d = opendir(path))) return result;
142    while ((de = readdir(d)))
143      {
144         char buff[PATH_MAX];
145
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))
149           {
150              result = EINA_TRUE;
151              break;
152           }
153      }
154    closedir(d);
155    return result;
156 }
157
158 void
159 test_panel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
160 {
161    Evas_Object *win, *bg, *panel, *bx, *vbx, *toolbar;
162    Evas_Object *list;
163
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);
167
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);
172
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);
178
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);
184
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);
189
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);
196
197    elm_toolbar_item_append(toolbar, "home", "Hello", _tstatus, panel);
198
199    elm_object_content_set(panel, toolbar);
200    elm_box_pack_end(vbx, panel);
201    evas_object_show(panel);
202
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);
207
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;
213
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);
219
220    elm_object_content_set(panel, list);
221
222    elm_box_pack_end(bx, panel);
223    evas_object_show(panel);
224
225    _fill_list(list);
226
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);
232
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);
238
239    elm_object_content_set(panel, list);
240
241    elm_box_pack_end(bx, panel);
242    evas_object_show(panel);
243
244    _fill_list(list);
245
246    elm_box_pack_end(vbx, bx);
247
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);
253
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);
260
261    elm_toolbar_item_append(toolbar, "home", "Hello", _bstatus, panel);
262
263    elm_object_content_set(panel, toolbar);
264    elm_box_pack_end(vbx, panel);
265    evas_object_show(panel);
266
267    evas_object_resize(win, 320, 400);
268    evas_object_show(win);
269 }
270
271
272 #endif