From 5096cd32ad580cfc8fa58c130b378b111112855a Mon Sep 17 00:00:00 2001 From: Cedric Bail Date: Sun, 15 Sep 2019 23:18:50 -0700 Subject: [PATCH] elementary: add Efl.Ui.Grid_View by leveraging MVVM and Collection/Position_Manager infrastructure. Co-authored-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D9960 --- src/lib/elementary/Efl_Ui.h | 1 + src/lib/elementary/efl_ui_collection_view.eo | 2 +- src/lib/elementary/efl_ui_grid_view.c | 26 ++++++++++++++++++++ src/lib/elementary/efl_ui_grid_view.eo | 17 +++++++++++++ src/lib/elementary/meson.build | 2 ++ 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/lib/elementary/efl_ui_grid_view.c create mode 100644 src/lib/elementary/efl_ui_grid_view.eo diff --git a/src/lib/elementary/Efl_Ui.h b/src/lib/elementary/Efl_Ui.h index 7f0c2ab4e9..5ee021cea0 100644 --- a/src/lib/elementary/Efl_Ui.h +++ b/src/lib/elementary/Efl_Ui.h @@ -335,6 +335,7 @@ typedef Eo Efl_Ui_Spotlight_Indicator; # include # include # include +# include # include # include diff --git a/src/lib/elementary/efl_ui_collection_view.eo b/src/lib/elementary/efl_ui_collection_view.eo index d0efbf347a..ffbbc0eefd 100644 --- a/src/lib/elementary/efl_ui_collection_view.eo +++ b/src/lib/elementary/efl_ui_collection_view.eo @@ -11,7 +11,7 @@ class @beta Efl.Ui.Collection_View extends Efl.Ui.Layout_Base implements object. By using different @.position_manager objects this widget can show unidimensional lists or two-dimensional grids of items, for example. - This class is intended to act as a base for widgets like List_View or Grid_View, + This class is intended to act as a base for widgets like List_View or @Efl.Ui.Grid_View, which hide this complexity from the user. Items are generated by the @Efl.Ui.Factory defined with .factory.set to match the content of the diff --git a/src/lib/elementary/efl_ui_grid_view.c b/src/lib/elementary/efl_ui_grid_view.c new file mode 100644 index 0000000000..4c5ac044b7 --- /dev/null +++ b/src/lib/elementary/efl_ui_grid_view.c @@ -0,0 +1,26 @@ +#ifdef HAVE_CONFIG_H +#include "elementary_config.h" +#endif + +#define ELM_LAYOUT_PROTECTED +#define EFL_UI_SCROLL_MANAGER_PROTECTED +#define EFL_UI_SCROLLBAR_PROTECTED + +#include + +#define MY_CLASS EFL_UI_GRID_VIEW_CLASS +#define MY_CLASS_PFX efl_ui_grid_view + +#define MY_CLASS_NAME "Efl.Ui.Grid_View" + +EOLIAN static Eo * +_efl_ui_grid_view_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED) +{ + obj = efl_constructor(efl_super(obj, MY_CLASS)); + + efl_ui_collection_view_position_manager_set(obj, efl_new(EFL_UI_POSITION_MANAGER_GRID_CLASS)); + + return obj; +} + +#include "efl_ui_grid_view.eo.c" diff --git a/src/lib/elementary/efl_ui_grid_view.eo b/src/lib/elementary/efl_ui_grid_view.eo new file mode 100644 index 0000000000..18e513e8c9 --- /dev/null +++ b/src/lib/elementary/efl_ui_grid_view.eo @@ -0,0 +1,17 @@ +class @beta Efl.Ui.Grid_View extends Efl.Ui.Collection_View +{ + [[A scrollable grid of @Efl.Ui.Item objects, typically @Efl.Ui.Grid_Default_Item objects. + + Items are added asynchronously by an @Efl.Ui.Factory from the definition of an @Efl.Model. + + The orientation (vertical or horizontal) of the grid can be set with + @Efl.Ui.Layout_Orientable.orientation. + + Items inside this widget can be selected according to the @Efl.Ui.Multi_Selectable_Async.select_mode + policy, and the selection can be retrieved with @Efl.Ui.Multi_Selectable_Async.selected_iterator_new. + ]] + data: null; + implements { + Efl.Object.constructor; + } +} diff --git a/src/lib/elementary/meson.build b/src/lib/elementary/meson.build index 9580b3e229..8166aafd95 100644 --- a/src/lib/elementary/meson.build +++ b/src/lib/elementary/meson.build @@ -186,6 +186,7 @@ pub_eo_files = [ 'efl_ui_view_model.eo', 'efl_ui_collection_view.eo', 'efl_ui_collection_view_focus_manager.eo', + 'efl_ui_grid_view.eo', ] foreach eo_file : pub_eo_files @@ -899,6 +900,7 @@ elementary_src = [ 'efl_ui_grid_default_item.c', 'efl_ui_grid.c', 'efl_ui_list_view.c', + 'efl_ui_grid_view.c', 'efl_ui_layout_factory.c', 'efl_ui_scroller.c', 'efl_ui_scroll_manager.c',