Enlightenment CVS committal Author : sndev Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_int_gadcon_config.c Log Message: of the same gadcon in one shelf. The config dialog still contains some problems : * If the config dialog is opened, and at that time the settings of the gadcon has changed, then applying settings will overwrite changes with the old values. (will be fixed soon). * The problem of gadcon identifiers. For example if one have two instances of the ibar in one shelf, then changing settings of the one ibar gadcon will automatically change the settings of the another gadcon(s) in the same shelf. Basically, they are not distinguishable. (will be fixed soon, but need raster's consultation/help/explanation :)) * Icons in "Selected Items" lists (will be fixed soon) * Names of the gadcons in "Selected Items" list should start with capital letter. * maybe something else I forgot to list. Raster, your code is still presented in the file :). So, if unfortunatelly you will dislike what I did :), it can be easiely rolled back :) Enjoy the new functionality :) =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_gadcon_config.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- e_int_gadcon_config.c 19 May 2006 13:21:01 -0000 1.6 +++ e_int_gadcon_config.c 20 May 2006 00:03:20 -0000 1.7 @@ -14,8 +14,12 @@ { E_Gadcon *gc; char *cname; + char *ciname; int enabled; Evas_Object *o_enabled, *o_disabled; + Evas_Object *o_add, *o_remove, *o_instances; + + Evas_List *cf_gcc; }; /* a nice easy setup function that does the dirty work */ @@ -35,7 +39,7 @@ v->basic.create_widgets = _basic_create_widgets; v->override_auto_apply = 1; - /* create config diaolg for bd object/data */ + /* create config dialog for bd object/data */ cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()), _("Contents Settings"), NULL, 0, v, gc); gc->config_dialog = cfd; @@ -46,7 +50,46 @@ static void _fill_data(E_Config_Dialog_Data *cfdata) { + int ok; + E_Config_Gadcon *cf_gc; + E_Config_Gadcon_Client *cf_gcc, *cf_gcc2; + Evas_List *l; + cfdata->cname = NULL; + cfdata->ciname = NULL; + cfdata->cf_gcc = NULL; + + ok = 0; + for (l = e_config->gadcons; l; l = l->next) + { + cf_gc = l->data; + if ((!strcmp(cf_gc->name, cfdata->gc->name)) && + (!strcmp(cf_gc->id, cfdata->gc->id))) + { + ok = 1; + break; + } + } + if (ok) + { + for (l = cf_gc->clients; l; l = l->next) + { + cf_gcc = l->data; + if (!cf_gcc->name) continue; + + cf_gcc2 = E_NEW(E_Config_Gadcon_Client, 1); + cf_gcc2->name = evas_stringshare_add(cf_gcc->name); + cf_gcc2->id = evas_stringshare_add(cf_gcc->id); + cf_gcc2->geom.res = cf_gcc->geom.res; + cf_gcc2->geom.size = cf_gcc->geom.size; + cf_gcc2->geom.pos = cf_gcc->geom.pos; + cf_gcc2->style = !cf_gcc->style ? NULL : evas_stringshare_add(cf_gcc->style); + cf_gcc2->autoscroll = cf_gcc->autoscroll; + cf_gcc2->resizable = cf_gcc->resizable; + + cfdata->cf_gcc = evas_list_append(cfdata->cf_gcc, cf_gcc2); + } + } } static void * @@ -67,9 +110,25 @@ static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + Evas_List *l; /* Free the cfdata */ cfdata->gc->config_dialog = NULL; + + while (cfdata->cf_gcc) + { + E_Config_Gadcon_Client *cf_gcc = cfdata->cf_gcc->data; + + if (cf_gcc->name) evas_stringshare_del(cf_gcc->name); + if (cf_gcc->id) evas_stringshare_del(cf_gcc->id); + if (cf_gcc->style) evas_stringshare_del(cf_gcc->style); + free(cf_gcc); + + cfdata->cf_gcc = evas_list_remove_list(cfdata->cf_gcc, cfdata->cf_gcc); + } + + if (cfdata->cname) free(cfdata->cname); + if (cfdata->ciname) free(cfdata->ciname); free(cfdata); } @@ -77,6 +136,263 @@ static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + int ok = 0; + E_Config_Gadcon *cf_gc; + E_Config_Gadcon_Client *cf_gcc; + Evas_List *l; + + Evas_List *new_clients = NULL; + + + for (l = e_config->gadcons; l; l = l->next) + { + cf_gc = l->data; + if ((!strcmp(cf_gc->name, cfdata->gc->name)) && + (!strcmp(cf_gc->id, cfdata->gc->id))) + { + ok = 1; + break; + } + } + if (!ok) return 1; + + //FIXME: some how the settings of the gadcon should be updated before + //saving it. + while (cf_gc->clients) + { + cf_gcc = cf_gc->clients->data; + + if (!cf_gcc->name) + new_clients = evas_list_append(new_clients, cf_gcc); + else + { + if (cf_gcc->name) evas_stringshare_del(cf_gcc->name); + if (cf_gcc->id) evas_stringshare_del(cf_gcc->id); + if (cf_gcc->style) evas_stringshare_del(cf_gcc->style); + free(cf_gcc); + } + cf_gc->clients = evas_list_remove_list(cf_gc->clients, cf_gc->clients); + } + cf_gc->clients = new_clients; + + for (l = cfdata->cf_gcc; l; l = l->next) + { + E_Config_Gadcon_Client *cf_gcc2 = l->data; + + cf_gcc = E_NEW(E_Config_Gadcon_Client, 1); + cf_gcc->name = evas_stringshare_add(cf_gcc2->name); + cf_gcc->id = evas_stringshare_add(cf_gcc2->id); + cf_gcc->geom.res = cf_gcc2->geom.res; + cf_gcc->geom.size = cf_gcc2->geom.size; + cf_gcc->geom.pos = cf_gcc2->geom.pos; + cf_gcc->style = !cf_gcc2->style ? NULL : evas_stringshare_add(cf_gcc2->style); + cf_gcc->autoscroll = cf_gcc2->autoscroll; + cf_gcc->resizable = cf_gcc2->resizable; + + cf_gc->clients = evas_list_append(cf_gc->clients, cf_gcc); + } + + e_gadcon_unpopulate(cfdata->gc); + e_gadcon_populate(cfdata->gc); + e_config_save_queue(); + return 1; +} + +static void +_cb_select_client(void *data) +{ + E_Config_Dialog_Data *cfdata; + cfdata = data; + + e_widget_disabled_set(cfdata->o_add, 0); +} + +static void +_cb_select_client_instance(void *data) +{ + E_Config_Dialog_Data *cfdata; + cfdata = data; + + e_widget_disabled_set(cfdata->o_remove, 0); +} + +static void +_cb_add_instance(void *data, void *data2) +{ + char buf[256], buf2[256]; + int i, ok; + E_Config_Dialog_Data *cfdata; + E_Config_Gadcon *cf_gc; + E_Config_Gadcon_Client *cf_gcc; + Evas_List *l, *l2; + + cfdata = data; + + snprintf(buf, sizeof(buf), "default"); + for (i = 0; ; i++) + { + ok = 1; + for (l = e_config->gadcons; l; l = l->next) + { + cf_gc = l->data; + for (l2 = cf_gc->clients; l2; l2 = l2->next) + { + cf_gcc = l2->data; + if ((!cf_gcc->name) || (!cf_gcc->id)) continue; + if ((!strcmp(cf_gcc->name, cfdata->cname)) && (!strcmp(cf_gcc->id, buf))) + { + ok = 0; + break; + } + } + if (!ok) break; + } + if (ok) break; + snprintf(buf, sizeof(buf), "other-%i", ok); + } + + cf_gcc = E_NEW(E_Config_Gadcon_Client, 1); + cf_gcc->name = evas_stringshare_add(cfdata->cname); + cf_gcc->id = evas_stringshare_add(buf); + cf_gcc->geom.res = 800; + cf_gcc->geom.size = 80; + cf_gcc->geom.pos = cf_gcc->geom.res - cf_gcc->geom.size; + cf_gcc->style = NULL; + cf_gcc->autoscroll = 0; + cf_gcc->resizable = 0; + + cfdata->cf_gcc = evas_list_append(cfdata->cf_gcc, cf_gcc); + + e_widget_ilist_append(cfdata->o_instances, NULL, cf_gcc->name, _cb_select_client_instance, + cfdata, (char *)cf_gcc->name); + e_widget_ilist_go(cfdata->o_instances); + e_widget_ilist_selected_set(cfdata->o_instances, + e_widget_ilist_count(cfdata->o_instances) - 1); +} + +static void +_cb_remove_instance(void *data, void *data2) +{ + int i; + E_Config_Dialog_Data *cfdata; + E_Config_Gadcon_Client *cf_gcc; + Evas_List *l; + + cfdata = data; + i = e_widget_ilist_selected_get(cfdata->o_instances); + + l = evas_list_nth_list(cfdata->cf_gcc, i); + cf_gcc = l->data; + + if (cf_gcc->name) evas_stringshare_del(cf_gcc->name); + if (cf_gcc->id) evas_stringshare_del(cf_gcc->id); + if (cf_gcc->style) evas_stringshare_del(cf_gcc->style); + free(cf_gcc); + + cfdata->cf_gcc = evas_list_remove_list(cfdata->cf_gcc, l); + + e_widget_ilist_clear(cfdata->o_instances); + for (l = cfdata->cf_gcc; l; l = l->next) + { + cf_gcc = l->data; + e_widget_ilist_append(cfdata->o_instances, NULL, cf_gcc->name, _cb_select_client_instance, + cfdata, (char *)cf_gcc->name); + } + e_widget_ilist_go(cfdata->o_instances); + + if (i >= e_widget_ilist_count(cfdata->o_instances)) + i = e_widget_ilist_count(cfdata->o_instances) - 1; + + if (!e_widget_ilist_count(cfdata->o_instances)) + e_widget_disabled_set(cfdata->o_remove, 1); + else + e_widget_ilist_selected_set(cfdata->o_instances, i); +} + +/**--GUI--**/ +static Evas_Object * +_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + /* generate the core widget layout for a basic dialog */ + Evas_Object *o, *o2, *of, *oft, *ob, *oi; + Evas_Coord wmw, wmh; + Evas_List *l; + E_Config_Gadcon_Client *cf_gcc; + //int ok; + + /* FIXME: this is just raw config now - it needs UI improvments */ + o = e_widget_list_add(evas, 0, 1); + + of = e_widget_framelist_add(evas, _("Available Items"), 0); + + oi = e_widget_ilist_add(evas, 24, 24, &(cfdata->cname)); + + for (l = e_gadcon_provider_list(); l; l = l->next) + { + E_Gadcon_Client_Class *cc; + char *label; + Evas_Object *icon; + + cc = l->data; + icon = NULL; + label = NULL; + if (cc->func.label) label = cc->func.label(); + if (!label) label = cc->name; + if (cc->func.icon) icon = cc->func.icon(evas); + e_widget_ilist_append(oi, icon, label, _cb_select_client, cfdata, cc->name); + } + e_widget_ilist_go(oi); + + e_widget_min_size_get(oi, &wmw, &wmh); + if (wmw < 200) wmw = 200; + e_widget_min_size_set(oi, wmw, 250); + + e_widget_framelist_object_append(of, oi); + + e_widget_list_object_append(o, of, 1, 1, 0.5); + + oft = e_widget_frametable_add(evas, _("Selected Items"), 0); + + oi = e_widget_ilist_add(evas, 24, 24, &(cfdata->ciname)); + + for (l = cfdata->cf_gcc; l; l = l->next) + { + cf_gcc = l->data; + e_widget_ilist_append(oi, NULL, cf_gcc->name, _cb_select_client_instance, + cfdata, (char *)cf_gcc->name); + } + + e_widget_ilist_go(oi); + + e_widget_min_size_get(oi, &wmw, &wmh); + if (wmw < 200) wmw = 200; + if (wmh < 190) wmh = 190; + e_widget_min_size_set(oi, wmw, wmh); + + e_widget_frametable_object_append(oft, oi, 0, 0, 1, 1, 1, 1, 1, 1); + cfdata->o_instances = oi; + + ob = e_widget_button_add(evas, _("Add Instance"), NULL, _cb_add_instance, cfdata, NULL); + e_widget_frametable_object_append(oft, ob, 0, 1, 1, 1, 1, 1, 1, 1); + e_widget_disabled_set(ob, 1); + cfdata->o_add = ob; + + ob = e_widget_button_add(evas, _("Remove Instance"), NULL, _cb_remove_instance, cfdata, NULL); + e_widget_frametable_object_append(oft, ob, 0, 2, 1, 1, 1, 1, 1, 1); + e_widget_disabled_set(ob, 1); + cfdata->o_remove = ob; + + + e_widget_list_object_append(o, oft, 1, 1, 0.5); + + return o; +} + +/************* raster original code ********************/ +#if 0 +static int +_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ Evas_List *l, *l2; E_Config_Gadcon *cf_gc, *cf_gc2; E_Config_Gadcon_Client *cf_gcc, *cf_gcc2; @@ -94,7 +410,7 @@ break; } } - if (!ok) return; + if (!ok) return 1; for (l = cf_gc->clients; l; l = l->next) { cf_gcc = l->data; @@ -151,7 +467,6 @@ e_config_save_queue(); return 1; /* Apply was OK */ } - static void _cb_select(void *data) { @@ -189,7 +504,6 @@ e_widget_radio_toggle_set(cfdata->o_disabled, 1 - enabled); } -/**--GUI--**/ static Evas_Object * _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { @@ -248,3 +562,4 @@ return o; } +#endif ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs