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
This commit is contained in:
Carsten Haitzler 2003-08-05 14:33:35 +00:00
parent 2b97e3a86a
commit 516e43fc09
9 changed files with 153 additions and 11 deletions

View File

@ -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";

View File

@ -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

View File

@ -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

View File

@ -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 */
/*

View File

@ -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);

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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)
{