frame: Implement content set/get/unset

Not a huge fan of my macro as it uses efl_part() where a direct call
could be possible, depending on the widget (win can, frame can't).

See D5241
This commit is contained in:
Jean-Philippe Andre 2017-10-16 20:58:46 +09:00
parent c9c9e6a209
commit b5c241ca08
5 changed files with 36 additions and 28 deletions

View File

@ -238,7 +238,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in
hbox = efl_add(EFL_UI_BOX_CLASS, win,
efl_ui_direction_set(efl_added, EFL_UI_DIR_HORIZONTAL));
elm_object_content_set(f, hbox);
efl_content_set(f, hbox);
efl_pack_padding_set(hbox, 10, 0, EINA_TRUE);
@ -481,7 +481,7 @@ test_ui_box(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in
efl_pack_padding_set(bx, 10, 10, EINA_TRUE);
efl_gfx_size_hint_align_set(bx, 0.5, 0.5);
efl_gfx_size_hint_weight_set(bx, 1, 1);
elm_object_content_set(f, bx);
efl_content_set(f, bx);
objects[i++] = o = elm_button_add(win);
elm_object_text_set(o, "Btn1");

View File

@ -211,17 +211,22 @@ _efl_ui_frame_class_constructor(Efl_Class *klass)
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
}
/* Default text (title) and content */
ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_ui_frame, Efl_Ui_Frame_Data)
ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_ui_frame, Efl_Ui_Frame_Data)
ELM_PART_CONTENT_DEFAULT_SET(efl_ui_frame, "elm.swallow.content")
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_frame, Efl_Ui_Frame_Data)
/* Internal EO APIs and hidden overrides */
ELM_LAYOUT_CONTENT_ALIASES_IMPLEMENT(MY_CLASS_PFX)
ELM_LAYOUT_TEXT_ALIASES_IMPLEMENT(MY_CLASS_PFX)
ELM_LAYOUT_CONTENT_ALIASES_IMPLEMENT(efl_ui_frame)
ELM_LAYOUT_TEXT_ALIASES_IMPLEMENT(efl_ui_frame)
#define EFL_UI_FRAME_EXTRA_OPS \
EFL_CANVAS_GROUP_ADD_OPS(efl_ui_frame), \
ELM_LAYOUT_CONTENT_ALIASES_OPS(MY_CLASS_PFX), \
ELM_LAYOUT_TEXT_ALIASES_OPS(MY_CLASS_PFX)
ELM_LAYOUT_CONTENT_ALIASES_OPS(efl_ui_frame), \
ELM_PART_CONTENT_DEFAULT_OPS(efl_ui_frame), \
ELM_LAYOUT_TEXT_ALIASES_OPS(efl_ui_frame)
#include "efl_ui_frame.eo.c"

View File

@ -1,5 +1,5 @@
class Efl.Ui.Frame (Efl.Ui.Layout, Efl.Ui.Clickable, Efl.Text, Efl.Text.Markup,
Efl.Ui.Translatable)
Efl.Ui.Translatable, Efl.Container)
{
[[Frame widget
@ -60,5 +60,7 @@ class Efl.Ui.Frame (Efl.Ui.Layout, Efl.Ui.Clickable, Efl.Text, Efl.Text.Markup,
Efl.Text.text { get; set; }
Efl.Text.Markup.markup { get; set; }
Efl.Ui.Translatable.translatable_text { get; set; }
Efl.Container.content { get; set; }
Efl.Container.content_unset;
}
}

View File

@ -6992,26 +6992,6 @@ _efl_ui_win_part_file_get(Eo *obj, Efl_Ui_Win_Data *sd, const char *part, const
return EINA_FALSE;
}
/* Default content */
EOLIAN static Eina_Bool
_efl_ui_win_efl_container_content_set(Eo *obj, Efl_Ui_Win_Data *sd, Evas_Object *content)
{
return _efl_ui_win_content_set(obj, sd, "content", content);
}
EOLIAN static Evas_Object*
_efl_ui_win_efl_container_content_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd)
{
return _efl_ui_win_content_get(obj, sd, "content");
}
EOLIAN static Evas_Object*
_efl_ui_win_efl_container_content_unset(Eo *obj, Efl_Ui_Win_Data *sd)
{
return _efl_ui_win_content_unset(obj, sd, "content");
}
/* Efl.Part begin */
static void
@ -7058,6 +7038,7 @@ ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_win, EFL_UI_WIN, Efl_Ui_Win_Data)
ELM_PART_OVERRIDE_CONTENT_GET(efl_ui_win, EFL_UI_WIN, Efl_Ui_Win_Data)
ELM_PART_OVERRIDE_CONTENT_UNSET(efl_ui_win, EFL_UI_WIN, Efl_Ui_Win_Data)
ELM_PART_CONTENT_DEFAULT_SET(efl_ui_win, "content")
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_win, Efl_Ui_Win_Data)
#include "efl_ui_win_part.eo.c"
/* Efl.Part end */

View File

@ -23,7 +23,8 @@ struct _Elm_Part_Data
// Note: this generic implementation can be improved to support part object
// caching or something...
// FIXME: Some widgets return the alias name, some return the real name
// alias doesn't work for frame, _elm_layout_part_aliasing_eval() fails for scroller
#define ELM_PART_CONTENT_DEFAULT_SET(type, part) \
static const char * _ ## type ## _default_content_part_get(const Eo *obj EINA_UNUSED, void *sd EINA_UNUSED) { return part; }
@ -36,6 +37,25 @@ struct _Elm_Part_Data
#define ELM_PART_TEXT_DEFAULT_OPS(type) \
EFL_OBJECT_OP_FUNC(elm_widget_default_text_part_get, _ ## type ## _default_text_part_get)
#define ELM_PART_CONTENT_DEFAULT_IMPLEMENT(type, typedata) \
EOLIAN static Eina_Bool \
_ ## type ## _efl_container_content_set(Eo *obj, typedata *sd, Evas_Object *content) \
{ \
return efl_content_set(efl_part(obj, _ ## type ## _default_content_part_get(obj, sd)), content); \
} \
\
EOLIAN static Evas_Object* \
_ ## type ## _efl_container_content_get(Eo *obj, typedata *sd) \
{ \
return efl_content_get(efl_part(obj, _ ## type ## _default_content_part_get(obj, sd))); \
} \
\
EOLIAN static Evas_Object* \
_ ## type ## _efl_container_content_unset(Eo *obj, typedata *sd) \
{ \
return efl_content_unset(efl_part(obj, _ ## type ## _default_content_part_get(obj, sd))); \
}
// For any widget that has specific part handling