2013-04-25 22:13:00 -07:00
# ifdef HAVE_CONFIG_H
# include "elementary_config.h"
# endif
2011-11-23 17:06:26 -08:00
# include <Elementary.h>
# include "elm_priv.h"
2012-08-30 09:46:12 -07:00
# include "elm_widget_multibuttonentry.h"
2011-11-23 17:06:26 -08:00
2012-11-25 22:32:53 -08:00
EAPI Eo_Op ELM_OBJ_MULTIBUTTONENTRY_BASE_ID = EO_NOOP ;
# define MY_CLASS ELM_OBJ_MULTIBUTTONENTRY_CLASS
2013-11-07 03:44:22 -08:00
# define MY_CLASS_NAME "Elm_Multibuttonentry"
# define MY_CLASS_NAME_LEGACY "elm_multibuttonentry"
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
# define MAX_STR 256
# define MIN_W_ENTRY 10
2012-03-12 17:45:01 -07:00
//widget signals
static const char SIG_ITEM_SELECTED [ ] = " item,selected " ;
static const char SIG_ITEM_ADDED [ ] = " item,added " ;
static const char SIG_ITEM_DELETED [ ] = " item,deleted " ;
static const char SIG_ITEM_CLICKED [ ] = " item,clicked " ;
static const char SIG_CLICKED [ ] = " clicked " ;
static const char SIG_FOCUSED [ ] = " focused " ;
static const char SIG_UNFOCUSED [ ] = " unfocused " ;
static const char SIG_EXPANDED [ ] = " expanded " ;
static const char SIG_CONTRACTED [ ] = " contracted " ;
static const char SIG_EXPAND_STATE_CHANGED [ ] = " expand,state,changed " ;
2012-08-30 09:46:12 -07:00
static const Evas_Smart_Cb_Description _smart_callbacks [ ] = {
{ SIG_ITEM_SELECTED , " " } ,
{ SIG_ITEM_ADDED , " " } ,
{ SIG_ITEM_DELETED , " " } ,
{ SIG_ITEM_CLICKED , " " } ,
{ SIG_CLICKED , " " } ,
{ SIG_FOCUSED , " " } ,
{ SIG_UNFOCUSED , " " } ,
{ SIG_EXPANDED , " " } ,
{ SIG_CONTRACTED , " " } ,
{ SIG_EXPAND_STATE_CHANGED , " " } ,
{ NULL , NULL }
2012-03-12 17:45:01 -07:00
} ;
2012-03-02 04:43:02 -08:00
2013-04-23 04:30:15 -07:00
static void
_elm_multibuttonentry_smart_translate ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
Elm_Multibuttonentry_Item * it ;
Eina_List * l ;
EINA_LIST_FOREACH ( sd - > items , l , it )
elm_widget_item_translate ( it ) ;
if ( ret ) * ret = EINA_TRUE ;
}
2013-12-26 09:27:39 -08:00
static char *
_format_count ( int count , void * data EINA_UNUSED )
{
char buf [ 32 ] ;
if ( ! snprintf ( buf , sizeof ( buf ) , " ... + %d " , count ) ) return NULL ;
return strdup ( buf ) ;
}
2012-11-25 22:32:53 -08:00
static void
_elm_multibuttonentry_smart_theme ( Eo * obj , void * _pd , va_list * list )
2011-11-23 17:06:26 -08:00
{
Eina_List * l ;
Elm_Multibuttonentry_Item * item ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
Eina_Bool int_ret ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
2011-11-23 17:06:26 -08:00
2014-01-21 00:44:45 -08:00
eo_do_super ( obj , MY_CLASS , elm_wdg_theme_apply ( & int_ret ) ) ;
2012-11-25 22:32:53 -08:00
if ( ! int_ret ) return ;
2011-11-23 17:06:26 -08:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2011-11-23 17:06:26 -08:00
{
if ( item - > button )
2012-08-30 09:46:12 -07:00
elm_widget_theme_object_set
( obj , item - > button , " multibuttonentry " , " btn " ,
elm_widget_style_get ( obj ) ) ;
edje_object_scale_set
( item - > button , elm_widget_scale_get ( obj ) * elm_config_scale_get ( ) ) ;
2011-11-23 17:06:26 -08:00
}
2012-03-05 01:58:38 -08:00
2012-08-30 09:46:12 -07:00
elm_layout_sizing_eval ( obj ) ;
2011-11-23 17:06:26 -08:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_visual_guide_text_set ( Evas_Object * obj )
2011-11-23 17:06:26 -08:00
{
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
elm_box_unpack ( sd - > box , sd - > guide_text ) ;
elm_box_unpack ( sd - > box , sd - > entry ) ;
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK ) return ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( ! elm_widget_focus_get ( obj ) )
elm_object_focus_set ( sd - > entry , EINA_FALSE ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( ( ! eina_list_count ( sd - > items ) ) & & sd - > guide_text
& & ( ! elm_widget_focus_get ( obj ) ) & & ( ! sd - > n_str ) )
2012-07-03 04:22:46 -07:00
{
2012-08-30 09:46:12 -07:00
evas_object_hide ( sd - > entry ) ;
elm_box_pack_end ( sd - > box , sd - > guide_text ) ;
evas_object_show ( sd - > guide_text ) ;
sd - > view_state = MULTIBUTTONENTRY_VIEW_GUIDETEXT ;
2011-11-23 17:06:26 -08:00
}
else
{
2012-08-30 09:46:12 -07:00
evas_object_hide ( sd - > guide_text ) ;
2012-07-03 04:22:46 -07:00
2012-08-30 09:46:12 -07:00
if ( sd - > editable )
2012-07-03 04:22:46 -07:00
{
2012-08-30 09:46:12 -07:00
elm_box_pack_end ( sd - > box , sd - > entry ) ;
evas_object_show ( sd - > entry ) ;
if ( elm_widget_focus_get ( obj ) )
2012-07-03 04:22:46 -07:00
{
2012-08-30 09:46:12 -07:00
if ( ! sd - > selected_it )
elm_object_focus_set ( sd - > entry , EINA_TRUE ) ;
2012-07-03 04:22:46 -07:00
}
}
2012-08-30 09:46:12 -07:00
sd - > view_state = MULTIBUTTONENTRY_VIEW_ENTRY ;
2011-11-23 17:06:26 -08:00
}
}
static void
2012-08-30 09:46:12 -07:00
_shrink_mode_set ( Evas_Object * obj ,
Eina_Bool shrink )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
int count ;
2011-11-23 17:06:26 -08:00
Eina_List * l ;
Elm_Multibuttonentry_Item * item ;
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2012-08-30 09:46:12 -07:00
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_ENTRY )
evas_object_hide ( sd - > entry ) ;
else if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_GUIDETEXT )
evas_object_hide ( sd - > guide_text ) ;
else if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
evas_object_hide ( sd - > end ) ;
sd - > view_state = MULTIBUTTONENTRY_VIEW_NONE ;
2011-11-23 17:06:26 -08:00
}
2012-03-06 04:06:47 -08:00
if ( shrink = = EINA_TRUE )
2011-11-23 17:06:26 -08:00
{
2012-03-06 04:06:47 -08:00
Evas_Coord w = 0 , w_tmp = 0 ;
2011-11-23 17:06:26 -08:00
Evas_Coord box_inner_item_width_padding = 0 ;
2012-08-30 09:46:12 -07:00
elm_box_padding_get ( sd - > box , & box_inner_item_width_padding , NULL ) ;
2011-11-23 17:06:26 -08:00
// unpack all items and entry
2012-08-30 09:46:12 -07:00
elm_box_unpack_all ( sd - > box ) ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
evas_object_hide ( item - > button ) ;
item - > visible = EINA_FALSE ;
2011-11-23 17:06:26 -08:00
}
// pack buttons only 1line
2012-08-30 09:46:12 -07:00
w = sd - > w_box ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( sd - > label )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_box_pack_end ( sd - > box , sd - > label ) ;
evas_object_size_hint_min_get ( sd - > label , & w_tmp , NULL ) ;
2011-11-23 17:06:26 -08:00
w - = w_tmp ;
w - = box_inner_item_width_padding ;
}
item = NULL ;
2012-08-30 09:46:12 -07:00
count = eina_list_count ( sd - > items ) ;
2011-11-23 17:06:26 -08:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2011-11-23 17:06:26 -08:00
{
2013-08-23 07:30:46 -07:00
Evas_Coord w_label_count = 0 , h = 0 ;
2013-12-26 09:27:39 -08:00
char * buf ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
elm_box_pack_end ( sd - > box , item - > button ) ;
evas_object_show ( item - > button ) ;
item - > visible = EINA_TRUE ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
w - = item - > vw ;
w - = box_inner_item_width_padding ;
count - - ;
2011-11-23 17:06:26 -08:00
2013-08-23 07:30:46 -07:00
if ( count > 0 )
2012-08-30 09:46:12 -07:00
{
2013-12-26 09:27:39 -08:00
buf = sd - > format_func ( count , ( void * ) sd - > format_func_data ) ;
if ( buf )
{
edje_object_part_text_escaped_set
( sd - > end , " elm.text " , buf ) ;
free ( buf ) ;
}
2013-08-23 07:30:46 -07:00
edje_object_size_min_calc ( sd - > end , & w_label_count , NULL ) ;
elm_coords_finger_size_adjust ( 1 , & w_label_count , 1 , NULL ) ;
2012-08-30 09:46:12 -07:00
}
2013-09-30 03:21:31 -07:00
2013-08-23 07:30:46 -07:00
if ( ( w < 0 ) | | ( w < w_label_count ) )
2012-08-30 09:46:12 -07:00
{
2013-08-23 07:30:46 -07:00
elm_box_unpack ( sd - > box , item - > button ) ;
evas_object_hide ( item - > button ) ;
item - > visible = EINA_FALSE ;
count + + ;
2013-12-26 09:27:39 -08:00
buf = sd - > format_func ( count , ( void * ) sd - > format_func_data ) ;
if ( buf )
{
edje_object_part_text_escaped_set
( sd - > end , " elm.text " , buf ) ;
free ( buf ) ;
}
2013-08-23 07:30:46 -07:00
edje_object_size_min_calc ( sd - > end , & w_label_count , & h ) ;
elm_coords_finger_size_adjust ( 1 , & w_label_count , 1 , & h ) ;
evas_object_size_hint_min_set
( sd - > end , w_label_count , h ) ;
elm_box_pack_end ( sd - > box , sd - > end ) ;
evas_object_show ( sd - > end ) ;
2013-09-30 03:21:31 -07:00
2013-08-23 07:30:46 -07:00
sd - > view_state = MULTIBUTTONENTRY_VIEW_SHRINK ;
evas_object_smart_callback_call
( obj , SIG_EXPAND_STATE_CHANGED , ( void * ) 1 ) ;
break ;
2011-11-23 17:06:26 -08:00
}
}
}
else
{
// unpack all items and entry
2012-08-30 09:46:12 -07:00
elm_box_unpack_all ( sd - > box ) ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
evas_object_hide ( item - > button ) ;
item - > visible = EINA_FALSE ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
evas_object_hide ( sd - > end ) ;
2011-11-23 17:06:26 -08:00
// pack buttons only 1line
2012-08-30 09:46:12 -07:00
if ( sd - > label ) elm_box_pack_end ( sd - > box , sd - > label ) ;
2011-11-23 17:06:26 -08:00
// pack remain btns
item = NULL ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_box_pack_end ( sd - > box , item - > button ) ;
evas_object_show ( item - > button ) ;
item - > visible = EINA_TRUE ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
sd - > view_state = MULTIBUTTONENTRY_VIEW_NONE ;
evas_object_smart_callback_call
2013-02-16 19:53:02 -08:00
( obj , SIG_EXPAND_STATE_CHANGED , ( void * ) ( uintptr_t ) sd - > shrink ) ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
if ( sd - > view_state ! = MULTIBUTTONENTRY_VIEW_SHRINK )
_visual_guide_text_set ( obj ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-12-07 00:44:47 -08:00
_view_update ( Elm_Multibuttonentry_Smart_Data * sd )
2011-11-23 17:06:26 -08:00
{
Evas_Coord width = 1 , height = 1 ;
2012-12-07 00:44:47 -08:00
Evas_Object * obj = sd - > parent ;
2012-08-30 09:46:12 -07:00
if ( sd - > w_box < = 0 ) return ;
2011-11-23 17:06:26 -08:00
// update label
2012-08-30 09:46:12 -07:00
if ( sd - > label )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_box_unpack ( sd - > box , sd - > label ) ;
elm_box_pack_start ( sd - > box , sd - > label ) ;
evas_object_size_hint_min_get ( sd - > label , & width , & height ) ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
if ( sd - > guide_text )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Evas_Coord guide_text_width = sd - > w_box - width ;
evas_object_size_hint_min_set ( sd - > guide_text , guide_text_width , height ) ;
2011-11-23 17:06:26 -08:00
}
// update buttons in shrink mode
2012-08-30 09:46:12 -07:00
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
2012-03-06 04:06:47 -08:00
_shrink_mode_set ( obj , EINA_TRUE ) ;
2011-11-23 17:06:26 -08:00
// update guidetext
2012-10-10 17:35:00 -07:00
_visual_guide_text_set ( obj ) ;
2011-11-23 17:06:26 -08:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_multibuttonentry_smart_on_focus ( Eo * obj , void * _pd , va_list * list )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-23 17:06:26 -08:00
2012-11-25 22:32:53 -08:00
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
if ( ret ) * ret = EINA_FALSE ;
2012-08-30 09:46:12 -07:00
if ( elm_widget_focus_get ( obj ) )
{
2012-10-10 02:37:50 -07:00
// ACCESS
2013-03-22 01:42:04 -07:00
if ( _elm_config - > access_mode = = ELM_ACCESS_MODE_ON ) goto end ;
2012-10-10 02:37:50 -07:00
2012-08-30 09:46:12 -07:00
if ( sd - > editable )
2012-03-25 01:51:12 -07:00
{
2012-08-30 09:46:12 -07:00
if ( ( sd - > selected_it ) )
{
elm_entry_input_panel_show ( sd - > entry ) ;
}
else if ( ( ( ! sd - > selected_it ) | | ( ! eina_list_count ( sd - > items ) ) ) )
{
elm_entry_cursor_end_set ( sd - > entry ) ;
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2012-08-30 09:46:12 -07:00
elm_entry_input_panel_show ( sd - > entry ) ;
}
2012-03-25 01:51:12 -07:00
}
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_call ( obj , SIG_FOCUSED , NULL ) ;
}
else
{
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2012-03-25 01:51:12 -07:00
2012-08-30 09:46:12 -07:00
elm_entry_input_panel_hide ( sd - > entry ) ;
evas_object_smart_callback_call ( obj , SIG_UNFOCUSED , NULL ) ;
2012-03-25 01:51:12 -07:00
}
2012-08-30 09:46:12 -07:00
2012-11-25 22:32:53 -08:00
end :
if ( ret ) * ret = EINA_TRUE ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_button_item_del ( Elm_Multibuttonentry_Item * item )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Eina_List * l ;
Elm_Multibuttonentry_Item * it ;
Evas_Object * obj = WIDGET ( item ) ;
2012-03-05 23:00:59 -08:00
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2012-03-05 23:00:59 -08:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , it )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
if ( it = = item )
{
sd - > items = eina_list_remove ( sd - > items , it ) ;
elm_box_unpack ( sd - > box , it - > button ) ;
evas_object_smart_callback_call ( obj , SIG_ITEM_DELETED , it ) ;
evas_object_del ( it - > button ) ;
if ( sd - > selected_it = = ( Elm_Object_Item * ) it )
sd - > selected_it = NULL ;
break ;
}
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
_shrink_mode_set ( obj , EINA_TRUE ) ;
if ( ! eina_list_count ( sd - > items ) )
_visual_guide_text_set ( obj ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_current_button_state_change ( Evas_Object * obj ,
Multibuttonentry_Button_State state )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Elm_Multibuttonentry_Item * item ;
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
item = ( Elm_Multibuttonentry_Item * ) sd - > selected_it ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( ! item | | ! item - > button ) return ;
switch ( state )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
case MULTIBUTTONENTRY_BUTTON_STATE_SELECTED :
2013-08-23 07:30:46 -07:00
edje_object_signal_emit ( item - > button , " elm,state,focused " , " elm " ) ;
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_call ( obj , SIG_ITEM_SELECTED , item ) ;
break ;
2013-08-23 07:30:46 -07:00
case MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT :
2012-08-30 09:46:12 -07:00
default :
2013-08-23 07:30:46 -07:00
edje_object_signal_emit ( item - > button , " elm,state,default " , " elm " ) ;
2012-08-30 09:46:12 -07:00
sd - > selected_it = NULL ;
break ;
2011-11-23 17:06:26 -08:00
}
}
static void
2012-08-30 09:46:12 -07:00
_current_button_change ( Evas_Object * obj ,
Evas_Object * btn )
2011-11-23 17:06:26 -08:00
{
Eina_List * l ;
Elm_Multibuttonentry_Item * item ;
2011-11-24 00:34:47 -08:00
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2011-11-23 17:06:26 -08:00
// change the state of previous button to "default"
2012-08-30 09:46:12 -07:00
_current_button_state_change ( obj , MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT ) ;
2011-11-23 17:06:26 -08:00
// change the current
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2011-11-23 17:06:26 -08:00
{
if ( item - > button = = btn )
{
2012-08-30 09:46:12 -07:00
sd - > selected_it = ( Elm_Object_Item * ) item ;
2011-11-23 17:06:26 -08:00
break ;
}
}
2011-11-24 00:34:26 -08:00
// change the state of current button to "focused"
2012-08-30 09:46:12 -07:00
_current_button_state_change ( obj , MULTIBUTTONENTRY_BUTTON_STATE_SELECTED ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_button_select ( Evas_Object * obj ,
Evas_Object * btn )
2011-11-23 17:06:26 -08:00
{
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2011-11-23 17:06:26 -08:00
if ( btn )
{
2012-08-30 09:46:12 -07:00
_current_button_change ( obj , btn ) ;
if ( elm_widget_focus_get ( obj ) )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_object_focus_set ( sd - > entry , EINA_FALSE ) ;
evas_object_focus_set ( btn , EINA_TRUE ) ;
2012-10-10 02:37:50 -07:00
// ACCESS
if ( _elm_config - > access_mode ! = ELM_ACCESS_MODE_OFF )
{
Evas_Object * ao , * po ;
Eina_Strbuf * buf ;
const char * part , * text ;
part = " elm.btn.text " ;
po = ( Evas_Object * ) edje_object_part_object_get ( btn , part ) ;
ao = evas_object_data_get ( po , " _part_access_obj " ) ;
_elm_access_highlight_set ( ao ) ;
buf = eina_strbuf_new ( ) ;
eina_strbuf_append_printf ( buf ,
" multi button entry item %s is selected " ,
edje_object_part_text_get ( btn , part ) ) ;
text = ( const char * ) eina_strbuf_string_steal ( buf ) ;
_elm_access_say ( text ) ;
eina_strbuf_free ( buf ) ;
}
2011-11-23 17:06:26 -08:00
}
}
2012-08-30 09:46:12 -07:00
else
{
_current_button_state_change
( obj , MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT ) ;
if ( elm_widget_focus_get ( obj ) & & sd - > editable )
elm_object_focus_set ( sd - > entry , EINA_TRUE ) ;
}
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_button_clicked_cb ( void * data ,
Evas_Object * obj ,
2014-01-06 06:30:02 -08:00
const char * emission EINA_UNUSED ,
const char * source EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Elm_Multibuttonentry_Item * item = NULL ;
2011-11-23 17:06:26 -08:00
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK ) return ;
_current_button_change ( data , obj ) ;
if ( sd - > selected_it )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
if ( ( item = ( Elm_Multibuttonentry_Item * ) sd - > selected_it ) ! = NULL )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_call ( data , SIG_ITEM_CLICKED , item ) ;
_button_select ( data , item - > button ) ;
2011-11-23 17:06:26 -08:00
}
}
}
static void
2013-08-23 07:30:46 -07:00
_button_deleted_cb ( void * data ,
Evas_Object * obj ,
2014-01-06 06:30:02 -08:00
const char * emission EINA_UNUSED ,
const char * source EINA_UNUSED )
2013-08-23 07:30:46 -07:00
{
Eina_List * l ;
Elm_Multibuttonentry_Item * item = NULL ;
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
// change the current
EINA_LIST_FOREACH ( sd - > items , l , item )
{
if ( item - > button = = obj )
{
elm_widget_item_del ( item ) ;
break ;
}
}
}
static void
_button_resize ( Evas_Object * obj ,
Evas_Object * btn ,
2012-08-30 09:46:12 -07:00
Evas_Coord * realw ,
Evas_Coord * vieww )
2011-11-23 17:06:26 -08:00
{
Evas_Coord rw , vw ;
const char * size_str ;
2013-08-23 07:30:46 -07:00
Evas_Coord w_btn = 0 , h_btn = 0 , button_max_width = 0 ;
2011-11-23 17:06:26 -08:00
size_str = edje_object_data_get ( btn , " button_max_size " ) ;
2013-08-23 07:30:46 -07:00
if ( size_str ) button_max_width = atoi ( size_str ) ;
2013-09-30 03:21:31 -07:00
2013-08-23 07:30:46 -07:00
button_max_width * = elm_widget_scale_get ( obj ) * elm_config_scale_get ( ) ;
2011-11-23 17:06:26 -08:00
// decide the size of button
2013-08-23 07:30:46 -07:00
edje_object_size_min_calc ( btn , & w_btn , & h_btn ) ;
2011-11-23 17:06:26 -08:00
rw = w_btn ;
2013-08-23 07:30:46 -07:00
if ( button_max_width < w_btn ) vw = button_max_width ;
else vw = w_btn ;
2011-11-23 17:06:26 -08:00
//resize btn
2013-08-23 07:30:46 -07:00
elm_coords_finger_size_adjust ( 1 , & vw , 1 , & h_btn ) ;
2011-11-23 17:06:26 -08:00
evas_object_resize ( btn , vw , h_btn ) ;
evas_object_size_hint_min_set ( btn , vw , h_btn ) ;
2011-11-23 20:02:09 -08:00
if ( realw ) * realw = rw ;
if ( vieww ) * vieww = vw ;
2011-11-23 17:06:26 -08:00
}
2013-12-26 07:45:22 -08:00
static void
_item_signal_emit_hook ( Elm_Object_Item * it ,
const char * emission ,
const char * source )
{
2013-12-26 18:46:35 -08:00
Elm_Multibuttonentry_Item * item = ( Elm_Multibuttonentry_Item * ) it ;
2013-12-26 10:03:24 -08:00
2013-12-26 18:46:35 -08:00
edje_object_signal_emit ( item - > button , emission , source ) ;
2013-12-26 07:45:22 -08:00
}
2012-08-30 09:46:12 -07:00
static void
_item_text_set_hook ( Elm_Object_Item * it ,
const char * part ,
const char * label )
{
Elm_Multibuttonentry_Item * item ;
2013-12-26 07:54:57 -08:00
const char * dest_part = NULL ;
2012-08-30 09:46:12 -07:00
2013-12-26 07:54:57 -08:00
if ( ! part | | ! strcmp ( part , " elm.text " ) )
dest_part = " elm.btn.text " ;
else
dest_part = part ;
2012-08-30 09:46:12 -07:00
item = ( Elm_Multibuttonentry_Item * ) it ;
2013-12-26 07:54:57 -08:00
edje_object_part_text_escaped_set ( item - > button , dest_part , label ) ;
2013-08-23 07:30:46 -07:00
_button_resize ( item - > base . widget , item - > button , & item - > rw , & item - > vw ) ;
2012-08-30 09:46:12 -07:00
}
static const char *
_item_text_get_hook ( const Elm_Object_Item * it ,
const char * part )
{
Elm_Multibuttonentry_Item * item ;
2013-12-26 07:54:57 -08:00
const char * src_part = NULL ;
if ( ! part | | ! strcmp ( part , " elm.text " ) )
src_part = " elm.btn.text " ;
else
src_part = part ;
2012-08-30 09:46:12 -07:00
item = ( Elm_Multibuttonentry_Item * ) it ;
2013-12-26 07:54:57 -08:00
return edje_object_part_text_get ( item - > button , src_part ) ;
2012-08-30 09:46:12 -07:00
}
2012-01-27 03:56:14 -08:00
static Eina_Bool
elementary/menu, ctxpopup, index, segment_control, diskselector, multibuttonentry, toolbar, naviframe, slideshow, hoversel, filpselector - deprecated xxxx_item_del() APIs.
But instead, made to use the elm_object_item_del() APIs
for this, elm_widget_item needed to provide elm_widget_item_del_pre_hook.
SVN revision: 67010
2012-01-09 21:02:11 -08:00
_item_del_pre_hook ( Elm_Object_Item * it )
{
2012-08-30 09:46:12 -07:00
_button_item_del ( ( Elm_Multibuttonentry_Item * ) it ) ;
2012-01-27 03:56:14 -08:00
return EINA_TRUE ;
elementary/menu, ctxpopup, index, segment_control, diskselector, multibuttonentry, toolbar, naviframe, slideshow, hoversel, filpselector - deprecated xxxx_item_del() APIs.
But instead, made to use the elm_object_item_del() APIs
for this, elm_widget_item needed to provide elm_widget_item_del_pre_hook.
SVN revision: 67010
2012-01-09 21:02:11 -08:00
}
2012-10-10 02:37:50 -07:00
static void
_access_multibuttonentry_label_register ( Evas_Object * obj , Eina_Bool is_access )
{
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2012-10-10 02:37:50 -07:00
Evas_Object * po ;
2013-09-30 03:21:31 -07:00
2013-08-23 07:30:46 -07:00
po = ( Evas_Object * ) edje_object_part_object_get ( sd - > label , " elm.text " ) ;
2012-10-10 02:37:50 -07:00
if ( is_access )
{
Evas_Object * ao ;
ao = _elm_access_edje_object_part_object_register
2013-08-23 07:30:46 -07:00
( obj , sd - > label , " elm.text " ) ;
2013-07-30 20:53:04 -07:00
_elm_access_text_set ( _elm_access_info_get ( ao ) ,
2012-10-10 02:37:50 -07:00
ELM_ACCESS_TYPE , E_ ( " multi button entry label " ) ) ;
}
else
_elm_access_edje_object_part_object_unregister
2013-08-23 07:30:46 -07:00
( obj , sd - > label , " elm.text " ) ;
2012-10-10 02:37:50 -07:00
evas_object_pass_events_set ( po , ! is_access ) ;
evas_object_propagate_events_set ( sd - > label , ! is_access ) ;
}
static void
_access_multibuttonentry_item_register ( Evas_Object * obj ,
Elm_Multibuttonentry_Item * item ,
Eina_Bool is_access )
{
if ( is_access )
{
Evas_Object * ao ;
ao = _elm_access_edje_object_part_object_register
( obj , item - > button , " elm.btn.text " ) ;
2013-07-30 20:53:04 -07:00
_elm_access_text_set ( _elm_access_info_get ( ao ) ,
2012-10-10 02:37:50 -07:00
ELM_ACCESS_TYPE , E_ ( " multi button entry item " ) ) ;
}
else
_elm_access_edje_object_part_object_unregister
( obj , item - > button , " elm.btn.text " ) ;
/* cannot read item->button because mouse-in event is delivered to
the multibuttonentry resize_obj which is registered as an access
object , so the mouse - in event should be blocked here */
evas_object_propagate_events_set ( item - > button , ! is_access ) ;
}
2012-08-30 09:46:12 -07:00
static Elm_Object_Item *
2012-12-07 00:44:47 -08:00
_button_item_add ( Elm_Multibuttonentry_Smart_Data * sd ,
2012-08-30 09:46:12 -07:00
const char * str ,
Multibuttonentry_Pos pos ,
const void * ref ,
Evas_Smart_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
Eina_List * l ;
Evas_Object * btn ;
2012-08-30 09:46:12 -07:00
Evas_Coord rw , vw ;
2011-11-23 17:06:26 -08:00
char * str_utf8 = NULL ;
2012-08-30 09:46:12 -07:00
Elm_Multibuttonentry_Item * item ;
Evas_Coord width = - 1 , height = - 1 ;
Elm_Multibuttonentry_Item_Filter * item_filter ;
Elm_Multibuttonentry_Item * reference = ( Elm_Multibuttonentry_Item * ) ref ;
2012-12-07 00:44:47 -08:00
Evas_Object * obj ;
2012-08-30 09:46:12 -07:00
2012-12-07 00:44:47 -08:00
obj = sd - > parent ;
2011-11-23 17:06:26 -08:00
2012-03-05 23:01:09 -08:00
if ( ! str ) return NULL ;
2011-11-23 17:06:26 -08:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > filter_list , l , item_filter )
2011-11-23 20:02:09 -08:00
{
if ( ! ( item_filter - > callback_func ( obj , str , data , item_filter - > data ) ) )
return NULL ;
}
2011-11-23 17:06:26 -08:00
// add button
btn = edje_object_add ( evas_object_evas_get ( obj ) ) ;
str_utf8 = elm_entry_markup_to_utf8 ( str ) ;
2011-11-23 20:02:09 -08:00
2011-12-21 23:56:01 -08:00
//entry is cleared when text is made to button
2012-08-30 09:46:12 -07:00
elm_object_text_set ( sd - > entry , " " ) ;
2011-12-21 23:56:01 -08:00
2012-08-30 09:46:12 -07:00
elm_widget_theme_object_set
( obj , btn , " multibuttonentry " , " btn " , elm_widget_style_get ( obj ) ) ;
2012-04-20 05:51:10 -07:00
edje_object_part_text_escaped_set ( btn , " elm.btn.text " , str_utf8 ) ;
2012-08-30 09:46:12 -07:00
edje_object_part_geometry_get
( btn , " elm.btn.text " , NULL , NULL , & width , & height ) ;
2011-11-23 17:06:26 -08:00
2011-11-23 20:02:09 -08:00
evas_object_size_hint_min_set ( btn , width , height ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
edje_object_signal_callback_add
( btn , " mouse,clicked,1 " , " * " , _button_clicked_cb , obj ) ;
2013-08-23 07:30:46 -07:00
edje_object_signal_callback_add
( btn , " elm,deleted " , " elm " , _button_deleted_cb , obj ) ;
2011-11-23 17:06:26 -08:00
evas_object_size_hint_weight_set ( btn , 0.0 , 0.0 ) ;
evas_object_show ( btn ) ;
2011-11-23 20:02:09 -08:00
2011-11-23 17:06:26 -08:00
// append item list
2012-01-02 01:00:33 -08:00
item = elm_widget_item_new ( obj , Elm_Multibuttonentry_Item ) ;
2013-07-05 20:07:51 -07:00
if ( ! item ) return NULL ;
2012-08-30 09:46:12 -07:00
elm_widget_item_del_pre_hook_set ( item , _item_del_pre_hook ) ;
elm_widget_item_text_set_hook_set ( item , _item_text_set_hook ) ;
elm_widget_item_text_get_hook_set ( item , _item_text_get_hook ) ;
2013-12-26 07:45:22 -08:00
elm_widget_item_signal_emit_hook_set ( item , _item_signal_emit_hook ) ;
2012-08-30 09:46:12 -07:00
elm_widget_item_data_set ( item , data ) ;
2013-08-23 07:30:46 -07:00
_button_resize ( obj , btn , & rw , & vw ) ;
2012-08-30 09:46:12 -07:00
item - > button = btn ;
item - > rw = rw ;
item - > vw = vw ;
item - > visible = EINA_TRUE ;
2012-10-10 02:37:50 -07:00
// ACCESS
2013-03-22 01:42:04 -07:00
if ( _elm_config - > access_mode = = ELM_ACCESS_MODE_ON )
2012-10-10 02:37:50 -07:00
{
const char * text ;
Eina_Strbuf * buf ;
buf = eina_strbuf_new ( ) ;
eina_strbuf_append_printf ( buf ,
" multi button entry item %s is added " ,
edje_object_part_text_get ( item - > button , " elm.btn.text " ) ) ;
text = ( const char * ) eina_strbuf_string_steal ( buf ) ;
_elm_access_say ( text ) ;
eina_strbuf_free ( buf ) ;
_access_multibuttonentry_item_register ( obj , item , EINA_TRUE ) ;
}
2012-08-30 09:46:12 -07:00
if ( func )
{
item - > func = func ;
}
switch ( pos )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
case MULTIBUTTONENTRY_POS_START :
sd - > items = eina_list_prepend ( sd - > items , item ) ;
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
{
elm_widget_sub_object_add ( obj , btn ) ;
_shrink_mode_set ( obj , EINA_TRUE ) ;
}
else
2012-03-06 18:57:36 -08:00
{
2012-08-30 09:46:12 -07:00
if ( sd - > label )
elm_box_pack_after ( sd - > box , btn , sd - > label ) ;
else
elm_box_pack_start ( sd - > box , btn ) ;
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_GUIDETEXT )
_visual_guide_text_set ( obj ) ;
}
break ;
case MULTIBUTTONENTRY_POS_END :
sd - > items = eina_list_append ( sd - > items , item ) ;
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
{
elm_widget_sub_object_add ( obj , btn ) ;
evas_object_hide ( btn ) ;
}
else
{
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_GUIDETEXT )
_visual_guide_text_set ( obj ) ;
if ( sd - > editable )
{
elm_box_pack_before ( sd - > box , btn , sd - > entry ) ;
}
else
elm_box_pack_end ( sd - > box , btn ) ;
}
break ;
case MULTIBUTTONENTRY_POS_BEFORE :
if ( reference )
sd - > items = eina_list_prepend_relative ( sd - > items , item , reference ) ;
else
sd - > items = eina_list_append ( sd - > items , item ) ;
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
{
elm_widget_sub_object_add ( obj , btn ) ;
evas_object_hide ( btn ) ;
_shrink_mode_set ( obj , EINA_TRUE ) ;
}
else
{
if ( reference )
elm_box_pack_before ( sd - > box , btn , reference - > button ) ;
else
{
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_GUIDETEXT )
_visual_guide_text_set ( obj ) ;
if ( sd - > editable )
{
elm_box_pack_before ( sd - > box , btn , sd - > entry ) ;
}
else
elm_box_pack_end ( sd - > box , btn ) ;
}
2012-03-06 18:57:36 -08:00
}
2012-08-30 09:46:12 -07:00
break ;
2012-03-06 18:57:36 -08:00
2012-08-30 09:46:12 -07:00
case MULTIBUTTONENTRY_POS_AFTER :
if ( reference )
sd - > items = eina_list_append_relative ( sd - > items , item , reference ) ;
else
sd - > items = eina_list_append ( sd - > items , item ) ;
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK )
{
elm_widget_sub_object_add ( obj , btn ) ;
_shrink_mode_set ( obj , EINA_TRUE ) ;
}
else
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
if ( reference )
elm_box_pack_after ( sd - > box , btn , reference - > button ) ;
else
{
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_GUIDETEXT )
_visual_guide_text_set ( obj ) ;
if ( sd - > editable )
{
elm_box_pack_before ( sd - > box , btn , sd - > entry ) ;
}
else
elm_box_pack_end ( sd - > box , btn ) ;
}
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
break ;
default :
break ;
2011-11-23 17:06:26 -08:00
}
2012-03-12 17:45:01 -07:00
evas_object_smart_callback_call ( obj , SIG_ITEM_ADDED , item ) ;
2011-11-23 17:06:26 -08:00
free ( str_utf8 ) ;
2012-03-05 23:01:09 -08:00
return ( Elm_Object_Item * ) item ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
//FIXME: having an empty event handling function and reacting on Evas
//events on specific objects is crazy, someone should fix that.
2012-11-25 22:32:53 -08:00
static void
_elm_multibuttonentry_smart_event ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
Evas_Object * src = va_arg ( * list , Evas_Object * ) ;
Evas_Callback_Type type = va_arg ( * list , Evas_Callback_Type ) ;
2013-10-28 07:06:14 -07:00
void * ev = va_arg ( * list , void * ) ;
2012-11-25 22:32:53 -08:00
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
2013-10-28 07:06:14 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_FALSE ;
2013-10-28 07:06:14 -07:00
( void ) src ;
( void ) type ;
( void ) ev ;
2011-11-23 17:06:26 -08:00
2012-10-10 02:37:50 -07:00
// ACCESS
2013-03-22 01:42:04 -07:00
if ( _elm_config - > access_mode = = ELM_ACCESS_MODE_ON ) return ;
2012-10-10 02:37:50 -07:00
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
2011-11-23 17:06:26 -08:00
}
static void
2012-11-25 22:32:53 -08:00
_elm_multibuttonentry_smart_sizing_eval ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Evas_Coord minw = - 1 , minh = - 1 ;
Evas_Coord left , right , top , bottom ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2013-10-05 01:12:50 -07:00
ELM_WIDGET_DATA_GET_OR_RETURN ( obj , wd ) ;
2012-08-30 09:46:12 -07:00
evas_object_size_hint_min_get ( sd - > box , & minw , & minh ) ;
edje_object_part_geometry_get
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , " top.left.pad " , NULL , NULL , & left , & top ) ;
2012-08-30 09:46:12 -07:00
edje_object_part_geometry_get
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , " bottom.right.pad " , NULL , NULL , & right ,
2012-08-30 09:46:12 -07:00
& bottom ) ;
minw + = ( left + right ) ;
minh + = ( top + bottom ) ;
evas_object_size_hint_min_set ( obj , minw , minh ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_mouse_clicked_signal_cb ( void * data ,
2012-12-07 00:44:47 -08:00
Evas_Object * obj ,
2014-01-06 06:30:02 -08:00
const char * emission EINA_UNUSED ,
const char * source EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2012-12-07 00:44:47 -08:00
Elm_Multibuttonentry_Smart_Data * sd = data ;
2011-11-23 17:06:26 -08:00
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2011-11-23 17:06:26 -08:00
2013-07-23 02:48:09 -07:00
if ( elm_widget_focus_get ( obj ) & & sd - > editable )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_entry_input_panel_show ( sd - > entry ) ;
elm_object_focus_set ( sd - > entry , EINA_TRUE ) ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
2012-12-07 00:44:47 -08:00
evas_object_smart_callback_call ( obj , SIG_CLICKED , NULL ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_box_resize_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas * evas EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
Evas_Coord w , h ;
evas_object_geometry_get ( sd - > box , NULL , NULL , & w , & h ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( sd - > h_box < h )
2012-12-07 00:44:47 -08:00
evas_object_smart_callback_call ( sd - > parent , SIG_EXPANDED , NULL ) ;
2012-08-30 09:46:12 -07:00
else if ( sd - > h_box > h )
2012-12-07 00:44:47 -08:00
evas_object_smart_callback_call ( sd - > parent , SIG_CONTRACTED , NULL ) ;
2012-08-30 09:46:12 -07:00
sd - > w_box = w ;
sd - > h_box = h ;
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_entry_resize_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
Evas_Coord en_x , en_y , en_w , en_h ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
evas_object_geometry_get ( sd - > entry , & en_x , & en_y , & en_w , & en_h ) ;
2011-11-23 17:06:26 -08:00
2012-12-07 00:44:47 -08:00
if ( elm_widget_focus_get ( sd - > parent ) )
2012-08-30 09:46:12 -07:00
elm_widget_show_region_set ( sd - > entry , en_x , en_y , en_w , en_h , EINA_TRUE ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_entry_changed_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
const char * str ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
str = elm_object_text_get ( sd - > entry ) ;
2012-12-07 00:44:47 -08:00
sd - > n_str = str ? strlen ( str ) : 0 ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_entry_focus_in_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
Elm_Multibuttonentry_Item * item = NULL ;
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( sd - > selected_it )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
item = ( Elm_Multibuttonentry_Item * ) sd - > selected_it ;
elm_object_focus_set ( sd - > entry , EINA_FALSE ) ;
2011-11-23 17:06:26 -08:00
evas_object_focus_set ( item - > button , EINA_TRUE ) ;
}
}
static void
2012-08-30 09:46:12 -07:00
_entry_focus_out_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2011-11-24 00:34:37 -08:00
const char * str ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
str = elm_object_text_get ( sd - > entry ) ;
2012-12-07 00:44:47 -08:00
if ( str & & str [ 0 ] )
_button_item_add ( sd , str , MULTIBUTTONENTRY_POS_END , NULL , NULL , NULL ) ;
2012-08-30 09:46:12 -07:00
}
static void
_entry_clicked_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2012-08-30 09:46:12 -07:00
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
2012-12-07 00:44:47 -08:00
_current_button_state_change ( sd - > parent , MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT ) ;
2012-08-30 09:46:12 -07:00
elm_object_focus_set ( sd - > entry , EINA_TRUE ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_layout_key_up_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
2012-08-30 09:46:12 -07:00
void * event_info )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Elm_Multibuttonentry_Item * item = NULL ;
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
Evas_Event_Key_Up * ev = ( Evas_Event_Key_Up * ) event_info ;
if ( ! sd - > box ) return ;
if ( sd - > last_btn_select )
{
if ( sd - > selected_it & &
2013-07-30 23:14:09 -07:00
( ( strcmp ( ev - > key , " BackSpace " ) = = 0 ) | |
( strcmp ( ev - > key , " Delete " ) = = 0 ) ) )
2012-08-30 09:46:12 -07:00
{
item = ( Elm_Multibuttonentry_Item * ) sd - > selected_it ;
if ( item & & sd - > editable )
{
elm_widget_item_del ( item ) ;
elm_object_focus_set ( sd - > entry , EINA_TRUE ) ;
}
}
else if ( ( ( ! sd - > selected_it & & ( sd - > n_str = = 0 ) & &
2013-07-30 23:14:09 -07:00
( strcmp ( ev - > key , " BackSpace " ) = = 0 ) ) | |
( strcmp ( ev - > key , " Delete " ) = = 0 ) ) )
2012-08-30 09:46:12 -07:00
{
item = eina_list_data_get ( eina_list_last ( sd - > items ) ) ;
if ( item )
2012-12-07 00:44:47 -08:00
_button_select ( sd - > parent , item - > button ) ;
2012-08-30 09:46:12 -07:00
}
}
else
sd - > last_btn_select = EINA_TRUE ;
}
static void
_entry_key_down_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
2012-08-30 09:46:12 -07:00
void * event_info )
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
Evas_Event_Key_Down * ev = ( Evas_Event_Key_Down * ) event_info ;
if ( sd - > n_str = = 1 & &
2013-07-30 23:14:09 -07:00
( ! strcmp ( ev - > key , " BackSpace " ) | | ! strcmp ( ev - > key , " Delete " ) ) )
2012-08-30 09:46:12 -07:00
sd - > last_btn_select = EINA_FALSE ;
}
static void
_entry_key_up_cb ( void * data ,
2014-01-06 06:30:02 -08:00
Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
2012-08-30 09:46:12 -07:00
void * event_info )
{
2013-04-24 04:41:37 -07:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( data , sd ) ;
2012-08-30 09:46:12 -07:00
Evas_Event_Key_Up * ev = ( Evas_Event_Key_Up * ) event_info ;
2011-11-24 00:34:37 -08:00
const char * str ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
if ( ! sd - > box ) return ;
str = elm_object_text_get ( sd - > entry ) ;
if ( strlen ( str ) & &
2013-07-30 23:14:09 -07:00
( ! strcmp ( ev - > key , " KP_Enter " ) | | ! strcmp ( ev - > key , " Return " ) ) )
2012-08-30 09:46:12 -07:00
{
2012-12-07 00:44:47 -08:00
_button_item_add ( sd , str , MULTIBUTTONENTRY_POS_END , NULL , NULL , NULL ) ;
2012-08-30 09:46:12 -07:00
sd - > n_str = 0 ;
}
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_callbacks_register ( Evas_Object * obj )
2011-11-23 17:06:26 -08:00
{
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2013-10-05 01:12:50 -07:00
ELM_WIDGET_DATA_GET_OR_RETURN ( obj , wd ) ;
2012-08-30 09:46:12 -07:00
elm_layout_signal_callback_add
2012-12-07 00:44:47 -08:00
( obj , " mouse,clicked,1 " , " * " , _mouse_clicked_signal_cb , sd ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
evas_object_event_callback_add
2012-11-25 22:32:53 -08:00
( wd - > resize_obj , EVAS_CALLBACK_KEY_UP ,
2013-07-23 02:48:09 -07:00
_layout_key_up_cb , obj ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > box , EVAS_CALLBACK_RESIZE , _box_resize_cb , obj ) ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , EVAS_CALLBACK_KEY_UP , _entry_key_up_cb , obj ) ;
2012-08-30 09:46:12 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , EVAS_CALLBACK_KEY_DOWN , _entry_key_down_cb , obj ) ;
2012-08-30 09:46:12 -07:00
evas_object_event_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , EVAS_CALLBACK_RESIZE , _entry_resize_cb , obj ) ;
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , " changed " , _entry_changed_cb , obj ) ;
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , " focused " , _entry_focus_in_cb , obj ) ;
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , " unfocused " , _entry_focus_out_cb , obj ) ;
2012-08-30 09:46:12 -07:00
evas_object_smart_callback_add
2013-04-24 04:41:37 -07:00
( sd - > entry , " clicked " , _entry_clicked_cb , obj ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_label_set ( Evas_Object * obj ,
const char * str )
2011-11-23 17:06:26 -08:00
{
2013-08-23 07:30:46 -07:00
Evas_Coord width , height ;
2012-08-30 09:46:12 -07:00
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2011-11-24 00:34:47 -08:00
2012-08-30 09:46:12 -07:00
if ( ! str ) return ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
eina_stringshare_replace ( & sd - > label_str , str ) ;
evas_object_size_hint_min_set ( sd - > label , 0 , 0 ) ;
evas_object_resize ( sd - > label , 0 , 0 ) ;
2013-08-23 07:30:46 -07:00
edje_object_part_text_escaped_set ( sd - > label , " elm.text " , str ) ;
2012-08-30 09:46:12 -07:00
if ( ! strlen ( str ) )
2011-11-23 17:06:26 -08:00
{
2013-08-23 07:30:46 -07:00
edje_object_signal_emit ( sd - > label , " elm,mbe,clear_text " , " elm " ) ;
edje_object_size_min_calc ( sd - > label , & width , & height ) ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
else
2011-11-23 17:06:26 -08:00
{
2013-08-23 07:30:46 -07:00
edje_object_signal_emit ( sd - > label , " elm,mbe,set_text " , " elm " ) ;
edje_object_size_min_calc ( sd - > label , & width , & height ) ;
2011-11-23 17:06:26 -08:00
}
2013-08-23 07:30:46 -07:00
elm_coords_finger_size_adjust ( 1 , & width , 1 , & height ) ;
evas_object_size_hint_min_set ( sd - > label , width , height ) ;
2012-08-30 09:46:12 -07:00
evas_object_show ( sd - > label ) ;
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2012-08-30 09:46:12 -07:00
}
static void
_guide_text_set ( Evas_Object * obj ,
const char * str )
{
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2012-08-30 09:46:12 -07:00
if ( ! str ) return ;
eina_stringshare_replace ( & sd - > guide_text_str , str ) ;
if ( sd - > guide_text = = NULL )
sd - > guide_text = edje_object_add ( evas_object_evas_get ( obj ) ) ;
if ( sd - > guide_text )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_widget_theme_object_set ( obj , sd - > guide_text , " multibuttonentry " ,
" guidetext " , elm_widget_style_get ( obj ) ) ;
evas_object_size_hint_weight_set
( sd - > guide_text , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set
( sd - > guide_text , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
edje_object_part_text_escaped_set ( sd - > guide_text , " elm.text " , str ) ;
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
}
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
static Elm_Multibuttonentry_Item_Filter *
_filter_new ( Elm_Multibuttonentry_Item_Filter_Cb func ,
void * data )
{
Elm_Multibuttonentry_Item_Filter * item_filter =
ELM_NEW ( Elm_Multibuttonentry_Item_Filter ) ;
if ( ! item_filter ) return NULL ;
2011-11-24 00:34:47 -08:00
2012-08-30 09:46:12 -07:00
item_filter - > callback_func = func ;
item_filter - > data = data ;
2011-11-23 17:06:26 -08:00
2012-08-30 09:46:12 -07:00
return item_filter ;
}
static void
_filter_free ( Elm_Multibuttonentry_Item_Filter * item_filter )
{
free ( item_filter ) ;
2011-11-23 17:06:26 -08:00
}
static void
2012-08-30 09:46:12 -07:00
_box_min_size_calculate ( Evas_Object * box ,
Evas_Object_Box_Data * priv )
2011-11-23 17:06:26 -08:00
{
2011-12-25 20:01:31 -08:00
Evas_Coord minw , minh , mnw , mnh , ww ;
2011-11-23 17:06:26 -08:00
Evas_Coord w , cw = 0 , cmaxh = 0 ;
Evas_Object_Box_Option * opt ;
2012-08-30 09:46:12 -07:00
const Eina_List * l ;
2011-11-23 17:06:26 -08:00
double wx ;
/* FIXME: need to calc max */
minw = 0 ;
minh = 0 ;
evas_object_geometry_get ( box , NULL , NULL , & w , NULL ) ;
evas_object_size_hint_min_get ( box , & minw , NULL ) ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( priv - > children , l , opt )
2011-11-23 17:06:26 -08:00
{
evas_object_size_hint_min_get ( opt - > obj , & mnw , & mnh ) ;
evas_object_size_hint_weight_get ( opt - > obj , & wx , NULL ) ;
2011-11-23 20:02:09 -08:00
if ( wx )
2011-11-23 17:06:26 -08:00
{
if ( mnw ! = - 1 & & ( w - cw ) > = mnw )
2011-11-24 00:34:26 -08:00
ww = w - cw ;
2011-11-23 17:06:26 -08:00
else
2011-11-24 00:34:26 -08:00
ww = w ;
2011-11-23 17:06:26 -08:00
}
else
2012-08-30 09:46:12 -07:00
ww = mnw ;
2011-11-23 17:06:26 -08:00
if ( ( cw + mnw ) > w )
{
minh + = cmaxh ;
cw = 0 ;
}
cw + = ww ;
if ( cmaxh < mnh ) cmaxh = mnh ;
}
minh + = cmaxh ;
evas_object_size_hint_min_set ( box , minw , minh ) ;
}
static Evas_Coord
2012-08-30 09:46:12 -07:00
_item_max_height_calculate ( Evas_Object * box ,
Evas_Object_Box_Data * priv ,
int obj_index )
2011-11-23 17:06:26 -08:00
{
Evas_Coord mnw , mnh , cw = 0 , cmaxh = 0 , w , ww ;
Evas_Object_Box_Option * opt ;
2012-03-06 18:57:36 -08:00
int local_index = 0 ;
2012-08-30 09:46:12 -07:00
const Eina_List * l ;
2011-11-23 17:06:26 -08:00
double wx ;
evas_object_geometry_get ( box , NULL , NULL , & w , NULL ) ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( priv - > children , l , opt )
2011-11-23 17:06:26 -08:00
{
evas_object_size_hint_min_get ( opt - > obj , & mnw , & mnh ) ;
evas_object_size_hint_weight_get ( opt - > obj , & wx , NULL ) ;
2011-11-23 20:02:09 -08:00
if ( wx )
2011-11-23 17:06:26 -08:00
{
if ( mnw ! = - 1 & & ( w - cw ) > = mnw )
2012-08-30 09:46:12 -07:00
ww = w - cw ;
2011-11-23 17:06:26 -08:00
else
2012-08-30 09:46:12 -07:00
ww = w ;
2011-11-23 17:06:26 -08:00
}
else
2012-08-30 09:46:12 -07:00
ww = mnw ;
2011-11-23 17:06:26 -08:00
if ( ( cw + ww ) > w )
{
2012-03-06 18:57:36 -08:00
if ( local_index > obj_index ) return cmaxh ;
2011-11-23 17:06:26 -08:00
cw = 0 ;
}
cw + = ww ;
if ( cmaxh < mnh ) cmaxh = mnh ;
2012-03-06 18:57:36 -08:00
local_index + + ;
2011-11-23 17:06:26 -08:00
}
return cmaxh ;
}
static void
2012-08-30 09:46:12 -07:00
_box_layout_cb ( Evas_Object * o ,
Evas_Object_Box_Data * priv ,
2014-01-06 06:30:02 -08:00
void * data EINA_UNUSED )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
Evas_Coord cw = 0 , ch = 0 , cmaxh = 0 , obj_index = 0 ;
2011-11-23 17:06:26 -08:00
Evas_Coord x , y , w , h , xx , yy ;
2012-08-30 09:46:12 -07:00
Evas_Object_Box_Option * opt ;
Evas_Coord minw , minh ;
2012-10-10 02:44:38 -07:00
const Eina_List * l , * l_next ;
2011-11-23 17:06:26 -08:00
Evas_Object * obj ;
double ax , ay ;
2012-10-10 17:35:00 -07:00
2012-08-30 09:46:12 -07:00
_box_min_size_calculate ( o , priv ) ;
2011-11-23 17:06:26 -08:00
evas_object_geometry_get ( o , & x , & y , & w , & h ) ;
evas_object_size_hint_min_get ( o , & minw , & minh ) ;
evas_object_size_hint_align_get ( o , & ax , & ay ) ;
if ( w < minw )
{
x = x + ( ( w - minw ) * ( 1.0 - ax ) ) ;
w = minw ;
}
if ( h < minh )
{
y = y + ( ( h - minh ) * ( 1.0 - ay ) ) ;
h = minh ;
}
xx = x ;
yy = y ;
2012-10-10 02:44:38 -07:00
EINA_LIST_FOREACH_SAFE ( priv - > children , l , l_next , opt )
2011-11-23 17:06:26 -08:00
{
Evas_Coord mnw , mnh , mxw , mxh ;
2012-08-30 09:46:12 -07:00
Evas_Coord ww , hh , ow , oh ;
2011-11-23 17:06:26 -08:00
double wx , wy ;
2011-12-25 20:01:31 -08:00
int fw , fh ;
2011-11-23 17:06:26 -08:00
obj = opt - > obj ;
evas_object_size_hint_align_get ( obj , & ax , & ay ) ;
evas_object_size_hint_weight_get ( obj , & wx , & wy ) ;
evas_object_size_hint_min_get ( obj , & mnw , & mnh ) ;
evas_object_size_hint_max_get ( obj , & mxw , & mxh ) ;
fw = fh = 0 ;
2012-08-30 09:46:12 -07:00
if ( ax = = - 1.0 ) { fw = 1 ; ax = 0.5 ; }
if ( ay = = - 1.0 ) { fh = 1 ; ay = 0.5 ; }
2011-11-23 17:06:26 -08:00
2011-11-23 20:02:09 -08:00
if ( wx )
2011-11-23 17:06:26 -08:00
{
if ( mnw ! = - 1 & & ( w - cw ) > = mnw )
2012-08-30 09:46:12 -07:00
ww = w - cw ;
2011-11-23 17:06:26 -08:00
else
2012-08-30 09:46:12 -07:00
ww = w ;
2011-11-23 17:06:26 -08:00
}
else
2012-08-30 09:46:12 -07:00
ww = mnw ;
hh = _item_max_height_calculate ( o , priv , obj_index ) ;
2011-11-23 17:06:26 -08:00
ow = mnw ;
if ( fw ) ow = ww ;
if ( ( mxw > = 0 ) & & ( mxw < ow ) ) ow = mxw ;
oh = mnh ;
if ( fh ) oh = hh ;
if ( ( mxh > = 0 ) & & ( mxh < oh ) ) oh = mxh ;
if ( ( cw + ww ) > w )
{
ch + = cmaxh ;
cw = 0 ;
}
2012-08-30 09:46:12 -07:00
evas_object_move
( obj , xx + cw + ( Evas_Coord ) ( ( ( double ) ( ww - ow ) ) * ax ) ,
yy + ch + ( Evas_Coord ) ( ( ( double ) ( hh - oh ) ) * ay ) ) ;
2011-11-23 17:06:26 -08:00
evas_object_resize ( obj , ow , oh ) ;
cw + = ww ;
if ( cmaxh < hh ) cmaxh = hh ;
obj_index + + ;
}
}
2012-01-02 02:40:17 -08:00
static void
2012-12-07 00:44:47 -08:00
_view_init ( Evas_Object * obj , Elm_Multibuttonentry_Smart_Data * sd )
2012-01-02 02:40:17 -08:00
{
2012-08-30 09:46:12 -07:00
sd - > box = elm_box_add ( obj ) ;
if ( ! sd - > box ) return ;
2012-10-10 02:44:38 -07:00
elm_box_layout_set ( sd - > box , _box_layout_cb , NULL , NULL ) ;
2012-08-30 09:46:12 -07:00
elm_box_homogeneous_set ( sd - > box , EINA_FALSE ) ;
elm_layout_content_set ( obj , " box.swallow " , sd - > box ) ;
sd - > label = edje_object_add ( evas_object_evas_get ( obj ) ) ;
if ( ! sd - > label ) return ;
elm_widget_theme_object_set
( obj , sd - > label , " multibuttonentry " , " label " ,
elm_widget_style_get ( obj ) ) ;
_label_set ( obj , " " ) ;
elm_widget_sub_object_add ( obj , sd - > label ) ;
2012-10-10 02:37:50 -07:00
// ACCESS
2013-03-22 01:42:04 -07:00
if ( _elm_config - > access_mode = = ELM_ACCESS_MODE_ON )
2012-10-10 02:37:50 -07:00
_access_multibuttonentry_label_register ( obj , EINA_TRUE ) ;
2012-08-30 09:46:12 -07:00
sd - > entry = elm_entry_add ( obj ) ;
if ( ! sd - > entry ) return ;
elm_entry_single_line_set ( sd - > entry , EINA_TRUE ) ;
elm_object_text_set ( sd - > entry , " " ) ;
elm_entry_input_panel_enabled_set ( sd - > entry , EINA_FALSE ) ;
evas_object_size_hint_min_set ( sd - > entry , MIN_W_ENTRY , 0 ) ;
evas_object_size_hint_weight_set
( sd - > entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( sd - > entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( sd - > box , sd - > entry ) ;
evas_object_show ( sd - > entry ) ;
sd - > view_state = MULTIBUTTONENTRY_VIEW_ENTRY ;
{
2013-08-23 07:30:46 -07:00
Evas_Coord button_min_width = 0 , button_min_height = 0 ;
2012-08-30 09:46:12 -07:00
sd - > end = edje_object_add ( evas_object_evas_get ( obj ) ) ;
if ( ! sd - > end ) return ;
elm_widget_theme_object_set
( obj , sd - > end , " multibuttonentry " , " closedbutton " ,
elm_widget_style_get ( obj ) ) ;
2013-08-23 07:30:46 -07:00
edje_object_size_min_calc ( sd - > end , & button_min_width , & button_min_height ) ;
elm_coords_finger_size_adjust ( 1 , & button_min_width , 1 , & button_min_height ) ;
evas_object_size_hint_min_set ( sd - > end , button_min_width , button_min_height ) ;
2012-08-30 09:46:12 -07:00
elm_widget_sub_object_add ( obj , sd - > end ) ;
}
2012-01-02 02:40:17 -08:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_multibuttonentry_smart_text_set ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2012-01-02 02:40:17 -08:00
{
2012-11-25 22:32:53 -08:00
const char * part = va_arg ( * list , const char * ) ;
const char * label = va_arg ( * list , const char * ) ;
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Eina_Bool int_ret ;
2012-03-05 23:45:10 -08:00
if ( ! part | | ! strcmp ( part , " default " ) )
{
2012-08-30 09:46:12 -07:00
if ( label ) _label_set ( obj , label ) ;
2012-11-25 22:32:53 -08:00
int_ret = EINA_TRUE ;
2012-03-05 23:45:10 -08:00
}
else if ( ! strcmp ( part , " guide " ) )
{
2012-08-30 09:46:12 -07:00
if ( label ) _guide_text_set ( obj , label ) ;
2012-11-25 22:32:53 -08:00
int_ret = EINA_TRUE ;
2012-03-05 23:45:10 -08:00
}
2013-07-22 14:05:16 -07:00
else
eo_do_super ( obj , MY_CLASS , elm_obj_layout_text_set ( part , label , & int_ret ) ) ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = int_ret ;
2012-01-02 02:40:17 -08:00
}
2012-11-25 22:32:53 -08:00
static void
_elm_multibuttonentry_smart_text_get ( Eo * obj , void * _pd , va_list * list )
2012-01-02 02:40:17 -08:00
{
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
const char * part = va_arg ( * list , const char * ) ;
const char * * text = va_arg ( * list , const char * * ) ;
2012-03-06 04:06:47 -08:00
2012-03-05 23:45:10 -08:00
if ( ! part | | ! strcmp ( part , " default " ) )
{
2012-11-25 22:32:53 -08:00
* text = sd - > label_str ;
2012-03-05 23:45:10 -08:00
}
else if ( ! strcmp ( part , " guide " ) )
{
2012-11-25 22:32:53 -08:00
* text = sd - > guide_text_str ;
2012-03-05 23:45:10 -08:00
}
2012-11-25 22:32:53 -08:00
else
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , elm_obj_layout_text_get ( part , text ) ) ;
2012-08-30 09:46:12 -07:00
}
2012-10-10 02:37:50 -07:00
static char *
2014-01-06 06:30:02 -08:00
_access_info_cb ( void * data EINA_UNUSED , Evas_Object * obj )
2012-10-10 02:37:50 -07:00
{
char * ret ;
Eina_Strbuf * buf ;
Eina_List * l = NULL ;
Elm_Multibuttonentry_Item * it ;
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN_VAL ( obj , sd , NULL ) ;
2012-10-10 02:37:50 -07:00
if ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_GUIDETEXT )
{
if ( sd - > guide_text_str ) return strdup ( sd - > guide_text_str ) ;
return NULL ;
}
buf = eina_strbuf_new ( ) ;
if ( sd - > label_str ) eina_strbuf_append ( buf , sd - > label_str ) ;
int invisible_its = 0 ;
EINA_LIST_FOREACH ( sd - > items , l , it )
{
if ( it - > visible )
eina_strbuf_append_printf ( buf , " , %s " ,
edje_object_part_text_get ( it - > button , " elm.btn.text " ) ) ;
else
invisible_its + + ;
}
if ( invisible_its )
eina_strbuf_append_printf ( buf , " , and %d more " , invisible_its ) ;
ret = eina_strbuf_string_steal ( buf ) ;
eina_strbuf_free ( buf ) ;
return ret ;
}
2012-08-30 09:46:12 -07:00
static void
2012-11-25 22:32:53 -08:00
_elm_multibuttonentry_smart_add ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2012-08-30 09:46:12 -07:00
{
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * priv = _pd ;
2013-10-05 01:12:50 -07:00
ELM_WIDGET_DATA_GET_OR_RETURN ( obj , wd ) ;
2012-08-30 09:46:12 -07:00
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_add ( ) ) ;
2013-09-24 21:33:39 -07:00
elm_widget_sub_object_parent_add ( obj ) ;
2013-08-26 08:29:45 -07:00
2013-03-01 18:04:31 -08:00
if ( ! elm_layout_theme_set
( obj , " multibuttonentry " , " base " , elm_widget_style_get ( obj ) ) )
2013-12-25 20:03:55 -08:00
CRI ( " Failed to set layout! " ) ;
2012-08-30 09:46:12 -07:00
elm_widget_can_focus_set ( obj , EINA_TRUE ) ;
priv - > last_btn_select = EINA_TRUE ;
priv - > editable = EINA_TRUE ;
2012-12-07 00:44:47 -08:00
priv - > parent = obj ;
2013-12-26 09:27:39 -08:00
priv - > format_func = _format_count ;
2012-08-30 09:46:12 -07:00
2012-12-07 00:44:47 -08:00
_view_init ( obj , priv ) ;
2012-08-30 09:46:12 -07:00
_callbacks_register ( obj ) ;
2012-10-10 02:37:50 -07:00
// ACCESS
2012-11-25 22:32:53 -08:00
_elm_access_object_register ( obj , wd - > resize_obj ) ;
2012-10-10 02:37:50 -07:00
_elm_access_text_set
2013-07-30 20:53:04 -07:00
( _elm_access_info_get ( obj ) , ELM_ACCESS_TYPE , E_ ( " multi button entry " ) ) ;
2012-10-10 02:37:50 -07:00
_elm_access_callback_set
2013-07-30 20:53:04 -07:00
( _elm_access_info_get ( obj ) , ELM_ACCESS_INFO , _access_info_cb , NULL ) ;
2012-08-30 09:46:12 -07:00
}
static void
2012-11-25 22:32:53 -08:00
_elm_multibuttonentry_smart_del ( Eo * obj , void * _pd , va_list * list EINA_UNUSED )
2012-08-30 09:46:12 -07:00
{
Elm_Multibuttonentry_Item * item ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( sd - > items , item )
2012-08-30 09:46:12 -07:00
{
evas_object_del ( item - > button ) ;
free ( item ) ;
}
sd - > items = NULL ;
sd - > selected_it = NULL ;
if ( sd - > label_str ) eina_stringshare_del ( sd - > label_str ) ;
if ( sd - > guide_text_str ) eina_stringshare_del ( sd - > guide_text_str ) ;
evas_object_del ( sd - > entry ) ;
if ( sd - > label ) evas_object_del ( sd - > label ) ;
if ( sd - > guide_text ) evas_object_del ( sd - > guide_text ) ;
if ( sd - > end ) evas_object_del ( sd - > end ) ;
2013-03-18 09:07:38 -07:00
eo_do_super ( obj , MY_CLASS , evas_obj_smart_del ( ) ) ;
2012-08-30 09:46:12 -07:00
}
2012-11-25 22:32:53 -08:00
static Eina_Bool _elm_multibuttonentry_smart_focus_next_enable = EINA_FALSE ;
static void
_elm_multibuttonentry_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_FALSE ;
}
static void
_elm_multibuttonentry_smart_focus_next_manager_is ( Eo * obj EINA_UNUSED , void * _pd EINA_UNUSED , va_list * list )
2012-10-10 02:37:50 -07:00
{
2012-11-25 22:32:53 -08:00
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
* ret = _elm_multibuttonentry_smart_focus_next_enable ;
}
static void
_elm_multibuttonentry_smart_focus_next ( Eo * obj , void * _pd , va_list * list )
{
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 ;
2012-10-10 02:37:50 -07:00
Eina_List * items = NULL ;
Eina_List * l = NULL ;
Elm_Multibuttonentry_Item * it ;
Evas_Object * ao ;
Evas_Object * po ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-10-10 02:37:50 -07:00
if ( ! elm_widget_focus_get ( obj ) )
{
* next = ( Evas_Object * ) obj ;
2012-11-25 22:32:53 -08:00
if ( ret ) * ret = EINA_TRUE ;
return ;
2012-10-10 02:37:50 -07:00
}
if ( sd - > label )
{
2013-08-23 07:30:46 -07:00
po = ( Evas_Object * ) edje_object_part_object_get ( sd - > label , " elm.text " ) ;
2012-10-10 02:37:50 -07:00
ao = evas_object_data_get ( po , " _part_access_obj " ) ;
2012-11-25 22:32:53 -08:00
int_ret = elm_widget_focus_get ( ao ) ;
2012-10-10 02:37:50 -07:00
items = eina_list_append ( items , ao ) ;
}
EINA_LIST_FOREACH ( sd - > items , l , it )
{
po = ( Evas_Object * ) edje_object_part_object_get
( it - > button , " elm.btn.text " ) ;
ao = evas_object_data_get ( po , " _part_access_obj " ) ;
2012-11-25 22:32:53 -08:00
int_ret = int_ret | | elm_widget_focus_get ( ao ) ;
2012-10-10 02:37:50 -07:00
items = eina_list_append ( items , ao ) ;
}
if ( sd - > entry )
{
2012-11-25 22:32:53 -08:00
int_ret = int_ret | | elm_widget_focus_get ( sd - > entry ) ;
2012-10-10 02:37:50 -07:00
/* elm_widget_list_focus_liset_next_get() check parent of item
because parent sd - > entry is not multibuttnentry but sd - > box
so append sd - > box instead of sd - > entry , is this proper ? */
items = eina_list_append ( items , sd - > box ) ;
}
2014-01-06 06:26:46 -08:00
if ( int_ret & & ret )
2012-11-25 22:32:53 -08:00
* ret = elm_widget_focus_list_next_get
2012-10-10 02:37:50 -07:00
( obj , items , eina_list_data_get , dir , next ) ;
}
static void
_access_obj_process ( Evas_Object * obj , Eina_Bool is_access )
{
Eina_List * l ;
Elm_Multibuttonentry_Item * it ;
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
2012-10-10 02:37:50 -07:00
/* label */
_access_multibuttonentry_label_register ( obj , is_access ) ;
/* buttons */
2012-12-07 00:44:47 -08:00
EINA_LIST_FOREACH ( sd - > items , l , it )
2012-10-10 02:37:50 -07:00
_access_multibuttonentry_item_register ( obj , it , is_access ) ;
}
static void
2012-11-25 22:32:53 -08:00
_elm_multibuttonentry_smart_access ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
2012-08-30 09:46:12 -07:00
{
2012-11-25 22:32:53 -08:00
_elm_multibuttonentry_smart_focus_next_enable = va_arg ( * list , int ) ;
_access_obj_process ( obj , _elm_multibuttonentry_smart_focus_next_enable ) ;
2012-01-02 02:40:17 -08:00
}
2011-11-23 17:06:26 -08:00
EAPI Evas_Object *
elm_multibuttonentry_add ( Evas_Object * parent )
{
2012-08-30 09:46:12 -07:00
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 ;
}
2011-11-23 17:06:26 -08:00
2012-11-25 22:32:53 -08:00
static void
_constructor ( Eo * obj , void * _pd EINA_UNUSED , va_list * list EINA_UNUSED )
{
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 ,
2013-11-07 03:44:22 -08:00
evas_obj_type_set ( MY_CLASS_NAME_LEGACY ) ,
2012-11-25 22:32:53 -08:00
evas_obj_smart_callbacks_descriptions_set ( _smart_callbacks , NULL ) ) ;
2011-11-23 17:06:26 -08:00
}
EAPI Evas_Object *
elm_multibuttonentry_entry_get ( const Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Evas_Object * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_entry_get ( & ret ) ) ;
return ret ;
}
static void
_entry_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Evas_Object * * ret = va_arg ( * list , Evas_Object * * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-23 17:06:26 -08:00
2012-11-25 22:32:53 -08:00
* ret = sd - > entry ;
2011-11-23 17:06:26 -08:00
}
2012-03-05 17:45:25 -08:00
EAPI Eina_Bool
elm_multibuttonentry_expanded_get ( const Evas_Object * obj )
2011-11-23 17:06:26 -08:00
{
2012-10-17 17:55:19 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) EINA_FALSE ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_expanded_get ( & ret ) ) ;
return ret ;
}
static void
_expanded_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-24 00:34:47 -08:00
2012-11-25 22:32:53 -08:00
* ret = sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK ?
2012-08-30 09:46:12 -07:00
EINA_FALSE : EINA_TRUE ;
2011-11-23 17:06:26 -08:00
}
2013-12-26 09:27:39 -08:00
EAPI void
elm_multibuttonentry_format_function_set ( Evas_Object * obj ,
Elm_Multibuttonentry_Format_Cb f_func ,
const void * data )
{
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_format_function_set
( f_func , data ) ) ;
}
static void
_format_function_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
sd - > format_func = va_arg ( * list , Elm_Multibuttonentry_Format_Cb ) ;
if ( ! sd - > format_func ) sd - > format_func = _format_count ;
sd - > format_func_data = va_arg ( * list , void * ) ;
_view_update ( sd ) ;
}
2012-03-05 17:45:25 -08:00
EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_expanded_set ( Evas_Object * obj ,
Eina_Bool expanded )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_multibuttonentry_expanded_set ( expanded ) ) ;
}
static void
_expanded_set ( Eo * obj , void * _pd , va_list * list )
{
Eina_Bool expanded = va_arg ( * list , int ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-24 00:34:47 -08:00
2012-08-30 09:46:12 -07:00
if ( ( ( sd - > view_state = = MULTIBUTTONENTRY_VIEW_SHRINK ) ?
EINA_FALSE : EINA_TRUE ) = = expanded ) return ;
2012-03-05 17:45:25 -08:00
if ( expanded )
2012-03-06 04:06:47 -08:00
_shrink_mode_set ( obj , EINA_FALSE ) ;
2012-03-05 17:45:25 -08:00
else
2012-03-06 04:06:47 -08:00
_shrink_mode_set ( obj , EINA_TRUE ) ;
2011-11-23 17:06:26 -08:00
}
2012-07-03 04:22:46 -07:00
EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_editable_set ( Evas_Object * obj ,
Eina_Bool editable )
2012-07-03 04:22:46 -07:00
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_multibuttonentry_editable_set ( editable ) ) ;
}
static void
_editable_set ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool editable = va_arg ( * list , int ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
editable = ! ! editable ;
if ( sd - > editable = = editable ) return ;
sd - > editable = editable ;
2012-07-03 04:22:46 -07:00
2012-08-30 09:46:12 -07:00
if ( sd - > editable )
evas_object_show ( sd - > entry ) ;
else
2012-07-03 04:22:46 -07:00
{
2012-08-30 09:46:12 -07:00
elm_entry_input_panel_hide ( sd - > entry ) ;
evas_object_hide ( sd - > entry ) ;
2012-07-03 04:22:46 -07:00
}
}
EAPI Eina_Bool
elm_multibuttonentry_editable_get ( const Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) - 1 ;
2012-11-25 22:32:53 -08:00
Eina_Bool ret = EINA_FALSE ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_editable_get ( & ret ) ) ;
return ret ;
}
static void
_editable_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Eina_Bool * ret = va_arg ( * list , Eina_Bool * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
2012-11-25 22:32:53 -08:00
* ret = sd - > editable ;
2012-07-03 04:22:46 -07:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_prepend ( Evas_Object * obj ,
const char * label ,
Evas_Smart_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( obj , elm_obj_multibuttonentry_item_prepend ( label , func , data , & ret ) ) ;
return ret ;
}
static void
_item_prepend ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
const char * label = va_arg ( * list , const char * ) ;
Evas_Smart_Cb func = va_arg ( * list , Evas_Smart_Cb ) ;
void * data = va_arg ( * list , void * ) ;
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
2012-12-07 00:44:47 -08:00
* ret = NULL ;
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
* ret = _button_item_add ( sd , label , MULTIBUTTONENTRY_POS_START , NULL , func , data ) ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_append ( Evas_Object * obj ,
const char * label ,
Evas_Smart_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( obj , elm_obj_multibuttonentry_item_append ( label , func , data , & ret ) ) ;
return ret ;
}
static void
_item_append ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
const char * label = va_arg ( * list , const char * ) ;
Evas_Smart_Cb func = va_arg ( * list , Evas_Smart_Cb ) ;
void * data = va_arg ( * list , void * ) ;
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
2012-12-07 00:44:47 -08:00
* ret = NULL ;
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
* ret = _button_item_add ( sd , label , MULTIBUTTONENTRY_POS_END , NULL , func , data ) ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_insert_before ( Evas_Object * obj ,
Elm_Object_Item * before ,
const char * label ,
Evas_Smart_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( obj , elm_obj_multibuttonentry_item_insert_before ( before , label , func , data , & ret ) ) ;
return ret ;
}
static void
_item_insert_before ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
Elm_Object_Item * before = va_arg ( * list , Elm_Object_Item * ) ;
const char * label = va_arg ( * list , const char * ) ;
Evas_Smart_Cb func = va_arg ( * list , Evas_Smart_Cb ) ;
void * data = va_arg ( * list , void * ) ;
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
2012-12-07 00:44:47 -08:00
* ret = NULL ;
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
* ret = _button_item_add ( sd , label , MULTIBUTTONENTRY_POS_BEFORE , before , func , data ) ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_insert_after ( Evas_Object * obj ,
Elm_Object_Item * after ,
const char * label ,
Evas_Smart_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( obj , elm_obj_multibuttonentry_item_insert_after ( after , label , func , data , & ret ) ) ;
return ret ;
}
static void
_item_insert_after ( Eo * obj , void * _pd EINA_UNUSED , va_list * list )
{
Elm_Object_Item * after = va_arg ( * list , Elm_Object_Item * ) ;
const char * label = va_arg ( * list , const char * ) ;
Evas_Smart_Cb func = va_arg ( * list , Evas_Smart_Cb ) ;
void * data = va_arg ( * list , void * ) ;
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
2012-12-07 00:44:47 -08:00
* ret = NULL ;
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN ( obj , sd ) ;
* ret = _button_item_add ( sd , label , MULTIBUTTONENTRY_POS_AFTER , after , func , data ) ;
2011-11-23 17:06:26 -08:00
}
EAPI const Eina_List *
elm_multibuttonentry_items_get ( const Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
const Eina_List * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_items_get ( & ret ) ) ;
return ret ;
}
static void
_items_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
const Eina_List * * ret = va_arg ( * list , const Eina_List * * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
2012-11-25 22:32:53 -08:00
* ret = sd - > items ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2011-11-23 17:06:26 -08:00
elm_multibuttonentry_first_item_get ( const Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_first_item_get ( & ret ) ) ;
return ret ;
}
static void
_first_item_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
2012-11-25 22:32:53 -08:00
* ret = eina_list_data_get ( sd - > items ) ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2011-11-23 17:06:26 -08:00
elm_multibuttonentry_last_item_get ( const Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_last_item_get ( & ret ) ) ;
return ret ;
}
2012-08-30 09:46:12 -07:00
2012-11-25 22:32:53 -08:00
static void
_last_item_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
* ret = eina_list_data_get ( eina_list_last ( sd - > items ) ) ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
2011-11-23 17:06:26 -08:00
elm_multibuttonentry_selected_item_get ( const Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) NULL ;
2012-11-25 22:32:53 -08:00
Elm_Object_Item * ret = NULL ;
eo_do ( ( Eo * ) obj , elm_obj_multibuttonentry_selected_item_get ( & ret ) ) ;
return ret ;
}
static void
_selected_item_get ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Object_Item * * ret = va_arg ( * list , Elm_Object_Item * * ) ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
2012-11-25 22:32:53 -08:00
* ret = sd - > selected_it ;
2011-11-23 17:06:26 -08:00
}
EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_selected_set ( Elm_Object_Item * it ,
Eina_Bool selected )
2011-11-23 17:06:26 -08:00
{
2012-03-06 03:51:42 -08:00
Elm_Multibuttonentry_Item * item = ( Elm_Multibuttonentry_Item * ) it ;
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_ITEM_CHECK_OR_RETURN ( it ) ;
if ( selected ) _button_select ( WIDGET ( item ) , item - > button ) ;
else _button_select ( WIDGET ( item ) , NULL ) ;
2011-11-23 17:06:26 -08:00
}
2012-03-06 07:18:02 -08:00
EAPI Eina_Bool
elm_multibuttonentry_item_selected_get ( const Elm_Object_Item * it )
2011-11-23 17:06:26 -08:00
{
2012-03-06 07:18:02 -08:00
//TODO : To be implemented.
if ( ! it ) return EINA_FALSE ;
2012-08-30 09:46:12 -07:00
2012-03-06 07:18:02 -08:00
return EINA_TRUE ;
2011-11-23 17:06:26 -08:00
}
EAPI void
elm_multibuttonentry_clear ( Evas_Object * obj )
{
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
2012-11-25 22:32:53 -08:00
eo_do ( obj , elm_obj_multibuttonentry_clear ( ) ) ;
}
static void
2012-12-07 00:44:47 -08:00
_clear ( Eo * obj EINA_UNUSED , void * _pd , va_list * list EINA_UNUSED )
2012-11-25 22:32:53 -08:00
{
Elm_Multibuttonentry_Item * item ;
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2012-08-30 09:46:12 -07:00
if ( sd - > items )
2011-11-23 17:06:26 -08:00
{
2013-03-08 20:23:42 -08:00
EINA_LIST_FREE ( sd - > items , item )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
elm_box_unpack ( sd - > box , item - > button ) ;
evas_object_del ( item - > button ) ;
2011-11-23 17:06:26 -08:00
free ( item ) ;
}
2012-08-30 09:46:12 -07:00
sd - > items = NULL ;
2011-11-23 17:06:26 -08:00
}
2012-08-30 09:46:12 -07:00
sd - > selected_it = NULL ;
2012-12-07 00:44:47 -08:00
_view_update ( sd ) ;
2011-11-23 17:06:26 -08:00
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
elm_multibuttonentry_item_prev_get ( const Elm_Object_Item * it )
2011-11-23 17:06:26 -08:00
{
Eina_List * l ;
2012-08-30 09:46:12 -07:00
Elm_Multibuttonentry_Item * item ;
2012-01-02 01:03:02 -08:00
2012-08-30 09:46:12 -07:00
ELM_MULTIBUTTONENTRY_ITEM_CHECK_OR_RETURN ( it , NULL ) ;
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN_VAL ( WIDGET ( it ) , sd , NULL ) ;
2011-11-23 17:06:26 -08:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2012-01-02 01:03:02 -08:00
{
2012-08-30 09:46:12 -07:00
if ( item = = ( Elm_Multibuttonentry_Item * ) it )
2012-01-02 01:03:02 -08:00
{
l = eina_list_prev ( l ) ;
if ( ! l ) return NULL ;
return eina_list_data_get ( l ) ;
}
}
2011-11-23 17:06:26 -08:00
return NULL ;
}
2012-01-02 02:10:23 -08:00
EAPI Elm_Object_Item *
elm_multibuttonentry_item_next_get ( const Elm_Object_Item * it )
2011-11-23 17:06:26 -08:00
{
Eina_List * l ;
2012-08-30 09:46:12 -07:00
Elm_Multibuttonentry_Item * item ;
ELM_MULTIBUTTONENTRY_ITEM_CHECK_OR_RETURN ( it , NULL ) ;
2012-12-07 00:44:47 -08:00
ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN_VAL ( WIDGET ( it ) , sd , NULL ) ;
2011-11-23 17:06:26 -08:00
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > items , l , item )
2012-01-02 01:03:02 -08:00
{
2012-08-30 09:46:12 -07:00
if ( item = = ( Elm_Multibuttonentry_Item * ) it )
2012-01-02 01:03:02 -08:00
{
l = eina_list_next ( l ) ;
if ( ! l ) return NULL ;
return eina_list_data_get ( l ) ;
}
}
2011-11-23 17:06:26 -08:00
return NULL ;
}
2012-03-25 17:07:28 -07:00
EINA_DEPRECATED EAPI void *
2012-01-02 02:10:23 -08:00
elm_multibuttonentry_item_data_get ( const Elm_Object_Item * it )
2011-11-23 17:06:26 -08:00
{
2012-01-02 02:10:23 -08:00
return elm_widget_item_data_get ( it ) ;
2011-11-23 17:06:26 -08:00
}
2012-03-25 17:07:28 -07:00
EINA_DEPRECATED EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_data_set ( Elm_Object_Item * it ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-01-02 02:10:23 -08:00
return elm_widget_item_data_set ( it , data ) ;
2011-11-23 17:06:26 -08:00
}
EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_filter_append ( Evas_Object * obj ,
Elm_Multibuttonentry_Item_Filter_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
eo_do ( obj , elm_obj_multibuttonentry_item_filter_append ( func , data ) ) ;
}
static void
_item_filter_append ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Multibuttonentry_Item_Filter_Cb func = va_arg ( * list , Elm_Multibuttonentry_Item_Filter_Cb ) ;
void * data = va_arg ( * list , void * ) ;
2011-11-23 17:06:26 -08:00
Elm_Multibuttonentry_Item_Filter * new_item_filter = NULL ;
Elm_Multibuttonentry_Item_Filter * _item_filter = NULL ;
Eina_List * l ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-23 17:06:26 -08:00
EINA_SAFETY_ON_NULL_RETURN ( func ) ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > filter_list , l , _item_filter )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
if ( _item_filter & & ( ( _item_filter - > callback_func = = func )
& & ( _item_filter - > data = = data ) ) )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
INF ( " Already Registered this item filter!!!! \n " ) ;
2011-11-23 17:06:26 -08:00
return ;
}
}
2012-12-13 07:20:22 -08:00
new_item_filter = _filter_new ( func , data ) ;
if ( ! new_item_filter ) return ;
2012-08-30 09:46:12 -07:00
sd - > filter_list = eina_list_append ( sd - > filter_list , new_item_filter ) ;
2011-11-23 17:06:26 -08:00
}
EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_filter_prepend ( Evas_Object * obj ,
Elm_Multibuttonentry_Item_Filter_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
eo_do ( obj , elm_obj_multibuttonentry_item_filter_prepend ( func , data ) ) ;
}
static void
_item_filter_prepend ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Multibuttonentry_Item_Filter_Cb func = va_arg ( * list , Elm_Multibuttonentry_Item_Filter_Cb ) ;
void * data = va_arg ( * list , void * ) ;
2011-11-23 17:06:26 -08:00
Elm_Multibuttonentry_Item_Filter * new_item_filter = NULL ;
Elm_Multibuttonentry_Item_Filter * _item_filter = NULL ;
Eina_List * l ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-23 17:06:26 -08:00
EINA_SAFETY_ON_NULL_RETURN ( func ) ;
2011-11-24 00:34:47 -08:00
new_item_filter = _filter_new ( func , data ) ;
2011-11-23 17:06:26 -08:00
if ( ! new_item_filter ) return ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > filter_list , l , _item_filter )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
if ( _item_filter & & ( ( _item_filter - > callback_func = = func )
& & ( _item_filter - > data = = data ) ) )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
INF ( " Already Registered this item filter!!!! \n " ) ;
2013-01-09 00:28:03 -08:00
_filter_free ( new_item_filter ) ;
2011-11-23 17:06:26 -08:00
return ;
}
}
2012-08-30 09:46:12 -07:00
sd - > filter_list = eina_list_prepend ( sd - > filter_list , new_item_filter ) ;
2011-11-23 17:06:26 -08:00
}
EAPI void
2012-08-30 09:46:12 -07:00
elm_multibuttonentry_item_filter_remove ( Evas_Object * obj ,
Elm_Multibuttonentry_Item_Filter_Cb func ,
void * data )
2011-11-23 17:06:26 -08:00
{
2012-11-25 22:32:53 -08:00
ELM_MULTIBUTTONENTRY_CHECK ( obj ) ;
eo_do ( obj , elm_obj_multibuttonentry_item_filter_remove ( func , data ) ) ;
}
static void
_item_filter_remove ( Eo * obj EINA_UNUSED , void * _pd , va_list * list )
{
Elm_Multibuttonentry_Item_Filter_Cb func = va_arg ( * list , Elm_Multibuttonentry_Item_Filter_Cb ) ;
void * data = va_arg ( * list , void * ) ;
2011-11-23 17:06:26 -08:00
Eina_List * l ;
Elm_Multibuttonentry_Item_Filter * item_filter ;
2012-11-25 22:32:53 -08:00
Elm_Multibuttonentry_Smart_Data * sd = _pd ;
2011-11-23 17:06:26 -08:00
EINA_SAFETY_ON_NULL_RETURN ( func ) ;
2012-10-01 00:36:27 -07:00
EINA_LIST_FOREACH ( sd - > filter_list , l , item_filter )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
if ( ( item_filter - > callback_func = = func )
& & ( ( ! data ) | | ( item_filter - > data = = data ) ) )
2011-11-23 17:06:26 -08:00
{
2012-08-30 09:46:12 -07:00
sd - > filter_list = eina_list_remove_list ( sd - > filter_list , l ) ;
2011-11-23 17:06:26 -08:00
_filter_free ( item_filter ) ;
return ;
}
}
}
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 ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_ADD ) , _elm_multibuttonentry_smart_add ) ,
EO_OP_FUNC ( EVAS_OBJ_SMART_ID ( EVAS_OBJ_SMART_SUB_ID_DEL ) , _elm_multibuttonentry_smart_del ) ,
2014-01-21 00:44:45 -08:00
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_THEME_APPLY ) , _elm_multibuttonentry_smart_theme ) ,
2013-04-23 04:30:15 -07:00
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_TRANSLATE ) , _elm_multibuttonentry_smart_translate ) ,
2012-11-25 22:32:53 -08:00
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_EVENT ) , _elm_multibuttonentry_smart_event ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_ON_FOCUS ) , _elm_multibuttonentry_smart_on_focus ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS ) , _elm_multibuttonentry_smart_focus_next_manager_is ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_NEXT ) , _elm_multibuttonentry_smart_focus_next ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS ) , _elm_multibuttonentry_smart_focus_direction_manager_is ) ,
EO_OP_FUNC ( ELM_WIDGET_ID ( ELM_WIDGET_SUB_ID_ACCESS ) , _elm_multibuttonentry_smart_access ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_SET ) , _elm_multibuttonentry_smart_text_set ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_TEXT_GET ) , _elm_multibuttonentry_smart_text_get ) ,
EO_OP_FUNC ( ELM_OBJ_LAYOUT_ID ( ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL ) , _elm_multibuttonentry_smart_sizing_eval ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ENTRY_GET ) , _entry_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EXPANDED_GET ) , _expanded_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EXPANDED_SET ) , _expanded_set ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EDITABLE_SET ) , _editable_set ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EDITABLE_GET ) , _editable_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_PREPEND ) , _item_prepend ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_APPEND ) , _item_append ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_INSERT_BEFORE ) , _item_insert_before ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_INSERT_AFTER ) , _item_insert_after ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEMS_GET ) , _items_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_FIRST_ITEM_GET ) , _first_item_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_LAST_ITEM_GET ) , _last_item_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_SELECTED_ITEM_GET ) , _selected_item_get ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_CLEAR ) , _clear ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_FILTER_APPEND ) , _item_filter_append ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_FILTER_PREPEND ) , _item_filter_prepend ) ,
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_FILTER_REMOVE ) , _item_filter_remove ) ,
2013-12-26 09:27:39 -08:00
EO_OP_FUNC ( ELM_OBJ_MULTIBUTTONENTRY_ID ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_FORMAT_FUNCTION_SET ) , _format_function_set ) ,
2012-11-25 22:32:53 -08:00
EO_OP_FUNC_SENTINEL
} ;
eo_class_funcs_set ( klass , func_desc ) ;
2013-11-07 03:44:22 -08:00
evas_smart_legacy_type_register ( MY_CLASS_NAME_LEGACY , klass ) ;
2013-02-09 23:52:31 -08:00
2012-11-25 22:32:53 -08:00
if ( _elm_config - > access_mode ! = ELM_ACCESS_MODE_OFF )
_elm_multibuttonentry_smart_focus_next_enable = EINA_TRUE ;
}
static const Eo_Op_Description op_desc [ ] = {
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ENTRY_GET , " Get the entry of the multibuttonentry object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EXPANDED_GET , " Get the value of expanded state. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EXPANDED_SET , " Set/Unset the multibuttonentry to expanded state. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EDITABLE_SET , " Sets if the multibuttonentry is to be editable or not. " ) ,
2013-08-21 13:23:44 -07:00
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_EDITABLE_GET , " Get whether the multibuttonentry is editable or not. " ) ,
2012-11-25 22:32:53 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_PREPEND , " Prepend a new item to the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_APPEND , " Append a new item to the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_INSERT_BEFORE , " Add a new item to the multibuttonentry before the indicated object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_INSERT_AFTER , " Add a new item to the multibuttonentry after the indicated object. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEMS_GET , " Get a list of items in the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_FIRST_ITEM_GET , " Get the first item in the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_LAST_ITEM_GET , " Get the last item in the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_SELECTED_ITEM_GET , " Get the selected item in the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_CLEAR , " Remove all items in the multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_FILTER_APPEND , " Append an item filter function for text inserted in the Multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_FILTER_PREPEND , " Prepend a filter function for text inserted in the Multibuttonentry. " ) ,
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_ITEM_FILTER_REMOVE , " Remove a filter from the list. " ) ,
2013-12-26 09:27:39 -08:00
EO_OP_DESCRIPTION ( ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_FORMAT_FUNCTION_SET , " Set a function to format the string that will be used to display the hidden items counter. " ) ,
2012-11-25 22:32:53 -08:00
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_MULTIBUTTONENTRY_BASE_ID , op_desc , ELM_OBJ_MULTIBUTTONENTRY_SUB_ID_LAST ) ,
NULL ,
sizeof ( Elm_Multibuttonentry_Smart_Data ) ,
_class_constructor ,
NULL
} ;
EO_DEFINE_CLASS ( elm_obj_multibuttonentry_class_get , & class_desc , ELM_OBJ_LAYOUT_CLASS , NULL ) ;