Tizen 2.1 release
[platform/core/uifw/e17.git] / src / modules / bluez / e_mod_config.c
1 #include "e_mod_main.h"
2
3 extern const char _e_bluez_Name[];
4
5 struct _E_Config_Dialog_Data
6 {
7    E_Bluez_Instance *inst;
8    const char       *name;
9    Eina_Bool         mode;
10    unsigned int      timeout;
11    struct
12    {
13       Evas_Object *label;
14       Evas_Object *slider;
15       Evas_Object *help;
16    } gui;
17 };
18
19 /* Local Function Prototypes */
20 static void        *_create_data(E_Config_Dialog *dialog);
21 static void         _free_data(E_Config_Dialog      *dialog,
22                                E_Config_Dialog_Data *cfdata);
23 static Evas_Object *_basic_create(E_Config_Dialog      *dialog,
24                                   Evas                 *evas,
25                                   E_Config_Dialog_Data *cfdata);
26 static int _basic_apply(E_Config_Dialog      *dialog,
27                         E_Config_Dialog_Data *cfdata);
28
29 E_Config_Dialog *
30 e_bluez_config_dialog_new(E_Container      *con,
31                           E_Bluez_Instance *inst)
32 {
33    E_Config_Dialog *dialog;
34    E_Config_Dialog_View *view;
35
36    if (inst->conf_dialog)
37      return inst->conf_dialog;
38
39    view = E_NEW(E_Config_Dialog_View, 1);
40    if (!view)
41      return NULL;
42
43    view->create_cfdata = _create_data;
44    view->free_cfdata = _free_data;
45    view->basic.create_widgets = _basic_create;
46    view->basic.apply_cfdata = _basic_apply;
47
48    dialog = e_config_dialog_new(con, _("Bluetooth Settings"),
49                                 _e_bluez_Name, "e_bluez_config_dialog_new",
50                                 e_bluez_theme_path(), 0, view, inst);
51
52    return dialog;
53 }
54
55 static void *
56 _create_data(E_Config_Dialog *dialog)
57 {
58    E_Config_Dialog_Data *cfdata;
59    E_Bluez_Instance *inst;
60
61    cfdata = E_NEW(E_Config_Dialog_Data, 1);
62    if (!cfdata)
63      return NULL;
64
65    cfdata->inst = dialog->data;
66    inst = cfdata->inst;
67    if (!e_bluez_adapter_discoverable_get(inst->adapter, &cfdata->mode))
68      cfdata->mode = 0;
69
70    if (!e_bluez_adapter_discoverable_timeout_get
71          (inst->adapter, &cfdata->timeout))
72      cfdata->timeout = 0;
73    cfdata->timeout /= 60;
74
75    if (!e_bluez_adapter_name_get(inst->adapter, &cfdata->name))
76      cfdata->name = NULL;
77    else
78      cfdata->name = strdup(cfdata->name);
79
80    return cfdata;
81 }
82
83 static void
84 _free_data(E_Config_Dialog      *dialog,
85            E_Config_Dialog_Data *cfdata)
86 {
87    E_Bluez_Instance *inst = dialog->data;
88
89    inst->conf_dialog = NULL;
90    E_FREE(cfdata);
91 }
92
93 static void
94 _cb_disable_timeout(void            *data,
95                     Evas_Object *obj __UNUSED__)
96 {
97    E_Config_Dialog_Data *cfdata = data;
98    Eina_Bool disable = !cfdata->mode;
99
100    e_widget_disabled_set(cfdata->gui.label, disable);
101    e_widget_disabled_set(cfdata->gui.slider, disable);
102    e_widget_disabled_set(cfdata->gui.help, disable);
103 }
104
105 static Evas_Object *
106 _basic_create(E_Config_Dialog *dialog __UNUSED__,
107               Evas                   *evas,
108               E_Config_Dialog_Data   *cfdata)
109 {
110    Evas_Object *o, *ob;
111    Evas_Object *check;
112    char buf[48];
113    const char *address;
114
115    o = e_widget_list_add(evas, 0, 0);
116
117    if (!e_bluez_adapter_address_get(cfdata->inst->adapter, &address))
118      address = NULL;
119
120    ob = e_widget_label_add(evas, _("Name"));
121    e_widget_list_object_append(o, ob, 1, 1, 0.5);
122
123    ob = e_widget_entry_add(evas, (char **)&cfdata->name, NULL, NULL, NULL);
124    e_widget_list_object_append(o, ob, 1, 1, 0.5);
125
126    check = e_widget_check_add
127        (evas, _("Discoverable mode"), (int *)&cfdata->mode);
128    e_widget_list_object_append(o, check, 1, 1, 0.5);
129
130    ob = e_widget_label_add(evas, _("Discovarable Timeout"));
131    cfdata->gui.label = ob;
132    e_widget_list_object_append(o, ob, 1, 1, 0.5);
133
134    ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 0, 30, 1, 0,
135                             NULL, (int *)&cfdata->timeout, 100);
136    e_widget_slider_special_value_add(ob, 0.0, 0.0, _("Forever"));
137    cfdata->gui.slider = ob;
138    e_widget_list_object_append(o, ob, 1, 1, 0.5);
139
140    e_widget_on_change_hook_set(check, _cb_disable_timeout, cfdata);
141    _cb_disable_timeout(cfdata, NULL);
142
143    snprintf(buf, sizeof(buf), _("MAC Address: %s"), address);
144    ob = e_widget_label_add(evas, buf);
145    e_widget_list_object_append(o, ob, 1, 1, 0.5);
146
147    return o;
148 }
149
150 static void
151 _method_success_check(void            *data,
152                       DBusMessage *msg __UNUSED__,
153                       DBusError       *error)
154 {
155    const char *name = data;
156
157    if ((!error) || (!dbus_error_is_set(error)))
158      return;
159
160    ERR("method %s() finished with error: %s %s\n",
161        name, error->name, error->message);
162    dbus_error_free(error);
163 }
164
165 static int
166 _basic_apply(E_Config_Dialog *dialog __UNUSED__,
167              E_Config_Dialog_Data   *cfdata)
168 {
169    E_Bluez_Instance *inst = cfdata->inst;
170
171    if (!e_bluez_adapter_discoverable_set
172          (inst->adapter, cfdata->mode,
173          _method_success_check, "e_bluez_adapter_discoverable_get"))
174      ERR("Can't set Discoverable on adapter");
175
176    if (!e_bluez_adapter_discoverable_timeout_set
177          (inst->adapter, cfdata->timeout * 60,
178          _method_success_check, "e_bluez_adapter_discoverable_timeout_get"))
179      ERR("Can't set DiscoverableTimeout on adapter");
180
181    if (!e_bluez_adapter_name_set
182          (inst->adapter, cfdata->name,
183          _method_success_check, "e_bluez_adapter_name_get"))
184      ERR("Can't set Name on adapter");
185
186    return 1;
187 }
188