115b455b4a64ae340ab1ed7acb3bfdee29daef5a
[platform/upstream/enlightenment.git] / src / bin / e_widget_toolbook.c
1 #include "e.h"
2
3 typedef struct _E_Widget_Data E_Widget_Data;
4 struct _E_Widget_Data
5 {
6    Evas_Object *o_widget, *o_tb, *o_bar;
7    Eina_List   *content;
8 };
9
10 static void _e_wid_del_hook(Evas_Object *obj);
11 static void _item_sel(void *data1, void *data2);
12
13 /* externally accessible functions */
14 EAPI Evas_Object *
15 e_widget_toolbook_add(Evas *evas, int icon_w, int icon_h)
16 {
17    Evas_Object *obj, *o;
18    E_Widget_Data *wd;
19
20    obj = e_widget_add(evas);
21    e_widget_del_hook_set(obj, _e_wid_del_hook);
22    wd = E_NEW(E_Widget_Data, 1);
23    e_widget_data_set(obj, wd);
24    wd->o_widget = obj;
25
26    o = e_widget_table_add(evas, 0);
27    e_widget_resize_object_set(obj, o);
28    evas_object_show(o);
29    e_widget_sub_object_add(obj, o);
30    wd->o_tb = o;
31
32    o = e_widget_toolbar_add(evas, icon_w, icon_h);
33    e_widget_toolbar_scrollable_set(o, EINA_TRUE);
34    e_widget_table_object_append(wd->o_tb, o, 0, 0, 1, 1, 1, 1, 1, 0);
35    wd->o_bar = o;
36    evas_object_show(o);
37
38    return obj;
39 }
40
41 EAPI void
42 e_widget_toolbook_page_append(Evas_Object *toolbook, Evas_Object *icon, const char *label, Evas_Object *content, int expand_w, int expand_h, int fill_w, int fill_h, double ax, double ay)
43 {
44    E_Widget_Data *wd;
45    Evas_Coord minw, minh;
46
47    wd = e_widget_data_get(toolbook);
48    e_widget_toolbar_item_append(wd->o_bar, icon, label, _item_sel,
49                                 toolbook, content);
50    e_widget_table_object_repack(wd->o_tb, wd->o_bar, 0, 0, 1, 1, 1, 1, 1, 0);
51    e_widget_table_object_align_append(wd->o_tb, content, 0, 1, 1, 1,
52                                       fill_w, fill_h, expand_w, expand_h,
53                                       ax, ay);
54    evas_object_hide(content);
55    wd->content = eina_list_append(wd->content, content);
56    e_widget_size_min_get(wd->o_tb, &minw, &minh);
57    e_widget_size_min_set(toolbook, minw, minh);
58 }
59
60 EAPI void
61 e_widget_toolbook_page_show(Evas_Object *toolbook, int n)
62 {
63    E_Widget_Data *wd;
64
65    wd = e_widget_data_get(toolbook);
66    e_widget_toolbar_item_select(wd->o_bar, n);
67 }
68
69 /* Private functions */
70 static void
71 _e_wid_del_hook(Evas_Object *obj)
72 {
73    E_Widget_Data *wd;
74
75    wd = e_widget_data_get(obj);
76    eina_list_free(wd->content);
77    E_FREE(wd);
78 }
79
80 static void
81 _item_sel(void *data1, void *data2)
82 {
83    E_Widget_Data *wd;
84    Evas_Object *o, *obj, *sobj;
85    Eina_List *l;
86
87    obj = data1;
88    sobj = data2;
89    wd = e_widget_data_get(obj);
90
91    EINA_LIST_FOREACH(wd->content, l, o)
92      {
93         if (o == sobj) evas_object_show(o);
94         else evas_object_hide(o);
95      }
96 }
97