forked from enlightenment/efl
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:
parent
2b97e3a86a
commit
516e43fc09
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue