Tizen 2.1 release
[platform/core/uifw/e17.git] / src / modules / ibox / e_mod_config.c
1 #include "e.h"
2 #include "e_mod_main.h"
3
4 struct _E_Config_Dialog_Data
5 {
6    int   show_label;
7    int   zone_policy;
8    int   desk_policy;
9    int   icon_label;
10    struct
11      {
12         Evas_Object *o_desk_show_all;
13         Evas_Object *o_desk_show_active;
14      } gui;
15 };
16
17 Eina_List *show_label_list = NULL;
18
19 /* Protos */
20 static void *_create_data(E_Config_Dialog *cfd);
21 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
22 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
23 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
24 static void _cb_disable_check_list(void *data, Evas_Object *obj);
25 static void _cb_zone_policy_change(void *data, Evas_Object *obj);
26 // unused
27 //static void _cb_disable_check(void *data, Evas_Object *obj);
28 void 
29 _config_ibox_module(Config_Item *ci)
30 {
31    E_Config_Dialog *cfd;
32    E_Config_Dialog_View *v;
33    char buf[4096];
34    
35    v = E_NEW(E_Config_Dialog_View, 1);
36
37    /* Dialog Methods */
38    v->create_cfdata = _create_data;
39    v->free_cfdata = _free_data;
40    v->basic.apply_cfdata = _basic_apply_data;
41    v->basic.create_widgets = _basic_create_widgets;
42    v->advanced.apply_cfdata = NULL;
43    v->advanced.create_widgets = NULL;
44    
45    /* Create The Dialog */
46    snprintf(buf, sizeof(buf), "%s/e-module-ibox.edj", e_module_dir_get(ibox_config->module));
47    cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
48                              _("IBox Settings"),
49                              "E", "_e_mod_ibox_config_dialog",
50                              buf, 0, v, ci);
51    ibox_config->config_dialog = eina_list_append(ibox_config->config_dialog, cfd);
52 }
53
54 static void 
55 _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
56 {
57    cfdata->show_label = ci->show_label;
58    cfdata->zone_policy = ci->show_zone;
59    cfdata->desk_policy = ci->show_desk;
60    cfdata->icon_label = ci->icon_label;
61 }
62
63 static void *
64 _create_data(E_Config_Dialog *cfd)
65 {
66    E_Config_Dialog_Data *cfdata;
67    Config_Item *ci;
68    
69    ci = cfd->data;
70    cfdata = E_NEW(E_Config_Dialog_Data, 1);
71    _fill_data(ci, cfdata);
72    return cfdata;
73 }
74
75 static void 
76 _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
77 {
78    show_label_list = eina_list_free(show_label_list);
79
80    ibox_config->config_dialog = eina_list_remove(ibox_config->config_dialog, cfd);
81    free(cfdata);
82 }
83
84 static Evas_Object *
85 _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
86 {
87    E_Radio_Group *rg;
88    Evas_Object *o, *of, *ob;
89    Evas_Object *show_check = NULL;
90    
91    Eina_List *l, *l2;
92    int zone_count;
93
94    o = e_widget_list_add(evas, 0, 0);
95
96    of = e_widget_framelist_add(evas, _("General Settings"), 0);
97    show_check = e_widget_check_add(evas, _("Show Icon Label"), &(cfdata->show_label));
98    e_widget_framelist_object_append(of, show_check);
99    rg = e_widget_radio_group_new(&(cfdata->icon_label));
100
101    ob = e_widget_radio_add(evas, _("Display Name"), 0, rg);
102    e_widget_disabled_set(ob, !cfdata->show_label); // set state from saved config
103    show_label_list = eina_list_append (show_label_list, ob);
104    e_widget_framelist_object_append(of, ob);
105
106    ob = e_widget_radio_add(evas, _("Display Title"), 1, rg);
107    e_widget_disabled_set(ob, !cfdata->show_label); // set state from saved config
108    show_label_list = eina_list_append (show_label_list, ob);
109    e_widget_framelist_object_append(of, ob);
110
111    ob = e_widget_radio_add(evas, _("Display Class"), 2, rg);
112    e_widget_disabled_set(ob, !cfdata->show_label); // set state from saved config
113    show_label_list = eina_list_append (show_label_list, ob);
114    e_widget_framelist_object_append(of, ob);
115
116    ob = e_widget_radio_add(evas, _("Display Icon Name"), 3, rg);
117    e_widget_disabled_set(ob, !cfdata->show_label); // set state from saved config
118    show_label_list = eina_list_append (show_label_list, ob);
119    e_widget_framelist_object_append(of, ob);
120
121    ob = e_widget_radio_add(evas, _("Display Border Caption"), 4, rg);
122    e_widget_disabled_set(ob, !cfdata->show_label); // set state from saved config
123    show_label_list = eina_list_append (show_label_list, ob);
124    e_widget_framelist_object_append(of, ob);
125
126    // handler for enable/disable widget array
127    e_widget_on_change_hook_set(show_check, _cb_disable_check_list, show_label_list);
128
129    e_widget_list_object_append(o, of, 1, 1, 0.5);
130
131    of = e_widget_framelist_add(evas, _("Screen"), 0);
132
133    zone_count = 0;
134    for (l = e_manager_list(); l; l = l->next)
135      {
136         E_Manager *man;
137         man = l->data;
138
139         for (l2 = man->containers; l2; l2 = l2->next)
140           {
141              E_Container *con;
142
143              con = l2->data;
144              zone_count += eina_list_count(con->zones);
145           }
146      }
147
148    if (zone_count <= 1) cfdata->zone_policy = 1;
149
150    rg = e_widget_radio_group_new((int *)&(cfdata->zone_policy));
151    ob = e_widget_radio_add(evas, _("Show windows from all screens"), 0, rg);
152    e_widget_on_change_hook_set(ob, _cb_zone_policy_change, cfdata);
153    e_widget_framelist_object_append(of, ob);
154    if (zone_count <= 1) e_widget_disabled_set(ob, 1);
155
156    ob = e_widget_radio_add(evas, _("Show windows from current screen"), 1, rg);
157    e_widget_on_change_hook_set(ob, _cb_zone_policy_change, cfdata);
158    e_widget_framelist_object_append(of, ob);
159
160    e_widget_list_object_append(o, of, 1, 1, 0.5);
161
162    of = e_widget_framelist_add(evas, _("Desktop"), 0);
163
164    rg = e_widget_radio_group_new((int *)&(cfdata->desk_policy));
165    ob = e_widget_radio_add(evas, _("Show windows from all desktops"), 0, rg);
166    e_widget_framelist_object_append(of, ob);
167    if (cfdata->zone_policy == 0) e_widget_disabled_set(ob, 1);
168    cfdata->gui.o_desk_show_all = ob;
169
170    ob = e_widget_radio_add(evas, _("Show windows from active desktop"), 1, rg);
171    e_widget_framelist_object_append(of, ob);
172    if (cfdata->zone_policy == 0) e_widget_disabled_set(ob, 1);
173    cfdata->gui.o_desk_show_active = ob;
174
175    e_widget_list_object_append(o, of, 1, 1, 0.5);
176
177    return o;
178 }
179
180 static int
181 _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
182 {
183    Config_Item *ci;
184    
185    ci = cfd->data;
186    ci->show_label = cfdata->show_label;
187    ci->icon_label = cfdata->icon_label;
188    ci->show_zone = cfdata->zone_policy;
189    ci->show_desk = cfdata->desk_policy;
190
191    _ibox_config_update(ci);
192    e_config_save_queue();
193    return 1;
194 }
195
196
197 /****** callbacks **********/
198
199 static void
200 _cb_zone_policy_change(void *data, Evas_Object *obj __UNUSED__)
201 {
202    E_Config_Dialog_Data *cfdata;
203
204    cfdata = data;
205
206    if (cfdata->zone_policy == 0)
207      {
208         e_widget_disabled_set(cfdata->gui.o_desk_show_all, 1);
209         e_widget_disabled_set(cfdata->gui.o_desk_show_active, 1);
210      }
211    else
212      {
213         e_widget_disabled_set(cfdata->gui.o_desk_show_all, 0);
214         e_widget_disabled_set(cfdata->gui.o_desk_show_active, 0);
215      }
216 }
217
218 /*!
219  * @param data A Evas_Object to chain together with the checkbox
220  * @param obj A Evas_Object checkbox created with e_widget_check_add()
221  */
222 #if 0
223 static void
224 _cb_disable_check(void *data, Evas_Object *obj)
225 {
226    e_widget_disabled_set((Evas_Object *) data, 
227                          !e_widget_check_checked_get(obj));
228 }
229 #endif
230 /*!
231  * @param data A Eina_List of Evas_Object to chain widgets together with the checkbox
232  * @param obj A Evas_Object checkbox created with e_widget_check_add()
233  */
234 static void
235 _cb_disable_check_list(void *data, Evas_Object *obj)
236 {
237    Eina_List *list = (Eina_List*) data;
238    Eina_List *l;
239    Evas_Object *o;
240
241    EINA_LIST_FOREACH(list, l, o)
242       e_widget_disabled_set(o, !e_widget_check_checked_get(obj));
243 }