c27e3ec2f48a3871a26853c4fb2db503f4895dc5
[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 <<<<<<< HEAD
8 =======
9 #define LIST_ITEM_MAX 20
10
11 >>>>>>> remotes/origin/upstream
12 static Elm_Genlist_Item_Class itc;
13
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);
22
23 <<<<<<< HEAD
24 =======
25 static Eina_List *dirs = NULL;
26
27 >>>>>>> remotes/origin/upstream
28 static void
29 _tstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
30 {
31    Elm_Object_Item *tb_it;
32    const char *status;
33
34    if (elm_panel_hidden_get((Evas_Object*)data))
35      status = "hidden";
36    else
37      status = "shown";
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);
41 }
42
43 static void
44 _bstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
45 {
46    Elm_Object_Item *tb_it;
47    const char *status;
48
49    if (elm_panel_hidden_get((Evas_Object*)data))
50      status = "hidden";
51    else
52      status = "shown";
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);
56 }
57
58 static char *
59 _text_get(void *data, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
60 {
61    return strdup(ecore_file_file_get(data));
62 }
63
64 static Evas_Object *
65 _content_get(void *data, Evas_Object *obj, const char *source)
66 {
67    if (!strcmp(source, "elm.swallow.icon"))
68      {
69         Evas_Object *ic;
70
71         ic = elm_icon_add(obj);
72         if (ecore_file_is_dir((char *)data))
73           elm_icon_standard_set(ic, "folder");
74         else
75           elm_icon_standard_set(ic, "file");
76         evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
77         evas_object_show(ic);
78         return ic;
79      }
80    return NULL;
81 }
82
83 static Eina_Bool
84 _state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *source __UNUSED__)
85 {
86    return EINA_FALSE;
87 }
88
89 static void
90 _item_del(void *data, Evas_Object *obj __UNUSED__)
91 {
92    eina_stringshare_del(data);
93 }
94
95 static void
96 _fill_list(Evas_Object *obj)
97 {
98    DIR *d;
99    struct dirent *de;
100 <<<<<<< HEAD
101    Eina_List *dirs = NULL, *l;
102    char *real;
103
104    if (!(d = opendir(getenv("HOME")))) return;
105    while ((de = readdir(d)))
106      {
107         char buff[PATH_MAX];
108
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);
114      }
115    closedir(d);
116
117    dirs = eina_list_sort(dirs, eina_list_count(dirs), EINA_COMPARE_CB(strcoll));
118
119 =======
120    Eina_List *l;
121    char *real;
122    unsigned int x = 0;
123
124    if (!dirs)
125      {
126         if (!(d = opendir(getenv("HOME")))) return;
127         while ((de = readdir(d)) && (x < LIST_ITEM_MAX))
128           {
129              char buff[PATH_MAX];
130
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;
134              x++;
135              real = ecore_file_realpath(buff);
136              dirs = eina_list_sorted_insert(dirs, EINA_COMPARE_CB(strcoll), real);
137           }
138         closedir(d);
139      }
140 >>>>>>> remotes/origin/upstream
141    EINA_LIST_FOREACH(dirs, l, real)
142      {
143         Eina_Bool result = EINA_FALSE;
144
145         result = _dir_has_subs(real);
146         if (!result)
147           elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
148                                   NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
149         else
150           elm_genlist_item_append(obj, &itc, eina_stringshare_add(real),
151 <<<<<<< HEAD
152                                   NULL, ELM_GENLIST_ITEM_SUBITEMS,
153                                   NULL, NULL);
154         free(real);
155      }
156    eina_list_free(dirs);
157 =======
158                                   NULL, ELM_GENLIST_ITEM_TREE,
159                                   NULL, NULL);
160      }
161 >>>>>>> remotes/origin/upstream
162 }
163
164 static Eina_Bool
165 _dir_has_subs(const char *path)
166 {
167    DIR *d;
168    struct dirent *de;
169    Eina_Bool result = EINA_FALSE;
170
171    if (!path) return result;
172    if (!(d = opendir(path))) return result;
173    while ((de = readdir(d)))
174      {
175         char buff[PATH_MAX];
176
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))
180           {
181              result = EINA_TRUE;
182              break;
183           }
184      }
185    closedir(d);
186    return result;
187 }
188
189 void
190 test_panel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
191 {
192    Evas_Object *win, *bg, *panel, *bx, *vbx, *toolbar;
193    Evas_Object *list;
194
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);
198
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);
203
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);
209
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);
215
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);
220
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);
227
228    elm_toolbar_item_append(toolbar, "home", "Hello", _tstatus, panel);
229
230    elm_object_content_set(panel, toolbar);
231    elm_box_pack_end(vbx, panel);
232    evas_object_show(panel);
233
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);
238
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;
244
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);
250
251    elm_object_content_set(panel, list);
252
253    elm_box_pack_end(bx, panel);
254    evas_object_show(panel);
255
256    _fill_list(list);
257
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);
263
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);
269
270    elm_object_content_set(panel, list);
271
272    elm_box_pack_end(bx, panel);
273    evas_object_show(panel);
274
275    _fill_list(list);
276 <<<<<<< HEAD
277 =======
278    {
279       char *dir;
280       EINA_LIST_FREE(dirs, dir)
281         free(dir);
282    }
283 >>>>>>> remotes/origin/upstream
284
285    elm_box_pack_end(vbx, bx);
286
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);
292
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);
299
300    elm_toolbar_item_append(toolbar, "home", "Hello", _bstatus, panel);
301
302    elm_object_content_set(panel, toolbar);
303    elm_box_pack_end(vbx, panel);
304    evas_object_show(panel);
305
306    evas_object_resize(win, 320, 400);
307    evas_object_show(win);
308 }
309
310
311 #endif