2012-05-03 15:41:26 -07:00
# ifndef ELM_WIDGET_LAYOUT_H
# define ELM_WIDGET_LAYOUT_H
# include "elm_widget_container.h"
2014-08-07 09:26:47 -07:00
/* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
* CODE . THIS IS ELEMENTARY ' S INTERNAL WIDGET API ( for now ) AND IS NOT
* FINAL . CALL elm_widget_api_check ( ELM_INTERNAL_API_VERSION ) TO CHECK
* IT AT RUNTIME .
*/
2012-05-03 15:41:26 -07:00
/**
* @ addtogroup Widget
* @ {
*
* @ section elm - layout - class The Elementary Layout Class
*
* Elementary , besides having the @ ref Layout widget , exposes its
* foundation - - the Elementary Layout Class - - in order to create
* other widgets which are , basically , a certain layout with some more
* logic on top .
*
2012-05-31 16:02:54 -07:00
* The idea is to make the creation of that widgets as easy as possible ,
2012-05-03 15:41:26 -07:00
* factorizing code on this common base . For example , a button is a
* layout ( that looks like push button ) that happens to react on
* clicks and keyboard events in a special manner , calling its user
* back on those events . That ' s no surprise , then , that the @ ref
* Button implementation relies on # Elm_Layout_Smart_Class , if you go
* to check it .
*
* The Layout class inherits from
* # Elm_Container_Smart_Class . Container parts , here , map directly to
* Edje parts from the layout ' s Edje group . Besides that , there ' s a whole
* infrastructure around Edje files :
2012-05-31 16:02:54 -07:00
* - interfacing by signals ,
2012-05-03 15:41:26 -07:00
* - setting / retrieving text part values ,
* - dealing with table and box parts directly ,
* - etc .
*
* Take a look at # Elm_Layout_Smart_Class ' s ' virtual ' functions to
* understand the whole interface . Finally , layout objects will do
* < b > part aliasing < / b > for you , if you set it up properly . For that ,
* take a look at # Elm_Layout_Part_Alias_Description , where it ' s
* explained in detail .
*/
/**
2012-05-25 12:53:51 -07:00
* Base widget smart data extended with layout instance data .
2012-05-03 15:41:26 -07:00
*/
typedef struct _Elm_Layout_Smart_Data
{
2015-06-18 21:01:46 -07:00
Evas_Object * obj ; /**< The object itself */
Eina_List * subs ; /**< List of Elm_Layout_Sub_Object_Data structs, to hold the actual sub objects such as text, content and the children of box and table. */
Eina_List * edje_signals ; /**< The list of edje signal callbacks. */
Eina_List * parts_cursors ; /**< The list of cursor names of layout parts. This is a list of Elm_Layout_Sub_Object_Cursor struct. */
2018-01-26 16:56:53 -08:00
struct {
Eina_Hash * properties ; /**< The list of properties connected to layout parts. */
Eina_Hash * signals ; /**< The list of signals connected. */
Eina_Hash * factories ; /**< The hash with parts connected to factories. */
Efl_Model * model ; /**< The model */
Eina_Bool updating : 1 ;
} connect ;
2013-10-05 01:59:58 -07:00
int frozen ; /**< Layout freeze counter */
2012-05-03 15:41:26 -07:00
2015-06-18 21:01:46 -07:00
Eina_Bool needs_size_calc : 1 ; /**< This flas is set true when the layout sizing eval is already requested. This defers sizing evaluation until smart calculation to avoid unnecessary calculation. */
Eina_Bool restricted_calc_w : 1 ; /**< This is a flag to support edje restricted_calc in w axis. */
Eina_Bool restricted_calc_h : 1 ; /**< This is a flag to support edje restricted_calc in y axis. */
2014-01-01 16:23:03 -08:00
Eina_Bool can_access : 1 ; /**< This is true when all text(including textblock) parts can be accessible by accessibility. */
2017-08-07 19:48:31 -07:00
Eina_Bool destructed_is : 1 ; /**< This flag indicates if Efl.Ui.Layout destructor was called. This is needed to avoid unnecessary calculation of subobject deletion during layout object's deletion. */
Eina_Bool file_set : 1 ; /**< This flag indicates if Efl.Ui.Layout source is set from a file*/
2018-04-06 09:15:31 -07:00
} Efl_Ui_Layout_Object_Data ;
2012-05-03 15:41:26 -07:00
/**
* @ }
*/
2017-08-07 21:28:50 -07:00
# define EFL_UI_LAYOUT_DATA_GET(o, sd) \
2018-04-06 09:15:31 -07:00
Efl_Ui_Layout_Object_Data * sd = efl_data_scope_get ( o , EFL_UI_LAYOUT_OBJECT_CLASS )
2012-07-31 15:05:38 -07:00
2017-08-07 21:28:50 -07:00
# define EFL_UI_LAYOUT_CHECK(obj) \
2018-04-06 09:15:31 -07:00
if ( EINA_UNLIKELY ( ! efl_isa ( obj , EFL_UI_LAYOUT_OBJECT_CLASS ) ) ) \
2012-07-31 15:05:38 -07:00
return
2012-05-03 15:41:26 -07:00
# endif