introduce default item

default item is used as base class for all "normal style" efl items.

A "normal style" efl item does have a text,content & extra part.

- The text part is usally used to express some text in the item
- Content part is the *main* content part where the user attention is
on.
- Extra can be used to display some elements that are not directly
getting the attention of the user, it can be seen as something more than
the decoration item field.

ref T8115

Differential Revision: https://phab.enlightenment.org/D9629
This commit is contained in:
Marcel Hollerbach 2019-08-16 09:05:24 +02:00
parent 8c1354aef9
commit 1856596698
8 changed files with 94 additions and 129 deletions

View File

@ -182,6 +182,7 @@ EAPI void efl_ui_focus_relation_free(Efl_Ui_Focus_Relations *rel);
# include <efl_ui_layout_part_text.eo.h>
# include <efl_ui_layout_part_table.eo.h>
# include <efl_ui_item.eo.h>
# include <efl_ui_default_item.eo.h>
# include <efl_ui_win_part.eo.h>
# include <efl_ui_bg.eo.h>
# include <efl_ui_box.eo.h>

View File

@ -0,0 +1,43 @@
#ifdef HAVE_CONFIG_H
# include "elementary_config.h"
#endif
#define EFL_UI_LIST_DEFAULT_ITEM_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"
#include "elm_part_helper.h"
#define MY_CLASS EFL_UI_DEFAULT_ITEM_CLASS
#define MY_CLASS_PFX efl_ui_default_item
#define MY_CLASS_NAME "Efl.Ui.Default_Item"
ELM_PART_TEXT_DEFAULT_GET(efl_ui_default_item, "efl.text")
ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_ui_default_item, void)
ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_ui_default_item, void)
ELM_PART_CONTENT_DEFAULT_GET(efl_ui_default_item, "efl.icon")
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_default_item, void)
EOLIAN static Efl_Object *
_efl_ui_default_item_efl_part_part_get(const Eo *obj, void *pd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "text"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_TEXT_CLASS, obj, "efl.text");
else if (eina_streq(part, "icon"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_ICON_CLASS, obj, "efl.icon");
else if (eina_streq(part, "extra"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_EXTRA_CLASS, obj, "efl.extra");
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
#define EFL_UI_DEFAULT_ITEM_EXTRA_OPS \
ELM_PART_TEXT_DEFAULT_OPS(efl_ui_default_item), \
ELM_PART_CONTENT_DEFAULT_OPS(efl_ui_default_item)
#include "efl_ui_default_item.eo.c"

View File

@ -0,0 +1,30 @@
abstract @beta Efl.Ui.Default_Item extends Efl.Ui.Item implements
Efl.Text,
Efl.Text_Markup,
Efl.Ui.L10n,
Efl.Content
{
[[Default Item Class.
This class defines the standard parts of casual efl items.
The details about placement or item layout preferences are left to the extending classes.
Every text property related changes are mirrored to the text part. Content changes are mirrored to the content part.
]]
data: null;
parts {
text: Efl.Ui.Item_Part_Text; [[The text part for default item.
text part is the caption of the item.]]
icon: Efl.Ui.Item_Part_Icon; [[The icon content part for default item.
icon part is the main content of item.]]
extra : Efl.Ui.Item_Part_Extra; [[The extra content part for default item.]]
}
implements {
Efl.Text.text { get; set; }
Efl.Text_Markup.markup { get; set; }
Efl.Ui.L10n.l10n_text { get; set; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part_get;
}
}

View File

@ -16,50 +16,16 @@
#define MY_CLASS_NAME "Efl.Ui.Grid_Default_Item"
EOLIAN static Efl_Object *
_efl_ui_grid_default_item_efl_object_finalize(Eo *obj, void *pd EINA_UNUSED)
_efl_ui_grid_default_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
{
Eo *eo;
eo = efl_finalize(efl_super(obj, MY_CLASS));
ELM_WIDGET_DATA_GET_OR_RETURN(eo, wd, eo);
Eina_Error theme_apply = efl_ui_layout_theme_set(obj, "grid_item", NULL, NULL);
if (theme_apply == EFL_UI_THEME_APPLY_ERROR_GENERIC)
CRI("Default Item(%p) failed to set theme [efl/grid_item]!", eo);
eo = efl_constructor(efl_super(obj, MY_CLASS));
if (!elm_widget_theme_klass_get(obj))
elm_widget_theme_klass_set(obj, "grid_item");
return eo;
}
EOLIAN static void
_efl_ui_grid_default_item_efl_object_destructor(Eo *obj, void *pd EINA_UNUSED)
{
efl_destructor(efl_super(obj, MY_CLASS));
}
/* Efl.Part */
ELM_PART_TEXT_DEFAULT_GET(efl_ui_grid_default_item, "efl.text")
ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_ui_grid_default_item, void)
ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_ui_grid_default_item, void)
ELM_PART_CONTENT_DEFAULT_GET(efl_ui_grid_default_item, "efl.icon")
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_grid_default_item, void)
EOLIAN static Efl_Object *
_efl_ui_grid_default_item_efl_part_part_get(const Eo *obj, void *wd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "text"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_TEXT_CLASS, obj, "efl.text");
else if (eina_streq(part, "icon"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_ICON_CLASS, obj, "efl.icon");
else if (eina_streq(part, "extra"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_EXTRA_CLASS, obj, "efl.extra");
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
/* Efl.Part end */
/* Internal EO APIs and hidden overrides */
#define EFL_UI_GRID_DEFAULT_ITEM_EXTRA_OPS \
ELM_PART_TEXT_DEFAULT_OPS(efl_ui_grid_default_item), \
ELM_PART_CONTENT_DEFAULT_OPS(efl_ui_grid_default_item)
#include "efl_ui_grid_default_item.eo.c"

View File

@ -1,33 +1,9 @@
class @beta Efl.Ui.Grid_Default_Item extends Efl.Ui.Item implements
Efl.Text,
Efl.Text_Markup,
Efl.Ui.L10n,
Efl.Content
class @beta Efl.Ui.Grid_Default_Item extends Efl.Ui.Default_Item
{
[[Grid Default Item class.
This class need to be sub object of list widget.
Text and contents can be set using @Efl.Text,
@Efl.Content or @Efl.Part.]]
[[Grid Default Item class.]]
data: null;
parts {
text: Efl.Ui.Item_Part_Text; [[The text part for grid default item.
text part is the caption of grid item.]]
icon: Efl.Ui.Item_Part_Icon; [[The icon content part for grid default item.
icon part is the main content of grid item.]]
end: Efl.Ui.Item_Part_Extra; [[The extra content part for grid default item.
extra part is the spare content of grid item.
you can swallow small badge widget such as check, radio.]]
}
implements {
//Efl.Object
Efl.Object.finalize;
Efl.Object.destructor;
Efl.Text.text { get; set; }
Efl.Text_Markup.markup { get; set; }
Efl.Ui.L10n.l10n_text { get; set; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part_get;
Efl.Object.constructor;
}
}

View File

@ -16,47 +16,15 @@
#define MY_CLASS_NAME "Efl.Ui.List_Default_Item"
EOLIAN static Efl_Object *
_efl_ui_list_default_item_efl_object_finalize(Eo *obj, void *pd EINA_UNUSED)
_efl_ui_list_default_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
{
Eo *eo;
eo = efl_finalize(efl_super(obj, MY_CLASS));
ELM_WIDGET_DATA_GET_OR_RETURN(eo, wd, eo);
Eina_Error theme_apply_ret = efl_ui_layout_theme_set(obj, "list_item", NULL, NULL);
if (theme_apply_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC)
CRI("Default Item(%p) failed to set theme [efl/list_item]!", eo);
eo = efl_constructor(efl_super(obj, MY_CLASS));
if (!elm_widget_theme_klass_get(obj))
elm_widget_theme_klass_set(obj, "list_item");
return eo;
}
EOLIAN static void
_efl_ui_list_default_item_efl_object_destructor(Eo *obj, void *pd EINA_UNUSED)
{
efl_destructor(efl_super(obj, MY_CLASS));
}
ELM_PART_TEXT_DEFAULT_GET(efl_ui_list_default_item, "efl.text")
ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_ui_list_default_item, void)
ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_ui_list_default_item, void)
ELM_PART_CONTENT_DEFAULT_GET(efl_ui_list_default_item, "efl.icon")
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_list_default_item, void)
EOLIAN static Efl_Object *
_efl_ui_list_default_item_efl_part_part_get(const Eo *obj, void *wd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "text"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_TEXT_CLASS, obj, "efl.text");
else if (eina_streq(part, "icon"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_ICON_CLASS, obj, "efl.icon");
else if (eina_streq(part, "extra"))
return ELM_PART_IMPLEMENT(EFL_UI_ITEM_PART_EXTRA_CLASS, obj, "efl.extra");
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
/* Internal EO APIs and hidden overrides */
#define EFL_UI_LIST_DEFAULT_ITEM_EXTRA_OPS \
ELM_PART_TEXT_DEFAULT_OPS(efl_ui_list_default_item), \
ELM_PART_CONTENT_DEFAULT_OPS(efl_ui_list_default_item)
#include "efl_ui_list_default_item.eo.c"

View File

@ -1,30 +1,9 @@
class @beta Efl.Ui.List_Default_Item extends Efl.Ui.Item implements
Efl.Text,
Efl.Text_Markup,
Efl.Content
class @beta Efl.Ui.List_Default_Item extends Efl.Ui.Default_Item
{
[[List Default Item class.
This class need to be sub object of list widget.
text and contents can be appliable by efl_text,
efl_content or efl_part APIs.]]
[[List Default Item class.]]
data: null;
parts {
text: Efl.Ui.Item_Part_Text; [[The text part for list default item.]]
icon: Efl.Ui.Item_Part_Icon; [[The icon content part for list default item.
icon part is the left-side content of list item.]]
extra: Efl.Ui.Item_Part_Extra; [[The extra content part for list default item.
extra part is the right-side content of list item.]]
}
implements {
//Efl.Object
Efl.Object.finalize;
Efl.Object.destructor;
Efl.Text.text { get; set; }
Efl.Text_Markup.markup { get; set; }
Efl.Ui.L10n.l10n_text { get; set; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part_get;
Efl.Object.constructor;
}
}

View File

@ -121,6 +121,7 @@ pub_eo_files = [
'efl_ui_item_part_extra.eo',
'efl_ui_item_part_content.eo',
'efl_ui_item.eo',
'efl_ui_default_item.eo',
'efl_ui_list_default_item.eo',
'efl_ui_list_placeholder_item.eo',
'efl_ui_list.eo',
@ -895,6 +896,7 @@ elementary_src = [
'efl_ui_focus_util.c',
'elm_widget_item_static_focus.c',
'efl_ui_item.c',
'efl_ui_default_item.c',
'efl_ui_list_default_item.c',
'efl_ui_list_placeholder_item.c',
'efl_ui_list.c',