2012-05-03 15:41:26 -07:00
# ifndef ELM_WIDGET_LAYOUT_H
# define ELM_WIDGET_LAYOUT_H
# include "elm_widget_container.h"
/**
* @ 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 .
*/
/**
* @ typedef Elm_Layout_Part_Alias_Description
*
* A layout part aliasing ( proxying ) description , used to get part
* names aliasing independently of a widgets theme .
*
* @ ingroup Widget
*/
typedef struct _Elm_Layout_Part_Alias_Description Elm_Layout_Part_Alias_Description ;
/**
* @ struct _Elm_Layout_Part_Alias_Description
*
* Elementary Layout - based widgets may declare part proxies , i . e . , aliases
* for real theme part names to expose to the API calls :
* - elm_layout_text_set ( )
* - elm_layout_text_get ( )
* - elm_layout_content_set ( )
* - elm_layout_content_get ( )
* - elm_layout_content_unset ( )
* and their equivalents . This list must be set on the
* @ c " _smart_set_user() " function of inheriting widgets , so that part
* aliasing is handled automatically for them .
*
* @ ingroup Widget
*/
struct _Elm_Layout_Part_Alias_Description
{
const char * alias ; /**< Alternate name for a given (real) part. Calls receiving this string as a part name will be translated to the string at _Elm_Layout_Part_Proxies_Description::real_part */
const char * real_part ; /**< Target part name for the alias set on @ref _Elm_Layout_Part_Proxies_Description::real_part. An example of usage would be @c "default" on that field, with @c "elm.content.swallow" on this one */
} ;
/**
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
{
2012-11-25 22:32:53 -08:00
Evas_Object * obj ; /* The object itself */
2012-05-03 15:41:26 -07:00
Eina_List * subs ; /**< List of Elm_Layout_Sub_Object_Data structs, to hold the actual sub objects */
Eina_List * edje_signals ;
Eina_List * parts_cursors ;
const char * klass , * group ;
Eina_Bool needs_size_calc : 1 ;
} Elm_Layout_Smart_Data ;
/**
* @ }
*/
2012-07-31 15:05:38 -07:00
# define ELM_LAYOUT_DATA_GET(o, sd) \
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = eo_data_get ( o , ELM_OBJ_LAYOUT_CLASS )
2012-07-31 15:05:38 -07:00
# define ELM_LAYOUT_CHECK(obj) \
2012-11-25 22:32:53 -08:00
if ( ! eo_isa ( obj , ELM_OBJ_LAYOUT_CLASS ) ) \
2012-07-31 15:05:38 -07:00
return
2012-05-03 15:41:26 -07:00
# endif