enlightenment/src/modules/convertible/e_mod_config.c

160 lines
4.5 KiB
C

//
// Created by raffaele on 01/08/19.
//
#include "convertible_logging.h"
#include "e.h"
#include "e_mod_config.h"
static Convertible_Config *_config = NULL;
E_Config_DD *config_edd = NULL;
EINTERN Convertible_Config *convertible_config;
/**
* Create the config structure
* */
static void
_econvertible_config_dd_new(void)
{
// c_zone = E_CONFIG_DD_NEW("Econvertible_Zone_Config", Convertible_Zone_Config);
// E_CONFIG_VAL(c_zone, Convertible_Zone_Config, name, STR);
// E_CONFIG_VAL(c_zone, Convertible_Zone_Config, follow_rotation, INT);
// TODO Not sure what his line does. Apparently, it is needed to specify the type of the configuration data structure
config_edd = E_CONFIG_DD_NEW("Convertible_Config", Convertible_Config);
E_CONFIG_VAL(config_edd, Convertible_Config, disable_keyboard_on_rotation, INT);
// E_CONFIG_LIST(config_edd, Convertible_Config, rotatable_screen_configuration, c_zone);
}
/**
* Update the *_config data structure based on the settings coming from the dialog panel
* @param config The config coming from the Dialog Panel (E_Config_Dialog_data)
*/
static void
_config_set(Convertible_Config *config)
{
DBG("config_set disable_keyboard_on_rotation %d", config->disable_keyboard_on_rotation);
_config->disable_keyboard_on_rotation = config->disable_keyboard_on_rotation;
e_config_domain_save("module.convertible", config_edd, config);
}
/**
* Initialise the configuration object
*
* @param cfg
* @return
*/
static void*
_create_data(E_Config_Dialog *cfg EINA_UNUSED)
{
E_Config_Dialog_Data *dialog_data;
dialog_data = E_NEW(E_Config_Dialog_Data, 1);
dialog_data->config = malloc(sizeof(Convertible_Config));
dialog_data->config->disable_keyboard_on_rotation = _config->disable_keyboard_on_rotation;
// dialog_data->config->rotatable_screen_configuration = _config->rotatable_screen_configuration;
DBG("disable_keyboard_on_rotation %d", dialog_data->config->disable_keyboard_on_rotation);
return dialog_data;
}
/**
* Release memory for the data structure holding the configuration
*
* @param c
* @param dialog_data
*/
static void
_free_data(E_Config_Dialog *c EINA_UNUSED, E_Config_Dialog_Data *dialog_data)
{
free(dialog_data->config);
free(dialog_data);
}
/**
* This function should store the modified settings into the data structure referred by the pointer _config
* @param cfd
* @param cfdata
* @return
*/
static int
_basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
{
DBG("_basic_apply_data");
_config_set(cfdata->config);
return 1;
}
/**
* Create the panel by adding all the items like labels, checkbox and lists
*
* @param cfd
* @param evas
* @param cfdata
* @return
*/
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas,
E_Config_Dialog_Data *cfdata)
{
Evas_Object *o, *evas_option_input_disable; //, *evas_label_section_screens; // *list_item_screen,
// Evas_Object *screen_list = NULL;
o = e_widget_list_add(evas, 0, 0);
evas_option_input_disable = e_widget_check_add(evas, "Disable input when rotated", &(cfdata->config->disable_keyboard_on_rotation));
e_widget_list_object_append(o, evas_option_input_disable, 0, 0, 0);
DBG("After basic_create_widget");
return o;
}
/**
* This function initialise the config dialog for the module
* @param comp
* @param p
* @return
*/
E_Config_Dialog*
e_int_config_convertible_module(Evas_Object *comp, const char *p EINA_UNUSED)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
if (e_config_dialog_find("E", "windows/convertible"))
return NULL;
v = E_NEW(E_Config_Dialog_View, 1);
v->create_cfdata = _create_data;
v->free_cfdata = _free_data;
v->basic.apply_cfdata = _basic_apply_data;
v->basic.create_widgets = _basic_create_widgets;
cfd = e_config_dialog_new(comp,
"Convertible Configuration",
"E", "windows/convertible",
NULL,
0, v, NULL);
return cfd;
}
void
econvertible_config_init(void)
{
_econvertible_config_dd_new();
_config = e_config_domain_load("module.econvertible", config_edd);
if (!_config)
{
_config = E_NEW(Convertible_Config, 1);
_config->disable_keyboard_on_rotation = 1;
// _config->rotatable_screen_configuration = NULL;
}
DBG("Config loaded");
}
void econvertible_config_shutdown(void)
{
E_CONFIG_DD_FREE(config_edd);
E_FREE(convertible_config);
}