introduce default item
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Fri, 16 Aug 2019 07:05:24 +0000 (09:05 +0200)
committerWonki Kim <wonki_.kim@samsung.com>
Fri, 23 Aug 2019 08:49:15 +0000 (17:49 +0900)
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

src/lib/elementary/Efl_Ui.h
src/lib/elementary/efl_ui_default_item.c [new file with mode: 0644]
src/lib/elementary/efl_ui_default_item.eo [new file with mode: 0644]
src/lib/elementary/efl_ui_grid_default_item.c
src/lib/elementary/efl_ui_grid_default_item.eo
src/lib/elementary/efl_ui_list_default_item.c
src/lib/elementary/efl_ui_list_default_item.eo
src/lib/elementary/meson.build

index 9393c37..7839d73 100644 (file)
@@ -184,6 +184,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>
diff --git a/src/lib/elementary/efl_ui_default_item.c b/src/lib/elementary/efl_ui_default_item.c
new file mode 100644 (file)
index 0000000..4911a7a
--- /dev/null
@@ -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"
diff --git a/src/lib/elementary/efl_ui_default_item.eo b/src/lib/elementary/efl_ui_default_item.eo
new file mode 100644 (file)
index 0000000..9604f9b
--- /dev/null
@@ -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;
+   }
+}
index 65d2c24..4d28cbc 100644 (file)
 #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);
-   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 */
+   eo = efl_constructor(efl_super(obj, MY_CLASS));
 
-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)
+   if (!elm_widget_theme_klass_get(obj))
+     elm_widget_theme_klass_set(obj, "grid_item");
 
-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);
+   return eo;
 }
-/* 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"
index 90461b0..d5c588e 100644 (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;
    }
 }
index d95f988..ff2ce75 100644 (file)
 #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);
-   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));
-}
+   eo = efl_constructor(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)
+   if (!elm_widget_theme_klass_get(obj))
+     elm_widget_theme_klass_set(obj, "list_item");
 
-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);
+   return eo;
 }
-
-/* 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"
index 90cc024..3b0c768 100644 (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;
    }
 }
index f75733c..fc97d31 100644 (file)
@@ -127,6 +127,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',
@@ -961,6 +962,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',