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" \
"}\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 \
"void\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" \
"}\n\n"
#define H_CODEGEN_PART_SET \
"void %s_%s_set(Evas_Object *o, %svalue);\n"
#define H_CODEGEN_PART_SWALLOW_SET \
"void %s_%s_set(Evas_Object *o, Evas_Object *value);\n"
#define C_CODEGEN_PART_GET \
"%s\n" \
#define C_CODEGEN_PART_TEXT_GET \
"const char *\n" \
"%s_%s_get(const Evas_Object *o)\n" \
"{\n" \
" return edje_object_part_%s_get(o, \"%s\");\n" \
" return edje_object_part_text_get(o, \"%s\");\n" \
"}\n\n"
#define H_CODEGEN_PART_GET \
"%s %s_%s_get(const Evas_Object *o);\n"
#define H_CODEGEN_PART_TEXT_GET \
"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 \
"void\n" \
@ -193,26 +336,6 @@ _close_file_descriptors(void)
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
_write_headers(const char *filename)
{
@ -273,25 +396,22 @@ _write_object_get(void)
static Eina_Bool
_write_part(const char *apiname, const char *partname,
const char *parttype, const char *description)
Edje_Part_Type parttype, const char *description)
{
char buf[512];
const char *type, *template;
if (!strcmp(parttype, "text"))
{
type = "const char *";
template = C_CODEGEN_PART_TEXT_SET;
}
else
{
type = "Evas_Object *";
template = C_CODEGEN_PART_SWALLOW_SET;
}
snprintf(buf, sizeof(buf), template, prefix, apiname, partname);
if (fwrite(buf, strlen(buf), 1, source_fd) != 1)
goto err;
#define TEMPLATE_NAME(sufix) \
do { \
snprintf(buf, sizeof(buf), C_CODEGEN_PART_##sufix, prefix, \
apiname, partname); \
if (fwrite(buf, strlen(buf), 1, source_fd) != 1) \
goto err; \
snprintf(buf, sizeof(buf), H_CODEGEN_PART_##sufix, prefix, \
apiname); \
if (fwrite(buf, strlen(buf), 1, header_fd) != 1) \
goto err; \
} while(0)
if (description)
{
@ -300,19 +420,38 @@ _write_part(const char *apiname, const char *partname,
goto err;
}
snprintf(buf, sizeof(buf), H_CODEGEN_PART_SET, prefix, apiname,
type);
if (fwrite(buf, strlen(buf), 1, header_fd) != 1)
goto err;
switch (parttype)
{
case EDJE_PART_TYPE_BOX:
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);
if (fwrite(buf, strlen(buf), 1, header_fd) != 1)
goto err;
case EDJE_PART_TYPE_TABLE:
TEMPLATE_NAME(TABLE_PACK);
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,
parttype, partname);
if (fwrite(buf, strlen(buf), 1, source_fd) != 1)
goto err;
case EDJE_PART_TYPE_TEXT:
TEMPLATE_NAME(TEXT_SET);
TEMPLATE_NAME(TEXT_GET);
break;
default:
TEMPLATE_NAME(SWALLOW_SET);
TEMPLATE_NAME(SWALLOW_GET);
break;
}
#undef TEMPLATE_NAME
return EINA_TRUE;
@ -383,15 +522,18 @@ _parse_parts(Evas_Object *ed)
}
type = edje_edit_part_type_get(ed, name);
typename = _part_type_name_get(type);
if (!typename)
if (!((type == EDJE_PART_TYPE_TEXT) ||
(type == EDJE_PART_TYPE_SWALLOW) ||
(type == EDJE_PART_TYPE_BOX) ||
(type == EDJE_PART_TYPE_TABLE)))
{
ERR("Invalid part type %d", type);
free(apiname);
continue;
}
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;
edje_edit_string_free(description);