Enlightenment CVS committal Author : devilhorns Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_int_config_modules.c Log Message: Redesign Modules Configuration Dialogue. Eliminates the BUG on TODO. Radio Button Matrix: Enabled == (Loaded && Enabled) Loaded == (Loaded && !Enabled) Unloaded == (!Loaded && !Enabled) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_modules.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- e_int_config_modules.c 27 Dec 2005 22:21:39 -0000 1.14 +++ e_int_config_modules.c 28 Dec 2005 17:28:02 -0000 1.15 @@ -3,36 +3,52 @@ */ #include "e.h" +#define MOD_ENABLED 0 +#define MOD_LOADED 1 +#define MOD_UNLOADED 2 + /* PROTOTYPES - same all the time */ typedef struct _CFData CFData; +typedef struct _CFModule CFModule; +typedef struct _E_Widget_Data E_Widget_Data; static void *_create_data(E_Config_Dialog *cfd); static void _free_data(E_Config_Dialog *cfd, CFData *cfdata); static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata); -static int _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata); static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata); -static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata); static void _ilist_cb_change(void *data, Evas_Object *obj); -static void _ilist2_cb_change(void *data, Evas_Object *obj); +static int _sort_modules(void *data1, void *data2); -static void _module_load(void *data, void *data2); -static void _module_unload(void *data, void *data2); -static void _module_enable(void *data, void *data2); -static void _module_disable(void *data, void *data2); static void _module_configure(void *data, void *data2); static void _module_about(void *data, void *data2); -//static CFData cdata = NULL; +struct _E_Widget_Data +{ + E_Radio_Group *group; + Evas_Object *o_radio; + int valnum; +}; + +struct _CFModule +{ + char *name; + char *path; + int state; +}; /* Actual config data we will be playing with whil the dialog is active */ struct _CFData { E_Config_Dialog *cfd; - struct { - Evas_Object *configure, *enable, *disable, *about; - Evas_Object *load, *unload, *loaded, *unloaded; - } gui; + Evas_List *modules; + int state; + struct + { + Evas_Object *configure, *enabled, *about; + Evas_Object *loaded, *unloaded, *list; + } + gui; }; /* a nice easy setup function that does the dirty work */ @@ -41,178 +57,98 @@ { E_Config_Dialog *cfd; E_Config_Dialog_View v; - + /* methods */ v.create_cfdata = _create_data; v.free_cfdata = _free_data; v.basic.apply_cfdata = _basic_apply_data; v.basic.create_widgets = _basic_create_widgets; - v.advanced.apply_cfdata = _advanced_apply_data; - v.advanced.create_widgets = _advanced_create_widgets; + /* Disable For Now */ + v.advanced.apply_cfdata = NULL; + v.advanced.create_widgets = NULL; /* create config diaolg for NULL object/data */ cfd = e_config_dialog_new(con, _("Module Settings"), NULL, 0, &v, NULL); - return cfd; -} - -static void -_module_load(void *data, void *data2) -{ - Evas_Object *ilist2; - CFData *cfdata; - E_Module *m; - int i; - char *v; - - ilist2 = data; - cfdata = data2; - i = e_widget_ilist_selected_get(ilist2); - v = strdup(e_widget_ilist_selected_label_get(ilist2)); - m = e_module_find(v); - if (!m) - { - m = e_module_new(v); - cfdata->cfd->view_dirty = 1; - } -} - -static void -_module_unload(void *data, void *data2) -{ - Evas_Object *ilist; - CFData *cfdata; - E_Module *m; - int i; - char *v; - - ilist = data; - cfdata = data2; - - i = e_widget_ilist_selected_get(ilist); - v = strdup(e_widget_ilist_selected_label_get(ilist)); - m = e_module_find(v); - if (m) - { - e_module_disable(m); - e_object_del(E_OBJECT(m)); - e_config_save_queue(); - cfdata->cfd->view_dirty = 1; - } + return cfd; } static void -_module_enable(void *data, void *data2) /* this enables and disables :) */ +_module_configure(void *data, void *data2) { Evas_Object *obj; - CFData *cfdata; E_Module *m; - int i; char *v; - + obj = data; - cfdata = data2; - - i = e_widget_ilist_selected_get(obj); v = strdup(e_widget_ilist_selected_label_get(obj)); m = e_module_find(v); - if (!m) - { - m = e_module_new(v); - } - - if (!m->enabled) + if (m) { - e_module_enable(m); - if (m->func.config) - { - e_widget_disabled_set(cfdata->gui.configure, 0); - } - e_widget_disabled_set(cfdata->gui.enable, 1); - e_widget_disabled_set(cfdata->gui.disable, 0); + if (m->func.config) + m->func.config(m); } - cfdata->cfd->view_dirty = 1; } static void -_module_disable(void *data, void *data2) /* this enables and disables :) */ +_module_about(void *data, void *data2) { Evas_Object *obj; - CFData *cfdata; E_Module *m; - int i; char *v; - - obj = data; - cfdata = data2; - - i = e_widget_ilist_selected_get(obj); - v = strdup(e_widget_ilist_selected_label_get(obj)); - m = e_module_find(v); - if (m) - { - if (m->enabled) - { - e_module_save(m); - e_module_disable(m); - cfdata->cfd->view_dirty = 1; - } - } -} -static void -_module_configure(void *data, void *data2) -{ - Evas_Object *obj; - E_Module *m; - int i; - char *v; - obj = data; - i = e_widget_ilist_selected_get(obj); v = strdup(e_widget_ilist_selected_label_get(obj)); m = e_module_find(v); - if (m) - { - if (m->func.config) - { - m->func.config(m); - } - else - { - printf("Can't run config no module!!!\n");// Debug!! - } + if (m) + { + if (m->func.about) + m->func.about(m); } } +/**--CREATE--**/ static void -_module_about(void *data, void *data2) +_fill_data(CFData *cfdata) { - Evas_Object *obj; - E_Module *m; - int i; - char *v; - - obj = data; - i = e_widget_ilist_selected_get(obj); - v = strdup(e_widget_ilist_selected_label_get(obj)); - m = e_module_find(v); - if (m) - { - if (m->func.about) + Evas_List *l; + Ecore_List *dirs = NULL; + + for (l = e_path_dir_list_get(path_modules); l; l = l->next) + { + E_Path_Dir *epd; + + epd = l->data; + if (ecore_file_is_dir(epd->dir)) { - m->func.about(m); - } - else - { - printf("Can't run about no module!!!\n");// Debug!! + dirs = ecore_file_ls(epd->dir); + if (dirs) + { + char *mod; + + ecore_list_goto_first(dirs); + while ((mod = ecore_list_next(dirs))) + { + CFModule *m; + char buff[4096]; + + m = E_NEW(CFModule, 1); + if (m) + { + snprintf(buff, sizeof(buff), "%s/%s", epd->dir, mod); + m->name = strdup(mod); + m->path = strdup(buff); + cfdata->modules = evas_list_append(cfdata->modules, m); + } + } + } } } -} + if (cfdata->modules) + cfdata->modules = evas_list_sort(cfdata->modules, evas_list_count(cfdata->modules), _sort_modules); -/**--CREATE--**/ -static void -_fill_data(CFData *cfdata) -{ + /* Free Lists */ + if (l) evas_list_free(l); + if (dirs != NULL) ecore_list_destroy(dirs); return; } @@ -224,9 +160,10 @@ * the running systems/config in the apply methods */ CFData *cfdata; - + cfdata = E_NEW(CFData, 1); cfdata->cfd = cfd; + _fill_data(cfdata); return cfdata; } @@ -241,12 +178,72 @@ static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata) { - return 1; /* Apply was OK */ -} + E_Module *m; + char *v; + int i; -static int -_advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata) -{ + v = strdup(e_widget_ilist_selected_label_get(cfdata->gui.list)); + for (i = 0; i < evas_list_count(cfdata->modules); i++) + { + CFModule *cm; + + cm = evas_list_nth(cfdata->modules, i); + if ((cm) && (!strcmp(cm->name, v))) + { + if (cm->state != cfdata->state) + { + m = e_module_find(v); + switch (cfdata->state) + { + case MOD_ENABLED: + if (!m) m = e_module_new(v); + if (!m->enabled) + { + e_module_enable(m); + if (m->func.config) + e_widget_disabled_set(cfdata->gui.configure, 0); + if (m->func.about) + e_widget_disabled_set(cfdata->gui.about, 0); + } + cm->state = MOD_ENABLED; + break; + case MOD_LOADED: + if (!m) m = e_module_new(v); + if (m->enabled) + { + e_module_save(m); + e_module_disable(m); + if (m->func.config) + e_widget_disabled_set(cfdata->gui.configure, 1); + } + else + { + if (m->func.config) + e_widget_disabled_set(cfdata->gui.configure, 0); + if (m->func.about) + e_widget_disabled_set(cfdata->gui.about, 0); + } + + cm->state = MOD_LOADED; + break; + case MOD_UNLOADED: + if (m) + { + if (m->func.config) + e_widget_disabled_set(cfdata->gui.configure, 1); + if (m->func.about) + e_widget_disabled_set(cfdata->gui.about, 1); + e_module_disable(m); + e_object_del(E_OBJECT(m)); + e_config_save_queue(); + } + cm->state = MOD_UNLOADED; + break; + } + } + break; + } + } return 1; /* Apply was OK */ } @@ -255,268 +252,164 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) { /* generate the core widget layout for a basic dialog */ - Evas_Object *o, *ob, *of, *oc, *ilist; + Evas_Object *o, *of, *ob, *oc, *ot, *ilist; E_Radio_Group *rg; - Evas_List *l; E_Module *m; - - cfd->hide_buttons = 1; - cfd->cfdata = cfdata; - - o = e_widget_list_add(evas, 0, 1); - of = e_widget_framelist_add(evas, "Modules", 1); - ilist = e_widget_ilist_add(evas, 16, 16, NULL); - e_widget_on_change_hook_set(ilist, _ilist_cb_change, cfdata); - - /* Loaded Modules */ - for (l = e_config->modules; l; l = l->next) - { - E_Config_Module *em; - - em = l->data; - if (em->name) m = e_module_find(em->name); - if (m) - { - oc = e_icon_add(evas); - if (m->icon_file) - e_icon_file_set(oc, m->icon_file); - e_widget_ilist_append(ilist, oc, m->name, NULL, NULL, NULL); - } - } + char buf[4096]; + int i; - e_widget_min_size_set(ilist, 120, 120); - e_widget_ilist_go(ilist); - e_widget_framelist_object_append(of, ilist); - e_widget_list_object_append(o, of, 1, 1, 0.5); - - of = e_widget_frametable_add(evas, "Actions", 1); - - ob = e_widget_button_add(evas, "Enable", NULL, _module_enable, ilist, cfdata); - cfdata->gui.enable = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "Disable", NULL, _module_disable, ilist, cfdata); - cfdata->gui.disable = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "Configure", NULL, _module_configure, ilist, NULL); - cfdata->gui.configure = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "About", NULL, _module_about, ilist, NULL); - cfdata->gui.about = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 32, 32, 1, 1); + o = e_widget_list_add(evas, 1, 0); - e_widget_list_object_append(o, of, 1, 1, 0.5); - e_dialog_resizable_set(cfd->dia, 1); - return o; -} + of = e_widget_framelist_add(evas, _("Modules"), 1); + ot = e_widget_table_add(evas, 1); -static Evas_Object * -_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) -{ - /* generate the core widget layout for an advanced dialog */ - Evas_Object *o, *ob, *of, *oc, *ilist, *ilist2; - E_Radio_Group *rg; - Evas_List *l; - E_Module *m; - Ecore_List *modules; - char full_path[PATH_MAX]; - char *icon; - char buf[PATH_MAX]; - - cfd->hide_buttons = 1; - cfd->cfdata = cfdata; - - o = e_widget_list_add(evas, 0, 1); - - of = e_widget_framelist_add(evas, "Loaded", 1); ilist = e_widget_ilist_add(evas, 16, 16, NULL); + cfdata->gui.list = ilist; e_widget_on_change_hook_set(ilist, _ilist_cb_change, cfdata); - - /* Loaded Modules */ - for (l = e_config->modules; l; l = l->next) + + cfdata->state = -1; + for (i = 0; i < evas_list_count(cfdata->modules); i++) { - E_Config_Module *em; - - em = l->data; - if (em->name) m = e_module_find(em->name); - if (m) + CFModule *cm; + + cm = evas_list_nth(cfdata->modules, i); + if (cm) { + cm->state = MOD_UNLOADED; + m = e_module_find(cm->name); + if (m) + { + cm->state = MOD_LOADED; + if (m->enabled) cm->state = MOD_ENABLED; + } + /* This Fails if module author names icon something else */ + snprintf(buf, sizeof(buf), "%s/module_icon.png", cm->path); oc = e_icon_add(evas); - if (m->icon_file) - e_icon_file_set(oc, m->icon_file); - e_widget_ilist_append(ilist, oc, m->name, NULL, NULL, NULL); + e_icon_file_set(oc, buf); + e_widget_ilist_append(ilist, oc, cm->name, NULL, NULL, NULL); } } - + e_widget_ilist_go(ilist); - e_widget_min_size_set(ilist, 120, 120); - e_widget_framelist_object_append(of, ilist); - e_widget_list_object_append(o, of, 1, 1, 0.5); + e_widget_table_object_append(ot, ilist, 0, 0, 1, 7, 1, 1, 1, 1); - ilist2 = e_widget_ilist_add(evas, 16, 16, NULL); - e_widget_on_change_hook_set(ilist2, _ilist2_cb_change, cfdata); - - of = e_widget_frametable_add(evas, "Actions", 1); - ob = e_widget_button_add(evas, "Load", NULL, _module_load, ilist2, cfdata); - cfdata->gui.load = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "Enable", NULL, _module_enable, ilist, cfdata); - cfdata->gui.enable = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "Disable", NULL, _module_disable, ilist, cfdata); - cfdata->gui.disable = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "Unload", NULL, _module_unload, ilist, cfdata); - cfdata->gui.unload = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 32, 32, 1, 1); - - ob = e_widget_button_add(evas, "Configure", NULL, _module_configure, ilist, NULL); + rg = e_widget_radio_group_new(&(cfdata->state)); + + ob = e_widget_radio_add(evas, _("Enabled"), MOD_ENABLED, rg); + cfdata->gui.enabled = ob; + e_widget_table_object_append(ot, ob, 1, 0, 1, 1, 1, 0, 1, 0); + + ob = e_widget_radio_add(evas, _("Loaded"), MOD_LOADED, rg); + cfdata->gui.loaded = ob; + e_widget_table_object_append(ot, ob, 1, 1, 1, 1, 1, 0, 1, 0); + + ob = e_widget_radio_add(evas, _("Unloaded"), MOD_UNLOADED, rg); + cfdata->gui.unloaded = ob; + e_widget_table_object_append(ot, ob, 1, 2, 1, 1, 1, 0, 1, 0); + + ob = e_widget_button_add(evas, _("Configure"), NULL, _module_configure, ilist, NULL); cfdata->gui.configure = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 32, 32, 1, 1); + e_widget_table_object_append(ot, ob, 1, 3, 1, 1, 1, 0, 1, 0); - ob = e_widget_button_add(evas, "About", NULL, _module_about, ilist, NULL); + ob = e_widget_button_add(evas, _("About"), NULL, _module_about, ilist, NULL); cfdata->gui.about = ob; - e_widget_disabled_set(ob, 1); - e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 32, 32, 1, 1); - e_widget_list_object_append(o, of, 1, 1, 0.5); - - of = e_widget_framelist_add(evas, "Unloaded", 1); - - /* Get Modules; For each module, if it's not loaded, list it */ - l = NULL; - for (l = e_path_dir_list_get(path_modules); l; l = l->next) - { - E_Path_Dir *epd; - - epd = l->data; - if (ecore_file_is_dir(epd->dir)) - { - modules = ecore_file_ls(epd->dir); - if (modules) - { - char *mod; - - ecore_list_goto_first(modules); - while ((mod = ecore_list_next(modules))) - { - snprintf(full_path, sizeof(full_path), "%s/%s", epd->dir, mod); - snprintf(buf, sizeof(buf), "%s/module_icon.png", mod); - if (ecore_file_is_dir(full_path)) - { - E_Module *m; - m = e_module_find(mod); - if (!m) - { - oc = e_icon_add(evas); - icon = e_path_find(path_modules, buf); - e_icon_file_set(oc, icon); - e_widget_ilist_append(ilist2, oc, mod, NULL, NULL, NULL); - } - } - } - } - } - } + e_widget_table_object_append(ot, ob, 1, 4, 1, 1, 1, 0, 1, 0); - ecore_list_destroy(modules); - ecore_list_destroy(l); + e_widget_disabled_set(cfdata->gui.configure, 1); + e_widget_disabled_set(cfdata->gui.about, 1); - e_widget_ilist_go(ilist2); - e_widget_min_size_set(ilist2, 120, 120); - e_widget_framelist_object_append(of, ilist2); + e_widget_framelist_object_append(of, ot); e_widget_list_object_append(o, of, 1, 1, 0.5); - e_dialog_resizable_set(cfd->dia, 1); + e_dialog_resizable_set(cfd->dia, 1); + return o; } -static void -_ilist_cb_change(void *data, Evas_Object *obj) +static void +_ilist_cb_change(void *data, Evas_Object *obj) { E_Module *m; - E_Config_Dialog *cfd; + E_Widget_Data *wd; CFData *cfdata; - int i; char *v; - + int i; + cfdata = data; - cfd = cfdata->cfd; - i = e_widget_ilist_selected_get(obj); + v = strdup(e_widget_ilist_selected_label_get(obj)); - m = e_module_find(v); - if (m) + for (i = 0; i < evas_list_count(cfdata->modules); i++) { - if (m->enabled) - { - e_widget_disabled_set(cfdata->gui.enable, 1); - e_widget_disabled_set(cfdata->gui.disable, 0); - if (m->func.config) - e_widget_disabled_set(cfdata->gui.configure, 0); - else - e_widget_disabled_set(cfdata->gui.configure, 1); - } - else - { - e_widget_disabled_set(cfdata->gui.configure, 1); - e_widget_disabled_set(cfdata->gui.enable, 0); - e_widget_disabled_set(cfdata->gui.disable, 1); - } - - if (m->func.about) - e_widget_disabled_set(cfdata->gui.about, 0); - else - e_widget_disabled_set(cfdata->gui.about, 1); - } + CFModule *cm; - if (cfd->view_type == E_CONFIG_DIALOG_CFDATA_TYPE_ADVANCED) - { - if (!m) + cm = evas_list_nth(cfdata->modules, i); + if ((cm) && (!strcmp(cm->name, v))) { - e_widget_disabled_set(cfdata->gui.load, 0); - e_widget_disabled_set(cfdata->gui.unload, 1); - } - else - { - e_widget_disabled_set(cfdata->gui.load, 1); - e_widget_disabled_set(cfdata->gui.unload, 0); + cfdata->state = cm->state; + switch (cm->state) + { + case MOD_ENABLED: + wd = e_widget_data_get(cfdata->gui.enabled); + edje_object_signal_emit(wd->o_radio, "toggle_on", ""); + wd = e_widget_data_get(cfdata->gui.loaded); + edje_object_signal_emit(wd->o_radio, "toggle_off", ""); + wd = e_widget_data_get(cfdata->gui.unloaded); + edje_object_signal_emit(wd->o_radio, "toggle_off", ""); + break; + case MOD_LOADED: + wd = e_widget_data_get(cfdata->gui.enabled); + edje_object_signal_emit(wd->o_radio, "toggle_off", ""); + wd = e_widget_data_get(cfdata->gui.loaded); + edje_object_signal_emit(wd->o_radio, "toggle_on", ""); + wd = e_widget_data_get(cfdata->gui.unloaded); + edje_object_signal_emit(wd->o_radio, "toggle_off", ""); + break; + case MOD_UNLOADED: + wd = e_widget_data_get(cfdata->gui.enabled); + edje_object_signal_emit(wd->o_radio, "toggle_off", ""); + wd = e_widget_data_get(cfdata->gui.loaded); + edje_object_signal_emit(wd->o_radio, "toggle_off", ""); + wd = e_widget_data_get(cfdata->gui.unloaded); + edje_object_signal_emit(wd->o_radio, "toggle_on", ""); + break; + } + m = e_module_find(v); + if (m) + { + if (m->enabled) + { + if (m->func.config) + e_widget_disabled_set(cfdata->gui.configure, 0); + else + e_widget_disabled_set(cfdata->gui.configure, 1); + } + else + { + e_widget_disabled_set(cfdata->gui.configure, 1); + } + if (m->func.about) + e_widget_disabled_set(cfdata->gui.about, 0); + else + e_widget_disabled_set(cfdata->gui.about, 1); + } + else + { + e_widget_disabled_set(cfdata->gui.about, 1); + e_widget_disabled_set(cfdata->gui.configure, 1); + } + break; } } } -static void -_ilist2_cb_change(void *data, Evas_Object *obj) +static int +_sort_modules(void *data1, void *data2) { - E_Module *m; - E_Config_Dialog *cfd; - CFData *cfdata; - int i; - char *v; - - cfdata = data; - cfd = cfdata->cfd; - i = e_widget_ilist_selected_get(obj); - v = strdup(e_widget_ilist_selected_label_get(obj)); - - m = e_module_find(v); - if (!m) - { - e_widget_disabled_set(cfdata->gui.configure, 1); - e_widget_disabled_set(cfdata->gui.enable, 1); - e_widget_disabled_set(cfdata->gui.disable, 1); - e_widget_disabled_set(cfdata->gui.unload, 1); - e_widget_disabled_set(cfdata->gui.load, 0); - } + CFModule *m1, *m2; + + if (!data1) return 1; + if (!data2) return -1; + + m1 = data1; + m2 = data2; + return (strcmp((const char*)m1->name, (const char*)m2->name)); } ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs