7320bb6036984d0e9f00b692a0080c0ec5c00771
[framework/uifw/elementary.git] / src / bin / test_panel.c
1 #include <Elementary.h>
2 #ifndef ELM_LIB_QUICKLAUNCH
3
4 static Elm_Genlist_Item_Class itc;
5
6 static void _bstatus(void *data, Evas_Object *obj, void *event_info);
7 static void _tstatus(void *data, Evas_Object *obj, void *event_info);
8 static char *_label_get(const void *data, Evas_Object *obj, const char *source);
9 static Evas_Object *_icon_get(const void *data, Evas_Object *obj, const char *source);
10 static Eina_Bool _state_get(const void *data, Evas_Object *obj, const char *source);
11 static void _item_del(const void *data, Evas_Object *obj);
12 static void _fill_list(Evas_Object *obj);
13 static Eina_Bool _dir_has_subs(const char *path);
14
15 static void
16 _tstatus(void *data, Evas_Object *obj, void *event_info)
17 {
18    char *status;
19
20    if (elm_panel_hidden_get((Evas_Object*)data))
21      status = "hidden";
22    else status = "shown";
23    printf("The top panel is currently %s\n", status);
24    elm_toolbar_item_unselect_all(obj);
25 }
26
27 static void
28 _bstatus(void *data, Evas_Object *obj, void *event_info)
29 {
30    char *status;
31
32    if (elm_panel_hidden_get((Evas_Object*)data))
33      status = "hidden";
34    else status = "shown";
35    printf("The bottom panel is currently %s\n", status);
36    elm_toolbar_item_unselect_all(obj);
37 }
38
39 static char *
40 _label_get(const void *data, Evas_Object *obj, const char *source) 
41 {
42    return strdup(ecore_file_file_get(data));
43 }
44
45 static Evas_Object *
46 _icon_get(const void *data, Evas_Object *obj, const char *source) 
47 {
48    if (!strcmp(source, "elm.swallow.icon")) 
49      {
50         Evas_Object *ic;
51
52         ic = elm_icon_add(obj);
53         if (ecore_file_is_dir((char *)data))
54           elm_icon_standard_set(ic, "folder");
55         else
56           elm_icon_standard_set(ic, "file");
57         evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
58         evas_object_show(ic);
59         return ic;
60      }
61    return NULL;
62 }
63
64 static Eina_Bool 
65 _state_get(const void *data, Evas_Object *obj, const char *source) 
66 {
67    return EINA_FALSE;
68 }
69
70 static void 
71 _item_del(const void *data, Evas_Object *obj) 
72 {
73    eina_stringshare_del(data);
74 }
75
76 static void 
77 _fill_list(Evas_Object *obj) 
78 {
79    DIR *d;
80    struct dirent *de;
81    Eina_List *dirs = NULL, *l;
82    char *real;
83
84    if (!(d = opendir(getenv("HOME")))) return;
85    while ((de = readdir(d))) 
86      {
87         char buff[PATH_MAX];
88
89         if (de->d_name[0] == '.') continue;
90         snprintf(buff, sizeof(buff), "%s/%s", getenv("HOME"), de->d_name);
91         if (!ecore_file_is_dir(buff)) continue;
92         real = ecore_file_realpath(buff);
93         dirs = eina_list_append(dirs, real);
94      }
95    closedir(d);
96
97    dirs = eina_list_sort(dirs, eina_list_count(dirs), EINA_COMPARE_CB(strcoll));
98
99    EINA_LIST_FOREACH(dirs, l, real) 
100      {
101         Eina_Bool result = EINA_FALSE;
102
103         result = _dir_has_subs(real);
104         if (!result) 
105           elm_genlist_item_append(obj, &itc, eina_stringshare_add(real), 
106                                   NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
107         else 
108           elm_genlist_item_append(obj, &itc, eina_stringshare_add(real), 
109                                   NULL, ELM_GENLIST_ITEM_SUBITEMS, 
110                                   NULL, NULL);
111         free(real);
112      }
113    eina_list_free(dirs);
114 }
115
116 static Eina_Bool 
117 _dir_has_subs(const char *path) 
118 {
119    DIR *d;
120    struct dirent *de;
121    Eina_Bool result = EINA_FALSE;
122
123    if (!path) return result;
124    if (!(d = opendir(path))) return result;
125    while ((de = readdir(d))) 
126      {
127         char buff[PATH_MAX];
128
129         if (de->d_name[0] == '.') continue;
130         snprintf(buff, sizeof(buff), "%s/%s", path, de->d_name);
131         if (ecore_file_is_dir(buff)) 
132           {
133              result = EINA_TRUE;
134              break;
135           }
136      }
137    closedir(d);
138    return result;
139 }
140
141 void
142 test_panel(void *data, Evas_Object *obj, void *event_info)
143 {
144    Evas_Object *win, *bg, *panel, *bx, *vbx, *toolbar, *ic;
145    char buf[PATH_MAX];
146    Evas_Object *list;
147
148    win = elm_win_add(NULL, "panel", ELM_WIN_BASIC);
149    elm_win_title_set(win, "Panel");
150    elm_win_autodel_set(win, 1);
151
152    bg = elm_bg_add(win);
153    elm_win_resize_object_add(win, bg);
154    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
155    evas_object_show(bg);
156
157    vbx = elm_box_add(win);
158    elm_win_resize_object_add(win, vbx);
159    evas_object_size_hint_weight_set(vbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
160    evas_object_size_hint_align_set(vbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
161    evas_object_show(vbx);
162
163    bx = elm_box_add(win);
164    elm_box_horizontal_set(bx, EINA_TRUE);
165    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
166    evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
167    evas_object_show(bx);
168
169    panel = elm_panel_add(win);
170    elm_panel_orient_set(panel, ELM_PANEL_ORIENT_TOP);
171    evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0);
172    evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
173
174    toolbar = elm_toolbar_add(win);
175    elm_toolbar_homogenous_set(toolbar, 0);
176    elm_toolbar_scrollable_set(toolbar, 0);
177    evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0);
178    evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
179    evas_object_show(toolbar);
180
181    ic = elm_icon_add(win);
182    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
183    elm_icon_file_set(ic, buf, NULL);
184    elm_toolbar_item_add(toolbar, ic, "Hello", _tstatus, panel);
185
186    elm_panel_content_set(panel, toolbar);
187    elm_box_pack_end(vbx, panel);
188    evas_object_show(panel);
189
190    panel = elm_panel_add(win);
191    elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT);
192    evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
193    evas_object_size_hint_align_set(panel, 0, EVAS_HINT_FILL);
194
195    itc.item_style = "default";
196    itc.func.label_get = _label_get;
197    itc.func.icon_get = _icon_get;
198    itc.func.state_get = _state_get;
199    itc.func.del = _item_del;
200
201    list = elm_genlist_add(win);
202    evas_object_size_hint_min_set(list, 100, -1);
203    evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
204    evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
205    evas_object_show(list);
206
207    elm_panel_content_set(panel, list);
208
209    elm_box_pack_end(bx, panel);
210    evas_object_show(panel);
211
212    _fill_list(list);
213
214    panel = elm_panel_add(win);
215    elm_panel_orient_set(panel, ELM_PANEL_ORIENT_RIGHT);
216    evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
217    evas_object_size_hint_align_set(panel, 1, EVAS_HINT_FILL);
218
219    list = elm_genlist_add(win);
220    evas_object_size_hint_min_set(list, 100, -1);
221    evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
222    evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
223    evas_object_show(list);
224
225    elm_panel_content_set(panel, list);
226
227    elm_box_pack_end(bx, panel);
228    evas_object_show(panel);
229
230    _fill_list(list);
231
232    elm_box_pack_end(vbx, bx);
233
234    panel = elm_panel_add(win);
235    elm_panel_orient_set(panel, ELM_PANEL_ORIENT_BOTTOM);
236    evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0);
237    evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
238
239    toolbar = elm_toolbar_add(win);
240    elm_toolbar_homogenous_set(toolbar, 0);
241    elm_toolbar_scrollable_set(toolbar, 0);
242    evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0);
243    evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
244    evas_object_show(toolbar);
245
246    ic = elm_icon_add(win);
247    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
248    elm_icon_file_set(ic, buf, NULL);
249    elm_toolbar_item_add(toolbar, ic, "Hello", _bstatus, panel);
250
251    elm_panel_content_set(panel, toolbar);
252    elm_box_pack_end(vbx, panel);
253    evas_object_show(panel);
254
255    evas_object_resize(win, 320, 400);
256    evas_object_show(win);
257 }
258
259
260 #endif