edje_codegen: adding support for BOX and TABLE

Adding the follow functions if the part is a BOX:

 - edje_object_part_box_append
 - edje_object_part_box_prepend
 - edje_object_part_box_insert_before
 - edje_object_part_box_insert_at
 - edje_object_part_box_remove
 - edje_object_part_box_remove_at
 - edje_object_part_box_remove_all

or if the part is a TABLE:

 - edje_object_part_table_pack
 - edje_object_part_table_unpack
 - edje_object_part_table_clear
 - edje_object_part_table_child_get
 - edje_object_part_table_col_row_size_get



SVN revision: 76687
This commit is contained in:
Flavio Vinicius Alvares Ceolin 2012-09-14 18:20:31 +00:00
parent 6eed27ec07
commit 2da400cd21
1 changed files with 198 additions and 56 deletions

View File

@ -70,6 +70,9 @@ static FILE *header_fd = NULL;
" edje_object_part_text_set(o, \"%s\", value);\n" \ " edje_object_part_text_set(o, \"%s\", value);\n" \
"}\n\n" "}\n\n"
#define H_CODEGEN_PART_TEXT_SET \
"void %s_%s_set(Evas_Object *o, const char *value);\n"
#define C_CODEGEN_PART_SWALLOW_SET \ #define C_CODEGEN_PART_SWALLOW_SET \
"void\n" \ "void\n" \
"%s_%s_set(Evas_Object *o, Evas_Object *value)\n" \ "%s_%s_set(Evas_Object *o, Evas_Object *value)\n" \
@ -77,18 +80,158 @@ static FILE *header_fd = NULL;
" edje_object_part_swallow(o, \"%s\", value);\n" \ " edje_object_part_swallow(o, \"%s\", value);\n" \
"}\n\n" "}\n\n"
#define H_CODEGEN_PART_SET \ #define H_CODEGEN_PART_SWALLOW_SET \
"void %s_%s_set(Evas_Object *o, %svalue);\n" "void %s_%s_set(Evas_Object *o, Evas_Object *value);\n"
#define C_CODEGEN_PART_GET \ #define C_CODEGEN_PART_TEXT_GET \
"%s\n" \ "const char *\n" \
"%s_%s_get(const Evas_Object *o)\n" \ "%s_%s_get(const Evas_Object *o)\n" \
"{\n" \ "{\n" \
" return edje_object_part_%s_get(o, \"%s\");\n" \ " return edje_object_part_text_get(o, \"%s\");\n" \
"}\n\n" "}\n\n"
#define H_CODEGEN_PART_GET \ #define H_CODEGEN_PART_TEXT_GET \
"%s %s_%s_get(const Evas_Object *o);\n" "const char *%s_%s_get(const Evas_Object *o);\n"
#define C_CODEGEN_PART_SWALLOW_GET \
"Evas_Object *\n" \
"%s_%s_get(const Evas_Object *o)\n" \
"{\n" \
" return edje_object_part_swallow_get(o, \"%s\");\n" \
"}\n\n"
#define H_CODEGEN_PART_SWALLOW_GET \
"Evas_Object *%s_%s_get(const Evas_Object *o);\n"
#define C_CODEGEN_PART_BOX_APPEND \
"Eina_Bool\n" \
"%s_%s_append(Evas_Object *o, Evas_Object *child)\n" \
"{\n" \
" return edje_object_part_box_append(o, \"%s\", child);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_APPEND \
"Eina_Bool %s_%s_append(Evas_Object *o, Evas_Object *child);\n"
#define C_CODEGEN_PART_BOX_PREPEND \
"Eina_Bool\n" \
"%s_%s_prepend(Evas_Object *o, Evas_Object *child)\n" \
"{\n" \
" return edje_object_part_box_prepend(o, \"%s\", child);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_PREPEND \
"Eina_Bool %s_%s_prepend(Evas_Object *o, Evas_Object *child);\n"
#define C_CODEGEN_PART_BOX_INSERT_BEFORE \
"Eina_Bool\n" \
"%s_%s_insert_before(Evas_Object *o, Evas_Object *child, " \
"const Evas_Object *reference)\n" \
"{\n" \
" return edje_object_part_box_insert_before(o, \"%s\", " \
"child, reference);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_INSERT_BEFORE \
"Eina_Bool %s_%s_insert_before(Evas_Object *o, Evas_Object *child, " \
"const Evas_Object *reference);\n"
#define C_CODEGEN_PART_BOX_INSERT_AT \
"Eina_Bool\n" \
"%s_%s_insert_at(Evas_Object *o, Evas_Object *child, unsigned int pos)\n" \
"{\n" \
" return edje_object_part_box_insert_at(o, \"%s\", child, pos);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_INSERT_AT \
"Eina_Bool %s_%s_insert_at(Evas_Object *o, Evas_Object *child, " \
"unsigned int pos);\n"
#define C_CODEGEN_PART_BOX_REMOVE \
"Evas_Object *\n" \
"%s_%s_remove(Evas_Object *o, Evas_Object *child)\n" \
"{\n" \
" return edje_object_part_box_remove(o, \"%s\", child);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_REMOVE \
"Evas_Object *%s_%s_remove(Evas_Object *o, Evas_Object *child);\n"
#define C_CODEGEN_PART_BOX_REMOVE_AT \
"Evas_Object *\n" \
"%s_%s_remove_at(Evas_Object *o, unsigned int pos)\n" \
"{\n" \
" return edje_object_part_box_remove_at(o, \"%s\", pos);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_REMOVE_AT \
"Evas_Object *%s_%s_remove_at(Evas_Object *o, unsigned int pos);\n"
#define C_CODEGEN_PART_BOX_REMOVE_ALL \
"Eina_Bool\n" \
"%s_%s_remove_all(Evas_Object *o, Eina_Bool clear)\n" \
"{\n" \
" return edje_object_part_box_remove_all(o, \"%s\", clear);\n" \
"}\n\n"
#define H_CODEGEN_PART_BOX_REMOVE_ALL \
"Eina_Bool %s_%s_remove_all(Evas_Object *o, Eina_Bool clear);\n"
#define C_CODEGEN_PART_TABLE_CHILD_GET \
"Evas_Object *\n" \
"%s_%s_child_get(Evas_Object *o, unsigned int col, unsigned int row)\n" \
"{\n" \
" return edje_object_part_table_child_get(o, \"%s\", col, row);\n" \
"}\n\n"
#define H_CODEGEN_PART_TABLE_CHILD_GET \
"Evas_Object * %s_%s_child_get(Evas_Object *o, unsigned int col, " \
"unsigned int row);\n"
#define C_CODEGEN_PART_TABLE_PACK \
"Eina_Bool\n" \
"%s_%s_pack(Evas_Object *o, Evas_Object *child, unsigned short col, " \
"unsigned short row, unsigned short colspan, unsigned short rowspan)\n" \
"{\n" \
" return edje_object_part_table_pack(o, \"%s\", child, col, row, " \
"colspan, rowspan);\n" \
"}\n\n"
#define H_CODEGEN_PART_TABLE_PACK \
"Eina_Bool %s_%s_pack(Evas_Object *o, Evas_Object *child, " \
"unsigned short col, unsigned short row, unsigned short " \
"colspan, unsigned short rowspan);\n"
#define C_CODEGEN_PART_TABLE_UNPACK \
"Eina_Bool\n" \
"%s_%s_unpack(Evas_Object *o, Evas_Object *child)\n" \
"{\n" \
" return edje_object_part_table_unpack(o, \"%s\", child);\n" \
"}\n\n"
#define H_CODEGEN_PART_TABLE_UNPACK \
"Eina_Bool %s_%s_unpack(Evas_Object *o, Evas_Object *child);\n"
#define C_CODEGEN_PART_TABLE_CLEAR \
"Eina_Bool\n" \
"%s_%s_clear(Evas_Object *o, Eina_Bool clear)\n" \
"{\n" \
" return edje_object_part_table_clear(o, \"%s\", clear);\n" \
"}\n\n"
#define H_CODEGEN_PART_TABLE_CLEAR \
"Eina_Bool %s_%s_clear(Evas_Object *o, Eina_Bool clear);\n"
#define C_CODEGEN_PART_TABLE_COL_ROW_SIZE_GET \
"Eina_Bool\n" \
"%s_%s_col_row_size_get(Evas_Object *o, int *cols, int *rows)\n" \
"{\n" \
" return edje_object_part_table_col_row_size_get(o, \"%s\", " \
"cols, rows);\n" \
"}\n\n"
#define H_CODEGEN_PART_TABLE_COL_ROW_SIZE_GET \
"Eina_Bool %s_%s_col_row_size_get(Evas_Object *o, int *cols, int *rows);\n"
#define C_CODEGEN_PROGRAM_EMIT \ #define C_CODEGEN_PROGRAM_EMIT \
"void\n" \ "void\n" \
@ -193,26 +336,6 @@ _close_file_descriptors(void)
return ret; return ret;
} }
static const char *
_part_type_name_get(Edje_Part_Type t)
{
switch (t)
{
case EDJE_PART_TYPE_TEXT:
return "text";
case EDJE_PART_TYPE_SWALLOW:
return "swallow";
case EDJE_PART_TYPE_NONE:
case EDJE_PART_TYPE_LAST:
ERR("Invalid part type %d", t);
default:
return NULL;
}
return NULL;
}
static Eina_Bool static Eina_Bool
_write_headers(const char *filename) _write_headers(const char *filename)
{ {
@ -273,25 +396,22 @@ _write_object_get(void)
static Eina_Bool static Eina_Bool
_write_part(const char *apiname, const char *partname, _write_part(const char *apiname, const char *partname,
const char *parttype, const char *description) Edje_Part_Type parttype, const char *description)
{ {
char buf[512]; char buf[512];
const char *type, *template; const char *type, *template;
if (!strcmp(parttype, "text")) #define TEMPLATE_NAME(sufix) \
{ do { \
type = "const char *"; snprintf(buf, sizeof(buf), C_CODEGEN_PART_##sufix, prefix, \
template = C_CODEGEN_PART_TEXT_SET; apiname, partname); \
} if (fwrite(buf, strlen(buf), 1, source_fd) != 1) \
else goto err; \
{ snprintf(buf, sizeof(buf), H_CODEGEN_PART_##sufix, prefix, \
type = "Evas_Object *"; apiname); \
template = C_CODEGEN_PART_SWALLOW_SET; if (fwrite(buf, strlen(buf), 1, header_fd) != 1) \
} goto err; \
} while(0)
snprintf(buf, sizeof(buf), template, prefix, apiname, partname);
if (fwrite(buf, strlen(buf), 1, source_fd) != 1)
goto err;
if (description) if (description)
{ {
@ -300,19 +420,38 @@ _write_part(const char *apiname, const char *partname,
goto err; goto err;
} }
snprintf(buf, sizeof(buf), H_CODEGEN_PART_SET, prefix, apiname, switch (parttype)
type); {
if (fwrite(buf, strlen(buf), 1, header_fd) != 1) case EDJE_PART_TYPE_BOX:
goto err; TEMPLATE_NAME(BOX_APPEND);
TEMPLATE_NAME(BOX_PREPEND);
TEMPLATE_NAME(BOX_INSERT_BEFORE);
TEMPLATE_NAME(BOX_INSERT_AT);
TEMPLATE_NAME(BOX_REMOVE);
TEMPLATE_NAME(BOX_REMOVE_AT);
TEMPLATE_NAME(BOX_REMOVE_ALL);
break;
snprintf(buf, sizeof(buf), H_CODEGEN_PART_GET, type, prefix, apiname); case EDJE_PART_TYPE_TABLE:
if (fwrite(buf, strlen(buf), 1, header_fd) != 1) TEMPLATE_NAME(TABLE_PACK);
goto err; TEMPLATE_NAME(TABLE_UNPACK);
TEMPLATE_NAME(TABLE_CHILD_GET);
TEMPLATE_NAME(TABLE_CLEAR);
TEMPLATE_NAME(TABLE_COL_ROW_SIZE_GET);
break;
snprintf(buf, sizeof(buf), C_CODEGEN_PART_GET, type, prefix, apiname, case EDJE_PART_TYPE_TEXT:
parttype, partname); TEMPLATE_NAME(TEXT_SET);
if (fwrite(buf, strlen(buf), 1, source_fd) != 1) TEMPLATE_NAME(TEXT_GET);
goto err; break;
default:
TEMPLATE_NAME(SWALLOW_SET);
TEMPLATE_NAME(SWALLOW_GET);
break;
}
#undef TEMPLATE_NAME
return EINA_TRUE; return EINA_TRUE;
@ -383,15 +522,18 @@ _parse_parts(Evas_Object *ed)
} }
type = edje_edit_part_type_get(ed, name); type = edje_edit_part_type_get(ed, name);
typename = _part_type_name_get(type); if (!((type == EDJE_PART_TYPE_TEXT) ||
if (!typename) (type == EDJE_PART_TYPE_SWALLOW) ||
(type == EDJE_PART_TYPE_BOX) ||
(type == EDJE_PART_TYPE_TABLE)))
{ {
ERR("Invalid part type %d", type);
free(apiname); free(apiname);
continue; continue;
} }
description = edje_edit_part_api_description_get(ed, name); description = edje_edit_part_api_description_get(ed, name);
if (!_write_part(apiname, name, typename, description)) if (!_write_part(apiname, name, type, description))
{ {
ret = EINA_FALSE; ret = EINA_FALSE;
edje_edit_string_free(description); edje_edit_string_free(description);