2008-10-06 23:55:11 -07:00
# include <Elementary.h>
# include "elm_priv.h"
2012-05-03 15:41:26 -07:00
# include "elm_widget_layout.h"
2012-11-25 22:32:53 -08:00
EAPI Eo_Op ELM_OBJ_LAYOUT_BASE_ID = EO_NOOP ;
# define MY_CLASS ELM_OBJ_LAYOUT_CLASS
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
# define MY_CLASS_NAME "elm_layout"
static const char SIG_THEME_CHANGED [ ] = " theme,changed " ;
2012-05-03 15:41:26 -07:00
/* smart callbacks coming from elm layout objects: */
static const Evas_Smart_Cb_Description _smart_callbacks [ ] = {
{ SIG_THEME_CHANGED , " " } ,
{ NULL , NULL }
} ;
2008-10-06 23:55:11 -07:00
2012-05-03 15:41:26 -07:00
/* these are data operated by layout's class functions internally, and
* should not be messed up by inhering classes */
typedef struct _Elm_Layout_Sub_Object_Data Elm_Layout_Sub_Object_Data ;
typedef struct _Elm_Layout_Sub_Object_Cursor Elm_Layout_Sub_Object_Cursor ;
struct _Elm_Layout_Sub_Object_Data
2008-10-06 23:55:11 -07:00
{
2012-05-03 15:41:26 -07:00
const char * part ;
2010-09-26 16:19:15 -07:00
Evas_Object * obj ;
2012-05-03 15:41:26 -07:00
enum {
SWALLOW ,
BOX_APPEND ,
BOX_PREPEND ,
BOX_INSERT_BEFORE ,
BOX_INSERT_AT ,
TABLE_PACK ,
TEXT
} type ;
union {
union {
const Evas_Object * reference ;
unsigned int pos ;
} box ;
struct
{
unsigned short col , row , colspan , rowspan ;
} table ;
struct
{
const char * text ;
} text ;
} p ;
2008-10-06 23:55:11 -07:00
} ;
2012-05-03 15:41:26 -07:00
struct _Elm_Layout_Sub_Object_Cursor
2008-10-06 23:55:11 -07:00
{
Evas_Object * obj ;
2012-05-03 15:41:26 -07:00
const char * part ;
const char * cursor ;
const char * style ;
Eina_Bool engine_only : 1 ;
2008-10-06 23:55:11 -07:00
} ;
2012-05-03 15:41:26 -07:00
/* layout's sizing evaluation is deferred. evaluation requests are
* queued up and only flag the object as ' changed ' . when it comes to
* Evas ' s rendering phase , it will be addressed , finally ( see
* _elm_layout_smart_calculate ( ) ) . */
static void
2012-11-25 22:32:53 -08:00
_elm_layout_smart_sizing_eval ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
2011-07-20 01:36:40 -07:00
2012-09-03 06:55:20 -07:00
if ( sd - > needs_size_calc ) return ;
2012-05-03 15:41:26 -07:00
sd - > needs_size_calc = EINA_TRUE ;
2011-07-20 01:36:40 -07:00
2012-05-03 15:41:26 -07:00
evas_object_smart_changed ( obj ) ;
}
2010-09-26 17:51:16 -07:00
2012-05-02 09:58:10 -07:00
static void
2012-05-03 15:41:26 -07:00
_on_sub_object_size_hint_change ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
2012-05-02 09:58:10 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( data , ELM_OBJ_WIDGET_CLASS ) ;
if ( wd - > frozen ) return ;
eo_do ( data , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
}
2012-05-02 09:58:10 -07:00
2012-05-03 15:41:26 -07:00
static void
_part_cursor_free ( Elm_Layout_Sub_Object_Cursor * pc )
{
eina_stringshare_del ( pc - > part ) ;
eina_stringshare_del ( pc - > style ) ;
eina_stringshare_del ( pc - > cursor ) ;
free ( pc ) ;
}
2011-02-08 04:08:28 -08:00
static void
2012-05-03 15:41:26 -07:00
_sizing_eval ( Evas_Object * obj , Elm_Layout_Smart_Data * sd )
{
2013-03-18 09:07:38 -07:00
Evas_Coord minh = - 1 , minw = - 1 ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2013-03-19 08:16:58 -07:00
edje_object_size_min_calc ( wd - > resize_obj , & minw , & minh ) ;
2012-05-03 15:41:26 -07:00
evas_object_size_hint_min_set ( obj , minw , minh ) ;
evas_object_size_hint_max_set ( obj , - 1 , - 1 ) ;
}
/* common content cases for layout objects: icon and text */
static inline void
_icon_signal_emit ( Elm_Layout_Smart_Data * sd ,
Elm_Layout_Sub_Object_Data * sub_d ,
Eina_Bool visible )
2011-02-08 04:08:28 -08:00
{
2012-08-16 14:41:24 -07:00
char buf [ 1024 ] ;
2012-05-03 15:41:26 -07:00
const char * type ;
if ( sub_d - > type ! = SWALLOW | |
( strcmp ( " elm.swallow.icon " , sub_d - > part ) & &
( strcmp ( " elm.swallow.end " , sub_d - > part ) ) ) )
return ;
2012-08-16 14:41:24 -07:00
if ( strncmp ( sub_d - > part , " elm.swallow. " , sizeof ( " elm.swallow. " ) - 1 ) = = 0 )
type = sub_d - > part + sizeof ( " elm.swallow. " ) - 1 ;
else
type = sub_d - > part ;
2012-05-03 15:41:26 -07:00
snprintf ( buf , sizeof ( buf ) , " elm,state,%s,%s " , type ,
visible ? " visible " : " hidden " ) ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
edje_object_signal_emit ( wd - > resize_obj , buf , " elm " ) ;
2012-05-03 15:41:26 -07:00
2013-02-28 07:18:58 -08:00
/* themes might need immediate action here */
2012-11-25 22:32:53 -08:00
edje_object_message_signal_process ( wd - > resize_obj ) ;
2012-05-03 15:41:26 -07:00
}
static inline void
_text_signal_emit ( Elm_Layout_Smart_Data * sd ,
Elm_Layout_Sub_Object_Data * sub_d ,
Eina_Bool visible )
{
2012-08-16 14:41:24 -07:00
char buf [ 1024 ] ;
const char * type ;
2012-05-03 15:41:26 -07:00
if ( sub_d - > type ! = TEXT | | strcmp ( " elm.text " , sub_d - > part ) )
return ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-08-16 14:41:24 -07:00
if ( strncmp ( sub_d - > part , " elm.text. " , sizeof ( " elm.text. " ) - 1 ) = = 0 )
type = sub_d - > part + sizeof ( " elm.text. " ) - 1 ;
else
type = sub_d - > part ;
snprintf ( buf , sizeof ( buf ) , " elm,state,%s,%s " , type ,
visible ? " visible " : " hidden " ) ;
2012-11-25 22:32:53 -08:00
edje_object_signal_emit ( wd - > resize_obj , buf , " elm " ) ;
2012-08-16 14:41:24 -07:00
/* TODO: is this right? It was like that, but IMO it should be removed: */
2012-05-03 15:41:26 -07:00
snprintf ( buf , sizeof ( buf ) ,
visible ? " elm,state,text,visible " : " elm,state,text,hidden " ) ;
2012-11-25 22:32:53 -08:00
edje_object_signal_emit ( wd - > resize_obj , buf , " elm " ) ;
2012-05-03 15:41:26 -07:00
2013-02-28 07:18:58 -08:00
/* themes might need immediate action here */
2012-11-25 22:32:53 -08:00
edje_object_message_signal_process ( wd - > resize_obj ) ;
2011-02-08 04:08:28 -08:00
}
2008-11-15 05:58:50 -08:00
static void
2012-05-03 15:41:26 -07:00
_parts_signals_emit ( Elm_Layout_Smart_Data * sd )
{
const Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
_icon_signal_emit ( sd , sub_d , EINA_TRUE ) ;
_text_signal_emit ( sd , sub_d , EINA_TRUE ) ;
}
2008-11-15 05:58:50 -08:00
}
2009-11-17 08:32:45 -08:00
static void
2012-05-03 15:41:26 -07:00
_parts_text_fix ( Elm_Layout_Smart_Data * sd )
2009-11-17 08:32:45 -08:00
{
2012-05-03 15:41:26 -07:00
const Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2009-11-17 08:32:45 -08:00
{
2012-05-03 15:41:26 -07:00
if ( sub_d - > type = = TEXT )
2012-07-31 15:05:38 -07:00
{
2012-05-28 20:09:06 -07:00
edje_object_part_text_escaped_set
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , sub_d - > part ,
2012-07-31 15:05:38 -07:00
sub_d - > p . text . text ) ;
}
2012-05-28 20:09:06 -07:00
}
}
2010-10-28 08:54:35 -07:00
static void
2012-05-03 15:41:26 -07:00
_part_cursor_part_apply ( const Elm_Layout_Sub_Object_Cursor * pc )
2010-10-28 08:54:35 -07:00
{
2012-05-03 15:41:26 -07:00
elm_object_cursor_set ( pc - > obj , pc - > cursor ) ;
elm_object_cursor_style_set ( pc - > obj , pc - > style ) ;
elm_object_cursor_theme_search_enabled_set ( pc - > obj , pc - > engine_only ) ;
2010-10-28 08:54:35 -07:00
}
static void
2012-05-03 15:41:26 -07:00
_parts_cursors_apply ( Elm_Layout_Smart_Data * sd )
2010-10-28 08:54:35 -07:00
{
2012-05-03 15:41:26 -07:00
const Eina_List * l ;
const char * file , * group ;
Elm_Layout_Sub_Object_Cursor * pc ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
edje_object_file_get ( wd - > resize_obj , & file , & group ) ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > parts_cursors , l , pc )
2012-05-03 15:41:26 -07:00
{
Evas_Object * obj = ( Evas_Object * ) edje_object_part_object_get
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , pc - > part ) ;
2012-05-03 15:41:26 -07:00
if ( ! obj )
{
pc - > obj = NULL ;
WRN ( " no part '%s' in group '%s' of file '%s'. "
" Cannot set cursor '%s' " ,
pc - > part , group , file , pc - > cursor ) ;
continue ;
}
else if ( evas_object_pass_events_get ( obj ) )
{
pc - > obj = NULL ;
WRN ( " part '%s' in group '%s' of file '%s' has mouse_events: 0. "
" Cannot set cursor '%s' " ,
pc - > part , group , file , pc - > cursor ) ;
continue ;
}
pc - > obj = obj ;
_part_cursor_part_apply ( pc ) ;
}
2010-10-28 08:54:35 -07:00
}
2012-05-09 03:46:14 -07:00
static void
_reload_theme ( void * data , Evas_Object * obj ,
const char * emission __UNUSED__ , const char * source __UNUSED__ )
{
Evas_Object * layout = data ;
const char * file ;
const char * group ;
edje_object_file_get ( obj , & file , & group ) ;
elm_layout_file_set ( layout , file , group ) ;
}
2010-10-29 11:21:58 -07:00
static void
2012-05-03 15:41:26 -07:00
_visuals_refresh ( Evas_Object * obj ,
Elm_Layout_Smart_Data * sd )
2010-10-28 08:54:35 -07:00
{
2012-05-03 15:41:26 -07:00
_parts_text_fix ( sd ) ;
2012-05-28 20:09:06 -07:00
_parts_signals_emit ( sd ) ;
2012-05-03 15:41:26 -07:00
_parts_cursors_apply ( sd ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-09 03:46:14 -07:00
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
edje_object_signal_callback_del ( wd - > resize_obj ,
" edje,change,file " , " edje " ,
2012-05-09 03:46:14 -07:00
_reload_theme ) ;
2012-11-25 22:32:53 -08:00
edje_object_signal_callback_add ( wd - > resize_obj ,
2012-07-31 15:05:38 -07:00
" edje,change,file " , " edje " ,
2012-05-09 03:46:14 -07:00
_reload_theme , obj ) ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_disable ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
2012-05-03 15:41:26 -07:00
if ( elm_object_disabled_get ( obj ) )
edje_object_signal_emit
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , " elm,state,disabled " , " elm " ) ;
2012-05-03 15:41:26 -07:00
else
edje_object_signal_emit
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , " elm,state,enabled " , " elm " ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2010-10-28 08:54:35 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_theme ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Eina_Bool int_ret = EINA_FALSE ;
2012-05-03 15:41:26 -07:00
const char * fh ;
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , elm_wdg_theme ( & int_ret ) ) ;
2012-11-25 22:32:53 -08:00
if ( ! int_ret ) return ;
/* The following lines are here to support entry design; the _theme function
* of entry needs to call directly the widget _theme function */
Eina_Bool enable = EINA_TRUE ;
eo_do ( obj , elm_obj_layout_theme_enable ( & enable ) ) ;
if ( EINA_TRUE ! = enable )
{
if ( ret ) * ret = EINA_TRUE ;
return ;
}
2012-05-03 15:41:26 -07:00
/* function already prints error messages, if any */
2012-11-25 22:32:53 -08:00
int_ret = elm_widget_theme_object_set
2013-04-16 06:55:00 -07:00
( obj , wd - > resize_obj , sd - > klass , sd - > group ,
2012-05-03 15:41:26 -07:00
elm_widget_style_get ( obj ) ) ;
edje_object_mirrored_set
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , elm_widget_mirrored_get ( obj ) ) ;
2012-05-03 15:41:26 -07:00
edje_object_scale_set
2012-11-25 22:32:53 -08:00
( wd - > resize_obj ,
2012-05-03 15:41:26 -07:00
elm_widget_scale_get ( obj ) * elm_config_scale_get ( ) ) ;
fh = edje_object_data_get
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , " focus_highlight " ) ;
2012-05-03 15:41:26 -07:00
if ( ( fh ) & & ( ! strcmp ( fh , " on " ) ) )
elm_widget_highlight_in_theme_set ( obj , EINA_TRUE ) ;
else
elm_widget_highlight_in_theme_set ( obj , EINA_FALSE ) ;
evas_object_smart_callback_call ( obj , SIG_THEME_CHANGED , NULL ) ;
_visuals_refresh ( obj , sd ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2012-05-03 15:41:26 -07:00
}
2010-10-28 08:54:35 -07:00
2010-09-24 07:47:59 -07:00
static void *
_elm_layout_list_data_get ( const Eina_List * list )
{
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Data * sub_d = eina_list_data_get ( list ) ;
return sub_d - > obj ;
2010-09-24 07:47:59 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_on_focus ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
2012-05-03 15:41:26 -07:00
if ( elm_widget_focus_get ( obj ) )
{
elm_layout_signal_emit ( obj , " elm,action,focus " , " elm " ) ;
2012-11-25 22:32:53 -08:00
evas_object_focus_set ( wd - > resize_obj , EINA_TRUE ) ;
2012-05-03 15:41:26 -07:00
}
else
{
elm_layout_signal_emit ( obj , " elm,action,unfocus " , " elm " ) ;
2012-11-25 22:32:53 -08:00
evas_object_focus_set ( wd - > resize_obj , EINA_FALSE ) ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_focus_next_manager_is ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
* ret = EINA_TRUE ;
}
2012-05-03 15:41:26 -07:00
/* WARNING: if you're making a widget *not* supposed to have focusable
* child objects , but still inheriting from elm_layout , just set its
* focus_next smart function back to NULL */
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_focus_next ( Eo * obj , void * _pd , va_list * list )
2010-09-24 07:47:59 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Focus_Direction dir = va_arg ( * list , Elm_Focus_Direction ) ;
Evas_Object * * next = va_arg ( * list , Evas_Object * * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Eina_Bool int_ret = EINA_FALSE ;
2010-10-06 13:24:19 -07:00
const Eina_List * items ;
2012-05-03 15:41:26 -07:00
void * ( * list_data_get ) ( const Eina_List * list ) ;
2010-09-24 07:47:59 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
2012-05-03 15:41:26 -07:00
2010-10-06 13:24:22 -07:00
if ( ( items = elm_widget_focus_custom_chain_get ( obj ) ) )
list_data_get = eina_list_data_get ;
else
2010-09-24 07:47:59 -07:00
{
2012-05-03 15:41:26 -07:00
items = sd - > subs ;
2010-09-24 07:47:59 -07:00
list_data_get = _elm_layout_list_data_get ;
2013-03-18 01:55:09 -07:00
if ( ! items ) return ;
2012-05-03 15:41:26 -07:00
}
2010-09-24 07:47:59 -07:00
2012-11-25 22:32:53 -08:00
int_ret = elm_widget_focus_list_next_get
2012-05-03 15:41:26 -07:00
( obj , items , list_data_get , dir , next ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_sub_object_add ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
Evas_Object * sobj = va_arg ( * list , Evas_Object * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Eina_Bool int_ret = EINA_FALSE ;
2012-05-03 15:41:26 -07:00
2013-01-03 01:52:57 -08:00
if ( evas_object_data_get ( sobj , " elm-parent " ) = = obj )
goto end ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , elm_wdg_sub_object_add ( sobj , & int_ret ) ) ;
2012-11-25 22:32:53 -08:00
if ( ! int_ret ) return ;
Eina_Bool enable = EINA_TRUE ;
eo_do ( obj , elm_obj_layout_sub_object_add_enable ( & enable ) ) ;
if ( EINA_TRUE = = enable )
evas_object_event_callback_add
( sobj , EVAS_CALLBACK_CHANGED_SIZE_HINTS ,
_on_sub_object_size_hint_change , obj ) ;
2013-01-03 01:52:57 -08:00
end :
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_sub_object_del ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
Evas_Object * sobj = va_arg ( * list , Evas_Object * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Eina_Bool int_ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
evas_object_event_callback_del_full
( sobj , EVAS_CALLBACK_CHANGED_SIZE_HINTS ,
_on_sub_object_size_hint_change , obj ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , elm_wdg_sub_object_del ( sobj , & int_ret ) ) ;
2012-11-25 22:32:53 -08:00
if ( ! int_ret ) return ;
2012-05-23 14:56:44 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( sub_d - > obj ! = sobj ) continue ;
sd - > subs = eina_list_remove_list ( sd - > subs , l ) ;
_icon_signal_emit ( sd , sub_d , EINA_FALSE ) ;
eina_stringshare_del ( sub_d - > part ) ;
free ( sub_d ) ;
break ;
2010-09-24 07:47:59 -07:00
}
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ;
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2010-09-24 07:47:59 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_focus_direction_manager_is ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
* ret = EINA_TRUE ;
}
static void
_elm_layout_smart_focus_direction ( Eo * obj , void * _pd , va_list * list )
2012-05-02 20:02:54 -07:00
{
2012-11-25 22:32:53 -08:00
const Evas_Object * base = va_arg ( * list , const Evas_Object * ) ;
double degree = va_arg ( * list , double ) ;
Evas_Object * * direction = va_arg ( * list , Evas_Object * * ) ;
double * weight = va_arg ( * list , double * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Eina_Bool int_ret = EINA_FALSE ;
2012-05-02 20:02:54 -07:00
const Eina_List * items ;
2012-05-03 15:41:26 -07:00
void * ( * list_data_get ) ( const Eina_List * list ) ;
2012-05-02 20:02:54 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
2012-05-02 20:02:54 -07:00
2012-11-25 22:32:53 -08:00
if ( ! sd - > subs ) return ;
2012-05-03 15:41:26 -07:00
/* Focus chain (This block is diferent of elm_win cycle) */
2012-05-02 20:02:54 -07:00
if ( ( items = elm_widget_focus_custom_chain_get ( obj ) ) )
list_data_get = eina_list_data_get ;
else
{
2012-05-03 15:41:26 -07:00
items = sd - > subs ;
2012-05-02 20:02:54 -07:00
list_data_get = _elm_layout_list_data_get ;
2012-11-25 22:32:53 -08:00
if ( ! items ) return ;
2012-05-02 20:02:54 -07:00
}
2012-11-25 22:32:53 -08:00
int_ret = elm_widget_focus_list_direction_get
2012-05-03 15:41:26 -07:00
( obj , base , items , list_data_get , degree , direction , weight ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2012-05-02 20:02:54 -07:00
}
2008-10-06 23:55:11 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_layout_smart_signal_emit ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2008-10-06 23:55:11 -07:00
{
2012-11-25 22:32:53 -08:00
const char * emission = va_arg ( * list , const char * ) ;
const char * source = va_arg ( * list , const char * ) ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
edje_object_signal_emit ( wd - > resize_obj , emission , source ) ;
2008-10-06 23:55:11 -07:00
}
2009-11-17 08:32:45 -08:00
static void
2012-05-03 15:41:26 -07:00
_edje_signal_callback ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * emission ,
const char * source )
2009-11-17 08:32:45 -08:00
{
2012-05-25 12:53:59 -07:00
Edje_Signal_Data * esd = data ;
2012-05-03 15:41:26 -07:00
2012-05-25 12:53:59 -07:00
esd - > func ( esd - > data , esd - > obj , emission , source ) ;
2009-11-17 08:32:45 -08:00
}
2010-09-26 17:51:16 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_layout_smart_signal_callback_add ( Eo * obj , void * _pd , va_list * list )
2012-05-02 09:58:10 -07:00
{
2012-11-25 22:32:53 -08:00
const char * emission = va_arg ( * list , const char * ) ;
const char * source = va_arg ( * list , const char * ) ;
Edje_Signal_Cb func_cb = va_arg ( * list , Edje_Signal_Cb ) ;
void * data = va_arg ( * list , void * ) ;
2012-05-25 12:53:59 -07:00
Edje_Signal_Data * esd ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-05-25 12:53:59 -07:00
esd = ELM_NEW ( Edje_Signal_Data ) ;
if ( ! esd ) return ;
2012-05-03 15:41:26 -07:00
2012-05-25 12:53:59 -07:00
esd - > obj = obj ;
esd - > func = func_cb ;
esd - > emission = eina_stringshare_add ( emission ) ;
esd - > source = eina_stringshare_add ( source ) ;
esd - > data = data ;
sd - > edje_signals = eina_list_append ( sd - > edje_signals , esd ) ;
2012-05-03 15:41:26 -07:00
edje_object_signal_callback_add
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , emission , source ,
2012-05-25 12:53:59 -07:00
_edje_signal_callback , esd ) ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_signal_callback_del ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-05-25 12:53:59 -07:00
Edje_Signal_Data * esd = NULL ;
2012-05-03 15:41:26 -07:00
void * data = NULL ;
Eina_List * l ;
2012-11-25 22:32:53 -08:00
const char * emission = va_arg ( * list , const char * ) ;
const char * source = va_arg ( * list , const char * ) ;
Edje_Signal_Cb func_cb = va_arg ( * list , Edje_Signal_Cb ) ;
void * * ret = va_arg ( * list , void * * ) ;
if ( ret ) * ret = NULL ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > edje_signals , l , esd )
2012-05-03 15:41:26 -07:00
{
2012-05-25 12:53:59 -07:00
if ( ( esd - > func = = func_cb ) & & ( ! strcmp ( esd - > emission , emission ) ) & &
( ! strcmp ( esd - > source , source ) ) )
2012-05-03 15:41:26 -07:00
{
sd - > edje_signals = eina_list_remove_list ( sd - > edje_signals , l ) ;
2012-05-25 12:53:59 -07:00
eina_stringshare_del ( esd - > emission ) ;
eina_stringshare_del ( esd - > source ) ;
data = esd - > data ;
2012-05-03 15:41:26 -07:00
edje_object_signal_callback_del_full
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , emission , source ,
2012-05-25 12:53:59 -07:00
_edje_signal_callback , esd ) ;
2012-05-03 15:41:26 -07:00
2012-11-29 23:55:49 -08:00
free ( esd ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = data ;
return ; /* stop at 1st match */
2012-05-03 15:41:26 -07:00
}
}
2012-11-25 22:32:53 -08:00
}
static void
_elm_layout_smart_text_aliases_get ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
const Elm_Layout_Part_Alias_Description * * aliases = va_arg ( * list , const Elm_Layout_Part_Alias_Description * * ) ;
* aliases = NULL ;
}
static void
_elm_layout_smart_content_aliases_get ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
const Elm_Layout_Part_Alias_Description * * aliases = va_arg ( * list , const Elm_Layout_Part_Alias_Description * * ) ;
* aliases = NULL ;
}
static void
_elm_layout_smart_sub_object_add_enable ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool * enable = va_arg ( * list , Eina_Bool * ) ;
* enable = EINA_TRUE ;
}
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_theme_enable ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool * enable = va_arg ( * list , Eina_Bool * ) ;
* enable = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
static Eina_Bool
2012-11-25 22:32:53 -08:00
_elm_layout_part_aliasing_eval ( const Evas_Object * obj EINA_UNUSED ,
Elm_Layout_Smart_Data * sd ,
2012-05-03 15:41:26 -07:00
const char * * part ,
Eina_Bool is_text )
{
2012-11-25 22:32:53 -08:00
const Elm_Layout_Part_Alias_Description * aliases = NULL ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( is_text )
eo_do ( sd - > obj , elm_obj_layout_smart_text_aliases_get ( & aliases ) ) ;
else
eo_do ( sd - > obj , elm_obj_layout_smart_content_aliases_get ( & aliases ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-29 22:18:48 -08:00
while ( aliases & & aliases - > alias & & aliases - > real_part )
2012-05-03 15:41:26 -07:00
{
/* NULL matches the 1st */
if ( ( ! * part ) | | ( ! strcmp ( * part , aliases - > alias ) ) )
{
* part = aliases - > real_part ;
break ;
}
aliases + + ;
}
if ( ! * part )
{
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
ERR ( " no default content part set for object %p -- "
2012-11-25 22:32:53 -08:00
" part must not be NULL " , wd - > obj ) ;
2012-05-03 15:41:26 -07:00
return EINA_FALSE ;
}
/* if no match, part goes on with the same value */
return EINA_TRUE ;
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_text_set ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d = NULL ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
const char * text = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
if ( ! _elm_layout_part_aliasing_eval ( obj , sd , & part , EINA_TRUE ) )
return ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( ( sub_d - > type = = TEXT ) & & ( ! strcmp ( part , sub_d - > part ) ) )
{
if ( ! text )
{
eina_stringshare_del ( sub_d - > part ) ;
eina_stringshare_del ( sub_d - > p . text . text ) ;
free ( sub_d ) ;
edje_object_part_text_escaped_set
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , NULL ) ;
2012-05-03 15:41:26 -07:00
sd - > subs = eina_list_remove_list ( sd - > subs , l ) ;
2012-11-25 22:32:53 -08:00
goto end ;
2012-05-03 15:41:26 -07:00
}
else
break ;
}
sub_d = NULL ;
}
if ( ! edje_object_part_text_escaped_set
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , text ) )
return ;
2012-05-03 15:41:26 -07:00
if ( ! sub_d )
{
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
2012-11-25 22:32:53 -08:00
if ( ! sub_d ) return ;
2012-05-03 15:41:26 -07:00
sub_d - > type = TEXT ;
sub_d - > part = eina_stringshare_add ( part ) ;
sd - > subs = eina_list_append ( sd - > subs , sub_d ) ;
}
eina_stringshare_replace ( & sub_d - > p . text . text , text ) ;
_text_signal_emit ( sd , sub_d , ! ! text ) ;
2012-11-25 22:32:53 -08:00
if ( ! wd - > frozen )
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-07-05 21:03:21 -07:00
if ( _elm_config - > access_mode = = ELM_ACCESS_MODE_ON & &
2012-11-25 22:32:53 -08:00
wd - > can_access & & ! ( sub_d - > obj ) )
2012-06-25 22:54:45 -07:00
sub_d - > obj = _elm_access_edje_object_part_object_register
2012-07-31 15:05:38 -07:00
( obj , elm_layout_edje_get ( obj ) , part ) ;
2012-06-25 22:54:45 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_text_get ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
const char * * text = va_arg ( * list , const char * * ) ;
* text = NULL ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ! _elm_layout_part_aliasing_eval ( obj , sd , & part , EINA_TRUE ) )
return ;
* text = edje_object_part_text_get ( wd - > resize_obj , part ) ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_content_set ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
const Eina_List * l ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * content = va_arg ( * list , Evas_Object * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ! _elm_layout_part_aliasing_eval ( obj , sd , & part , EINA_FALSE ) )
return ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
2013-03-22 01:42:04 -07:00
if ( sub_d - > type = = SWALLOW )
2012-05-03 15:41:26 -07:00
{
if ( ! strcmp ( part , sub_d - > part ) )
{
2012-11-25 22:32:53 -08:00
if ( content = = sub_d - > obj ) goto end ;
2012-05-03 15:41:26 -07:00
evas_object_del ( sub_d - > obj ) ;
break ;
}
/* was previously swallowed at another part -- mimic
* edje_object_part_swallow ( ) ' s behavior , then */
else if ( content = = sub_d - > obj )
{
elm_widget_sub_object_del ( obj , content ) ;
break ;
}
}
}
if ( content )
{
2012-05-13 23:13:47 -07:00
if ( ! elm_widget_sub_object_add ( obj , content ) )
2013-04-02 19:28:53 -07:00
return ;
2012-05-03 15:41:26 -07:00
2012-05-13 23:13:47 -07:00
if ( ! edje_object_part_swallow
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , content ) )
2012-05-03 15:41:26 -07:00
{
2012-05-13 23:13:47 -07:00
ERR ( " could not swallow %p into part '%s' " , content , part ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
sub_d - > type = SWALLOW ;
sub_d - > part = eina_stringshare_add ( part ) ;
sub_d - > obj = content ;
sd - > subs = eina_list_append ( sd - > subs , sub_d ) ;
_icon_signal_emit ( sd , sub_d , EINA_TRUE ) ;
}
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
end :
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_content_get ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
const Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * * content = va_arg ( * list , Evas_Object * * ) ;
* content = NULL ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
if ( ! _elm_layout_part_aliasing_eval ( obj , sd , & part , EINA_FALSE ) )
return ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( ( sub_d - > type = = SWALLOW ) & & ! strcmp ( part , sub_d - > part ) )
2012-11-25 22:32:53 -08:00
{
* content = sub_d - > obj ;
return ;
}
2012-05-03 15:41:26 -07:00
}
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_content_unset ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
const Eina_List * l ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * * ret = va_arg ( * list , Evas_Object * * ) ;
if ( ret ) * ret = NULL ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
if ( ! _elm_layout_part_aliasing_eval ( obj , sd , & part , EINA_FALSE ) )
return ;
2012-05-03 15:41:26 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( ( sub_d - > type = = SWALLOW ) & & ( ! strcmp ( part , sub_d - > part ) ) )
{
Evas_Object * content ;
2012-11-25 22:32:53 -08:00
if ( ! sub_d - > obj ) return ;
2012-05-03 15:41:26 -07:00
content = sub_d - > obj ; /* sub_d will die in
* _elm_layout_smart_sub_object_del */
if ( ! elm_widget_sub_object_del ( obj , content ) )
{
ERR ( " could not remove sub object %p from %p " , content , obj ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
edje_object_part_unswallow
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , content ) ;
if ( ret ) * ret = content ;
return ;
2012-05-03 15:41:26 -07:00
}
}
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_box_append ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
if ( ! edje_object_part_box_append
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) )
2012-05-03 15:41:26 -07:00
{
ERR ( " child %p could not be appended to box part '%s' " , child , part ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
if ( ! elm_widget_sub_object_add ( obj , child ) )
{
edje_object_part_box_remove
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) ;
return ;
2012-05-03 15:41:26 -07:00
}
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
sub_d - > type = BOX_APPEND ;
sub_d - > part = eina_stringshare_add ( part ) ;
sub_d - > obj = child ;
sd - > subs = eina_list_append ( sd - > subs , sub_d ) ;
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ;
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_box_prepend ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
if ( ! edje_object_part_box_prepend
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) )
2012-05-03 15:41:26 -07:00
{
ERR ( " child %p could not be prepended to box part '%s' " , child , part ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
if ( ! elm_widget_sub_object_add ( obj , child ) )
{
edje_object_part_box_remove
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) ;
return ;
2012-05-03 15:41:26 -07:00
}
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
sub_d - > type = BOX_PREPEND ;
sub_d - > part = eina_stringshare_add ( part ) ;
sub_d - > obj = child ;
sd - > subs = eina_list_prepend ( sd - > subs , sub_d ) ;
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ; ;
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2010-09-26 17:51:16 -07:00
}
static void
2012-05-03 15:41:26 -07:00
_box_reference_del ( void * data ,
Evas * e __UNUSED__ ,
Evas_Object * obj __UNUSED__ ,
void * event_info __UNUSED__ )
2012-05-02 09:58:10 -07:00
{
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Data * sub_d = data ;
sub_d - > p . box . reference = NULL ;
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_box_insert_before ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
const Evas_Object * reference = va_arg ( * list , const Evas_Object * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
if ( ! edje_object_part_box_insert_before
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child , reference ) )
2012-05-03 15:41:26 -07:00
{
ERR ( " child %p could not be inserted before %p inf box part '%s' " ,
child , reference , part ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
if ( ! elm_widget_sub_object_add ( obj , child ) )
{
edje_object_part_box_remove
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) ;
return ;
2012-05-03 15:41:26 -07:00
}
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
sub_d - > type = BOX_INSERT_BEFORE ;
sub_d - > part = eina_stringshare_add ( part ) ;
sub_d - > obj = child ;
sub_d - > p . box . reference = reference ;
sd - > subs = eina_list_append ( sd - > subs , sub_d ) ;
evas_object_event_callback_add
( ( Evas_Object * ) reference , EVAS_CALLBACK_DEL , _box_reference_del , sub_d ) ;
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ;
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_box_insert_at ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
unsigned int pos = va_arg ( * list , unsigned int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
if ( ! edje_object_part_box_insert_at
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child , pos ) )
2012-05-03 15:41:26 -07:00
{
ERR ( " child %p could not be inserted at %u to box part '%s' " ,
child , pos , part ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
if ( ! elm_widget_sub_object_add ( obj , child ) )
{
edje_object_part_box_remove
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) ;
return ;
2012-05-03 15:41:26 -07:00
}
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
sub_d - > type = BOX_INSERT_AT ;
sub_d - > part = eina_stringshare_add ( part ) ;
sub_d - > obj = child ;
sub_d - > p . box . pos = pos ;
sd - > subs = eina_list_append ( sd - > subs , sub_d ) ;
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ;
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
static Evas_Object *
_sub_box_remove ( Evas_Object * obj ,
Elm_Layout_Smart_Data * sd ,
Elm_Layout_Sub_Object_Data * sub_d )
{
Evas_Object * child = sub_d - > obj ; /* sub_d will die in
* _elm_layout_smart_sub_object_del */
if ( sub_d - > type = = BOX_INSERT_BEFORE )
evas_object_event_callback_del_full
( ( Evas_Object * ) sub_d - > p . box . reference ,
EVAS_CALLBACK_DEL , _box_reference_del , sub_d ) ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
edje_object_part_box_remove
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , sub_d - > part , child ) ;
2012-05-03 15:41:26 -07:00
2012-07-19 21:20:06 -07:00
if ( ! elm_widget_sub_object_del ( obj , child ) )
{
ERR ( " could not remove sub object %p from %p " , child , obj ) ;
return NULL ;
}
2012-05-03 15:41:26 -07:00
return child ;
}
static Eina_Bool
_sub_box_is ( const Elm_Layout_Sub_Object_Data * sub_d )
{
switch ( sub_d - > type )
{
case BOX_APPEND :
case BOX_PREPEND :
case BOX_INSERT_BEFORE :
case BOX_INSERT_AT :
return EINA_TRUE ;
default :
return EINA_FALSE ;
}
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_box_remove ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
Evas_Object * * ret = va_arg ( * list , Evas_Object * * ) ;
if ( ret ) * ret = NULL ;
Evas_Object * int_ret = NULL ;
EINA_SAFETY_ON_NULL_RETURN ( part ) ;
EINA_SAFETY_ON_NULL_RETURN ( child ) ;
Elm_Layout_Smart_Data * sd = _pd ;
2012-05-03 15:41:26 -07:00
const Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( ! _sub_box_is ( sub_d ) ) continue ;
if ( ( sub_d - > obj = = child ) & & ( ! strcmp ( sub_d - > part , part ) ) )
2012-11-25 22:32:53 -08:00
{
int_ret = _sub_box_remove ( obj , sd , sub_d ) ;
if ( ret ) * ret = int_ret ;
return ;
}
2012-05-03 15:41:26 -07:00
}
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_box_remove_all ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Eina_Bool clear = va_arg ( * list , int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
EINA_SAFETY_ON_NULL_RETURN ( part ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Data * sub_d ;
Eina_List * lst ;
lst = eina_list_clone ( sd - > subs ) ;
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( lst , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( ! _sub_box_is ( sub_d ) ) continue ;
if ( ! strcmp ( sub_d - > part , part ) )
{
/* original item's deletion handled at sub-obj-del */
Evas_Object * child = _sub_box_remove ( obj , sd , sub_d ) ;
if ( ( clear ) & & ( child ) ) evas_object_del ( child ) ;
}
}
/* eventually something may not be added with elm_layout, delete them
* as well */
edje_object_part_box_remove_all
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , clear ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2012-05-03 15:41:26 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_table_pack ( Eo * obj , void * _pd , va_list * list )
2012-05-03 15:41:26 -07:00
{
Elm_Layout_Sub_Object_Data * sub_d ;
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
unsigned short col = va_arg ( * list , unsigned int ) ;
unsigned short row = va_arg ( * list , unsigned int ) ;
unsigned short colspan = va_arg ( * list , unsigned int ) ;
unsigned short rowspan = va_arg ( * list , unsigned int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
if ( ! edje_object_part_table_pack
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child , col ,
2012-05-03 15:41:26 -07:00
row , colspan , rowspan ) )
{
ERR ( " child %p could not be packed into box part '%s' col=%uh, row=%hu, "
" colspan=%hu, rowspan=%hu " , child , part , col , row , colspan ,
rowspan ) ;
2012-11-25 22:32:53 -08:00
return ;
2012-05-03 15:41:26 -07:00
}
if ( ! elm_widget_sub_object_add ( obj , child ) )
{
edje_object_part_table_unpack
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part , child ) ;
return ;
2012-05-03 15:41:26 -07:00
}
sub_d = ELM_NEW ( Elm_Layout_Sub_Object_Data ) ;
sub_d - > type = TABLE_PACK ;
sub_d - > part = eina_stringshare_add ( part ) ;
sub_d - > obj = child ;
sub_d - > p . table . col = col ;
sub_d - > p . table . row = row ;
sub_d - > p . table . colspan = colspan ;
sub_d - > p . table . rowspan = rowspan ;
sd - > subs = eina_list_append ( sd - > subs , sub_d ) ;
2012-11-25 22:32:53 -08:00
if ( wd - > frozen ) goto end ;
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2010-09-26 17:51:16 -07:00
}
2012-05-03 15:41:26 -07:00
static Evas_Object *
_sub_table_remove ( Evas_Object * obj ,
Elm_Layout_Smart_Data * sd ,
Elm_Layout_Sub_Object_Data * sub_d )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
Evas_Object * child ;
2012-11-25 22:32:53 -08:00
Elm_Widget_Smart_Data * wd = eo_data_get ( sd - > obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
child = sub_d - > obj ; /* sub_d will die in _elm_layout_smart_sub_object_del */
2012-07-19 21:20:06 -07:00
edje_object_part_table_unpack
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , sub_d - > part , child ) ;
2012-07-19 21:20:06 -07:00
2012-05-03 15:41:26 -07:00
if ( ! elm_widget_sub_object_del ( obj , child ) )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ERR ( " could not remove sub object %p from %p " , child , obj ) ;
return NULL ;
2010-09-26 17:51:16 -07:00
}
2012-05-03 15:41:26 -07:00
return child ;
2010-09-26 17:51:16 -07:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_table_unpack ( Eo * obj , void * _pd , va_list * list )
2010-09-26 17:51:16 -07:00
{
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Evas_Object * child = va_arg ( * list , Evas_Object * ) ;
Evas_Object * * ret = va_arg ( * list , Evas_Object * * ) ;
if ( ret ) * ret = NULL ;
Evas_Object * int_ret = NULL ;
EINA_SAFETY_ON_NULL_RETURN ( part ) ;
EINA_SAFETY_ON_NULL_RETURN ( child ) ;
Elm_Layout_Smart_Data * sd = _pd ;
2010-09-26 17:51:16 -07:00
2012-05-03 15:41:26 -07:00
const Eina_List * l ;
Elm_Layout_Sub_Object_Data * sub_d ;
2012-05-02 18:19:05 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > subs , l , sub_d )
2012-05-03 15:41:26 -07:00
{
if ( sub_d - > type ! = TABLE_PACK ) continue ;
if ( ( sub_d - > obj = = child ) & & ( ! strcmp ( sub_d - > part , part ) ) )
2012-11-25 22:32:53 -08:00
{
int_ret = _sub_table_remove ( obj , sd , sub_d ) ;
if ( ret ) * ret = int_ret ;
return ;
}
2012-05-02 18:19:05 -07:00
}
}
2012-05-02 09:58:10 -07:00
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_table_clear ( Eo * obj , void * _pd , va_list * list )
2012-05-02 18:19:05 -07:00
{
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
Eina_Bool clear = va_arg ( * list , int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
EINA_SAFETY_ON_NULL_RETURN ( part ) ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Data * sub_d ;
Eina_List * lst ;
lst = eina_list_clone ( sd - > subs ) ;
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( lst , sub_d )
2008-10-06 23:55:11 -07:00
{
2012-05-03 15:41:26 -07:00
if ( sub_d - > type ! = TABLE_PACK ) continue ;
if ( ! strcmp ( sub_d - > part , part ) )
elementary - entry, genlist, gengrid, image, icon, hover, frame, diskselector, index, layout, label, conform, flip, flipselector - removed white spaces
SVN revision: 58252
2011-04-01 04:32:33 -07:00
{
2012-05-03 15:41:26 -07:00
/* original item's deletion handled at sub-obj-del */
Evas_Object * child = _sub_table_remove ( obj , sd , sub_d ) ;
if ( ( clear ) & & ( child ) ) evas_object_del ( child ) ;
elementary - entry, genlist, gengrid, image, icon, hover, frame, diskselector, index, layout, label, conform, flip, flipselector - removed white spaces
SVN revision: 58252
2011-04-01 04:32:33 -07:00
}
2008-10-06 23:55:11 -07:00
}
2012-05-03 15:41:26 -07:00
/* eventually something may not be added with elm_layout, delete them
* as well */
2012-11-25 22:32:53 -08:00
edje_object_part_table_clear ( wd - > resize_obj , part , clear ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2009-07-06 23:46:51 -07:00
}
2008-10-06 23:55:11 -07:00
2009-12-07 20:41:02 -08:00
static void
2012-05-03 15:41:26 -07:00
_on_size_evaluate_signal ( void * data ,
Evas_Object * obj __UNUSED__ ,
const char * emission __UNUSED__ ,
const char * source __UNUSED__ )
2009-12-07 20:41:02 -08:00
{
2012-11-25 22:32:53 -08:00
eo_do ( data , elm_obj_layout_sizing_eval ( ) ) ;
2009-12-07 20:41:02 -08:00
}
2010-10-27 09:58:35 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_layout_smart_add ( Eo * obj , void * _pd EINA_UNUSED , va_list * list EINA_UNUSED )
2010-10-27 09:58:35 -07:00
{
2013-02-16 05:39:59 -08:00
Evas_Object * edje ;
2012-05-02 09:58:10 -07:00
2012-05-03 15:41:47 -07:00
/* has to be there *before* parent's smart_add() */
2013-02-16 05:39:59 -08:00
edje = edje_object_add ( evas_object_evas_get ( obj ) ) ;
elm_widget_resize_object_set ( obj , edje ) ;
2012-05-03 15:41:47 -07:00
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_add ( ) ) ;
2012-05-03 15:41:26 -07:00
elm_widget_can_focus_set ( obj , EINA_FALSE ) ;
edje_object_signal_callback_add
2013-02-16 05:39:59 -08:00
( edje , " size,eval " , " elm " , _on_size_evaluate_signal , obj ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2010-10-27 09:58:35 -07:00
}
2011-06-29 02:30:56 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_layout_smart_del ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2011-06-29 02:30:56 -07:00
{
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Data * sub_d ;
Elm_Layout_Sub_Object_Cursor * pc ;
2012-05-25 12:53:59 -07:00
Edje_Signal_Data * esd ;
2012-05-03 15:41:26 -07:00
Evas_Object * child ;
2011-06-29 02:30:56 -07:00
Eina_List * l ;
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-22 06:46:45 -08:00
elm_layout_freeze ( obj ) ;
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( sd - > subs , sub_d )
2011-06-29 02:30:56 -07:00
{
2012-05-03 15:41:26 -07:00
eina_stringshare_del ( sub_d - > part ) ;
if ( sub_d - > type = = TEXT )
eina_stringshare_del ( sub_d - > p . text . text ) ;
free ( sub_d ) ;
2011-06-29 02:30:56 -07:00
}
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( sd - > parts_cursors , pc )
2012-05-03 15:41:26 -07:00
_part_cursor_free ( pc ) ;
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( sd - > edje_signals , esd )
2011-06-29 02:30:56 -07:00
{
2012-05-25 12:53:59 -07:00
eina_stringshare_del ( esd - > emission ) ;
eina_stringshare_del ( esd - > source ) ;
free ( esd ) ;
2011-06-29 02:30:56 -07:00
}
2012-05-03 15:41:26 -07:00
eina_stringshare_del ( sd - > klass ) ;
eina_stringshare_del ( sd - > group ) ;
2011-06-29 02:30:56 -07:00
2012-05-03 15:41:26 -07:00
/* let's make our Edje object the *last* to be processed, since it
* may ( smart ) parent other sub objects here */
2012-11-25 22:32:53 -08:00
EINA_LIST_FOREACH ( wd - > subobjs , l , child )
2011-10-25 17:46:16 -07:00
{
2012-11-25 22:32:53 -08:00
if ( child = = wd - > resize_obj )
2011-10-25 17:46:16 -07:00
{
2012-11-25 22:32:53 -08:00
wd - > subobjs =
eina_list_demote_list ( wd - > subobjs , l ) ;
2011-10-25 17:46:16 -07:00
break ;
}
}
2012-05-03 15:41:26 -07:00
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_del ( ) ) ;
}
2012-05-03 15:41:26 -07:00
/* rewrite or extend this one on your derived class as to suit your
* needs */
static void
2012-11-25 22:32:53 -08:00
_elm_layout_smart_calculate ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2011-10-25 17:46:16 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Layout_Smart_Data * sd = _pd ;
2011-10-25 17:46:16 -07:00
2012-05-03 15:41:26 -07:00
if ( sd - > needs_size_calc )
2011-10-25 17:46:16 -07:00
{
2012-05-03 15:41:26 -07:00
_sizing_eval ( obj , sd ) ;
sd - > needs_size_calc = EINA_FALSE ;
2011-10-25 17:46:16 -07:00
}
}
2012-05-03 15:41:26 -07:00
static Elm_Layout_Sub_Object_Cursor *
_parts_cursors_find ( Elm_Layout_Smart_Data * sd ,
const char * part )
2011-10-25 17:46:16 -07:00
{
const Eina_List * l ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > parts_cursors , l , pc )
2011-10-25 17:46:16 -07:00
{
2012-05-03 15:41:26 -07:00
if ( ! strcmp ( pc - > part , part ) )
return pc ;
2011-10-25 17:46:16 -07:00
}
2012-05-03 15:41:26 -07:00
2011-10-25 17:46:16 -07:00
return NULL ;
}
2012-05-03 15:41:26 -07:00
/* The public functions down here are meant to operate on whichever
* widget inheriting from elm_layout */
EAPI Eina_Bool
elm_layout_file_set ( Evas_Object * obj ,
const char * file ,
const char * group )
2008-10-06 23:55:11 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_file_set ( file , group , & ret ) ) ;
return ret ;
}
elementary - entry, genlist, gengrid, image, icon, hover, frame, diskselector, index, layout, label, conform, flip, flipselector - removed white spaces
SVN revision: 58252
2011-04-01 04:32:33 -07:00
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_file_set ( Eo * obj , void * _pd , va_list * list )
{
const char * file = va_arg ( * list , const char * ) ;
const char * group = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Eina_Bool int_ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2008-10-06 23:55:11 -07:00
2012-11-25 22:32:53 -08:00
int_ret =
edje_object_file_set ( wd - > resize_obj , file , group ) ;
if ( int_ret ) _visuals_refresh ( obj , sd ) ;
2012-05-03 15:41:26 -07:00
else
ERR ( " failed to set edje file '%s', group '%s': %s " ,
file , group ,
edje_load_error_str
2012-11-25 22:32:53 -08:00
( edje_object_load_error_get ( wd - > resize_obj ) ) ) ;
2008-10-06 23:55:11 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2010-10-13 19:36:37 -07:00
}
2012-05-02 18:19:05 -07:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_theme_set ( Evas_Object * obj ,
const char * klass ,
const char * group ,
const char * style )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_theme_set ( klass , group , style , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_theme_set ( Eo * obj , void * _pd , va_list * list )
{
const char * klass = va_arg ( * list , const char * ) ;
const char * group = va_arg ( * list , const char * ) ;
const char * style = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Eina_Bool int_ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-03-06 12:25:29 -08:00
2012-05-03 15:41:26 -07:00
eina_stringshare_replace ( & ( sd - > klass ) , klass ) ;
eina_stringshare_replace ( & ( sd - > group ) , group ) ;
2012-11-25 22:32:53 -08:00
eina_stringshare_replace ( & ( wd - > style ) , style ) ;
2010-10-13 19:36:37 -07:00
2012-05-03 15:41:26 -07:00
/* not issuing smart theme directly here, because one may want to
use this function inside a smart theme routine of its own */
2012-11-25 22:32:53 -08:00
int_ret = elm_widget_theme_object_set
( obj , wd - > resize_obj , sd - > klass , sd - > group ,
2012-05-03 15:41:26 -07:00
elm_widget_style_get ( obj ) ) ;
evas_object_smart_callback_call ( obj , SIG_THEME_CHANGED , NULL ) ;
2012-05-02 09:58:10 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2010-10-13 19:36:37 -07:00
}
2012-11-25 22:32:53 -08:00
2012-05-03 15:41:26 -07:00
EAPI void
elm_layout_signal_emit ( Evas_Object * obj ,
const char * emission ,
const char * source )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_signal_emit ( emission , source ) ) ;
2012-05-03 15:41:26 -07:00
}
2010-10-13 19:36:37 -07:00
2012-05-03 15:41:26 -07:00
EAPI void
elm_layout_signal_callback_add ( Evas_Object * obj ,
const char * emission ,
const char * source ,
Edje_Signal_Cb func ,
void * data )
{
ELM_LAYOUT_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_signal_callback_add ( emission , source , func , data ) ) ;
2012-05-02 09:58:10 -07:00
}
2010-10-13 19:36:37 -07:00
2012-05-03 15:41:26 -07:00
EAPI void *
elm_layout_signal_callback_del ( Evas_Object * obj ,
const char * emission ,
const char * source ,
Edje_Signal_Cb func )
2012-05-02 09:58:10 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
void * ret = NULL ;
eo_do ( obj , elm_obj_layout_signal_callback_del ( emission , source , func , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-03-06 12:25:29 -08:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_content_set ( Evas_Object * obj ,
const char * swallow ,
Evas_Object * content )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_container_content_set ( swallow , content , & ret ) ) ;
return ret ;
2012-05-03 15:41:26 -07:00
}
2010-10-13 19:36:37 -07:00
2012-05-03 15:41:26 -07:00
EAPI Evas_Object *
elm_layout_content_get ( const Evas_Object * obj ,
const char * swallow )
{
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_container_content_get ( swallow , & ret ) ) ;
return ret ;
2012-05-03 15:41:26 -07:00
}
2010-10-13 19:36:37 -07:00
2012-05-03 15:41:26 -07:00
EAPI Evas_Object *
elm_layout_content_unset ( Evas_Object * obj ,
const char * swallow )
{
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( obj , elm_obj_container_content_unset ( swallow , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-05-02 09:58:10 -07:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_text_set ( Evas_Object * obj ,
const char * part ,
const char * text )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
2013-04-23 00:49:49 -07:00
text = elm_widget_part_text_translate ( obj , part , text ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_text_set ( part , text , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-05-03 15:41:26 -07:00
EAPI const char *
elm_layout_text_get ( const Evas_Object * obj ,
const char * part )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-05-02 09:58:10 -07:00
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_layout_text_get ( part , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-05-03 15:41:26 -07:00
EAPI Eina_Bool
elm_layout_box_append ( Evas_Object * obj ,
const char * part ,
Evas_Object * child )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-10-18 20:17:00 -07:00
EINA_SAFETY_ON_NULL_RETURN_VAL ( child , EINA_FALSE ) ;
2010-10-13 19:36:37 -07:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_box_append ( part , child , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-05-03 15:41:26 -07:00
EAPI Eina_Bool
elm_layout_box_prepend ( Evas_Object * obj ,
const char * part ,
Evas_Object * child )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-10-18 20:17:00 -07:00
EINA_SAFETY_ON_NULL_RETURN_VAL ( child , EINA_FALSE ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_box_prepend ( part , child , & ret ) ) ;
return ret ;
2012-05-02 09:58:10 -07:00
}
2010-10-13 19:36:37 -07:00
2012-05-03 15:41:26 -07:00
EAPI Eina_Bool
elm_layout_box_insert_before ( Evas_Object * obj ,
const char * part ,
Evas_Object * child ,
const Evas_Object * reference )
2012-05-02 09:58:10 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-10-18 20:17:00 -07:00
EINA_SAFETY_ON_NULL_RETURN_VAL ( child , EINA_FALSE ) ;
EINA_SAFETY_ON_NULL_RETURN_VAL ( reference , EINA_FALSE ) ;
2012-03-06 12:25:29 -08:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_box_insert_before ( part , child , reference , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-03-06 12:25:29 -08:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_box_insert_at ( Evas_Object * obj ,
const char * part ,
Evas_Object * child ,
unsigned int pos )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-10-18 20:17:00 -07:00
EINA_SAFETY_ON_NULL_RETURN_VAL ( child , EINA_FALSE ) ;
2012-05-02 18:19:05 -07:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_box_insert_at ( part , child , pos , & ret ) ) ;
return ret ;
2012-05-03 15:41:26 -07:00
}
2012-05-02 18:19:05 -07:00
2012-05-03 15:41:26 -07:00
EAPI Evas_Object *
elm_layout_box_remove ( Evas_Object * obj ,
const char * part ,
Evas_Object * child )
{
ELM_LAYOUT_CHECK ( obj ) NULL ;
2010-10-13 19:36:37 -07:00
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( obj , elm_obj_layout_box_remove ( part , child , & ret ) ) ;
return ret ;
2012-05-02 09:58:10 -07:00
}
2010-10-13 19:36:37 -07:00
2012-05-02 09:58:10 -07:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_box_remove_all ( Evas_Object * obj ,
const char * part ,
Eina_Bool clear )
2012-05-02 09:58:10 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-05-02 18:19:05 -07:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_box_remove_all ( part , clear , & ret ) ) ;
return ret ;
2012-05-03 15:41:26 -07:00
}
2012-03-06 12:25:29 -08:00
2012-05-03 15:41:26 -07:00
EAPI Eina_Bool
elm_layout_table_pack ( Evas_Object * obj ,
const char * part ,
Evas_Object * child ,
unsigned short col ,
unsigned short row ,
unsigned short colspan ,
unsigned short rowspan )
{
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-05-02 18:19:05 -07:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_table_pack ( part , child , col , row , colspan , rowspan , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
EAPI Evas_Object *
2012-05-03 15:41:26 -07:00
elm_layout_table_unpack ( Evas_Object * obj ,
const char * part ,
Evas_Object * child )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2010-10-13 19:36:37 -07:00
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( obj , elm_obj_layout_table_unpack ( part , child , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2012-03-06 12:25:29 -08:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_table_clear ( Evas_Object * obj ,
const char * part ,
Eina_Bool clear )
2010-10-13 19:36:37 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-03-06 12:25:29 -08:00
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_table_clear ( part , clear , & ret ) ) ;
return ret ;
2010-10-13 19:36:37 -07:00
}
2008-10-07 00:45:49 -07:00
EAPI Evas_Object *
2009-02-25 07:54:26 -08:00
elm_layout_edje_get ( const Evas_Object * obj )
2008-10-07 00:45:49 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_layout_edje_get ( & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_edje_get ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
Evas_Object * * ret = va_arg ( * list , Evas_Object * * ) ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
* ret = wd - > resize_obj ;
2008-10-07 00:45:49 -07:00
}
2009-12-07 20:41:02 -08:00
2011-01-19 10:28:01 -08:00
EAPI const char *
2012-05-03 15:41:26 -07:00
elm_layout_data_get ( const Evas_Object * obj ,
const char * key )
2011-01-19 10:28:01 -08:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_layout_data_get ( key , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_data_get ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
const char * key = va_arg ( * list , const char * ) ;
const char * * ret = va_arg ( * list , const char * * ) ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
* ret = edje_object_data_get ( wd - > resize_obj , key ) ;
2011-01-19 10:28:01 -08:00
}
2009-12-07 20:41:02 -08:00
EAPI void
2009-12-11 00:12:58 -08:00
elm_layout_sizing_eval ( Evas_Object * obj )
2009-12-07 20:41:02 -08:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2009-12-07 20:41:02 -08:00
}
2010-09-26 17:51:16 -07:00
2012-07-30 00:14:33 -07:00
EAPI int
elm_layout_freeze ( Evas_Object * obj )
{
ELM_LAYOUT_CHECK ( obj ) 0 ;
2012-11-25 22:32:53 -08:00
int ret = 0 ;
eo_do ( obj , elm_obj_layout_freeze ( & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_freeze ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
int int_ret = 1 ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
if ( ( wd - > frozen ) + + ! = 0 )
{
int_ret = wd - > frozen ;
goto end ;
}
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
edje_object_freeze ( wd - > resize_obj ) ;
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = int_ret ;
2012-07-30 00:14:33 -07:00
}
EAPI int
elm_layout_thaw ( Evas_Object * obj )
{
ELM_LAYOUT_CHECK ( obj ) 0 ;
2012-11-25 22:32:53 -08:00
int ret = 0 ;
eo_do ( obj , elm_obj_layout_thaw ( & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_thaw ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
int * ret = va_arg ( * list , int * ) ;
int int_ret = 0 ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
if ( - - ( wd - > frozen ) ! = 0 )
{
int_ret = wd - > frozen ;
goto end ;
}
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
edje_object_thaw ( wd - > resize_obj ) ;
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_layout_sizing_eval ( ) ) ;
2012-07-30 00:14:33 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = int_ret ;
2012-07-30 00:14:33 -07:00
}
2010-09-26 17:51:16 -07:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_set ( Evas_Object * obj ,
const char * part_name ,
const char * cursor )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_part_cursor_set ( part_name , cursor , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_set ( Eo * obj , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
const char * cursor = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
2010-09-26 17:51:16 -07:00
Evas_Object * part_obj ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc ;
2010-09-26 17:51:16 -07:00
2012-05-03 15:41:26 -07:00
part_obj = ( Evas_Object * ) edje_object_part_object_get
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , part_name ) ;
2010-09-26 17:51:16 -07:00
if ( ! part_obj )
{
const char * group , * file ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
edje_object_file_get ( wd - > resize_obj , & file , & group ) ;
2012-05-03 15:41:26 -07:00
ERR ( " no part '%s' in group '%s' of file '%s'. Cannot set cursor '%s' " ,
2010-09-26 17:51:16 -07:00
part_name , group , file , cursor ) ;
2012-11-25 22:32:53 -08:00
return ;
2010-09-26 17:51:16 -07:00
}
if ( evas_object_pass_events_get ( part_obj ) )
{
const char * group , * file ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
edje_object_file_get ( wd - > resize_obj , & file , & group ) ;
2012-05-03 15:41:26 -07:00
ERR ( " part '%s' in group '%s' of file '%s' has mouse_events: 0. "
2010-09-26 17:51:16 -07:00
" Cannot set cursor '%s' " ,
part_name , group , file , cursor ) ;
2012-11-25 22:32:53 -08:00
return ;
2010-09-26 17:51:16 -07:00
}
2012-05-03 15:41:26 -07:00
pc = _parts_cursors_find ( sd , part_name ) ;
2010-09-26 17:51:16 -07:00
if ( pc ) eina_stringshare_replace ( & pc - > cursor , cursor ) ;
else
{
pc = calloc ( 1 , sizeof ( * pc ) ) ;
pc - > part = eina_stringshare_add ( part_name ) ;
pc - > cursor = eina_stringshare_add ( cursor ) ;
2012-01-13 15:43:17 -08:00
pc - > style = eina_stringshare_add ( " default " ) ;
2012-05-03 15:41:26 -07:00
sd - > parts_cursors = eina_list_append ( sd - > parts_cursors , pc ) ;
2010-09-26 17:51:16 -07:00
}
pc - > obj = part_obj ;
elm_object_sub_cursor_set ( part_obj , obj , pc - > cursor ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2010-09-26 17:51:16 -07:00
}
2010-11-04 17:46:54 -07:00
EAPI const char *
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_get ( const Evas_Object * obj ,
const char * part_name )
2010-11-04 17:46:54 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_layout_part_cursor_get ( part_name , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
const char * * ret = va_arg ( * list , const char * * ) ;
* ret = NULL ;
Elm_Layout_Smart_Data * sd = _pd ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc = _parts_cursors_find ( sd , part_name ) ;
2012-11-25 22:32:53 -08:00
EINA_SAFETY_ON_NULL_RETURN ( pc ) ;
EINA_SAFETY_ON_NULL_RETURN ( pc - > obj ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
* ret = elm_object_cursor_get ( pc - > obj ) ;
2010-11-04 17:46:54 -07:00
}
2012-03-06 12:25:29 -08:00
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_unset ( Evas_Object * obj ,
const char * part_name )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_part_cursor_unset ( part_name , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_unset ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
2010-09-26 17:51:16 -07:00
Eina_List * l ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc ;
2010-09-26 17:51:16 -07:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > parts_cursors , l , pc )
2010-09-26 17:51:16 -07:00
{
2010-10-22 14:41:27 -07:00
if ( ! strcmp ( part_name , pc - > part ) )
2010-09-26 17:51:16 -07:00
{
if ( pc - > obj ) elm_object_cursor_unset ( pc - > obj ) ;
_part_cursor_free ( pc ) ;
2012-05-03 15:41:26 -07:00
sd - > parts_cursors = eina_list_remove_list ( sd - > parts_cursors , l ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
return ;
2010-09-26 17:51:16 -07:00
}
}
}
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_style_set ( Evas_Object * obj ,
const char * part_name ,
const char * style )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_part_cursor_style_set ( part_name , style , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_style_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
const char * style = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc = _parts_cursors_find ( sd , part_name ) ;
2012-11-25 22:32:53 -08:00
EINA_SAFETY_ON_NULL_RETURN ( pc ) ;
EINA_SAFETY_ON_NULL_RETURN ( pc - > obj ) ;
2010-09-26 17:51:16 -07:00
eina_stringshare_replace ( & pc - > style , style ) ;
elm_object_cursor_style_set ( pc - > obj , pc - > style ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2010-09-26 17:51:16 -07:00
}
EAPI const char *
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_style_get ( const Evas_Object * obj ,
const char * part_name )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const char * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_layout_part_cursor_style_get ( part_name , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_style_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
const char * * ret = va_arg ( * list , const char * * ) ;
* ret = NULL ;
Elm_Layout_Smart_Data * sd = _pd ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc = _parts_cursors_find ( sd , part_name ) ;
2012-11-25 22:32:53 -08:00
EINA_SAFETY_ON_NULL_RETURN ( pc ) ;
EINA_SAFETY_ON_NULL_RETURN ( pc - > obj ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
* ret = elm_object_cursor_style_get ( pc - > obj ) ;
2010-09-26 17:51:16 -07:00
}
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_engine_only_set ( Evas_Object * obj ,
const char * part_name ,
Eina_Bool engine_only )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_part_cursor_engine_only_set ( part_name , engine_only , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_engine_only_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
Eina_Bool engine_only = va_arg ( * list , int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc = _parts_cursors_find ( sd , part_name ) ;
2012-11-25 22:32:53 -08:00
EINA_SAFETY_ON_NULL_RETURN ( pc ) ;
EINA_SAFETY_ON_NULL_RETURN ( pc - > obj ) ;
2010-09-26 17:51:16 -07:00
pc - > engine_only = ! ! engine_only ;
2012-03-05 01:15:04 -08:00
elm_object_cursor_theme_search_enabled_set ( pc - > obj , pc - > engine_only ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2010-09-26 17:51:16 -07:00
}
EAPI Eina_Bool
2012-05-03 15:41:26 -07:00
elm_layout_part_cursor_engine_only_get ( const Evas_Object * obj ,
const char * part_name )
2010-09-26 17:51:16 -07:00
{
2012-05-03 15:41:26 -07:00
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_layout_part_cursor_engine_only_get ( part_name , & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_part_cursor_engine_only_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const char * part_name = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
* ret = EINA_FALSE ;
Elm_Layout_Smart_Data * sd = _pd ;
EINA_SAFETY_ON_NULL_RETURN ( part_name ) ;
2012-05-03 15:41:26 -07:00
Elm_Layout_Sub_Object_Cursor * pc = _parts_cursors_find ( sd , part_name ) ;
2012-11-25 22:32:53 -08:00
EINA_SAFETY_ON_NULL_RETURN ( pc ) ;
EINA_SAFETY_ON_NULL_RETURN ( pc - > obj ) ;
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
* ret = elm_object_cursor_theme_search_enabled_get ( pc - > obj ) ;
2010-09-26 17:51:16 -07:00
}
2012-05-03 15:41:26 -07:00
static const Elm_Layout_Part_Alias_Description _text_aliases [ ] =
{
{ " default " , " elm.text " } ,
{ NULL , NULL }
} ;
2012-07-05 21:03:21 -07:00
EAPI Eina_Bool
2012-07-31 15:05:38 -07:00
elm_layout_edje_object_can_access_set ( Evas_Object * obj ,
Eina_Bool can_access )
2012-07-05 21:03:21 -07:00
{
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_edje_object_can_access_set ( can_access , & ret ) ) ;
return ret ;
}
2012-07-05 21:03:21 -07:00
2012-11-25 22:32:53 -08:00
static void
_elm_layout_smart_edje_object_can_access_set ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool can_access = va_arg ( * list , int ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
wd - > can_access = ! ! can_access ;
if ( ret ) * ret = EINA_TRUE ;
2012-07-05 21:03:21 -07:00
}
EAPI Eina_Bool
elm_layout_edje_object_can_access_get ( Evas_Object * obj )
{
ELM_LAYOUT_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( obj , elm_obj_layout_edje_object_can_access_get ( & ret ) ) ;
return ret ;
}
static void
_elm_layout_smart_edje_object_can_access_get ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Widget_Smart_Data * wd = eo_data_get ( obj , ELM_OBJ_WIDGET_CLASS ) ;
2012-07-05 21:03:21 -07:00
2012-11-25 22:32:53 -08:00
* ret = wd - > can_access ;
2012-07-05 21:03:21 -07:00
}
2013-02-19 08:23:27 -08:00
static void
_dbg_info_get ( Eo * eo_obj , void * _pd EINA_UNUSED , va_list * list )
{
Eo_Dbg_Info * root = ( Eo_Dbg_Info * ) va_arg ( * list , Eo_Dbg_Info * ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( eo_obj , MY_CLASS , eo_dbg_info_get ( root ) ) ;
2013-04-08 22:48:42 -07:00
Elm_Widget_Smart_Data * wd = eo_data_get ( eo_obj , ELM_OBJ_WIDGET_CLASS ) ;
2013-02-19 08:23:27 -08:00
2013-04-08 22:48:42 -07:00
if ( ! wd ) return ;
if ( eo_isa ( wd - > resize_obj , EDJE_OBJ_CLASS ) )
2013-02-19 08:23:27 -08:00
{
2013-04-08 22:48:42 -07:00
Eo_Dbg_Info * group = EO_DBG_INFO_LIST_APPEND ( root , MY_CLASS_NAME ) ;
const char * file , * edje_group ;
2013-02-19 08:23:27 -08:00
Evas_Object * edje_obj = wd - > resize_obj ;
eo_do ( edje_obj , edje_obj_file_get ( & file , & edje_group ) ) ;
EO_DBG_INFO_APPEND ( group , " File " , EINA_VALUE_TYPE_STRING , file ) ;
EO_DBG_INFO_APPEND ( group , " Group " , EINA_VALUE_TYPE_STRING , edje_group ) ;
Edje_Load_Error error ;
eo_do ( edje_obj , edje_obj_load_error_get ( & error ) ) ;
if ( error ! = EDJE_LOAD_ERROR_NONE )
{
EO_DBG_INFO_APPEND ( group , " Error " , EINA_VALUE_TYPE_STRING ,
2013-04-08 22:48:42 -07:00
edje_load_error_str ( error ) ) ;
2013-02-19 08:23:27 -08:00
}
}
}
2012-05-03 15:41:26 -07:00
EAPI Evas_Object *
elm_layout_add ( Evas_Object * parent )
{
EINA_SAFETY_ON_NULL_RETURN_VAL ( parent , NULL ) ;
2012-11-25 22:32:53 -08:00
Evas_Object * obj = eo_add ( MY_CLASS , parent ) ;
eo_unref ( obj ) ;
return obj ;
}
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
static void
_constructor ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
{
Elm_Layout_Smart_Data * sd = _pd ;
sd - > obj = obj ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , eo_constructor ( ) ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj ,
evas_obj_type_set ( MY_CLASS_NAME ) ,
evas_obj_smart_callbacks_descriptions_set ( _smart_callbacks , NULL ) ) ;
2013-04-02 19:28:53 -07:00
elm_widget_sub_object_add ( eo_parent_get ( obj ) , obj ) ;
2012-11-25 22:32:53 -08:00
}
2012-05-03 15:41:26 -07:00
2012-11-25 22:32:53 -08:00
static void
_class_constructor ( Eo_Class * klass )
{
const Eo_Op_Func_Description func_desc [ ] = {
EO_OP_FUNC ( EO_BASE_ID ( EO_BASE_SUB_ID_CONSTRUCTOR ) , _constructor ) ,
2013-02-19 08:23:27 -08:00
EO_OP_FUNC ( EO_BASE_ID ( EO_BASE_SUB_ID_DBG_INFO_GET ) , _dbg_info_get ) ,
2012-11-25 22:32:53 -08:00
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_ADD ) , _elm_layout_smart_add ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_DEL ) , _elm_layout_smart_del ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_CALCULATE ) , _elm_layout_smart_calculate ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_ON_FOCUS ) , _elm_layout_smart_on_focus ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_DISABLE ) , _elm_layout_smart_disable ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_THEME ) , _elm_layout_smart_theme ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS ) , _elm_layout_smart_focus_next_manager_is ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_NEXT ) , _elm_layout_smart_focus_next ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS ) , _elm_layout_smart_focus_direction_manager_is ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_DIRECTION ) , _elm_layout_smart_focus_direction ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_SUB_OBJECT_ADD ) , _elm_layout_smart_sub_object_add ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_SUB_OBJECT_DEL ) , _elm_layout_smart_sub_object_del ) ,
EO_OP_FUNC ( ELM_OBJ_CONTAINER_ID ( ELM_OBJ_CONTAINER_SUB_ID_CONTENT_SET ) , _elm_layout_smart_content_set ) ,
EO_OP_FUNC ( ELM_OBJ_CONTAINER_ID ( ELM_OBJ_CONTAINER_SUB_ID_CONTENT_GET ) , _elm_layout_smart_content_get ) ,
EO_OP_FUNC ( ELM_OBJ_CONTAINER_ID ( ELM_OBJ_CONTAINER_SUB_ID_CONTENT_UNSET ) , _elm_layout_smart_content_unset ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_FILE_SET ) , _elm_layout_smart_file_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_THEME_SET ) , _elm_layout_smart_theme_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_EMIT ) , _elm_layout_smart_signal_emit ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_CALLBACK_ADD ) , _elm_layout_smart_signal_callback_add ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_CALLBACK_DEL ) , _elm_layout_smart_signal_callback_del ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_SET ) , _elm_layout_smart_text_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_GET ) , _elm_layout_smart_text_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_BOX_APPEND ) , _elm_layout_smart_box_append ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_BOX_PREPEND ) , _elm_layout_smart_box_prepend ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_BOX_INSERT_BEFORE ) , _elm_layout_smart_box_insert_before ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_BOX_INSERT_AT ) , _elm_layout_smart_box_insert_at ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_BOX_REMOVE ) , _elm_layout_smart_box_remove ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_BOX_REMOVE_ALL ) , _elm_layout_smart_box_remove_all ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TABLE_PACK ) , _elm_layout_smart_table_pack ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TABLE_UNPACK ) , _elm_layout_smart_table_unpack ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TABLE_CLEAR ) , _elm_layout_smart_table_clear ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_EDJE_GET ) , _elm_layout_smart_edje_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_DATA_GET ) , _elm_layout_smart_data_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL ) , _elm_layout_smart_sizing_eval ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_SET ) , _elm_layout_smart_part_cursor_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_GET ) , _elm_layout_smart_part_cursor_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_UNSET ) , _elm_layout_smart_part_cursor_unset ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_STYLE_SET ) , _elm_layout_smart_part_cursor_style_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_STYLE_GET ) , _elm_layout_smart_part_cursor_style_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_ENGINE_ONLY_SET ) , _elm_layout_smart_part_cursor_engine_only_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_ENGINE_ONLY_GET ) , _elm_layout_smart_part_cursor_engine_only_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_EDJE_OBJECT_CAN_ACCESS_SET ) , _elm_layout_smart_edje_object_can_access_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_EDJE_OBJECT_CAN_ACCESS_GET ) , _elm_layout_smart_edje_object_can_access_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_ALIASES_GET ) , _elm_layout_smart_text_aliases_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_CONTENT_ALIASES_GET ) , _elm_layout_smart_content_aliases_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_SUB_OBJECT_ADD_ENABLE ) , _elm_layout_smart_sub_object_add_enable ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_THEME_ENABLE ) , _elm_layout_smart_theme_enable ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_FREEZE ) , _elm_layout_smart_freeze ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_THAW ) , _elm_layout_smart_thaw ) ,
EO_OP_FUNC_SENTINEL
} ;
eo_class_funcs_set ( klass , func_desc ) ;
2013-02-09 23:52:31 -08:00
evas_smart_legacy_type_register ( MY_CLASS_NAME , klass ) ;
2012-11-25 22:32:53 -08:00
}
static const Eo_Op_Description op_desc [ ] = {
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_FILE_SET , " Set the file that will be used as layout. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_THEME_SET , " Set the edje group from the elementary theme that will be used as layout. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_EMIT , " Send a (Edje) signal to a given layout widget's underlying Edje object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_CALLBACK_ADD , " Add a callback for a (Edje) signal emitted by a layout widget's underlying Edje object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_CALLBACK_DEL , " Remove a signal-triggered callback from a given layout widget. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_SET , " Set the text of the given part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_GET , " Get the text set in the given part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_BOX_APPEND , " Append child to layout box part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_BOX_PREPEND , " Prepend child to layout box part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_BOX_INSERT_BEFORE , " Insert child to layout box part before a reference object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_BOX_INSERT_AT , " Insert child to layout box part at a given position. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_BOX_REMOVE , " Remove a child of the given part box. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_BOX_REMOVE_ALL , " Remove all children of the given part box. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_TABLE_PACK , " Insert child to layout table part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_TABLE_UNPACK , " Unpack (remove) a child of the given part table. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_TABLE_CLEAR , " Remove all the child objects of the given part table. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_EDJE_GET , " Get the edje layout. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_DATA_GET , " Get the edje data from the given layout. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL , " Eval sizing. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_SET , " Sets a specific cursor for an edje part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_GET , " Get the cursor to be shown when mouse is over an edje part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_UNSET , " Unsets a cursor previously set with elm_layout_part_cursor_set(). " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_STYLE_SET , " Sets a specific cursor style for an edje part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_STYLE_GET , " Gets a specific cursor style for an edje part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_ENGINE_ONLY_SET , " Sets if the cursor set should be searched on the theme or should use the provided by the engine, only . " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_PART_CURSOR_ENGINE_ONLY_GET , " Gets a specific cursor engine_only for an edje part. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_EDJE_OBJECT_CAN_ACCESS_SET , " Checks whenever 'property' is impemented in current class. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_EDJE_OBJECT_CAN_ACCESS_GET , " Checks whenever 'property' is impemented in current class. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_ALIASES_GET , " Checks whenever 'text aliases' are impemented in current class. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_CONTENT_ALIASES_GET , " Checks whenever 'content aliases' are impemented in current class. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_SUB_OBJECT_ADD_ENABLE , " Checks whenever sub object handling impemented in current class. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_THEME_ENABLE , " Checks whenever 'theme' is impemented in current class. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_FREEZE , " Freezes the Elementary layout object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_LAYOUT_SUB_ID_THAW , " Thaws the Elementary layout object. " ) ,
EO_OP_DESCRIPTION_SENTINEL
} ;
static const Eo_Class_Description class_desc = {
EO_VERSION ,
MY_CLASS_NAME ,
EO_CLASS_TYPE_REGULAR ,
EO_CLASS_DESCRIPTION_OPS ( & ELM_OBJ_LAYOUT_BASE_ID , op_desc , ELM_OBJ_LAYOUT_SUB_ID_LAST ) ,
NULL ,
sizeof ( Elm_Layout_Smart_Data ) ,
_class_constructor ,
NULL
} ;
EO_DEFINE_CLASS ( elm_obj_layout_class_get , & class_desc , ELM_OBJ_CONTAINER_CLASS , NULL ) ;
2012-05-03 15:41:26 -07:00