enlightenment/src/modules/bluez/e_mod_config.c

189 lines
5.2 KiB
C

#include "e_mod_main.h"
extern const char _e_bluez_Name[];
struct _E_Config_Dialog_Data
{
E_Bluez_Instance *inst;
const char *name;
Eina_Bool mode;
unsigned int timeout;
struct
{
Evas_Object *label;
Evas_Object *slider;
Evas_Object *help;
} gui;
};
/* Local Function Prototypes */
static void *_create_data(E_Config_Dialog *dialog);
static void _free_data(E_Config_Dialog *dialog,
E_Config_Dialog_Data *cfdata);
static Evas_Object *_basic_create(E_Config_Dialog *dialog,
Evas *evas,
E_Config_Dialog_Data *cfdata);
static int _basic_apply(E_Config_Dialog *dialog,
E_Config_Dialog_Data *cfdata);
E_Config_Dialog *
e_bluez_config_dialog_new(E_Container *con,
E_Bluez_Instance *inst)
{
E_Config_Dialog *dialog;
E_Config_Dialog_View *view;
if (inst->conf_dialog)
return inst->conf_dialog;
view = E_NEW(E_Config_Dialog_View, 1);
if (!view)
return NULL;
view->create_cfdata = _create_data;
view->free_cfdata = _free_data;
view->basic.create_widgets = _basic_create;
view->basic.apply_cfdata = _basic_apply;
dialog = e_config_dialog_new(con, _("Bluetooth Settings"),
_e_bluez_Name, "e_bluez_config_dialog_new",
e_bluez_theme_path(), 0, view, inst);
return dialog;
}
static void *
_create_data(E_Config_Dialog *dialog)
{
E_Config_Dialog_Data *cfdata;
E_Bluez_Instance *inst;
cfdata = E_NEW(E_Config_Dialog_Data, 1);
if (!cfdata)
return NULL;
cfdata->inst = dialog->data;
inst = cfdata->inst;
if (!e_bluez_adapter_discoverable_get(inst->adapter, &cfdata->mode))
cfdata->mode = 0;
if (!e_bluez_adapter_discoverable_timeout_get
(inst->adapter, &cfdata->timeout))
cfdata->timeout = 0;
cfdata->timeout /= 60;
if (!e_bluez_adapter_name_get(inst->adapter, &cfdata->name))
cfdata->name = NULL;
else
cfdata->name = strdup(cfdata->name);
return cfdata;
}
static void
_free_data(E_Config_Dialog *dialog,
E_Config_Dialog_Data *cfdata)
{
E_Bluez_Instance *inst = dialog->data;
inst->conf_dialog = NULL;
E_FREE(cfdata);
}
static void
_cb_disable_timeout(void *data,
Evas_Object *obj __UNUSED__)
{
E_Config_Dialog_Data *cfdata = data;
Eina_Bool disable = !cfdata->mode;
e_widget_disabled_set(cfdata->gui.label, disable);
e_widget_disabled_set(cfdata->gui.slider, disable);
e_widget_disabled_set(cfdata->gui.help, disable);
}
static Evas_Object *
_basic_create(E_Config_Dialog *dialog __UNUSED__,
Evas *evas,
E_Config_Dialog_Data *cfdata)
{
Evas_Object *o, *ob;
Evas_Object *check;
char buf[48];
const char *address;
o = e_widget_list_add(evas, 0, 0);
if (!e_bluez_adapter_address_get(cfdata->inst->adapter, &address))
address = NULL;
ob = e_widget_label_add(evas, _("Name"));
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_entry_add(evas, (char **)&cfdata->name, NULL, NULL, NULL);
e_widget_list_object_append(o, ob, 1, 1, 0.5);
check = e_widget_check_add
(evas, _("Discoverable mode"), (int *)&cfdata->mode);
e_widget_list_object_append(o, check, 1, 1, 0.5);
ob = e_widget_label_add(evas, _("Discovarable Timeout"));
cfdata->gui.label = ob;
e_widget_list_object_append(o, ob, 1, 1, 0.5);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 0, 30, 1, 0,
NULL, (int *)&cfdata->timeout, 100);
e_widget_slider_special_value_add(ob, 0.0, 0.0, _("Forever"));
cfdata->gui.slider = ob;
e_widget_list_object_append(o, ob, 1, 1, 0.5);
e_widget_on_change_hook_set(check, _cb_disable_timeout, cfdata);
_cb_disable_timeout(cfdata, NULL);
snprintf(buf, sizeof(buf), _("MAC Address: %s"), address);
ob = e_widget_label_add(evas, buf);
e_widget_list_object_append(o, ob, 1, 1, 0.5);
return o;
}
static void
_method_success_check(void *data,
DBusMessage *msg __UNUSED__,
DBusError *error)
{
const char *name = data;
if ((!error) || (!dbus_error_is_set(error)))
return;
ERR("method %s() finished with error: %s %s\n",
name, error->name, error->message);
dbus_error_free(error);
}
static int
_basic_apply(E_Config_Dialog *dialog __UNUSED__,
E_Config_Dialog_Data *cfdata)
{
E_Bluez_Instance *inst = cfdata->inst;
if (!e_bluez_adapter_discoverable_set
(inst->adapter, cfdata->mode,
_method_success_check, "e_bluez_adapter_discoverable_get"))
ERR("Can't set Discoverable on adapter");
if (!e_bluez_adapter_discoverable_timeout_set
(inst->adapter, cfdata->timeout * 60,
_method_success_check, "e_bluez_adapter_discoverable_timeout_get"))
ERR("Can't set DiscoverableTimeout on adapter");
if (!e_bluez_adapter_name_set
(inst->adapter, cfdata->name,
_method_success_check, "e_bluez_adapter_name_get"))
ERR("Can't set Name on adapter");
return 1;
}