From ff30cfcfe3cea86c9b40f655cab7e76dda2af5f3 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Sat, 30 Dec 2006 21:00:19 +0000 Subject: [PATCH] Functions to create new config and del config. SVN revision: 27676 --- src/bin/e_gadcon.c | 86 ++++++++++++++++++++++++++--------- src/bin/e_gadcon.h | 2 + src/bin/e_int_gadcon_config.c | 32 +------------ 3 files changed, 69 insertions(+), 51 deletions(-) diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c index eb69eead4..3b394c56a 100644 --- a/src/bin/e_gadcon.c +++ b/src/bin/e_gadcon.c @@ -632,11 +632,13 @@ e_gadcon_dnd_window_get(E_Gadcon *gc) } EAPI E_Config_Gadcon_Client * -e_gadcon_client_config_get(E_Gadcon *gc, const char *name, const char *id) +e_gadcon_client_config_new(E_Gadcon *gc, const char *name) { Evas_List *l; - E_Config_Gadcon *cf_gc = NULL; - E_Config_Gadcon_Client *cf_gcc = NULL; + E_Config_Gadcon *cf_gc; + E_Config_Gadcon_Client *cf_gcc; + int id = 0; + char buf[256]; E_OBJECT_CHECK_RETURN(gc, NULL); E_OBJECT_TYPE_CHECK_RETURN(gc, E_GADCON_TYPE, NULL); @@ -647,12 +649,46 @@ e_gadcon_client_config_get(E_Gadcon *gc, const char *name, const char *id) for (l = cf_gc->clients; l; l = l->next) { cf_gcc = l->data; - if ((!strcmp(cf_gcc->name, name)) && - (!strcmp(cf_gcc->id, id))) + if (!strcmp(name, cf_gcc->name)) id++; + } + snprintf(buf, sizeof(buf), "%s.%s.%i", cf_gc->id, name, id); + + cf_gcc = E_NEW(E_Config_Gadcon_Client, 1); + if (!cf_gcc) return NULL; + cf_gcc->name = evas_stringshare_add(name); + 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; + cf_gc->clients = evas_list_append(cf_gc->clients, cf_gcc); + e_config_save_queue(); + return cf_gcc; +} + +EAPI E_Config_Gadcon_Client * +e_gadcon_client_config_get(E_Gadcon *gc, const char *name, const char *id) +{ + Evas_List *l; + E_Config_Gadcon *cf_gc = NULL; + E_Config_Gadcon_Client *cf_gcc = NULL; + + E_OBJECT_CHECK_RETURN(gc, NULL); + E_OBJECT_TYPE_CHECK_RETURN(gc, E_GADCON_TYPE, NULL); + + cf_gc = e_gadcon_config_get(gc->name, gc->id); + if (!cf_gc) return NULL; + for (l = cf_gc->clients; l; l = l->next) + { + cf_gcc = l->data; + if (!strcmp(cf_gcc->id, id)) { return cf_gcc; } } + if (!name) return NULL; cf_gcc = E_NEW(E_Config_Gadcon_Client, 1); if (!cf_gcc) return NULL; @@ -669,6 +705,27 @@ e_gadcon_client_config_get(E_Gadcon *gc, const char *name, const char *id) return cf_gcc; } +EAPI void +e_gadcon_client_config_del(E_Gadcon *gc, const char *id) +{ + E_Config_Gadcon *cf_gc; + E_Config_Gadcon_Client *cf_gcc; + + cf_gc = e_gadcon_config_get(gc->name, gc->id); + if (cf_gc) + { + cf_gcc = e_gadcon_client_config_get(gc, NULL, id); + if (cf_gcc) + { + 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); + cf_gc->clients = evas_list_remove(cf_gc->clients, cf_gcc); + free(cf_gcc); + } + } +} + EAPI E_Gadcon_Client * e_gadcon_client_new(E_Gadcon *gc, const char *style, Evas_Object *base_obj) { @@ -1903,29 +1960,16 @@ _e_gadcon_cb_drag_finished(E_Drag *drag, int dropped) // This should result in a reorder, not a remove. E_Gadcon_Client *gcc; E_Gadcon *gc; - E_Config_Gadcon *cf_gc = NULL; - E_Config_Gadcon_Client *cf_gcc; - + gcc = drag->data; gc = gcc->gadcon; - cf_gc = e_gadcon_config_get(gc->name, gc->id); - if (cf_gc) - { - cf_gcc = e_gadcon_client_config_get(gc, gcc->name, gcc->id); - if (cf_gcc) - { - 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); - cf_gc->clients = evas_list_remove(cf_gc->clients, cf_gcc); - free(cf_gcc); - } - } + e_gadcon_client_config_del(gc, gcc->id); e_object_unref(E_OBJECT(drag->data)); e_gadcon_unpopulate(gc); e_gadcon_populate(gc); e_config_save_queue(); + e_gadcon_edit_begin(gc); } /* a smart object JUST for gadcon */ diff --git a/src/bin/e_gadcon.h b/src/bin/e_gadcon.h index 678f7b2df..eddbbb486 100644 --- a/src/bin/e_gadcon.h +++ b/src/bin/e_gadcon.h @@ -178,7 +178,9 @@ EAPI void e_gadcon_util_menu_attach_func_set(E_Gadcon *gc, void (*fu EAPI void e_gadcon_dnd_window_set(E_Gadcon *gc, Ecore_X_Window win); EAPI Ecore_X_Window e_gadcon_dnd_window_get(E_Gadcon *gc); +EAPI E_Config_Gadcon_Client *e_gadcon_client_config_new(E_Gadcon *gc, const char *name); EAPI E_Config_Gadcon_Client *e_gadcon_client_config_get(E_Gadcon *gc, const char *name, const char *id); +EAPI void e_gadcon_client_config_del(E_Gadcon *gc, const char *id); EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, const char *style, Evas_Object *base_obj); EAPI void e_gadcon_client_edit_begin(E_Gadcon_Client *gcc); EAPI void e_gadcon_client_edit_end(E_Gadcon_Client *gcc); diff --git a/src/bin/e_int_gadcon_config.c b/src/bin/e_int_gadcon_config.c index c4c589a5a..4e1a6ccde 100644 --- a/src/bin/e_int_gadcon_config.c +++ b/src/bin/e_int_gadcon_config.c @@ -93,23 +93,12 @@ _cb_select_client_instance(void *data) static void _cb_add_instance(void *data, void *data2) { - char buf[1024]; - int id = 0; E_Config_Dialog_Data *cfdata; - E_Config_Gadcon_Client *cf_gcc; - Evas_List *l; cfdata = data; if (!cfdata) return; - for (l = cfdata->cf_gc->clients; l; l = l->next) - { - cf_gcc = l->data; - if (!strcmp(cfdata->name_add, cf_gcc->name)) id++; - } - snprintf(buf, sizeof(buf), "%s.%s.%i", cfdata->cf_gc->id, cfdata->name_add, id); - - e_gadcon_client_config_get(cfdata->gc, cfdata->name_add, buf); + e_gadcon_client_config_new(cfdata->gc, cfdata->name_add); e_gadcon_unpopulate(cfdata->gc); e_gadcon_populate(cfdata->gc); @@ -124,29 +113,12 @@ static void _cb_remove_instance(void *data, void *data2) { E_Config_Dialog_Data *cfdata; - Evas_List *l; int i; cfdata = data; i = e_widget_ilist_selected_get(cfdata->o_instances); - - for (l = cfdata->cf_gc->clients; l; l = l->next) - { - E_Config_Gadcon_Client *cf_gcc; - cf_gcc = l->data; - if (!cf_gcc) continue; - if (!cf_gcc->name) continue; - if (!strcmp(cf_gcc->id, cfdata->id_remove)) - { - 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); - cfdata->cf_gc->clients = evas_list_remove(cfdata->cf_gc->clients, cf_gcc); - free(cf_gcc); - break; - } - } + e_gadcon_client_config_del(cfdata->gc, cfdata->id_remove); _load_selected_gadgets(cfdata);