From 516e43fc097d6944d013ce72c4491a850a108a46 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 5 Aug 2003 14:33:35 +0000 Subject: [PATCH] you can add arbitary key/value pair strings to either 1 the edje file .eet as a whole and/or to each collection in the edje .eet file (different namespoaces with each collection having its own namespace) :) this shoudl make Rbdpngn happy :) SVN revision: 7288 --- legacy/edje/data/src/e_logo.edc | 15 +++++++-- legacy/edje/data/src/test.edc | 13 ++++++++ legacy/edje/src/bin/edje_cc_handlers.c | 34 ++++++++++++++++--- legacy/edje/src/bin/edje_main.c | 9 ++++-- legacy/edje/src/lib/Edje.h | 4 ++- legacy/edje/src/lib/edje_data.c | 10 ++++++ legacy/edje/src/lib/edje_load.c | 45 ++++++++++++++++++++++++++ legacy/edje/src/lib/edje_private.h | 13 +++++++- legacy/edje/src/lib/edje_util.c | 21 +++++++++++- 9 files changed, 153 insertions(+), 11 deletions(-) diff --git a/legacy/edje/data/src/e_logo.edc b/legacy/edje/data/src/e_logo.edc index 46af404ccb..6d28708dd7 100644 --- a/legacy/edje/data/src/e_logo.edc +++ b/legacy/edje/data/src/e_logo.edc @@ -124,11 +124,22 @@ images { image, "e120.png" LOSSY 95; } +data +{ + item, "My Data" "The string to attach to this data"; + item, "The Key" "String data attached to the key"; +} + collections { group { - min, 32 32; - max, 1024 768; name, "test"; + min, 32 32; + max, 1024 768; + data + { + item, "My Data" "The string to attach to this data"; + item, "The Key" "String data attached to the key"; + } parts { part { name, "background"; diff --git a/legacy/edje/data/src/test.edc b/legacy/edje/data/src/test.edc index 5165294967..31c914d346 100644 --- a/legacy/edje/data/src/test.edc +++ b/legacy/edje/data/src/test.edc @@ -10,6 +10,13 @@ images image, "e.png" COMP; /* compressed */ } +// data can be attached to the edje file as a whole. string key, value style +data +{ + item, "My Data" "The string to attach to this data"; + item, "The Key" "String data attached to the key"; +} + collections { group @@ -17,6 +24,12 @@ collections name, "test"; // min, 0 0; // max, 0 0; +// more data that can be attached per collection + data + { + item, "My Data" "The string to attach to this data"; + item, "The Key" "String data attached to the key"; + } parts { part diff --git a/legacy/edje/src/bin/edje_cc_handlers.c b/legacy/edje/src/bin/edje_cc_handlers.c index 0454e3e525..ddbfca90e6 100644 --- a/legacy/edje/src/bin/edje_cc_handlers.c +++ b/legacy/edje/src/bin/edje_cc_handlers.c @@ -5,14 +5,15 @@ static void ob_images(void); static void ob_images_image(void); static void st_images_image(void); +static void st_data_item(void); + static void ob_collections(void); static void ob_collections_group(void); static void st_collections_group_name(void); static void st_collections_group_min(void); static void st_collections_group_max(void); - -static void ob_collections_group_parts(void); +static void st_collections_group_data_item(void); static void ob_collections_group_parts_part(void); static void st_collections_group_parts_part_name(void); @@ -76,9 +77,11 @@ static void st_collections_group_programs_program_after(void); New_Statement_Handler statement_handlers[] = { {"images.image", st_images_image}, + {"data.item", st_data_item}, {"collections.group.name", st_collections_group_name}, {"collections.group.min", st_collections_group_min}, {"collections.group.max", st_collections_group_max}, + {"collections.group.data.item", st_collections_group_data_item}, {"collections.group.parts.part.name", st_collections_group_parts_part_name}, {"collections.group.parts.part.type", st_collections_group_parts_part_type}, {"collections.group.parts.part.effect", st_collections_group_parts_part_effect}, @@ -134,12 +137,16 @@ New_Object_Handler object_handlers[] = { {"images", ob_images}, {"images.image", ob_images_image}, + {"data", NULL}, + {"data.item", NULL}, {"collections", ob_collections}, {"collections.group", ob_collections_group}, {"collections.group.name", NULL}, {"collections.group.min", NULL}, {"collections.group.max", NULL}, - {"collections.group.parts", ob_collections_group_parts}, + {"collections.group.data", NULL}, + {"collections.group.data.item", NULL}, + {"collections.group.parts", NULL}, {"collections.group.parts.part", ob_collections_group_parts_part}, {"collections.group.parts.part.name", NULL}, {"collections.group.parts.part.type", NULL}, @@ -273,6 +280,17 @@ st_images_image(void) img->source_param = parse_int_range(2, 0, 100); } +static void +st_data_item(void) +{ + Edje_Data *di; + + di = calloc(1, sizeof(Edje_Data)); + di->key = parse_str(0); + di->value = parse_str(1); + edje_file->data = evas_list_append(edje_file->data, di); +} + static void ob_collections(void) { @@ -324,8 +342,16 @@ st_collections_group_max(void) } static void -ob_collections_group_parts(void) +st_collections_group_data_item(void) { + Edje_Part_Collection *pc; + Edje_Data *di; + + pc = evas_list_data(evas_list_last(edje_collections)); + di = calloc(1, sizeof(Edje_Data)); + di->key = parse_str(0); + di->value = parse_str(1); + pc->data = evas_list_append(pc->data, di); } static void diff --git a/legacy/edje/src/bin/edje_main.c b/legacy/edje/src/bin/edje_main.c index 04bb33acdb..4fcdda3087 100644 --- a/legacy/edje/src/bin/edje_main.c +++ b/legacy/edje/src/bin/edje_main.c @@ -497,6 +497,8 @@ test_list(char *file) Evas_List *collections = NULL; entries = edje_file_collection_list(file); +// printf("%s\n", edje_file_data_get(file, "My Data"); +// printf("%s\n", edje_file_data_get(file, "The Key"); { Collection *co; Evas_Object *o; @@ -658,8 +660,8 @@ test_setup(char *file, char *name) o = edje_object_add(evas); edje_object_file_set(o, file, name); - edje_object_signal_callback_add(o, "do_it", "the_source", cb, NULL); - edje_object_signal_callback_add(o, "mouse,*", "logo", cb, NULL); +// edje_object_signal_callback_add(o, "do_it", "the_source", cb, NULL); +// edje_object_signal_callback_add(o, "mouse,*", "logo", cb, NULL); evas_object_move(o, 10 + 10, 10 + 20); evas_object_show(o); edje_object_size_min_get(o, &(de->minw), &(de->minh)); @@ -669,6 +671,9 @@ test_setup(char *file, char *name) if (240 < de->minh) h = de->minh; evas_object_resize(o, w, h); de->edje = o; + +// printf("%s\n", edje_object_data_get(o, "My Data")); +// printf("%s\n", edje_object_data_get(o, "The Key")); /* test swallowing */ /* diff --git a/legacy/edje/src/lib/Edje.h b/legacy/edje/src/lib/Edje.h index 4f0f0f71a3..2c6e091ae6 100644 --- a/legacy/edje/src/lib/Edje.h +++ b/legacy/edje/src/lib/Edje.h @@ -13,13 +13,15 @@ extern "C" { void edje_freeze (void); void edje_thaw (void); - Evas_List *edje_file_collection_list (const char *file); + Evas_List *edje_file_collection_list (const char *file); void edje_file_collection_list_free (Evas_List *lst); + char *edje_file_data_get (const char *file, const char *key); void edje_extern_object_min_size_set (Evas_Object *obj, double minw, double minh); void edje_extern_object_max_size_set (Evas_Object *obj, double maxw, double maxh); Evas_Object *edje_object_add (Evas *evas); + const char *edje_object_data_get (Evas_Object *obj, const char *key); void edje_object_file_set (Evas_Object *o, const char *file, const char *part); void edje_object_file_get (Evas_Object *o, const char **file, const char **part); void edje_object_signal_callback_add (Evas_Object *o, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data); diff --git a/legacy/edje/src/lib/edje_data.c b/legacy/edje/src/lib/edje_data.c index f7c0860567..9a87c87623 100644 --- a/legacy/edje/src/lib/edje_data.c +++ b/legacy/edje/src/lib/edje_data.c @@ -2,6 +2,7 @@ #include "edje_private.h" Eet_Data_Descriptor *_edje_edd_edje_file = NULL; +Eet_Data_Descriptor *_edje_edd_edje_data = NULL; Eet_Data_Descriptor *_edje_edd_edje_image_directory = NULL; Eet_Data_Descriptor *_edje_edd_edje_image_directory_entry = NULL; Eet_Data_Descriptor *_edje_edd_edje_program = NULL; @@ -51,6 +52,13 @@ _edje_edd_setup(void) NEWD("Edje_Part_Collection_Directory", Edje_Part_Collection_Directory); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection_directory, Edje_Part_Collection_Directory, "entries", entries, _edje_edd_edje_part_collection_directory_entry); + + /* generic data attachment */ + _edje_edd_edje_data = + NEWD("Edje_Data", + Edje_Data); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "key", key, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "value", value, EET_T_STRING); /* the main file directory */ _edje_edd_edje_file = @@ -58,6 +66,7 @@ _edje_edd_setup(void) Edje_File); EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", image_dir, _edje_edd_edje_image_directory); EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", collection_dir, _edje_edd_edje_part_collection_directory); + EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "data", data, _edje_edd_edje_data); /* parts & programs - loaded induvidually */ _edje_edd_edje_program_target = @@ -177,6 +186,7 @@ _edje_edd_setup(void) Edje_Part_Collection); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "programs", programs, _edje_edd_edje_program); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "parts", parts, _edje_edd_edje_part); + EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "data", data, _edje_edd_edje_data); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.w", prop.min.w, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.h", prop.min.h, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.max.w", prop.max.w, EET_T_INT); diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index d887808f70..ed79988ae3 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -235,6 +235,51 @@ edje_file_collection_list_free(Evas_List *lst) } } +char * +edje_file_data_get(const char *file, const char *key) +{ + Eet_File *ef = NULL; + Edje_File *ed_file; + Evas_List *l; + char *str = NULL; + + ed_file = evas_hash_find(_edje_file_hash, file); + if (!ed_file) + { + ef = eet_open((char *)file, EET_FILE_MODE_READ); + if (!ef) return NULL; + ed_file = eet_data_read(ef, _edje_edd_edje_file, "edje_file"); + if (!ed_file) + { + eet_close(ef); + return NULL; + } + eet_close(ef); + ed_file->path = strdup(file); + ed_file->collection_hash = NULL; + ed_file->references = 1; + _edje_file_hash = evas_hash_add(_edje_file_hash, ed_file->path, ed_file); + } + else + ed_file->references++; + printf("beh\n"); + for (l = ed_file->data; l; l = l->next) + { + Edje_Data *di; + + di = l->data; + if (!strcmp(di->key, key)) + { + printf("STR: %s\n", di->key); + str = strdup(di->value); + break; + } + } + ed_file->references--; + if (ed_file->references <= 0) _edje_file_free(ed_file); + return str; +} + void _edje_file_add(Edje *ed) { diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 0430b95b3a..24133a43c4 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -60,13 +60,13 @@ * or, STR "my_string" == "smelly"; * ... * - * ? key/value pair config values per colelction and per edje file * ? add containering (hbox, vbox, table, wrapping multi-line hbox & vbox) * ? text entry widget (single line only) * ? reduce linked list walking and list_nth calls */ typedef struct _Edje_File Edje_File; +typedef struct _Edje_Data Edje_Data; typedef struct _Edje_Image_Directory Edje_Image_Directory; typedef struct _Edje_Image_Directory_Entry Edje_Image_Directory_Entry; typedef struct _Edje_Program Edje_Program; @@ -123,6 +123,7 @@ struct _Edje_File Edje_Image_Directory *image_dir; Edje_Part_Collection_Directory *collection_dir; + Evas_List *data; Evas_Hash *collection_hash; int references; @@ -130,6 +131,14 @@ struct _Edje_File /*----------*/ +struct _Edje_Data +{ + char *key; + char *value; +}; + +/*----------*/ + struct _Edje_Image_Directory { Evas_List *entries; /* a list of Edje_Image_Directory_Entry */ @@ -199,6 +208,7 @@ struct _Edje_Part_Collection { Evas_List *programs; /* a list of Edje_Program */ Evas_List *parts; /* a list of Edje_Part */ + Evas_List *data; int id; /* the collection id */ @@ -557,6 +567,7 @@ void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Ob extern Eet_Data_Descriptor *_edje_edd_edje_file; +extern Eet_Data_Descriptor *_edje_edd_edje_data; extern Eet_Data_Descriptor *_edje_edd_edje_image_directory; extern Eet_Data_Descriptor *_edje_edd_edje_image_directory_entry; extern Eet_Data_Descriptor *_edje_edd_edje_program; diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index f88fbf6850..3ca6276f34 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -19,6 +19,26 @@ edje_thaw(void) edje_object_thaw((Evas_Object *)(l->data)); } +const char * +edje_object_data_get(Evas_Object *obj, const char *key) +{ + Edje *ed; + Evas_List *l; + + ed = _edje_fetch(obj); + if ((!ed) || (!key)) + return NULL; + if (!ed->collection) return NULL; + for (l = ed->collection->data; l; l = l->next) + { + Edje_Data *di; + + di = l->data; + if (!strcmp(di->key, key)) return (const char *)di->value; + } + return NULL; +} + int edje_object_freeze(Evas_Object *obj) { @@ -543,7 +563,6 @@ edje_object_part_state_get(Evas_Object *obj, const char *part, double *val_ret) - Edje_Real_Part * _edje_real_part_get(Edje *ed, char *part) {