From b3730d41574f65c305a6703eca0b86e636ab598a Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sun, 28 Aug 2011 07:18:00 +0000 Subject: [PATCH] clouseau: Add some basic code to handle eet dump/load of the obj tree. SVN revision: 62908 --- src/lib/Makefile.am | 3 +- src/lib/eet_dump.c | 95 ++++++++++++++++++++++++++++++++++++ src/lib/eet_dump.h | 10 ++++ src/lib/libclouseau.c | 1 - src/lib/libclouseau.h | 6 +-- src/lib/ui/obj_information.h | 10 ++-- 6 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 src/lib/eet_dump.c create mode 100644 src/lib/eet_dump.h diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 3310988..a8a9bb9 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -17,7 +17,8 @@ pkg_LTLIBRARIES = libclouseau.la libclouseau_la_SOURCES = \ libclouseau.c \ - ui/obj_information.c + ui/obj_information.c \ + eet_dump.c libclouseau_la_LDFLAGS = -module -avoid-version -rdynamic libclouseau_la_DEPENDENCIES = $(top_builddir)/config.h diff --git a/src/lib/eet_dump.c b/src/lib/eet_dump.c new file mode 100644 index 0000000..6558fcd --- /dev/null +++ b/src/lib/eet_dump.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "libclouseau.h" + +static const char EET_ENTRY[] = "obj_tree"; + +static Eet_Data_Descriptor * _Tree_Item_descriptor; +static Eet_Data_Descriptor * _Obj_Information_descriptor; + +void +eet_dump_tree_item_descriptor_init(void) +{ + Eet_Data_Descriptor_Class eddc; + + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Tree_Item); + _Tree_Item_descriptor = eet_data_descriptor_stream_new(&eddc); + + //EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Obj_Information); +// _Obj_Information_descriptor = eet_data_descriptor_stream_new(&eddc); +// +#define ITEM_TREE_ADD_BASIC(member, eet_type)\ + EET_DATA_DESCRIPTOR_ADD_BASIC\ + (_Tree_Item_descriptor, Tree_Item, # member, member, eet_type) +#define OBJ_INFORMATION_ADD_BASIC(member, eet_type)\ + EET_DATA_DESCRIPTOR_ADD_BASIC\ + (_Obj_Information_descriptor, Obj_Information, # member, member, eet_type) + + ITEM_TREE_ADD_BASIC(name, EET_T_STRING); + /* FIXME: So fragile, should handle it properly!!! */ + ITEM_TREE_ADD_BASIC(ptr, EET_T_UINT); + ITEM_TREE_ADD_BASIC(is_obj, EET_T_UCHAR); + ITEM_TREE_ADD_BASIC(is_clipper, EET_T_UCHAR); + ITEM_TREE_ADD_BASIC(is_visible, EET_T_UCHAR); + + EET_DATA_DESCRIPTOR_ADD_LIST + (_Tree_Item_descriptor, Tree_Item, "children", children, + _Tree_Item_descriptor); + +#undef ITEM_TREE_ADD_BASIC +#undef OBJ_INFORMATION_ADD_BASIC +} + +void +eet_dump_tree_item_descriptor_shutdown(void) +{ + eet_data_descriptor_free(_Obj_Information_descriptor); + eet_data_descriptor_free(_Tree_Item_descriptor); +} + +Tree_Item * +eet_dump_tree_item_load(const char *filename) +{ + Tree_Item *treeit; + Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ); + if (!ef) + { + fprintf(stderr, "ERROR: could not open '%s' for reading.\n", filename); + return NULL; + } + + treeit = eet_data_read(ef, _Tree_Item_descriptor, EET_ENTRY); + if (!treeit) + goto end; + +end: + eet_close(ef); + return treeit; +} + +Eina_Bool +eet_dump_tree_item_save(const Tree_Item *treeit, const char *filename) +{ + Eet_File * ef; + Eina_Bool ret; + + ef = eet_open(filename, EET_FILE_MODE_WRITE); + if (!ef) + { + fprintf(stderr, "ERROR: could not open '%s' for writing.\n", filename); + return EINA_FALSE; + } + + ret = eet_data_write + (ef, _Tree_Item_descriptor, EET_ENTRY, treeit, EINA_TRUE); + eet_close(ef); + + return ret; +} + diff --git a/src/lib/eet_dump.h b/src/lib/eet_dump.h new file mode 100644 index 0000000..aeb5ad3 --- /dev/null +++ b/src/lib/eet_dump.h @@ -0,0 +1,10 @@ +#ifndef _EET_DUMP_H +#define _EET_DUMP_H + +void eet_dump_tree_item_descriptor_init(void); +void eet_dump_tree_item_descriptor_shutdown(void); +Tree_Item *eet_dump_tree_load(const char *filename); + +Eina_Bool eet_dump_tree_save(const Tree_Item *treeit, const char *filename); + +#endif diff --git a/src/lib/libclouseau.c b/src/lib/libclouseau.c index e9f687b..e95c875 100644 --- a/src/lib/libclouseau.c +++ b/src/lib/libclouseau.c @@ -274,7 +274,6 @@ _load_list(Evas_Object *gl) glflag, NULL, NULL); } } - } static void diff --git a/src/lib/libclouseau.h b/src/lib/libclouseau.h index ce78893..a327fd5 100644 --- a/src/lib/libclouseau.h +++ b/src/lib/libclouseau.h @@ -22,8 +22,8 @@ struct _Tree_Item Eina_List *children; const char *name; void *ptr; - Eina_Bool is_obj : 1; - Eina_Bool is_clipper : 1; - Eina_Bool is_visible : 1; + Eina_Bool is_obj; + Eina_Bool is_clipper; + Eina_Bool is_visible; }; #endif diff --git a/src/lib/ui/obj_information.h b/src/lib/ui/obj_information.h index 280b2e3..63124a2 100644 --- a/src/lib/ui/obj_information.h +++ b/src/lib/ui/obj_information.h @@ -15,8 +15,8 @@ struct _Obj_Information double align_x, align_y; double weight_x, weight_y; int r, g, b, a; - Eina_Bool is_clipper : 1; - Eina_Bool is_visible : 1; + Eina_Bool is_clipper; + Eina_Bool is_visible; } evas_props; enum { @@ -32,9 +32,9 @@ struct _Obj_Information const char *type; const char *style; double scale; - Eina_Bool is_disabled : 1; - Eina_Bool is_mirrored : 1; - Eina_Bool is_mirrored_automatic : 1; + Eina_Bool is_disabled; + Eina_Bool is_mirrored; + Eina_Bool is_mirrored_automatic; } elm; struct { const char *font;