From 557b1690e015e374c9f5e7b145d07eaac54f816d Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Tue, 3 Oct 2006 11:17:37 +0000 Subject: [PATCH] Add color selection to Advanced Section. SVN revision: 26325 --- src/bin/e_int_config_color_classes.c | 144 ++++++++++++++++++++++++--- 1 file changed, 130 insertions(+), 14 deletions(-) diff --git a/src/bin/e_int_config_color_classes.c b/src/bin/e_int_config_color_classes.c index 26e52162d..e0eea8076 100644 --- a/src/bin/e_int_config_color_classes.c +++ b/src/bin/e_int_config_color_classes.c @@ -1,5 +1,7 @@ #include "e.h" +typedef struct _CFColor_Class CFColor_Class; + static void *_create_data (E_Config_Dialog *cfd); static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static int _basic_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); @@ -7,9 +9,20 @@ static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_C static int _adv_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static Evas_Object *_adv_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _load_color_classes (Evas_Object *obj, E_Config_Dialog_Data *cfdata); + +struct _CFColor_Class +{ + const char *name; + int enabled; +}; + struct _E_Config_Dialog_Data { char *cur_class; + int state; + E_Color *color1, *color2, *color3; + Evas_List *classes; }; EAPI E_Config_Dialog * @@ -36,7 +49,51 @@ e_int_config_color_classes(E_Container *con) static void _fill_data(E_Config_Dialog_Data *cfdata) { + Evas_List *l; + cfdata->cur_class = NULL; + cfdata->state = 0; + + cfdata->color1 = calloc(1, sizeof(E_Color)); + cfdata->color1->a = 255; + cfdata->color1->r = 255; + cfdata->color1->g = 255; + cfdata->color1->b = 255; + + cfdata->color2 = calloc(1, sizeof(E_Color)); + cfdata->color2->a = 255; + cfdata->color2->r = 0; + cfdata->color2->g = 0; + cfdata->color2->b = 0; + + cfdata->color3 = calloc(1, sizeof(E_Color)); + cfdata->color3->a = 255; + cfdata->color3->r = 0; + cfdata->color3->g = 0; + cfdata->color3->b = 0; + + e_color_update_rgb(cfdata->color1); + e_color_update_rgb(cfdata->color2); + e_color_update_rgb(cfdata->color3); + + for (l = edje_color_class_list(); l; l = l->next) + { + char *name; + Evas_Object *icon; + E_Color_Class *cc; + CFColor_Class *cfc; + + name = (char *)l->data; + if (!name) continue; + + cfc = E_NEW(CFColor_Class, 1); + cfc->name = evas_stringshare_add(name); + cfc->enabled = 0; + cc = e_color_class_find(name); + if (cc) + cfc->enabled = 1; + cfdata->classes = evas_list_append(cfdata->classes, cfc); + } } static void * @@ -52,6 +109,19 @@ _create_data(E_Config_Dialog *cfd) static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + while (cfdata->classes) + { + CFColor_Class *cfc; + + cfc = cfdata->classes->data; + if (!cfc) continue; + if (cfc->name) + evas_stringshare_del(cfc->name); + cfdata->classes = evas_list_remove_list(cfdata->classes, cfdata->classes); + } + E_FREE(cfdata->color1); + E_FREE(cfdata->color2); + E_FREE(cfdata->color3); E_FREE(cfdata); } @@ -69,13 +139,9 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf o = e_widget_list_add(evas, 0, 0); of = e_widget_framelist_add(evas, _("Color Classes"), 0); + e_widget_framelist_content_align_set(of, 0.0, 0.0); ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_class)); - for (l = edje_color_class_list(); l; l = l->next) - { - e_widget_ilist_append(ob, NULL, l->data, NULL, NULL, NULL); - } - e_widget_ilist_go(ob); - e_widget_min_size_set(ob, 100, 200); + _load_color_classes(ob, cfdata); e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, ob, 1, 1, 0.5); return o; @@ -90,21 +156,71 @@ _adv_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) static Evas_Object * _adv_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { - Evas_Object *o, *of, *ob; + Evas_Object *o, *of, *ob, *ot; + E_Radio_Group *rg; Evas_List *l; o = e_widget_list_add(evas, 0, 0); + ot = e_widget_table_add(evas, 1); + of = e_widget_framelist_add(evas, _("Color Classes"), 0); + e_widget_framelist_content_align_set(of, 0.0, 0.0); ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_class)); - for (l = edje_color_class_list(); l; l = l->next) - { - e_widget_ilist_append(ob, NULL, l->data, NULL, NULL, NULL); - } - e_widget_ilist_go(ob); - e_widget_min_size_set(ob, 100, 200); + _load_color_classes(ob, cfdata); e_widget_framelist_object_append(of, ob); - e_widget_list_object_append(o, of, 1, 1, 0.5); + e_widget_table_object_append(ot, of, 0, 0, 1, 4, 1, 1, 1, 1); + + of = e_widget_framelist_add(evas, _("State"), 0); + e_widget_framelist_content_align_set(of, 0.0, 0.0); + rg = e_widget_radio_group_new(&(cfdata->state)); + ob = e_widget_radio_add(evas, _("Enabled"), 1, rg); + e_widget_framelist_object_append(of, ob); + ob = e_widget_radio_add(evas, _("Disabled"), 0, rg); + e_widget_framelist_object_append(of, ob); + e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1); + of = e_widget_framelist_add(evas, _("Object Color"), 1); + ob = e_widget_color_well_add(evas, cfdata->color1, 1); + e_widget_framelist_object_append(of, ob); + e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1); + + of = e_widget_framelist_add(evas, _("Outline Color"), 1); + ob = e_widget_color_well_add(evas, cfdata->color2, 1); + e_widget_framelist_object_append(of, ob); + e_widget_table_object_append(ot, of, 1, 2, 1, 1, 1, 1, 1, 1); + + of = e_widget_framelist_add(evas, _("Shadow Color"), 1); + ob = e_widget_color_well_add(evas, cfdata->color3, 1); + e_widget_framelist_object_append(of, ob); + e_widget_table_object_append(ot, of, 1, 3, 1, 1, 1, 1, 1, 1); + + e_widget_list_object_append(o, ot, 1, 1, 0.5); e_dialog_resizable_set(cfd->dia, 1); return o; } + +static void +_load_color_classes(Evas_Object *obj, E_Config_Dialog_Data *cfdata) +{ + Evas_List *l; + + e_widget_ilist_clear(obj); + for (l = cfdata->classes; l; l = l->next) + { + CFColor_Class *cfc; + Evas_Object *icon; + + cfc = l->data; + if (!cfc) continue; + if (cfc->enabled) + { + icon = edje_object_add(evas_object_evas_get(obj)); + e_util_edje_icon_set(icon, "enlightenment/e"); + e_widget_ilist_append(obj, icon, cfc->name, NULL, NULL, NULL); + } + else + e_widget_ilist_append(obj, NULL, cfc->name, NULL, NULL, NULL); + } + e_widget_ilist_go(obj); + e_widget_min_size_set(obj, 150, 275); +}