2012-02-23 05:58:32 -08:00
# include <Elementary_Cursor.h>
# include "test.h"
2010-10-19 11:25:22 -07:00
# ifdef HAVE_CONFIG_H
2012-02-23 05:58:32 -08:00
# include "elementary_config.h"
2010-10-19 11:25:22 -07:00
# endif
2012-03-29 12:27:13 -07:00
# include <Elementary.h>
2013-11-04 00:54:31 -08:00
2015-08-26 17:47:53 -07:00
# include "test_explode.h"
2012-11-27 07:21:27 -08:00
Evas_Object * _elm_min_set ( Evas_Object * obj , Evas_Object * parent ,
Evas_Coord w , Evas_Coord h ) ;
2012-02-23 05:58:32 -08:00
struct _api_data
{
unsigned int state ; /* What state we are testing */
void * box ; /* Use this to get box content */
2014-08-27 11:50:43 -07:00
2014-12-13 11:06:44 -08:00
Elm_Genlist_Item_Class * itc ;
2014-08-27 11:50:43 -07:00
Elm_Genlist_Item_Class * itc1 ;
Elm_Genlist_Item_Class * itc2 ;
void * gl ;
2015-09-23 04:50:05 -07:00
void * filter_data ; /* The data used for filtering */
2016-01-04 14:05:29 -08:00
int scrollto ;
2012-02-23 05:58:32 -08:00
} ;
typedef struct _api_data api_data ;
enum _api_state
{
HORIZONTAL_SET ,
NO_SELECT_MODE_SET ,
COMPRESS_MODE_SET ,
BOUNCE_SET ,
HOMOGENEOUS_SET ,
SCROLLER_POLICY_SET ,
TOOLTIP_TEXT_SET ,
ITEM_CURSOR_SET ,
2016-04-01 00:53:57 -07:00
ITEM_STYLE_SET ,
2012-02-23 05:58:32 -08:00
API_STATE_LAST
} ;
typedef enum _api_state api_state ;
2016-02-01 16:02:56 -08:00
static int bounce_max = 50 ;
2012-02-23 05:58:32 -08:00
static void
set_api_state ( api_data * api )
{
const Eina_List * items = elm_box_children_get ( api - > box ) ;
2012-03-29 04:09:45 -07:00
if ( ! eina_list_count ( items ) )
2012-02-23 05:58:32 -08:00
return ;
Evas_Object * gl = eina_list_nth ( items , 0 ) ; /* Genlist is the first item */
/* use elm_box_children_get() to get list of children */
switch ( api - > state )
{ /* Put all api-changes under switch */
case HORIZONTAL_SET : /* 0 */
2012-02-23 05:58:49 -08:00
elm_genlist_mode_set ( gl , ELM_LIST_LIMIT ) ;
2012-02-23 05:58:32 -08:00
break ;
case NO_SELECT_MODE_SET : /* 1 */
2012-03-07 08:01:37 -08:00
elm_genlist_select_mode_set ( gl , ELM_OBJECT_SELECT_MODE_NONE ) ;
2012-02-23 05:58:49 -08:00
elm_genlist_mode_set ( gl , ELM_LIST_SCROLL ) ; /* Back to default */
2012-02-23 05:58:32 -08:00
break ;
case COMPRESS_MODE_SET : /* 2 */
2012-03-07 08:01:37 -08:00
elm_genlist_select_mode_set ( gl , ELM_OBJECT_SELECT_MODE_DEFAULT ) ;
2012-03-07 08:07:34 -08:00
elm_genlist_mode_set ( gl , ELM_LIST_COMPRESS ) ;
2012-02-23 05:58:32 -08:00
break ;
case BOUNCE_SET : /* 3 */
2012-07-16 14:56:30 -07:00
elm_scroller_bounce_set ( gl , EINA_FALSE , EINA_FALSE ) ;
2012-02-23 05:58:32 -08:00
break ;
case HOMOGENEOUS_SET : /* 4 */
2012-07-16 14:56:30 -07:00
elm_scroller_bounce_set ( gl , EINA_TRUE , EINA_TRUE ) ; /* Back to default */
2012-02-23 05:58:32 -08:00
elm_genlist_homogeneous_set ( gl , EINA_TRUE ) ;
break ;
case SCROLLER_POLICY_SET : /* 5 */
elm_genlist_homogeneous_set ( gl , EINA_FALSE ) ; /* Back to default */
2012-07-16 14:56:30 -07:00
elm_scroller_policy_set ( gl , ELM_SCROLLER_POLICY_ON , ELM_SCROLLER_POLICY_ON ) ;
2012-02-23 05:58:32 -08:00
break ;
case TOOLTIP_TEXT_SET : /* 6 */
{
elm_genlist_item_tooltip_text_set ( elm_genlist_first_item_get ( gl ) , " Tooltip text from API " ) ;
2012-03-07 00:29:28 -08:00
elm_genlist_item_bring_in ( elm_genlist_first_item_get ( gl ) ,
ELM_GENLIST_ITEM_SCROLLTO_IN ) ;
2012-02-23 05:58:32 -08:00
}
break ;
case ITEM_CURSOR_SET : /* 7 */
elm_genlist_item_cursor_set ( elm_genlist_first_item_get ( gl ) , ELM_CURSOR_HAND2 ) ;
break ;
2016-04-01 00:53:57 -07:00
case ITEM_STYLE_SET : /* 8 */
elm_object_item_style_set ( elm_genlist_first_item_get ( gl ) , " double_label " ) ;
break ;
2012-02-23 05:58:32 -08:00
default :
return ;
}
}
2010-05-20 11:00:33 -07:00
2012-02-23 05:58:32 -08:00
static void
2013-08-31 18:18:03 -07:00
_api_bt_clicked ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2012-02-23 05:58:32 -08:00
{ /* Will add here a SWITCH command containing code to modify test-object */
/* in accordance a->state value. */
api_data * a = data ;
char str [ 128 ] ;
2012-07-31 13:07:09 -07:00
INF ( " clicked event on API Button: api_state=<%d> " , a - > state ) ;
2012-02-23 05:58:32 -08:00
set_api_state ( a ) ;
a - > state + + ;
sprintf ( str , " Next API function (%u) " , a - > state ) ;
elm_object_text_set ( obj , str ) ;
elm_object_disabled_set ( obj , a - > state = = API_STATE_LAST ) ;
}
2010-05-20 11:00:33 -07:00
/* Hint:
2011-03-28 17:51:56 -07:00
* In this example some calls to elm_genlist_item_append ( ) are used which give the
* value of an int as ' item data ' and ' func data ' after casting into ( void * ) . For
2010-05-20 11:00:33 -07:00
* sure this works only on architectures where sizeof ( int ) = = sizeof ( void * ) .
2011-03-28 17:51:56 -07:00
* For real world usage you should hold a data structure or value in your
2010-05-20 11:00:33 -07:00
* application and then give only a pointer to this data as data pointer .
*/
2009-08-13 15:41:43 -07:00
typedef struct _Testitem
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * item ;
2009-08-13 15:41:43 -07:00
int mode ;
int onoff ;
2012-02-22 23:39:10 -08:00
Eina_Bool checked ;
2009-08-13 15:41:43 -07:00
} Testitem ;
2014-09-05 09:47:45 -07:00
static char *
gl_text_get1 ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
char buf [ 256 ] ;
2014-09-05 09:47:45 -07:00
int num = ( int ) ( uintptr_t ) data ;
2015-12-24 10:34:26 -08:00
snprintf ( buf , sizeof ( buf ) , " Item # %i " , num ) ;
2014-09-05 09:47:45 -07:00
2009-08-13 15:41:43 -07:00
return strdup ( buf ) ;
}
2013-08-31 18:18:03 -07:00
Evas_Object * gl_content_get ( void * data EINA_UNUSED , Evas_Object * obj , const char * part )
2009-08-13 15:41:43 -07:00
{
char buf [ PATH_MAX ] ;
Evas_Object * ic = elm_icon_add ( obj ) ;
2011-01-09 22:46:59 -08:00
if ( ! strcmp ( part , " elm.swallow.end " ) )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/bubble.png " , elm_app_data_dir_get ( ) ) ;
2011-01-09 22:46:59 -08:00
else
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2009-08-13 15:41:43 -07:00
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return ic ;
}
2012-02-22 01:31:37 -08:00
2013-08-31 18:18:03 -07:00
static void on_bt_clicked ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-07-31 13:07:09 -07:00
{
printf ( " button clicked \n " ) ;
}
2013-08-31 18:18:03 -07:00
static void on_ck_changed ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-07-31 13:07:09 -07:00
{
printf ( " checkbox changed \n " ) ;
}
2013-08-31 18:18:03 -07:00
Evas_Object * gl_content_full_get ( void * data EINA_UNUSED , Evas_Object * obj , const char * part )
2012-07-31 13:07:09 -07:00
{
Evas_Object * fr , * bx , * ic , * bt , * ck ;
if ( strcmp ( part , " elm.swallow.content " ) ! = 0 ) return NULL ;
fr = elm_frame_add ( obj ) ;
elm_layout_text_set ( fr , NULL , " A Frame " ) ;
bx = elm_box_add ( fr ) ;
elm_box_horizontal_set ( bx , EINA_TRUE ) ;
ic = elm_icon_add ( bx ) ;
2016-04-26 16:01:08 -07:00
elm_icon_standard_set ( ic , " go-home " ) ;
2014-11-12 07:08:37 -08:00
evas_object_size_hint_min_set ( ic ,
ELM_SCALE_SIZE ( 32 ) ,
ELM_SCALE_SIZE ( 32 ) ) ;
2012-07-31 13:07:09 -07:00
evas_object_size_hint_align_set ( ic , 0.5 , EVAS_HINT_FILL ) ;
evas_object_show ( ic ) ;
elm_box_pack_end ( bx , ic ) ;
bt = elm_button_add ( bx ) ;
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_smart_callback_add ( bt , " clicked " , on_bt_clicked , NULL ) ;
elm_layout_text_set ( bt , NULL , " Click Me " ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bt ) ;
ck = elm_check_add ( bx ) ;
evas_object_size_hint_align_set ( ck , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( ck , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_smart_callback_add ( ck , " changed " , on_ck_changed , NULL ) ;
elm_layout_text_set ( ck , NULL , " some checkbox " ) ;
evas_object_show ( ck ) ;
elm_box_pack_end ( bx , ck ) ;
elm_layout_content_set ( fr , NULL , bx ) ;
return fr ;
}
2013-08-31 18:18:03 -07:00
Eina_Bool gl_state_get ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
return EINA_FALSE ;
}
2016-02-12 11:14:13 -08:00
Evas_Object * gl_reusable_content_get ( void * data EINA_UNUSED , Evas_Object * obj , const char * part , Evas_Object * old )
{
if ( old & & ! strcmp ( part , " elm.swallow.end " ) )
{
// Reuse old content
// Here need to add initializing and state changing
// for cached content.
// printf("content reuse for cached content %p, %s\n", old, part);
return old ;
}
else
{
// Create new content object for non-reused part.
//printf("content create in reuse %p, %s\n", old, part);
char buf [ PATH_MAX ] ;
Evas_Object * ic = elm_icon_add ( obj ) ;
if ( ! strcmp ( part , " elm.swallow.end " ) )
snprintf ( buf , sizeof ( buf ) , " %s/images/bubble.png " , elm_app_data_dir_get ( ) ) ;
else
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
elm_image_file_set ( ic , buf , NULL ) ;
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return ic ;
}
// If return NULL value, content_get will be called to get new content.
// return NULL;
}
2009-08-13 15:41:43 -07:00
static void
gl_sel ( void * data , Evas_Object * obj , void * event_info )
{
2015-02-12 05:01:59 -08:00
printf ( " sel item data [%p] on genlist obj [%p], item pointer [%p], index [%d] \n " ,
data , obj , event_info , elm_genlist_item_index_get ( event_info ) ) ;
2009-08-13 15:41:43 -07:00
}
2009-09-22 20:22:07 -07:00
static void
2013-08-31 18:18:03 -07:00
_move ( void * data , Evas * evas EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2009-09-22 20:22:07 -07:00
{
Evas_Object * gl = data ;
Evas_Event_Mouse_Move * ev = event_info ;
int where = 0 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli ;
2009-09-22 20:22:07 -07:00
gli = elm_genlist_at_xy_item_get ( gl , ev - > cur . canvas . x , ev - > cur . canvas . y , & where ) ;
if ( gli )
2013-03-16 23:36:30 -07:00
INF ( " <%s> over %p, where %i \n " , __func__ , elm_object_item_data_get ( gli ) , where ) ;
2009-09-22 20:22:07 -07:00
else
2013-03-16 23:36:30 -07:00
INF ( " <%s> over none, where %i \n " , __func__ , where ) ;
2009-09-22 20:22:07 -07:00
}
2015-09-01 10:34:43 -07:00
/*** Genlist ***************************************************************/
2009-10-10 08:59:55 -07:00
static void
2013-08-31 18:18:03 -07:00
_bt50_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-10-10 08:59:55 -07:00
{
2012-03-07 00:29:28 -08:00
elm_genlist_item_bring_in ( data , ELM_GENLIST_ITEM_SCROLLTO_IN ) ;
2009-10-10 08:59:55 -07:00
}
static void
2013-08-31 18:18:03 -07:00
_bt1500_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-10-10 08:59:55 -07:00
{
2012-03-07 00:38:32 -08:00
elm_genlist_item_bring_in ( data , ELM_GENLIST_ITEM_SCROLLTO_MIDDLE ) ;
2009-10-10 08:59:55 -07:00
}
2010-02-10 07:11:16 -08:00
static void
2013-08-31 18:18:03 -07:00
_gl_selected ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2010-02-10 07:11:16 -08:00
{
2012-07-31 13:07:09 -07:00
printf ( " selected: %p \n " , event_info ) ;
2010-02-10 07:11:16 -08:00
}
static void
2013-08-31 18:18:03 -07:00
_gl_double_clicked ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2010-02-10 07:11:16 -08:00
{
2012-07-31 13:07:09 -07:00
printf ( " double clicked: %p \n " , event_info ) ;
Genlist Item Pin Feature
Summary:
**@feature** T6241
This feature enables genlist to pin an item to viewport which will
be available always for user to view/select.
**Use Case**:
In a big list of music, most times when user finds a song which they
like, before playing that they may want to go through the entire list
to check whether there is some other good songs, but
after seeing the entire list user have to again scroll back to the
position of item which they liked to play it then.
In this case item pinning can be used, so that the item
which they want to keep for future selection can be pinned
and then it will remain in viewport, finally when user want to do
operation on item, it will be readily available in viewport.
Signed-off-by: Godly T.Alias <godlytalias@yahoo.co.in>
Test Plan: Elementary Test -> Genlist -> Double click on items to enable/disable pinning
Reviewers: raster, cedric, prince.dubey, SanghyeonLee
Subscribers: rajeshps, jpeg, shilpasingh
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D5340
2017-11-01 00:11:30 -07:00
Elm_Object_Item * it = event_info ;
if ( ! elm_genlist_item_pin_get ( it ) )
elm_genlist_item_pin_set ( it , EINA_TRUE ) ;
else
elm_genlist_item_pin_set ( it , EINA_FALSE ) ;
2010-02-10 07:11:16 -08:00
}
2014-12-29 07:35:24 -08:00
static void
_gl_right_clicked ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
printf ( " right clicked: %p \n " , event_info ) ;
}
2010-03-27 18:44:56 -07:00
static void
2013-08-31 18:18:03 -07:00
_gl_longpress ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2010-03-27 18:44:56 -07:00
{
2012-07-31 13:07:09 -07:00
printf ( " longpress %p \n " , event_info ) ;
2010-03-27 18:44:56 -07:00
}
2015-07-29 13:20:40 -07:00
static void
2015-10-19 20:18:59 -07:00
_gl_changed ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2015-07-29 13:20:40 -07:00
{
2015-10-19 20:18:59 -07:00
// printf("changed %p\n", event_info);
2015-07-29 13:20:40 -07:00
}
2012-02-23 05:58:32 -08:00
static void
2013-08-31 18:18:03 -07:00
_cleanup_cb ( void * data , Evas * e EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-02-23 05:58:32 -08:00
{
2015-09-23 04:50:05 -07:00
api_data * api = ( api_data * ) data ;
if ( api - > filter_data ) free ( api - > filter_data ) ;
free ( api ) ;
2012-02-23 05:58:32 -08:00
}
2015-10-19 20:18:59 -07:00
typedef struct
{
Evas_Object * gl ;
Elm_Object_Item * it1 , * it2 ;
int state ;
} Bounce ;
2016-11-12 03:07:24 -08:00
# ifdef CLOCK_PROCESS_CPUTIME_ID
static unsigned long long frames = 0 ;
static void
_bounce_cb_frame ( void * data EINA_UNUSED , Evas * e EINA_UNUSED , void * event_info EINA_UNUSED )
{
frames + + ;
}
# endif
2015-10-19 20:18:59 -07:00
static Eina_Bool
_bounce_cb ( void * data )
{
Bounce * bounce = data ;
bounce - > state + + ;
2015-10-19 22:05:05 -07:00
if ( bounce - > state & 0x1 )
2015-10-19 20:18:59 -07:00
elm_genlist_item_bring_in ( bounce - > it2 , ELM_GENLIST_ITEM_SCROLLTO_MIDDLE ) ;
else
elm_genlist_item_bring_in ( bounce - > it1 , ELM_GENLIST_ITEM_SCROLLTO_MIDDLE ) ;
2016-11-12 03:07:24 -08:00
# ifdef CLOCK_PROCESS_CPUTIME_ID
static struct timespec t0 ;
if ( bounce - > state = = 2 )
{
evas_event_callback_add ( evas_object_evas_get ( bounce - > gl ) ,
EVAS_CALLBACK_RENDER_FLUSH_POST ,
_bounce_cb_frame , NULL ) ;
clock_gettime ( CLOCK_PROCESS_CPUTIME_ID , & t0 ) ;
}
# endif
2016-02-01 16:02:56 -08:00
if ( bounce - > state > bounce_max )
2015-10-19 22:05:05 -07:00
{
2016-11-12 03:07:24 -08:00
# ifdef CLOCK_PROCESS_CPUTIME_ID
struct timespec t ;
unsigned long long tll , t0ll , tdll ;
clock_gettime ( CLOCK_PROCESS_CPUTIME_ID , & t ) ;
2018-01-16 00:48:16 -08:00
t0ll = ( ( ( unsigned long long ) t0 . tv_sec ) * 1000000000ULL ) + t0 . tv_nsec ;
tll = ( ( ( unsigned long long ) t . tv_sec ) * 1000000000ULL ) + t . tv_nsec ;
2016-11-12 03:07:24 -08:00
tdll = tll - t0ll ;
printf ( " NS since 2 = %llu , %llu frames = %llu / frame \n " ,
2018-01-16 00:48:16 -08:00
tdll , frames , tdll / frames ) ;
2016-11-12 03:07:24 -08:00
# endif
2015-10-19 22:05:05 -07:00
if ( getenv ( " ELM_TEST_AUTOBOUNCE " ) ) elm_exit ( ) ;
}
2015-10-19 20:18:59 -07:00
return EINA_TRUE ;
}
static void
_btbounce_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
{
Ecore_Timer * tim = evas_object_data_get ( obj , " timer " ) ;
if ( ! tim )
{
_bounce_cb ( data ) ;
tim = ecore_timer_add ( 0.5 , _bounce_cb , data ) ;
evas_object_data_set ( obj , " timer " , tim ) ;
}
}
static void
_btdel_cb ( void * data , Evas * e EINA_UNUSED , Evas_Object * obj , void * event_info EINA_UNUSED )
{
Bounce * bounce = data ;
Ecore_Timer * tim = evas_object_data_get ( obj , " timer " ) ;
if ( tim )
{
ecore_timer_del ( tim ) ;
evas_object_data_del ( obj , " timer " ) ;
}
free ( bounce ) ;
}
2009-08-13 15:41:43 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2012-02-23 05:58:32 -08:00
Evas_Object * win , * gl , * bt_50 , * bt_1500 , * bx , * bxx , * bt ;
2009-09-22 20:22:07 -07:00
Evas_Object * over ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli ;
2015-10-19 20:18:59 -07:00
int i , max ;
Bounce * bounce ;
2012-02-23 05:58:32 -08:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2009-08-13 15:41:43 -07:00
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist " , " Genlist " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2015-10-19 20:18:59 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_DEL , _cleanup_cb , api ) ;
2012-02-23 05:58:32 -08:00
bxx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bxx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2012-11-14 02:49:45 -08:00
elm_win_resize_object_add ( win , bxx ) ;
2012-02-23 05:58:32 -08:00
evas_object_show ( bxx ) ;
2009-08-13 15:41:43 -07:00
2009-10-10 08:59:55 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2012-02-23 05:58:32 -08:00
evas_object_size_hint_align_set ( bx , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
api - > box = bx ;
2009-10-10 08:59:55 -07:00
evas_object_show ( bx ) ;
2012-02-23 05:58:32 -08:00
bt = elm_button_add ( win ) ;
elm_object_text_set ( bt , " Next API function " ) ;
evas_object_smart_callback_add ( bt , " clicked " , _api_bt_clicked , ( void * ) api ) ;
elm_box_pack_end ( bxx , bt ) ;
elm_object_disabled_set ( bt , api - > state = = API_STATE_LAST ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bxx , bx ) ;
2009-08-13 15:41:43 -07:00
gl = elm_genlist_add ( win ) ;
2010-02-10 07:11:16 -08:00
evas_object_smart_callback_add ( gl , " selected " , _gl_selected , NULL ) ;
2011-04-12 10:29:59 -07:00
evas_object_smart_callback_add ( gl , " clicked,double " , _gl_double_clicked , NULL ) ;
2014-12-29 07:35:24 -08:00
evas_object_smart_callback_add ( gl , " clicked,right " , _gl_right_clicked , NULL ) ;
2010-03-27 18:44:56 -07:00
evas_object_smart_callback_add ( gl , " longpressed " , _gl_longpress , NULL ) ;
2015-07-29 13:20:40 -07:00
evas_object_smart_callback_add ( gl , " changed " , _gl_changed , NULL ) ;
2009-11-25 13:14:37 -08:00
// FIXME: This causes genlist to resize the horiz axis very slowly :(
// Reenable this and resize the window horizontally, then try to resize it back
2012-01-27 03:59:22 -08:00
//elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-10-10 08:59:55 -07:00
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
2009-08-13 15:41:43 -07:00
evas_object_show ( gl ) ;
2009-10-10 08:59:55 -07:00
2009-09-22 20:22:07 -07:00
over = evas_object_rectangle_add ( evas_object_evas_get ( win ) ) ;
evas_object_color_set ( over , 0 , 0 , 0 , 0 ) ;
evas_object_event_callback_add ( over , EVAS_CALLBACK_MOUSE_MOVE , _move , gl ) ;
2014-01-06 23:48:58 -08:00
evas_object_repeat_events_set ( over , EINA_TRUE ) ;
2009-09-22 20:22:07 -07:00
evas_object_show ( over ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( over , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-09-22 20:22:07 -07:00
elm_win_resize_object_add ( win , over ) ;
2009-10-10 08:59:55 -07:00
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
2014-09-05 09:47:45 -07:00
api - > itc1 - > func . text_get = gl_text_get1 ;
2016-02-12 11:14:13 -08:00
api - > itc1 - > func . content_get = NULL ; // gl_content_get;
2014-08-27 11:50:43 -07:00
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2016-02-12 11:14:13 -08:00
// use content_reuse function for reusing
// repeated content objects instead of content_get
api - > itc1 - > func . reusable_content_get = gl_reusable_content_get ;
2009-08-13 15:41:43 -07:00
2009-10-10 08:59:55 -07:00
bt_50 = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt_50 , " Go to 50 " ) ;
2009-10-10 08:59:55 -07:00
evas_object_show ( bt_50 ) ;
elm_box_pack_end ( bx , bt_50 ) ;
bt_1500 = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt_1500 , " Go to 1500 " ) ;
2009-10-10 08:59:55 -07:00
evas_object_show ( bt_1500 ) ;
elm_box_pack_end ( bx , bt_1500 ) ;
2015-10-19 20:18:59 -07:00
bounce = calloc ( 1 , sizeof ( Bounce ) ) ;
bt = elm_button_add ( win ) ;
elm_object_text_set ( bt , " Bounce " ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bt ) ;
bounce - > gl = gl ;
evas_object_smart_callback_add ( bt , " clicked " , _btbounce_cb , bounce ) ;
evas_object_event_callback_add ( bt , EVAS_CALLBACK_DEL , _btdel_cb , bounce ) ;
max = 2000 ;
2016-02-01 16:02:56 -08:00
if ( getenv ( " ELM_TEST_AUTOBOUNCE " ) )
{
max = 200 ;
bounce_max = atoi ( getenv ( " ELM_TEST_AUTOBOUNCE " ) ) ;
}
2015-10-19 20:18:59 -07:00
for ( i = 0 ; i < max ; i + + )
2009-08-13 15:41:43 -07:00
{
2015-12-24 10:34:26 -08:00
gli = elm_genlist_item_append ( gl , api - > itc1 ,
( void * ) ( uintptr_t ) i /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2014-09-05 09:47:45 -07:00
2010-02-10 07:11:16 -08:00
if ( i = = 50 )
2011-06-14 21:58:14 -07:00
evas_object_smart_callback_add ( bt_50 , " clicked " , _bt50_cb , gli ) ;
2010-02-10 07:11:16 -08:00
else if ( i = = 1500 )
2011-06-14 21:58:14 -07:00
evas_object_smart_callback_add ( bt_1500 , " clicked " , _bt1500_cb , gli ) ;
2015-10-19 20:18:59 -07:00
if ( i = = 100 ) bounce - > it1 = gli ;
if ( i = = 120 ) bounce - > it2 = gli ;
2009-08-13 15:41:43 -07:00
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2012-02-20 00:26:17 -08:00
2015-10-19 20:18:59 -07:00
evas_object_resize ( win , 480 , 400 ) ;
2015-08-26 17:47:53 -07:00
explode_win_enable ( win ) ;
2009-08-13 15:41:43 -07:00
evas_object_show ( win ) ;
2015-10-19 20:18:59 -07:00
if ( max = = 200 ) _btbounce_cb ( bounce , bt , NULL ) ;
2009-08-13 15:41:43 -07:00
}
2015-09-01 10:34:43 -07:00
/*** Genlist 2 *************************************************************/
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_clear ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-09-05 09:33:22 -07:00
elm_genlist_clear ( data ) ;
2009-08-13 15:41:43 -07:00
}
2014-09-05 09:47:45 -07:00
static char *
gl_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
{
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " Item # %i " , ( int ) ( uintptr_t ) data ) ;
return strdup ( buf ) ;
}
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_add ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2009-08-13 15:41:43 -07:00
static int i = 0 ;
2014-08-27 11:50:43 -07:00
if ( ! api - > itc1 )
2013-05-08 04:50:05 -07:00
{
ERR ( " Genlist item class should not be null. Something very bad is happening!! " ) ;
return ;
}
2014-08-27 11:50:43 -07:00
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-13 15:41:43 -07:00
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2010-10-14 07:10:33 -07:00
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2009-08-13 15:41:43 -07:00
i + + ;
}
2009-08-20 10:49:04 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_insert_before ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-20 10:49:04 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2009-08-20 10:49:04 -07:00
static int i = 0 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli_selected ;
2009-08-20 10:49:04 -07:00
2014-08-27 11:50:43 -07:00
if ( ! api - > itc1 )
2013-05-08 04:50:05 -07:00
{
ERR ( " Genlist item class should not be null. Something very bad is happening!! " ) ;
return ;
}
2014-08-27 11:50:43 -07:00
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-20 10:49:04 -07:00
gli_selected = elm_genlist_selected_item_get ( gl ) ;
2012-01-10 19:16:50 -08:00
if ( ! gli_selected )
2011-02-21 07:46:23 -08:00
{
2012-07-31 13:07:09 -07:00
printf ( " no item selected \n " ) ;
2011-02-21 07:46:23 -08:00
return ;
}
2009-08-20 10:49:04 -07:00
2014-08-27 11:50:43 -07:00
elm_genlist_item_insert_before ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2011-01-04 22:03:43 -08:00
NULL /* parent */ ,
2010-10-14 07:10:33 -07:00
gli_selected /* item before */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2009-08-20 10:49:04 -07:00
i + + ;
}
static void
2013-08-31 18:18:03 -07:00
my_gl_insert_after ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-20 10:49:04 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2009-08-20 10:49:04 -07:00
static int i = 0 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli_selected ;
2009-08-20 10:49:04 -07:00
2014-08-27 11:50:43 -07:00
if ( ! api - > itc1 )
2013-05-08 04:50:05 -07:00
{
ERR ( " Genlist item class should not be null. Something very bad is happening!! " ) ;
return ;
}
2014-08-27 11:50:43 -07:00
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-20 10:49:04 -07:00
gli_selected = elm_genlist_selected_item_get ( gl ) ;
2012-01-10 19:16:50 -08:00
if ( ! gli_selected )
2011-02-21 07:46:23 -08:00
{
2012-07-31 13:07:09 -07:00
printf ( " no item selected \n " ) ;
2011-02-21 07:46:23 -08:00
return ;
}
2009-08-20 10:49:04 -07:00
2014-08-27 11:50:43 -07:00
elm_genlist_item_insert_after ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2011-01-04 22:03:43 -08:00
NULL /* parent */ ,
2010-10-14 07:10:33 -07:00
gli_selected /* item after */ ,
ELM_GENLIST_ITEM_NONE ,
2011-02-21 07:46:23 -08:00
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2009-08-20 10:49:04 -07:00
i + + ;
}
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_del ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli = elm_genlist_selected_item_get ( gl ) ;
2009-08-13 15:41:43 -07:00
if ( ! gli )
{
2012-07-31 13:07:09 -07:00
printf ( " no item selected \n " ) ;
2011-02-21 07:46:23 -08:00
return ;
2009-08-13 15:41:43 -07:00
}
2012-01-27 03:59:22 -08:00
elm_object_item_del ( gli ) ;
2009-08-13 15:41:43 -07:00
}
static void
2013-08-31 18:18:03 -07:00
my_gl_disable ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli = elm_genlist_selected_item_get ( gl ) ;
2009-08-13 15:41:43 -07:00
if ( ! gli )
{
2012-07-31 13:07:09 -07:00
printf ( " no item selected \n " ) ;
2011-02-21 07:46:23 -08:00
return ;
2009-08-13 15:41:43 -07:00
}
2012-01-26 23:36:36 -08:00
elm_object_item_disabled_set ( gli , EINA_TRUE ) ;
elm_genlist_item_selected_set ( gli , EINA_FALSE ) ;
2009-08-13 15:41:43 -07:00
elm_genlist_item_update ( gli ) ;
}
static void
2013-08-31 18:18:03 -07:00
my_gl_update_all ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2009-08-13 15:41:43 -07:00
int i = 0 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * it = elm_genlist_first_item_get ( gl ) ;
2009-08-13 15:41:43 -07:00
while ( it )
{
2011-02-21 07:46:23 -08:00
elm_genlist_item_update ( it ) ;
2012-07-31 13:07:09 -07:00
INF ( " %i " , i ) ;
2011-02-21 07:46:23 -08:00
i + + ;
2011-11-30 06:19:29 -08:00
it = elm_genlist_item_next_get ( it ) ;
2009-08-13 15:41:43 -07:00
}
}
static void
2013-08-31 18:18:03 -07:00
my_gl_first ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli = elm_genlist_first_item_get ( gl ) ;
2009-08-13 15:41:43 -07:00
if ( ! gli ) return ;
2012-03-07 00:29:32 -08:00
elm_genlist_item_show ( gli , ELM_GENLIST_ITEM_SCROLLTO_IN ) ;
2011-11-30 06:19:29 -08:00
elm_genlist_item_selected_set ( gli , 1 ) ;
2009-08-13 15:41:43 -07:00
}
static void
2013-08-31 18:18:03 -07:00
my_gl_last ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli = elm_genlist_last_item_get ( gl ) ;
2009-08-13 15:41:43 -07:00
if ( ! gli ) return ;
2012-03-07 00:29:32 -08:00
elm_genlist_item_show ( gli , ELM_GENLIST_ITEM_SCROLLTO_IN ) ;
2011-11-30 06:19:29 -08:00
elm_genlist_item_selected_set ( gli , 1 ) ;
2009-08-13 15:41:43 -07:00
}
2010-06-25 15:28:06 -07:00
static Eina_Bool
2013-08-31 18:18:03 -07:00
my_gl_flush_delay ( void * data EINA_UNUSED )
2010-04-12 01:27:10 -07:00
{
2012-02-16 21:12:56 -08:00
elm_cache_all_flush ( ) ;
2010-06-25 15:28:06 -07:00
return ECORE_CALLBACK_CANCEL ;
2010-04-12 01:27:10 -07:00
}
2010-04-04 21:58:43 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_flush ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2010-04-04 21:58:43 -07:00
{
2010-04-12 01:27:10 -07:00
ecore_timer_add ( 1.2 , my_gl_flush_delay , NULL ) ;
2010-04-04 21:58:43 -07:00
}
2013-05-08 04:50:05 -07:00
static void
2013-08-31 18:18:03 -07:00
_genlist_del_cb ( void * data , Evas * evas EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2013-05-08 04:50:05 -07:00
{
if ( ! data ) return ;
elm_genlist_item_class_free ( data ) ;
}
2009-08-13 15:41:43 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist2 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2009-08-20 10:49:04 -07:00
Evas_Object * win , * bg , * gl , * bx , * bx2 , * bx3 , * bt ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli [ 10 ] ;
2009-08-13 15:41:43 -07:00
char buf [ PATH_MAX ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2011-02-21 07:33:40 -08:00
win = elm_win_add ( NULL , " genlist2 " , ELM_WIN_BASIC ) ;
2009-08-13 15:41:43 -07:00
elm_win_title_set ( win , " Genlist 2 " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2009-08-13 15:41:43 -07:00
bg = elm_bg_add ( win ) ;
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/plant_01.jpg " , elm_app_data_dir_get ( ) ) ;
2009-08-13 15:41:43 -07:00
elm_bg_file_set ( bg , buf , NULL ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bg , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2012-11-14 02:49:45 -08:00
elm_win_resize_object_add ( win , bg ) ;
2009-08-13 15:41:43 -07:00
evas_object_show ( bg ) ;
bx = elm_box_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-08-13 15:41:43 -07:00
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
2012-08-12 00:23:51 -07:00
elm_genlist_mode_set ( gl , ELM_LIST_COMPRESS ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
Genlist Item Pin Feature
Summary:
**@feature** T6241
This feature enables genlist to pin an item to viewport which will
be available always for user to view/select.
**Use Case**:
In a big list of music, most times when user finds a song which they
like, before playing that they may want to go through the entire list
to check whether there is some other good songs, but
after seeing the entire list user have to again scroll back to the
position of item which they liked to play it then.
In this case item pinning can be used, so that the item
which they want to keep for future selection can be pinned
and then it will remain in viewport, finally when user want to do
operation on item, it will be readily available in viewport.
Signed-off-by: Godly T.Alias <godlytalias@yahoo.co.in>
Test Plan: Elementary Test -> Genlist -> Double click on items to enable/disable pinning
Reviewers: raster, cedric, prince.dubey, SanghyeonLee
Subscribers: rajeshps, jpeg, shilpasingh
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D5340
2017-11-01 00:11:30 -07:00
evas_object_smart_callback_add ( gl , " clicked,double " , _gl_double_clicked , NULL ) ;
2009-08-13 15:41:43 -07:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-13 15:41:43 -07:00
2014-08-27 11:50:43 -07:00
gli [ 0 ] = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1001 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
( void * ) 1001 /* func data */ ) ;
2014-08-27 11:50:43 -07:00
gli [ 1 ] = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1002 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
( void * ) 1002 /* func data */ ) ;
2014-08-27 11:50:43 -07:00
gli [ 2 ] = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1003 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
( void * ) 1003 /* func data */ ) ;
2014-08-27 11:50:43 -07:00
gli [ 3 ] = elm_genlist_item_prepend ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1004 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
( void * ) 1004 /* func data */ ) ;
2014-08-27 11:50:43 -07:00
gli [ 4 ] = elm_genlist_item_prepend ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1005 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
( void * ) 1005 /* func data */ ) ;
2014-08-27 11:50:43 -07:00
gli [ 5 ] = elm_genlist_item_insert_before ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1006 /* item data */ , NULL /* parent */ , gli [ 2 ] /* rel */ , ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ , ( void * ) 1006 /* func data */ ) ;
2014-08-27 11:50:43 -07:00
gli [ 6 ] = elm_genlist_item_insert_after ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 1007 /* item data */ , NULL /* parent */ , gli [ 2 ] /* rel */ , ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ , ( void * ) 1007 /* func data */ ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx , gl ) ;
bx2 = elm_box_add ( win ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2009-08-13 15:41:43 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " / \\ " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_first , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " \\ / " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_last , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " # " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_disable , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " U " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update_all , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
bx2 = elm_box_add ( win ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2009-08-13 15:41:43 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " X " ) ;
2014-09-05 09:33:22 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_clear , gl ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " + " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_add , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " - " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_del , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
2009-08-20 10:49:04 -07:00
bx3 = elm_box_add ( win ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx3 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx3 , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx3 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx3 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2009-08-20 10:49:04 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " + before " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_insert_before , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-20 10:49:04 -07:00
elm_box_pack_end ( bx3 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " + after " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_insert_after , api ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-20 10:49:04 -07:00
elm_box_pack_end ( bx3 , bt ) ;
evas_object_show ( bt ) ;
2010-04-04 21:58:43 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " Flush " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_flush , api ) ;
2010-04-04 21:58:43 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
elm_box_pack_end ( bx3 , bt ) ;
evas_object_show ( bt ) ;
2009-08-20 10:49:04 -07:00
elm_box_pack_end ( bx , bx3 ) ;
evas_object_show ( bx3 ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( gl , EVAS_CALLBACK_DEL , _genlist_del_cb , api - > itc1 ) ;
2009-08-13 15:41:43 -07:00
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2015-09-01 10:34:43 -07:00
/*** Genlist 3 *************************************************************/
char *
gl2_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2009-12-19 05:55:08 -08:00
const Testitem * tit = data ;
2009-08-13 15:41:43 -07:00
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " Item mode %i " , tit - > mode ) ;
return strdup ( buf ) ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Evas_Object *
gl2_content_get ( void * data , Evas_Object * obj , const char * part )
2009-08-13 15:41:43 -07:00
{
2009-12-19 05:55:08 -08:00
const Testitem * tit = data ;
2009-08-13 15:41:43 -07:00
char buf [ PATH_MAX ] ;
Evas_Object * ic = elm_icon_add ( obj ) ;
if ( ! strcmp ( part , " elm.swallow.icon " ) )
{
2011-02-21 07:46:23 -08:00
if ( ! ( tit - > mode & 0x3 ) )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
2011-02-21 07:46:23 -08:00
else if ( ( tit - > mode & 0x3 ) = = 1 )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/logo.png " , elm_app_data_dir_get ( ) ) ;
2011-02-21 07:46:23 -08:00
else if ( ( tit - > mode & 0x3 ) = = 2 )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/panel_01.jpg " , elm_app_data_dir_get ( ) ) ;
2011-02-21 07:46:23 -08:00
else if ( ( tit - > mode & 0x3 ) = = 3 )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/rock_01.jpg " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2009-08-13 15:41:43 -07:00
}
else if ( ! strcmp ( part , " elm.swallow.end " ) )
{
2011-02-21 07:46:23 -08:00
if ( ! ( tit - > mode & 0x3 ) )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/sky_01.jpg " , elm_app_data_dir_get ( ) ) ;
2011-02-21 07:46:23 -08:00
else if ( ( tit - > mode & 0x3 ) = = 1 )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/sky_02.jpg " , elm_app_data_dir_get ( ) ) ;
2011-02-21 07:46:23 -08:00
else if ( ( tit - > mode & 0x3 ) = = 2 )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/sky_03.jpg " , elm_app_data_dir_get ( ) ) ;
2011-02-21 07:46:23 -08:00
else if ( ( tit - > mode & 0x3 ) = = 3 )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/sky_04.jpg " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2009-08-13 15:41:43 -07:00
}
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return ic ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Eina_Bool
gl2_state_get ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
return EINA_FALSE ;
}
static void
2013-08-31 18:18:03 -07:00
my_gl_update ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
Testitem * tit = data ;
tit - > mode + + ;
elm_genlist_item_update ( tit - > item ) ;
}
2011-11-29 06:03:14 -08:00
static void
2013-08-31 18:18:03 -07:00
my_gl_labels_update ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-11-29 06:03:14 -08:00
{
Testitem * tit = data ;
tit - > mode + + ;
2012-02-28 22:52:05 -08:00
elm_genlist_item_fields_update ( tit - > item , " * " , ELM_GENLIST_ITEM_FIELD_TEXT ) ;
2011-11-29 06:03:14 -08:00
}
static void
2013-08-31 18:18:03 -07:00
my_gl_contents_update ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-11-29 06:03:14 -08:00
{
Testitem * tit = data ;
tit - > mode + + ;
elm_genlist_item_fields_update ( tit - > item , " * " , ELM_GENLIST_ITEM_FIELD_CONTENT ) ;
}
2009-08-13 15:41:43 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist3 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * gl , * bx , * bx2 , * bt ;
2009-08-13 15:41:43 -07:00
static Testitem tit [ 3 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist3 " , " Genlist 3 " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2009-08-13 15:41:43 -07:00
bx = elm_box_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-08-13 15:41:43 -07:00
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-08-13 15:41:43 -07:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl2_text_get ;
api - > itc1 - > func . content_get = gl2_content_get ;
api - > itc1 - > func . state_get = gl2_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-13 15:41:43 -07:00
tit [ 0 ] . mode = 0 ;
2014-08-27 11:50:43 -07:00
tit [ 0 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
& ( tit [ 0 ] ) /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
tit [ 1 ] . mode = 1 ;
2014-08-27 11:50:43 -07:00
tit [ 1 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
& ( tit [ 1 ] ) /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
tit [ 2 ] . mode = 2 ;
2014-08-27 11:50:43 -07:00
tit [ 2 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
& ( tit [ 2 ] ) /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx , gl ) ;
2010-03-01 17:27:08 -08:00
evas_object_show ( bx ) ;
2009-08-13 15:41:43 -07:00
bx2 = elm_box_add ( win ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2009-08-13 15:41:43 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [1] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 0 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-11-29 06:03:14 -08:00
elm_object_text_set ( bt , " labels " ) ;
evas_object_smart_callback_add ( bt , " clicked " , my_gl_labels_update , & ( tit [ 1 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-11-29 06:03:14 -08:00
elm_object_text_set ( bt , " contents " ) ;
evas_object_smart_callback_add ( bt , " clicked " , my_gl_contents_update , & ( tit [ 2 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2009-08-13 15:41:43 -07:00
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2015-09-01 10:34:43 -07:00
/*** Genlist 4 *************************************************************/
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_item_check_changed ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
Testitem * tit = data ;
tit - > onoff = elm_check_state_get ( obj ) ;
2012-07-31 13:07:09 -07:00
printf ( " item %p onoff = %i \n " , tit , tit - > onoff ) ;
2009-08-13 15:41:43 -07:00
}
2015-09-01 10:34:43 -07:00
char *
gl3_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2009-12-19 05:55:08 -08:00
const Testitem * tit = data ;
2009-08-13 15:41:43 -07:00
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " Item mode %i " , tit - > mode ) ;
return strdup ( buf ) ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Evas_Object *
gl3_content_get ( void * data , Evas_Object * obj , const char * part )
2009-08-13 15:41:43 -07:00
{
2009-12-19 05:55:08 -08:00
const Testitem * tit = data ;
2009-08-13 15:41:43 -07:00
if ( ! strcmp ( part , " elm.swallow.icon " ) )
{
2010-02-01 08:46:26 -08:00
Evas_Object * lb ;
2011-02-21 07:46:23 -08:00
2010-02-01 08:46:26 -08:00
lb = elm_label_add ( obj ) ;
2011-09-29 20:44:46 -07:00
elm_label_line_wrap_set ( lb , ELM_WRAP_CHAR ) ;
2010-02-01 08:46:26 -08:00
elm_label_wrap_width_set ( lb , 201 ) ;
2011-06-28 23:41:31 -07:00
elm_object_text_set ( lb , " ashj ascjscjh n asjkl hcjlh ls hzshnn zjh sh zxjcjsnd h dfw sdv edev efe fwefvv vsd cvs ws wf fvwf wd fwe f we wef we wfe rfwewef wfv wswf wefg sdfws w wsdcfwcf wsc vdv sdsd sdcd cv wsc sdcv wsc d sdcdcsd sdcdsc wdvd sdcsd wscxcv wssvd sd " ) ;
2010-02-01 08:46:26 -08:00
return lb ;
2009-08-13 15:41:43 -07:00
}
else if ( ! strcmp ( part , " elm.swallow.end " ) )
{
2011-02-21 07:46:23 -08:00
Evas_Object * ck ;
ck = elm_check_add ( obj ) ;
2011-06-08 09:58:08 -07:00
evas_object_propagate_events_set ( ck , EINA_FALSE ) ;
2011-02-21 07:46:23 -08:00
elm_check_state_set ( ck , tit - > onoff ) ;
evas_object_smart_callback_add ( ck , " changed " , my_gl_item_check_changed , data ) ;
return ck ;
2009-08-13 15:41:43 -07:00
}
return NULL ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Eina_Bool
gl3_state_get ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
return EINA_FALSE ;
}
2015-09-01 10:34:43 -07:00
static void
_realized ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * ei )
2013-02-07 05:26:37 -08:00
{
2013-05-08 04:50:29 -07:00
Evas_Object * check ;
Eina_List * items ;
items = NULL ;
2013-02-07 05:26:37 -08:00
2013-05-08 04:50:29 -07:00
if ( ! ei ) return ;
Elm_Object_Item * item = ei ;
2013-02-07 05:26:37 -08:00
2013-05-08 04:50:29 -07:00
check = elm_object_item_part_content_get ( item , " elm.swallow.end " ) ;
2013-02-07 05:26:37 -08:00
2013-05-08 04:50:29 -07:00
if ( ! check ) return ;
2013-02-07 05:26:37 -08:00
2013-05-08 04:50:29 -07:00
items = eina_list_append ( items , check ) ;
elm_object_item_access_order_set ( item , items ) ;
2013-02-07 05:26:37 -08:00
}
2009-08-13 15:41:43 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist4 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * gl , * bx , * bx2 , * bt ;
2009-08-13 15:41:43 -07:00
static Testitem tit [ 3 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist4 " , " Genlist 4 " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2009-08-13 15:41:43 -07:00
bx = elm_box_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-08-13 15:41:43 -07:00
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
2012-03-07 08:07:34 -08:00
elm_genlist_mode_set ( gl , ELM_LIST_COMPRESS ) ;
2014-01-06 23:48:58 -08:00
elm_genlist_multi_select_set ( gl , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2009-08-13 15:41:43 -07:00
evas_object_show ( gl ) ;
2013-02-07 05:26:37 -08:00
evas_object_smart_callback_add ( gl , " realized " , _realized , NULL ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl3_text_get ;
api - > itc1 - > func . content_get = gl3_content_get ;
api - > itc1 - > func . state_get = gl3_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-13 15:41:43 -07:00
tit [ 0 ] . mode = 0 ;
2014-08-27 11:50:43 -07:00
tit [ 0 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2015-09-01 10:34:43 -07:00
& ( tit [ 0 ] ) /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
tit [ 1 ] . mode = 1 ;
2014-08-27 11:50:43 -07:00
tit [ 1 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2015-09-01 10:34:43 -07:00
& ( tit [ 1 ] ) /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
tit [ 2 ] . mode = 2 ;
2014-08-27 11:50:43 -07:00
tit [ 2 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2015-09-01 10:34:43 -07:00
& ( tit [ 2 ] ) /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx , gl ) ;
2010-03-01 17:27:08 -08:00
evas_object_show ( bx ) ;
2009-08-13 15:41:43 -07:00
bx2 = elm_box_add ( win ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2009-08-13 15:41:43 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [1] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 0 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [2] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 1 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [3] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 2 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2012-06-15 00:58:05 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist 5 *************************************************************/
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
my_gl_item_check_changed2 ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
Testitem * tit = data ;
tit - > onoff = elm_check_state_get ( obj ) ;
2012-07-31 13:07:09 -07:00
printf ( " item %p onoff = %i \n " , tit , tit - > onoff ) ;
2009-08-13 15:41:43 -07:00
}
2015-09-01 10:34:43 -07:00
char *
gl5_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part )
2009-08-13 15:41:43 -07:00
{
2009-12-19 05:55:08 -08:00
const Testitem * tit = data ;
2014-04-12 09:40:27 -07:00
char buf [ 256 ] = { 0 } ;
2009-08-13 15:41:43 -07:00
if ( ! strcmp ( part , " elm.text " ) )
{
2011-02-21 07:46:23 -08:00
snprintf ( buf , sizeof ( buf ) , " Item mode %i " , tit - > mode ) ;
2009-08-13 15:41:43 -07:00
}
else if ( ! strcmp ( part , " elm.text.sub " ) )
{
2011-02-21 07:46:23 -08:00
snprintf ( buf , sizeof ( buf ) , " %i bottles on the wall " , tit - > mode ) ;
2009-08-13 15:41:43 -07:00
}
return strdup ( buf ) ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Evas_Object *
gl5_content_get ( void * data , Evas_Object * obj , const char * part )
2009-08-13 15:41:43 -07:00
{
2009-12-19 05:55:08 -08:00
const Testitem * tit = data ;
2009-08-13 15:41:43 -07:00
char buf [ PATH_MAX ] ;
if ( ! strcmp ( part , " elm.swallow.icon " ) )
{
2011-02-21 07:46:23 -08:00
Evas_Object * bx = elm_box_add ( obj ) ;
Evas_Object * ic ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx , EINA_TRUE ) ;
2011-02-21 07:46:23 -08:00
ic = elm_icon_add ( obj ) ;
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2013-12-19 02:20:20 -08:00
elm_image_resizable_set ( ic , EINA_FALSE , EINA_FALSE ) ;
2011-02-21 07:46:23 -08:00
evas_object_show ( ic ) ;
elm_box_pack_end ( bx , ic ) ;
ic = elm_icon_add ( obj ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2013-12-19 02:20:20 -08:00
elm_image_resizable_set ( ic , EINA_FALSE , EINA_FALSE ) ;
2011-02-21 07:46:23 -08:00
evas_object_show ( ic ) ;
elm_box_pack_end ( bx , ic ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx , EINA_TRUE ) ;
2011-02-21 07:46:23 -08:00
evas_object_show ( bx ) ;
return bx ;
2009-08-13 15:41:43 -07:00
}
else if ( ! strcmp ( part , " elm.swallow.end " ) )
{
2011-02-21 07:46:23 -08:00
Evas_Object * ck ;
ck = elm_check_add ( obj ) ;
2011-06-08 09:58:08 -07:00
evas_object_propagate_events_set ( ck , EINA_FALSE ) ;
2011-02-21 07:46:23 -08:00
elm_check_state_set ( ck , tit - > onoff ) ;
evas_object_smart_callback_add ( ck , " changed " , my_gl_item_check_changed2 , data ) ;
evas_object_show ( ck ) ;
return ck ;
2009-08-13 15:41:43 -07:00
}
return NULL ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Eina_Bool
gl5_state_get ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
return EINA_FALSE ;
}
2009-09-07 23:35:14 -07:00
static void
2013-08-31 18:18:03 -07:00
item_drag_up ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-09-07 23:35:14 -07:00
{
2012-07-31 13:07:09 -07:00
INF ( " drag up " ) ;
2009-09-07 23:35:14 -07:00
}
static void
2013-08-31 18:18:03 -07:00
item_drag_down ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-09-07 23:35:14 -07:00
{
2012-07-31 13:07:09 -07:00
INF ( " drag down " ) ;
2009-09-07 23:35:14 -07:00
}
static void
2013-08-31 18:18:03 -07:00
item_drag_left ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-09-07 23:35:14 -07:00
{
2012-07-31 13:07:09 -07:00
INF ( " drag left " ) ;
2009-09-07 23:35:14 -07:00
}
static void
2013-08-31 18:18:03 -07:00
item_drag_right ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-09-07 23:35:14 -07:00
{
2012-07-31 13:07:09 -07:00
INF ( " drag right " ) ;
2009-09-07 23:35:14 -07:00
}
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
static void
2013-08-31 18:18:03 -07:00
scroll_top ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
{
2012-07-31 13:07:09 -07:00
INF ( " Top edge! " ) ;
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
}
static void
2013-08-31 18:18:03 -07:00
scroll_bottom ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
{
2012-07-31 13:07:09 -07:00
INF ( " Bottom edge! " ) ;
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
}
static void
2013-08-31 18:18:03 -07:00
scroll_left ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
{
2012-07-31 13:07:09 -07:00
INF ( " Left edge! " ) ;
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
}
static void
2013-08-31 18:18:03 -07:00
scroll_right ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
{
2012-07-31 13:07:09 -07:00
INF ( " Right edge! " ) ;
This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
SVN revision: 3
SVN revision: 54393
2010-11-09 18:48:59 -08:00
}
2009-09-07 23:35:14 -07:00
static void
2013-08-31 18:18:03 -07:00
item_drag ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-09-07 23:35:14 -07:00
{
2012-07-31 13:07:09 -07:00
INF ( " drag " ) ;
2009-09-07 23:35:14 -07:00
}
static void
2013-08-31 18:18:03 -07:00
item_drag_stop ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-09-07 23:35:14 -07:00
{
2012-07-31 13:07:09 -07:00
INF ( " drag stop " ) ;
2009-09-07 23:35:14 -07:00
}
2010-02-25 22:30:17 -08:00
static void
2013-08-31 18:18:03 -07:00
item_longpress ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2010-02-25 22:30:17 -08:00
{
2012-07-31 13:07:09 -07:00
INF ( " longpress " ) ;
2010-02-25 22:30:17 -08:00
}
2009-08-13 15:41:43 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist5 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * gl , * bx , * bx2 , * bt ;
2009-08-13 15:41:43 -07:00
static Testitem tit [ 3 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist5 " , " Genlist 5 " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-06-10 03:29:47 -07:00
elm_win_focus_highlight_enabled_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2009-08-13 15:41:43 -07:00
bx = elm_box_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-08-13 15:41:43 -07:00
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
2012-03-07 08:01:37 -08:00
elm_genlist_select_mode_set ( gl , ELM_OBJECT_SELECT_MODE_ALWAYS ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2009-08-13 15:41:43 -07:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " double_label " ;
api - > itc1 - > func . text_get = gl5_text_get ;
api - > itc1 - > func . content_get = gl5_content_get ;
api - > itc1 - > func . state_get = gl5_state_get ;
api - > itc1 - > func . del = NULL ;
2009-08-13 15:41:43 -07:00
tit [ 0 ] . mode = 0 ;
2014-08-27 11:50:43 -07:00
tit [ 0 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2015-09-01 10:34:43 -07:00
& ( tit [ 0 ] ) /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
tit [ 1 ] . mode = 1 ;
2014-08-27 11:50:43 -07:00
tit [ 1 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2015-09-01 10:34:43 -07:00
& ( tit [ 1 ] ) /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
tit [ 2 ] . mode = 2 ;
2014-08-27 11:50:43 -07:00
tit [ 2 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2015-09-01 10:34:43 -07:00
& ( tit [ 2 ] ) /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx , gl ) ;
2010-03-01 17:27:08 -08:00
evas_object_show ( bx ) ;
2009-10-10 08:59:55 -07:00
2009-09-07 23:35:14 -07:00
evas_object_smart_callback_add ( gl , " drag,start,up " , item_drag_up , NULL ) ;
evas_object_smart_callback_add ( gl , " drag,start,down " , item_drag_down , NULL ) ;
evas_object_smart_callback_add ( gl , " drag,start,left " , item_drag_left , NULL ) ;
evas_object_smart_callback_add ( gl , " drag,start,right " , item_drag_right , NULL ) ;
evas_object_smart_callback_add ( gl , " drag " , item_drag , NULL ) ;
evas_object_smart_callback_add ( gl , " drag,stop " , item_drag_stop , NULL ) ;
2010-02-25 22:30:17 -08:00
evas_object_smart_callback_add ( gl , " longpressed " , item_longpress , NULL ) ;
2009-08-13 15:41:43 -07:00
bx2 = elm_box_add ( win ) ;
2011-04-15 04:44:05 -07:00
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2009-08-13 15:41:43 -07:00
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [1] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 0 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [2] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 1 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt , " [3] " ) ;
2009-08-13 15:41:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_update , & ( tit [ 2 ] ) ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
2009-08-13 15:41:43 -07:00
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2009-08-13 15:41:43 -07:00
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2015-09-01 10:34:43 -07:00
/*** Genlist Tree **********************************************************/
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
gl4_sel ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2009-08-13 15:41:43 -07:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
int depth = elm_genlist_item_expanded_depth_get ( glit ) ;
2015-11-03 19:33:46 -08:00
printf ( " item sel callback %p - expanded depth = %d \n " , glit , depth ) ;
2009-08-13 15:41:43 -07:00
}
2012-02-22 01:31:37 -08:00
2009-08-13 15:41:43 -07:00
static void
2014-08-27 11:50:43 -07:00
gl4_exp ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info )
2009-08-13 15:41:43 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
2012-01-29 20:37:41 -08:00
Evas_Object * gl = elm_object_item_widget_get ( glit ) ;
2013-02-16 19:53:02 -08:00
int val = ( int ) ( uintptr_t ) elm_object_item_data_get ( glit ) ;
2012-04-27 04:08:58 -07:00
int i = 0 ;
2015-11-03 19:33:46 -08:00
printf ( " expand %p \n " , glit ) ;
2009-08-13 15:41:43 -07:00
val * = 10 ;
2015-09-01 11:08:42 -07:00
for ( i = 0 ; i < 30 ; i + + )
2012-04-27 04:08:58 -07:00
{
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc2 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( val + i ) /* item data */ ,
2012-04-27 04:08:58 -07:00
glit /* parent */ ,
ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
NULL /* func data */ ) ;
}
2009-08-13 15:41:43 -07:00
}
2012-04-27 04:08:58 -07:00
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
gl4_con ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2009-08-13 15:41:43 -07:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
2014-11-20 19:21:45 -08:00
const Eina_List * list = NULL , * l = NULL ;
Elm_Object_Item * it = NULL ;
2015-11-03 19:33:46 -08:00
printf ( " contract request %p \n " , glit ) ;
2014-11-20 19:21:45 -08:00
list = elm_genlist_item_subitems_get ( glit ) ;
EINA_LIST_FOREACH ( list , l , it )
{
printf ( " sub item: %p %s \n " , it , elm_object_item_text_get ( it ) ) ;
}
2012-01-19 21:18:31 -08:00
elm_genlist_item_subitems_clear ( glit ) ;
2009-08-13 15:41:43 -07:00
}
static void
2013-08-31 18:18:03 -07:00
gl4_exp_req ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2009-08-13 15:41:43 -07:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
2015-11-03 19:33:46 -08:00
printf ( " expand request %p \n " , glit ) ;
2012-01-19 21:18:31 -08:00
elm_genlist_item_expanded_set ( glit , EINA_TRUE ) ;
2009-08-13 15:41:43 -07:00
}
2012-02-22 01:31:37 -08:00
2009-08-13 15:41:43 -07:00
static void
2013-08-31 18:18:03 -07:00
gl4_con_req ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2009-08-13 15:41:43 -07:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
elm_genlist_item_expanded_set ( glit , EINA_FALSE ) ;
2009-08-13 15:41:43 -07:00
}
2015-11-03 19:33:46 -08:00
static void
gl4_selected ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
Elm_Object_Item * glit = event_info ;
printf ( " selected %p \n " , glit ) ;
}
static void
gl4_activated ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
Elm_Object_Item * glit = event_info ;
printf ( " activated %p \n " , glit ) ;
}
static void
gl4_unselected ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
Elm_Object_Item * glit = event_info ;
printf ( " unselected %p \n " , glit ) ;
}
static void
gl4_longpressed ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
Elm_Object_Item * glit = event_info ;
printf ( " longpressed %p \n " , glit ) ;
}
static void
gl4_pressed ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
Elm_Object_Item * glit = event_info ;
printf ( " pressed %p \n " , glit ) ;
}
static void
gl4_released ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
{
Elm_Object_Item * glit = event_info ;
printf ( " released %p \n " , glit ) ;
}
2015-09-01 10:34:43 -07:00
char *
gl4_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
char buf [ 256 ] ;
2013-02-16 19:53:02 -08:00
snprintf ( buf , sizeof ( buf ) , " Item mode %i " , ( int ) ( uintptr_t ) data ) ;
2009-08-13 15:41:43 -07:00
return strdup ( buf ) ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Evas_Object *
gl4_content_get ( void * data EINA_UNUSED , Evas_Object * obj , const char * part )
2009-08-13 15:41:43 -07:00
{
char buf [ PATH_MAX ] ;
if ( ! strcmp ( part , " elm.swallow.icon " ) )
{
2011-02-21 07:46:23 -08:00
Evas_Object * ic = elm_icon_add ( obj ) ;
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2011-02-21 07:46:23 -08:00
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
evas_object_show ( ic ) ;
return ic ;
2009-08-13 15:41:43 -07:00
}
else if ( ! strcmp ( part , " elm.swallow.end " ) )
{
2011-02-21 07:46:23 -08:00
Evas_Object * ck ;
ck = elm_check_add ( obj ) ;
2011-06-08 09:58:08 -07:00
evas_object_propagate_events_set ( ck , EINA_FALSE ) ;
2011-02-21 07:46:23 -08:00
evas_object_show ( ck ) ;
return ck ;
2009-08-13 15:41:43 -07:00
}
return NULL ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
Eina_Bool
gl4_state_get ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
return EINA_FALSE ;
}
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
void
gl4_del ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2012-07-31 13:07:09 -07:00
printf ( " item deleted. \n " ) ;
2009-08-13 15:41:43 -07:00
}
2012-04-27 04:08:58 -07:00
static void
2015-09-01 11:08:42 -07:00
_tree_effect_changed_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2012-04-27 04:08:58 -07:00
{
2015-09-01 11:08:42 -07:00
elm_genlist_tree_effect_enabled_set ( data , elm_check_state_get ( obj ) ) ;
2012-04-27 04:08:58 -07:00
}
static void
2015-09-01 11:08:42 -07:00
_tree_homogeneous_changed_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2012-04-27 04:08:58 -07:00
{
2015-09-01 11:08:42 -07:00
elm_genlist_homogeneous_set ( data , elm_check_state_get ( obj ) ) ;
2012-04-27 04:08:58 -07:00
}
2009-08-13 15:41:43 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist6 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2009-08-13 15:41:43 -07:00
{
2015-09-01 11:08:42 -07:00
Evas_Object * win , * gl , * bx , * fr , * bx2 , * ck1 , * ck2 ;
2009-08-13 15:41:43 -07:00
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-tree " , " Genlist Tree " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2009-08-13 15:41:43 -07:00
bx = elm_box_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2009-08-13 15:41:43 -07:00
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
2012-04-27 04:08:58 -07:00
fr = elm_frame_add ( win ) ;
2015-09-01 11:08:42 -07:00
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , 0.0 ) ;
elm_object_text_set ( fr , " Genlist Tree Options " ) ;
2012-04-27 04:08:58 -07:00
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
bx2 = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_content_set ( fr , bx2 ) ;
evas_object_show ( bx2 ) ;
2015-09-01 11:08:42 -07:00
ck1 = elm_check_add ( win ) ;
elm_object_text_set ( ck1 , " Tree Effect " ) ;
evas_object_show ( ck1 ) ;
elm_box_pack_end ( bx2 , ck1 ) ;
2012-04-27 04:08:58 -07:00
2015-09-01 11:08:42 -07:00
ck2 = elm_check_add ( win ) ;
elm_object_text_set ( ck2 , " Homogeneous " ) ;
evas_object_show ( ck2 ) ;
elm_box_pack_end ( bx2 , ck2 ) ;
2012-04-27 04:08:58 -07:00
2009-08-13 15:41:43 -07:00
gl = elm_genlist_add ( win ) ;
2009-09-28 12:23:33 -07:00
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2009-08-13 15:41:43 -07:00
evas_object_show ( gl ) ;
2013-04-16 22:15:19 -07:00
evas_object_smart_callback_add ( gl , " edge,left " , scroll_left , NULL ) ;
evas_object_smart_callback_add ( gl , " edge,right " , scroll_right , NULL ) ;
evas_object_smart_callback_add ( gl , " edge,top " , scroll_top , NULL ) ;
evas_object_smart_callback_add ( gl , " edge,bottom " , scroll_bottom , NULL ) ;
2012-04-27 04:08:58 -07:00
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl4_text_get ;
api - > itc1 - > func . content_get = gl4_content_get ;
api - > itc1 - > func . state_get = gl4_state_get ;
api - > itc1 - > func . del = gl4_del ;
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " tree_effect " ;
api - > itc2 - > func . text_get = gl4_text_get ;
api - > itc2 - > func . content_get = gl4_content_get ;
api - > itc2 - > func . state_get = gl4_state_get ;
api - > itc2 - > func . del = gl4_del ;
2016-08-26 08:37:26 -07:00
api - > itc = elm_genlist_item_class_new ( ) ;
api - > itc - > item_style = " indent " ;
api - > itc - > func . text_get = gl4_text_get ;
api - > itc - > func . content_get = gl4_content_get ;
api - > itc - > func . state_get = gl4_state_get ;
api - > itc - > func . del = gl4_del ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc2 ,
2015-09-01 11:08:42 -07:00
( void * ) 1 /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc2 ,
2015-09-01 11:08:42 -07:00
( void * ) 2 /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2016-08-26 08:37:26 -07:00
elm_genlist_item_append ( gl , api - > itc ,
2015-09-01 11:08:42 -07:00
( void * ) 3 /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2016-08-26 08:37:26 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
( void * ) 4 /* item data */ , NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2012-04-27 04:08:58 -07:00
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
elm_genlist_item_class_free ( api - > itc2 ) ;
2016-08-26 08:37:26 -07:00
elm_genlist_item_class_free ( api - > itc ) ;
2012-04-27 04:08:58 -07:00
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( gl , " expand,request " , gl4_exp_req , api ) ;
evas_object_smart_callback_add ( gl , " contract,request " , gl4_con_req , api ) ;
evas_object_smart_callback_add ( gl , " expanded " , gl4_exp , api ) ;
evas_object_smart_callback_add ( gl , " contracted " , gl4_con , api ) ;
2009-08-13 15:41:43 -07:00
2015-11-03 19:33:46 -08:00
evas_object_smart_callback_add ( gl , " selected " , gl4_selected , api ) ;
evas_object_smart_callback_add ( gl , " unselected " , gl4_unselected , api ) ;
evas_object_smart_callback_add ( gl , " activated " , gl4_activated , api ) ;
evas_object_smart_callback_add ( gl , " longpressed " , gl4_longpressed , api ) ;
evas_object_smart_callback_add ( gl , " pressed " , gl4_pressed , api ) ;
evas_object_smart_callback_add ( gl , " released " , gl4_released , api ) ;
2015-09-01 11:08:42 -07:00
evas_object_smart_callback_add ( ck1 , " changed " , _tree_effect_changed_cb , gl ) ;
evas_object_smart_callback_add ( ck2 , " changed " , _tree_homogeneous_changed_cb , gl ) ;
2009-08-13 15:41:43 -07:00
2015-09-01 11:08:42 -07:00
elm_box_pack_end ( bx , gl ) ;
2009-08-13 15:41:43 -07:00
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2010-10-15 04:24:46 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist 7 *************************************************************/
2010-10-15 04:24:46 -07:00
struct genlist7_data
{
2012-02-16 01:26:35 -08:00
Evas_Object * win , * naviframe ;
2010-10-15 04:24:46 -07:00
} ;
2010-11-17 09:15:28 -08:00
static void
gl_sel7 ( void * data , Evas_Object * obj , void * event_info )
{
if ( ! event_info ) return ;
2014-08-27 11:50:43 -07:00
api_data * api = data ;
elm_genlist_item_item_class_update ( event_info , api - > itc2 ) ;
printf ( " sel item data [%p] on genlist obj [%p], item pointer [%p], new item style [%s] \n " , data , obj , event_info , api - > itc2 - > item_style ) ;
2010-11-17 09:15:28 -08:00
}
2010-10-15 04:24:46 -07:00
static void
2014-04-26 21:04:26 -07:00
_gl7_back_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2010-10-15 04:24:46 -07:00
{
2011-02-21 07:46:23 -08:00
struct genlist7_data * info = data ;
if ( ! info ) return ;
2010-10-15 04:24:46 -07:00
2012-02-16 01:26:35 -08:00
elm_naviframe_item_pop ( info - > naviframe ) ;
2010-10-15 04:24:46 -07:00
}
static void
2014-04-26 21:04:26 -07:00
_gl7_swipe_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info )
2010-10-15 04:24:46 -07:00
{
struct genlist7_data * info = data ;
Evas_Object * box , * entry , * button ;
char item_data [ ] = " Just a simple test " ;
2010-10-22 14:41:22 -07:00
if ( ( ! event_info ) | | ( ! data ) ) return ;
2010-10-15 04:24:46 -07:00
box = elm_box_add ( info - > win ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( box , EINA_FALSE ) ;
2010-10-15 04:24:46 -07:00
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( box ) ;
2011-06-17 02:44:31 -07:00
entry = elm_entry_add ( info - > win ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2011-12-30 02:02:19 -08:00
elm_object_text_set ( entry , item_data ) ;
2010-10-15 04:24:46 -07:00
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( entry ) ;
button = elm_button_add ( info - > win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( button , " back " ) ;
2010-10-15 04:24:46 -07:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , 0 ) ;
2014-04-26 21:04:26 -07:00
evas_object_smart_callback_add ( button , " clicked " , _gl7_back_cb ,
2010-10-15 04:24:46 -07:00
info ) ;
evas_object_show ( button ) ;
elm_box_pack_start ( box , entry ) ;
elm_box_pack_end ( box , button ) ;
2012-02-16 01:26:35 -08:00
elm_naviframe_item_simple_push ( info - > naviframe , box ) ;
2010-10-15 04:24:46 -07:00
}
void
2013-08-31 18:18:03 -07:00
test_genlist7 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2010-10-15 04:24:46 -07:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * gl , * naviframe ;
2010-10-15 04:24:46 -07:00
static struct genlist7_data info ;
static Testitem tit [ 3 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist7 " , " Genlist 7 " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2010-10-15 04:24:46 -07:00
info . win = win ;
2012-02-16 01:26:35 -08:00
naviframe = elm_naviframe_add ( win ) ;
elm_win_resize_object_add ( win , naviframe ) ;
evas_object_size_hint_weight_set ( naviframe , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( naviframe , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( naviframe ) ;
info . naviframe = naviframe ;
2010-10-15 04:24:46 -07:00
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-04-26 21:04:26 -07:00
evas_object_smart_callback_add ( gl , " swipe " , _gl7_swipe_cb , & info ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2010-10-15 04:24:46 -07:00
evas_object_show ( gl ) ;
2012-02-16 01:26:35 -08:00
elm_naviframe_item_simple_push ( naviframe , gl ) ;
2010-10-15 04:24:46 -07:00
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl2_text_get ;
api - > itc1 - > func . content_get = gl2_content_get ;
api - > itc1 - > func . state_get = gl2_state_get ;
api - > itc1 - > func . del = NULL ;
2010-10-15 04:24:46 -07:00
2014-08-27 11:50:43 -07:00
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " double_label " ;
api - > itc2 - > func . text_get = gl5_text_get ;
api - > itc2 - > func . content_get = gl5_content_get ;
api - > itc2 - > func . state_get = gl5_state_get ;
api - > itc2 - > func . del = NULL ;
2010-11-17 09:15:28 -08:00
2010-10-15 04:24:46 -07:00
tit [ 0 ] . mode = 0 ;
2014-08-27 11:50:43 -07:00
tit [ 0 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
& ( tit [ 0 ] ) /* item data */ , NULL /* parent */ ,
2010-11-17 09:15:28 -08:00
ELM_GENLIST_ITEM_NONE , gl_sel7 /* func */ ,
2014-08-27 11:50:43 -07:00
api /* func data */ ) ;
2010-10-15 04:24:46 -07:00
tit [ 1 ] . mode = 1 ;
2014-08-27 11:50:43 -07:00
tit [ 1 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
& ( tit [ 1 ] ) /* item data */ , NULL /* parent */ ,
2010-11-17 09:15:28 -08:00
ELM_GENLIST_ITEM_NONE , gl_sel7 /* func */ ,
2014-08-27 11:50:43 -07:00
api /* func data */ ) ;
2010-10-15 04:24:46 -07:00
tit [ 2 ] . mode = 2 ;
2014-08-27 11:50:43 -07:00
tit [ 2 ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
& ( tit [ 2 ] ) /* item data */ , NULL /* parent */ ,
2010-11-17 09:15:28 -08:00
ELM_GENLIST_ITEM_NONE , gl_sel7 /* func */ ,
2014-08-27 11:50:43 -07:00
api /* func data */ ) ;
2010-10-15 04:24:46 -07:00
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2011-01-05 21:13:11 -08:00
2015-09-01 10:34:43 -07:00
/*** Genlist Group *********************************************************/
2013-08-31 18:18:03 -07:00
char * gl8_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2011-01-05 21:13:11 -08:00
{
char buf [ 256 ] ;
2014-07-09 08:30:48 -07:00
snprintf ( buf , sizeof ( buf ) , " Group Index # %i (Item # %i) " , ( int ) ( ( uintptr_t ) data / 10 ) , ( int ) ( uintptr_t ) data ) ;
2011-01-05 21:13:11 -08:00
return strdup ( buf ) ;
}
static void
2013-08-31 18:18:03 -07:00
_bt_show_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-01-05 21:13:11 -08:00
{
2012-03-07 00:38:32 -08:00
elm_genlist_item_show ( data , ELM_GENLIST_ITEM_SCROLLTO_TOP ) ;
2011-01-05 21:13:11 -08:00
}
2012-02-22 01:31:37 -08:00
2011-01-05 21:13:11 -08:00
static void
2013-08-31 18:18:03 -07:00
_bt_bring_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-01-05 21:13:11 -08:00
{
2012-03-07 00:38:32 -08:00
elm_genlist_item_bring_in ( data , ELM_GENLIST_ITEM_SCROLLTO_TOP ) ;
2011-01-05 21:13:11 -08:00
}
void
2013-08-31 18:18:03 -07:00
test_genlist8 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-01-05 21:13:11 -08:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * gl , * bt [ 8 ] , * bx , * bx2 , * bx3 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli = NULL , * git = NULL ;
2011-10-24 16:43:34 -07:00
int i , bt_num ;
2011-01-05 21:13:11 -08:00
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-group " , " Genlist Group " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2011-01-05 21:13:11 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_smart_callback_add ( gl , " selected " , _gl_selected , NULL ) ;
2011-04-12 10:29:59 -07:00
evas_object_smart_callback_add ( gl , " clicked,double " , _gl_double_clicked , NULL ) ;
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( gl , " longpressed " , _gl_longpress , NULL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2011-01-05 21:13:11 -08:00
evas_object_show ( gl ) ;
2012-06-26 20:23:48 -07:00
// Use homogeneous mode for group index + homogeneous test.
// Homogeneous is not mandatory for group index.
elm_genlist_homogeneous_set ( gl , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2011-01-05 21:13:11 -08:00
2014-08-27 11:50:43 -07:00
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " group_index " ;
api - > itc2 - > func . text_get = gl8_text_get ;
api - > itc2 - > func . content_get = NULL ;
api - > itc2 - > func . state_get = NULL ;
api - > itc2 - > func . del = NULL ;
2011-01-05 21:13:11 -08:00
bx2 = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
bt_num = 0 ;
bt [ bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Show 0 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx2 , bt [ bt_num ] ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Show 26 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx2 , bt [ bt_num ] ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Show 101 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx2 , bt [ bt_num ] ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Show 480 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx2 , bt [ bt_num ] ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
bx3 = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx3 , EINA_TRUE ) ;
2011-05-03 21:53:39 -07:00
elm_box_homogeneous_set ( bx3 , EINA_TRUE ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_weight_set ( bx3 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx3 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Bring top 0 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx3 , bt [ bt_num ] ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Bring top 31 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx3 , bt [ bt_num ] ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Bring top 239 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx3 , bt [ bt_num ] ) ;
bt [ + + bt_num ] = elm_button_add ( win ) ;
2011-06-29 00:11:54 -07:00
elm_object_text_set ( bt [ bt_num ] , " Bring top 477 " ) ;
2011-01-05 21:13:11 -08:00
evas_object_size_hint_align_set ( bt [ bt_num ] , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt [ bt_num ] , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_show ( bt [ bt_num ] ) ;
elm_box_pack_end ( bx3 , bt [ bt_num ] ) ;
elm_box_pack_end ( bx , bx3 ) ;
evas_object_show ( bx3 ) ;
for ( i = 0 ; i < 500 ; i + + )
{
if ( ! ( i % 10 ) )
{
2014-08-27 11:50:43 -07:00
gli = git = elm_genlist_item_append ( gl , api - > itc2 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2011-02-21 07:46:23 -08:00
NULL /* parent */ ,
ELM_GENLIST_ITEM_GROUP ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2012-03-07 08:22:58 -08:00
elm_genlist_item_select_mode_set ( git , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ) ;
2011-01-05 21:13:11 -08:00
}
else if ( git )
{
2014-08-27 11:50:43 -07:00
gli = elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2011-01-05 21:13:11 -08:00
git /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2011-01-05 21:13:11 -08:00
}
switch ( i )
{
2011-03-28 17:51:56 -07:00
case 0 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 0 ] , " clicked " , _bt_show_cb , gli ) ;
evas_object_smart_callback_add ( bt [ 4 ] , " clicked " , _bt_bring_cb , gli ) ;
break ;
2011-03-28 17:51:56 -07:00
case 26 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 1 ] , " clicked " , _bt_show_cb , gli ) ;
break ;
2011-03-28 17:51:56 -07:00
case 31 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 5 ] , " clicked " , _bt_bring_cb , gli ) ;
break ;
2011-03-28 17:51:56 -07:00
case 101 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 2 ] , " clicked " , _bt_show_cb , gli ) ;
break ;
2011-03-28 17:51:56 -07:00
case 239 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 6 ] , " clicked " , _bt_bring_cb , gli ) ;
break ;
2011-03-28 17:51:56 -07:00
case 477 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 7 ] , " clicked " , _bt_bring_cb , gli ) ;
break ;
2011-03-28 17:51:56 -07:00
case 480 :
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( bt [ 3 ] , " clicked " , _bt_show_cb , gli ) ;
break ;
}
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
elm_genlist_item_class_free ( api - > itc2 ) ;
2011-01-05 21:13:11 -08:00
evas_object_resize ( win , 480 , 800 ) ;
evas_object_show ( win ) ;
}
2015-09-01 10:34:43 -07:00
/*** Genlist Group Tree ****************************************************/
2011-01-05 21:13:11 -08:00
static void
2014-08-27 11:50:43 -07:00
gl9_exp ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info )
2011-01-05 21:13:11 -08:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
2012-01-29 20:37:41 -08:00
Evas_Object * gl = elm_object_item_widget_get ( glit ) ;
2013-02-16 19:53:02 -08:00
int val = ( int ) ( uintptr_t ) elm_object_item_data_get ( glit ) ;
2011-01-05 21:13:11 -08:00
val * = 10 ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( val + 1 ) /* item data */ ,
2012-01-19 21:18:31 -08:00
glit /* parent */ ,
2011-01-05 21:13:11 -08:00
ELM_GENLIST_ITEM_NONE , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( val + 2 ) /* item data */ ,
2012-01-19 21:18:31 -08:00
glit /* parent */ ,
2011-01-05 21:13:11 -08:00
ELM_GENLIST_ITEM_NONE , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( val + 3 ) /* item data */ ,
2012-01-19 21:18:31 -08:00
glit /* parent */ ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-01-05 21:13:11 -08:00
NULL /* func data */ ) ;
}
2012-02-22 01:31:37 -08:00
2011-01-05 21:13:11 -08:00
static void
2013-08-31 18:18:03 -07:00
gl9_con ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2011-01-05 21:13:11 -08:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
elm_genlist_item_subitems_clear ( glit ) ;
2011-01-05 21:13:11 -08:00
}
static void
2013-08-31 18:18:03 -07:00
gl9_exp_req ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2011-01-05 21:13:11 -08:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
elm_genlist_item_expanded_set ( glit , EINA_TRUE ) ;
2011-01-05 21:13:11 -08:00
}
2012-02-22 01:31:37 -08:00
2011-01-05 21:13:11 -08:00
static void
2013-08-31 18:18:03 -07:00
gl9_con_req ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2011-01-05 21:13:11 -08:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * glit = event_info ;
elm_genlist_item_expanded_set ( glit , EINA_FALSE ) ;
2011-01-05 21:13:11 -08:00
}
void
2013-08-31 18:18:03 -07:00
test_genlist9 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-01-05 21:13:11 -08:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * gl , * bx ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * git ;
2011-01-05 21:13:11 -08:00
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-group-tree " , " Genlist Group Tree " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2011-01-05 21:13:11 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_smart_callback_add ( gl , " selected " , _gl_selected , NULL ) ;
2011-04-12 10:29:59 -07:00
evas_object_smart_callback_add ( gl , " clicked,double " , _gl_double_clicked , NULL ) ;
2011-01-05 21:13:11 -08:00
evas_object_smart_callback_add ( gl , " longpressed " , _gl_longpress , NULL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2011-01-05 21:13:11 -08:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " group_index " ;
api - > itc2 - > func . text_get = gl8_text_get ;
api - > itc2 - > func . content_get = NULL ;
api - > itc2 - > func . state_get = NULL ;
api - > itc2 - > func . del = NULL ;
git = elm_genlist_item_append ( gl , api - > itc2 ,
2011-02-21 07:46:23 -08:00
( void * ) 0 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_GROUP , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2012-03-07 08:22:58 -08:00
elm_genlist_item_select_mode_set ( git , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2012-03-07 04:57:13 -08:00
( void * ) 1 /* item data */ , git /* parent */ , ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 2 /* item data */ , git /* parent */ , ELM_GENLIST_ITEM_NONE , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2012-03-07 04:57:13 -08:00
( void * ) 3 /* item data */ , git /* parent */ , ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
git = elm_genlist_item_append ( gl , api - > itc2 ,
2011-02-21 07:46:23 -08:00
( void * ) 4 /* item data */ , NULL /* parent */ , ELM_GENLIST_ITEM_GROUP , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2012-03-07 08:22:58 -08:00
elm_genlist_item_select_mode_set ( git , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2012-03-07 04:57:13 -08:00
( void * ) 5 /* item data */ , git /* parent */ , ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2011-02-21 07:46:23 -08:00
( void * ) 6 /* item data */ , git /* parent */ , ELM_GENLIST_ITEM_NONE , gl4_sel /* func */ ,
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2012-03-07 04:57:13 -08:00
( void * ) 7 /* item data */ , git /* parent */ , ELM_GENLIST_ITEM_TREE , gl4_sel /* func */ ,
2011-02-21 07:46:23 -08:00
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
elm_genlist_item_class_free ( api - > itc2 ) ;
2011-01-05 21:13:11 -08:00
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( gl , " expand,request " , gl9_exp_req , api ) ;
evas_object_smart_callback_add ( gl , " contract,request " , gl9_con_req , api ) ;
evas_object_smart_callback_add ( gl , " expanded " , gl9_exp , api ) ;
evas_object_smart_callback_add ( gl , " contracted " , gl9_con , api ) ;
2011-01-05 21:13:11 -08:00
evas_object_resize ( win , 480 , 800 ) ;
evas_object_show ( win ) ;
}
2011-04-21 04:47:36 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Decorate Item Mode ********************************************/
2011-04-21 04:47:36 -07:00
static char * mode_type [ ] = { " slide " , " rotate " } ;
2012-02-22 01:31:37 -08:00
2015-09-01 10:34:43 -07:00
char *
gl10_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part )
2011-04-21 04:47:36 -07:00
{
char buf [ 256 ] ;
if ( ! strcmp ( part , " elm.text.mode " ) )
2013-02-16 19:53:02 -08:00
snprintf ( buf , sizeof ( buf ) , " Mode # %i " , ( int ) ( uintptr_t ) data ) ;
2011-04-21 04:47:36 -07:00
else
2013-02-16 19:53:02 -08:00
snprintf ( buf , sizeof ( buf ) , " Item # %i " , ( int ) ( uintptr_t ) data ) ;
2011-04-21 04:47:36 -07:00
return strdup ( buf ) ;
}
2015-09-01 10:34:43 -07:00
Evas_Object *
gl10_content_get ( void * data EINA_UNUSED , Evas_Object * obj , const char * part )
2011-04-21 04:47:36 -07:00
{
char buf [ PATH_MAX ] ;
Evas_Object * ic = elm_icon_add ( obj ) ;
if ( ! strcmp ( part , " elm.swallow.end " ) )
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/bubble.png " , elm_app_data_dir_get ( ) ) ;
2011-04-21 04:47:36 -07:00
else
2011-08-25 03:01:59 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2011-04-21 04:47:36 -07:00
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return ic ;
}
2012-02-22 01:31:37 -08:00
2011-04-21 04:47:36 -07:00
static void
2013-08-31 18:18:03 -07:00
_gl_sel10 ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-04-21 04:47:36 -07:00
{
if ( ! data ) return ;
int v = elm_radio_value_get ( data ) ;
if ( v = = 1 )
2012-03-07 08:29:26 -08:00
elm_genlist_item_decorate_mode_set ( event_info , mode_type [ v ] , EINA_TRUE ) ;
2011-04-21 04:47:36 -07:00
}
static void
2013-08-31 18:18:03 -07:00
_my_gl_mode_right ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info )
2011-04-21 04:47:36 -07:00
{
if ( ! data ) return ;
int v = elm_radio_value_get ( data ) ;
if ( v = = 0 )
2012-03-07 08:29:26 -08:00
elm_genlist_item_decorate_mode_set ( event_info , mode_type [ v ] , EINA_TRUE ) ;
2011-04-21 04:47:36 -07:00
}
static void
2013-08-31 18:18:03 -07:00
_my_gl_mode_left ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info )
2011-04-21 04:47:36 -07:00
{
if ( ! data ) return ;
int v = elm_radio_value_get ( data ) ;
if ( v = = 0 )
2012-03-07 08:29:26 -08:00
elm_genlist_item_decorate_mode_set ( event_info , mode_type [ v ] , EINA_FALSE ) ;
2011-04-21 04:47:36 -07:00
}
static void
2013-08-31 18:18:03 -07:00
_my_gl_mode_cancel ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2011-04-21 04:47:36 -07:00
{
fprintf ( stderr , " drag \n " ) ;
if ( ! data ) return ;
int v = elm_radio_value_get ( data ) ;
2012-06-16 03:12:25 -07:00
Elm_Object_Item * glit = elm_genlist_decorated_item_get ( obj ) ;
2012-03-07 08:29:26 -08:00
if ( glit ) elm_genlist_item_decorate_mode_set ( glit , mode_type [ v ] , EINA_FALSE ) ;
2011-04-21 04:47:36 -07:00
}
void
2013-08-31 18:18:03 -07:00
test_genlist10 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-04-21 04:47:36 -07:00
{
2012-04-03 05:53:23 -07:00
Evas_Object * win , * fr , * bx , * bx2 , * rd , * rdg , * gl ;
2011-04-21 04:47:36 -07:00
int i ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-04-03 05:53:23 -07:00
win = elm_win_util_standard_add ( " genlist-decorate-item-mode " , " Genlist Decorate Item Mode " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2011-04-21 04:47:36 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
fr = elm_frame_add ( win ) ;
2012-11-26 03:51:49 -08:00
elm_object_text_set ( fr , " Decorate Item Mode Type " ) ;
2011-04-21 04:47:36 -07:00
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
bx2 = elm_box_add ( win ) ;
2011-10-28 21:32:24 -07:00
elm_object_content_set ( fr , bx2 ) ;
2011-04-21 04:47:36 -07:00
evas_object_show ( bx2 ) ;
rd = elm_radio_add ( win ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_radio_state_value_set ( rd , 0 ) ;
2012-04-03 05:53:23 -07:00
elm_object_text_set ( rd , " Slide : Sweep genlist items to the right. " ) ;
2011-04-21 04:47:36 -07:00
evas_object_show ( rd ) ;
2012-04-03 05:53:23 -07:00
elm_box_pack_end ( bx2 , rd ) ;
2011-04-21 04:47:36 -07:00
rdg = rd ;
rd = elm_radio_add ( win ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_radio_state_value_set ( rd , 1 ) ;
2012-04-03 05:53:23 -07:00
elm_object_text_set ( rd , " Rotate : Click each item. " ) ;
2011-04-21 04:47:36 -07:00
elm_radio_group_add ( rd , rdg ) ;
evas_object_show ( rd ) ;
2012-04-03 05:53:23 -07:00
elm_box_pack_end ( bx2 , rd ) ;
2011-04-21 04:47:36 -07:00
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_smart_callback_add ( gl , " drag,start,right " , _my_gl_mode_right , rdg ) ;
evas_object_smart_callback_add ( gl , " drag,start,left " , _my_gl_mode_left , rdg ) ;
evas_object_smart_callback_add ( gl , " drag,start,up " , _my_gl_mode_cancel , rdg ) ;
evas_object_smart_callback_add ( gl , " drag,start,down " , _my_gl_mode_cancel , rdg ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2011-04-21 04:47:36 -07:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > decorate_item_style = " mode " ;
api - > itc1 - > func . text_get = gl10_text_get ;
api - > itc1 - > func . content_get = gl10_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2011-04-21 04:47:36 -07:00
for ( i = 0 ; i < 50 ; i + + )
elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( 1000 + i ) /* item data */ ,
2011-04-21 04:47:36 -07:00
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE /* flags */ ,
_gl_sel10 /* func */ ,
rdg /* func data */ ) ;
elm_box_pack_end ( bx , gl ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2011-04-21 04:47:36 -07:00
evas_object_resize ( win , 520 , 520 ) ;
evas_object_show ( win ) ;
}
2011-06-01 20:10:11 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Reorder Mode **************************************************/
2011-06-01 20:10:11 -07:00
static void
2013-08-31 18:18:03 -07:00
_reorder_tg_changed_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2011-06-01 20:10:11 -07:00
{
2011-10-20 14:27:15 -07:00
elm_genlist_reorder_mode_set ( data , elm_check_state_get ( obj ) ) ;
2011-06-01 20:10:11 -07:00
}
/**
* gl_moved is called after an item was reordered .
* This is only called when reorder mode is enabled .
*
* @ param obj : the genlist object .
2015-02-08 17:34:06 -08:00
* @ param event_info : the moved item .
2011-06-01 20:10:11 -07:00
*
2015-02-08 17:34:06 -08:00
* the item ( event_info ) had been moved
2012-03-21 04:50:33 -07:00
*
*/
2015-02-08 17:34:06 -08:00
static void
_gl_reorder_moved_cb ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2012-03-21 04:50:33 -07:00
{
2015-02-08 17:34:06 -08:00
printf ( " \" moved \" it: %p \n " , event_info ) ;
2012-03-21 04:50:33 -07:00
}
/**
2015-02-08 17:34:06 -08:00
* _gl_reorder_moved_after_cb is called after an item was reordered .
2012-03-21 04:50:33 -07:00
* This is only called when reorder mode is enabled .
*
* @ param obj : the genlist object .
2015-02-08 17:34:06 -08:00
* @ param event_info : the moved item .
2012-03-21 04:50:33 -07:00
*
2015-02-08 17:34:06 -08:00
* the item ( event_info ) had been moved after the given relative item ( * rel_item ) in list .
2012-03-21 04:50:33 -07:00
*
*/
2015-02-08 17:34:06 -08:00
static void
_gl_reorder_moved_after_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
2012-03-21 04:50:33 -07:00
{
// if needed, add application logic.
2015-02-08 17:34:06 -08:00
Elm_Object_Item * it = elm_genlist_item_prev_get ( ( Elm_Object_Item * ) event_info ) ;
printf ( " it = %p, prev_it = %p \n " , event_info , it ) ;
2012-03-21 04:50:33 -07:00
}
/**
2015-02-08 17:34:06 -08:00
* _gl_reorder_moved_before_cb is called after an item was reordered .
2012-03-21 04:50:33 -07:00
* This is only called when reorder mode is enabled .
*
* @ param obj : the genlist object .
2015-02-08 17:34:06 -08:00
* @ param event_info : the moved item .
2012-03-21 04:50:33 -07:00
*
2015-02-08 17:34:06 -08:00
* the item ( event_info ) had been moved before the given relative item ( * rel_item ) in list .
2011-06-01 20:10:11 -07:00
*
*/
2015-02-08 17:34:06 -08:00
static void
_gl_reorder_moved_before_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
2011-06-01 20:10:11 -07:00
{
// if needed, add application logic.
2015-02-08 17:34:06 -08:00
Elm_Object_Item * it = elm_genlist_item_next_get ( ( Elm_Object_Item * ) event_info ) ;
printf ( " it = %p, next_it = %p \n " , event_info , it ) ;
}
static void
_gl_reorder_item_focused_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
{
printf ( " \" item,focused \" it: %p \n " , event_info ) ;
}
static void
_gl_reorder_item_unfocused_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
{
printf ( " \" item,unfocused \" it: %p \n " , event_info ) ;
}
static void
_gl_reorder_item_selected_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
{
printf ( " \" selected \" it: %p \n " , event_info ) ;
}
static void
_gl_reorder_item_unselected_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
{
printf ( " \" unselected \" it: %p \n " , event_info ) ;
2011-06-01 20:10:11 -07:00
}
void
2015-02-08 17:34:06 -08:00
test_genlist_reorder ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2011-06-01 20:10:11 -07:00
{
2015-01-19 03:56:50 -08:00
Evas_Object * win , * fr , * lb , * bx , * tg , * gl ;
2011-06-01 20:10:11 -07:00
int i ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-reorder-mode " , " Genlist Reorder Mode " ) ;
2011-07-25 07:22:19 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2011-06-01 20:10:11 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
fr = elm_frame_add ( win ) ;
2011-06-29 02:11:48 -07:00
elm_object_text_set ( fr , " Reorder Mode " ) ;
2011-06-01 20:10:11 -07:00
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
lb = elm_label_add ( win ) ;
2011-06-28 23:41:31 -07:00
elm_object_text_set ( lb ,
2011-12-08 04:39:18 -08:00
" Enable reorder mode if you want to move item.<br/> "
2011-06-01 20:10:11 -07:00
" Then long press and drag item. " ) ;
2011-10-28 21:32:24 -07:00
elm_object_content_set ( fr , lb ) ;
2011-06-01 20:10:11 -07:00
evas_object_show ( lb ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2011-06-01 20:10:11 -07:00
evas_object_show ( gl ) ;
2011-10-20 14:27:15 -07:00
tg = elm_check_add ( win ) ;
elm_object_style_set ( tg , " toggle " ) ;
2011-06-29 01:57:43 -07:00
elm_object_text_set ( tg , " Reorder Mode: " ) ;
2012-03-06 04:04:25 -08:00
elm_check_state_set ( tg , elm_config_mirrored_get ( ) ) ;
2011-06-03 18:52:08 -07:00
evas_object_smart_callback_add ( tg , " changed " , _reorder_tg_changed_cb , gl ) ;
Genlist Item Pin Feature
Summary:
**@feature** T6241
This feature enables genlist to pin an item to viewport which will
be available always for user to view/select.
**Use Case**:
In a big list of music, most times when user finds a song which they
like, before playing that they may want to go through the entire list
to check whether there is some other good songs, but
after seeing the entire list user have to again scroll back to the
position of item which they liked to play it then.
In this case item pinning can be used, so that the item
which they want to keep for future selection can be pinned
and then it will remain in viewport, finally when user want to do
operation on item, it will be readily available in viewport.
Signed-off-by: Godly T.Alias <godlytalias@yahoo.co.in>
Test Plan: Elementary Test -> Genlist -> Double click on items to enable/disable pinning
Reviewers: raster, cedric, prince.dubey, SanghyeonLee
Subscribers: rajeshps, jpeg, shilpasingh
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D5340
2017-11-01 00:11:30 -07:00
evas_object_smart_callback_add ( gl , " clicked,double " , _gl_double_clicked , NULL ) ;
2015-01-19 03:56:50 -08:00
elm_box_pack_end ( bx , tg ) ;
2011-06-01 20:10:11 -07:00
evas_object_show ( tg ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2015-02-08 17:34:06 -08:00
evas_object_smart_callback_add ( gl , " moved " , _gl_reorder_moved_cb , NULL ) ;
evas_object_smart_callback_add ( gl , " moved,after " , _gl_reorder_moved_after_cb , NULL ) ;
evas_object_smart_callback_add ( gl , " moved,before " , _gl_reorder_moved_before_cb , NULL ) ;
evas_object_smart_callback_add ( gl , " item,focused " , _gl_reorder_item_focused_cb , NULL ) ;
evas_object_smart_callback_add ( gl , " item,unfocused " , _gl_reorder_item_unfocused_cb , NULL ) ;
evas_object_smart_callback_add ( gl , " selected " , _gl_reorder_item_selected_cb , NULL ) ;
evas_object_smart_callback_add ( gl , " unselected " , _gl_reorder_item_unselected_cb , NULL ) ;
2011-06-01 20:10:11 -07:00
for ( i = 0 ; i < 50 ; i + + )
elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( 1 + i ) /* item data */ ,
2011-06-01 20:10:11 -07:00
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE /* flags */ ,
NULL /* func */ ,
NULL /* func data */ ) ;
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2012-02-20 00:26:17 -08:00
2011-06-01 20:10:11 -07:00
elm_box_pack_end ( bx , gl ) ;
evas_object_resize ( win , 400 , 500 ) ;
evas_object_show ( win ) ;
}
2011-09-08 03:21:04 -07:00
2012-06-15 00:58:05 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Textblock *****************************************************/
2013-08-31 18:18:03 -07:00
char * gl12_text_get ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2011-09-08 03:21:04 -07:00
{
return strdup ( " Enlightenment is not just a window manager for Linux/X11 and others, but also a whole suite of libraries to help you create beautiful user interfaces with much less work than doing it the old fashioned way and fighting with traditional toolkits, not to mention a traditional window manager. It covers uses from small mobile devices like phones all the way to powerful multi-core desktops (which are the primary development environment) . " ) ;
}
void
2013-08-31 18:18:03 -07:00
test_genlist12 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2011-09-08 03:21:04 -07:00
{
2012-02-22 01:31:37 -08:00
Evas_Object * win , * bx , * gl ;
2011-09-08 03:21:04 -07:00
int i ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2011-09-08 03:21:04 -07:00
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-textblock " , " Genlist Textblock " ) ;
2011-09-08 03:21:04 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2011-09-08 03:21:04 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
2012-03-07 08:07:34 -08:00
elm_genlist_mode_set ( gl , ELM_LIST_COMPRESS ) ;
2011-09-08 03:21:04 -07:00
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2011-09-08 03:21:04 -07:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " message " ;
api - > itc1 - > func . text_get = gl12_text_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2011-09-08 03:21:04 -07:00
for ( i = 0 ; i < 1000 ; i + + )
{
2014-08-27 11:50:43 -07:00
elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2011-10-24 16:43:34 -07:00
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2011-09-08 03:21:04 -07:00
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2011-09-08 03:21:04 -07:00
evas_object_resize ( win , 400 , 500 ) ;
evas_object_show ( win ) ;
}
2012-01-06 15:38:33 -08:00
2012-06-15 00:58:05 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Tree, Insert Sorted *******************************************/
2012-01-06 15:38:33 -08:00
static int
gl13_cmp ( const void * pa , const void * pb )
{
2016-11-07 05:39:02 -08:00
const char * a = elm_object_item_data_get ( pa ) ;
const char * b = elm_object_item_data_get ( pb ) ;
if ( ! a ) return - 1 ;
if ( ! b ) return 1 ;
return strcmp ( a , b ) ;
}
static void
_add_cb ( void * data ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win = data ;
Evas_Object * gl = evas_object_data_get ( win , " genlist " ) ;
Evas_Object * entry = evas_object_data_get ( win , " entry " ) ;
api_data * api = evas_object_data_get ( win , " api " ) ;
const char * item_name = elm_entry_entry_get ( entry ) ;
Elm_Object_Item * parent = elm_genlist_selected_item_get ( gl ) ;
if ( ( ! item_name ) | | ( ! strcmp ( item_name , " " ) ) )
{
printf ( " ERROR: Unable to add item with empty name. Please type name. \n " ) ;
return ;
}
elm_genlist_item_sorted_insert
( gl , api - > itc2 , eina_stringshare_add ( item_name ) /* item data */ ,
parent /* parent */ , ELM_GENLIST_ITEM_NONE ,
gl13_cmp /* cmp */ , NULL /* func */ , NULL /* func data */ ) ;
elm_entry_entry_set ( entry , NULL ) ;
}
static void
_del_cb ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win = data ;
Evas_Object * gl = evas_object_data_get ( win , " genlist " ) ;
Elm_Object_Item * item = elm_genlist_selected_item_get ( gl ) ;
if ( ! item )
{
printf ( " ERROR: Unable to remove item. Please select item. \n " ) ;
return ;
}
elm_object_item_del ( item ) ;
}
char *
gl6_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
{
const char * str = data ;
return strdup ( str ) ;
}
void
gl6_del ( void * data , Evas_Object * obj EINA_UNUSED )
{
Eina_Stringshare * str = data ;
eina_stringshare_del ( str ) ;
2012-01-06 15:38:33 -08:00
}
void
2013-08-31 18:18:03 -07:00
test_genlist13 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-01-06 15:38:33 -08:00
{
2016-11-07 05:39:02 -08:00
Evas_Object * win , * bx , * bx1 , * btn_add , * btn_del , * gl , * entry ;
2012-01-06 15:38:33 -08:00
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-tree-insert-sorted " , " Genlist Tree, Insert Sorted " ) ;
2012-01-06 15:38:33 -08:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2016-11-07 05:39:02 -08:00
evas_object_data_set ( win , " api " , api ) ;
2012-01-06 15:38:33 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( gl ) ;
2016-11-07 05:39:02 -08:00
evas_object_data_set ( win , " genlist " , gl ) ;
2012-01-06 15:38:33 -08:00
2014-08-27 11:50:43 -07:00
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " default " ;
2016-11-07 05:39:02 -08:00
api - > itc2 - > func . text_get = gl6_text_get ;
2014-08-27 11:50:43 -07:00
api - > itc2 - > func . content_get = NULL ;
api - > itc2 - > func . state_get = NULL ;
2016-11-07 05:39:02 -08:00
api - > itc2 - > func . del = gl6_del ;
2012-01-06 15:38:33 -08:00
2016-11-07 05:39:02 -08:00
entry = elm_entry_add ( win ) ;
elm_entry_editable_set ( entry , EINA_TRUE ) ;
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_object_part_text_set ( entry , " guide " , " Type item's name here to add. " ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( entry ) ;
evas_object_data_set ( win , " entry " , entry ) ;
bx1 = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx1 , EINA_TRUE ) ;
evas_object_show ( bx1 ) ;
btn_add = elm_button_add ( bx1 ) ;
elm_object_text_set ( btn_add , " Add " ) ;
evas_object_size_hint_weight_set ( btn_add , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_smart_callback_add ( btn_add , " clicked " , _add_cb , win ) ;
elm_box_pack_end ( bx1 , btn_add ) ;
evas_object_show ( btn_add ) ;
btn_del = elm_button_add ( bx1 ) ;
elm_object_text_set ( btn_del , " Delete " ) ;
evas_object_size_hint_weight_set ( btn_del , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_smart_callback_add ( btn_del , " clicked " , _del_cb , win ) ;
elm_box_pack_end ( bx1 , btn_del ) ;
evas_object_show ( btn_del ) ;
2012-01-06 15:38:33 -08:00
elm_box_pack_end ( bx , gl ) ;
2016-11-07 05:39:02 -08:00
elm_box_pack_end ( bx , entry ) ;
elm_box_pack_end ( bx , bx1 ) ;
2012-01-06 15:38:33 -08:00
evas_object_show ( bx ) ;
2016-11-07 05:39:02 -08:00
evas_object_resize ( win , 480 , 480 ) ;
2012-01-06 15:38:33 -08:00
evas_object_show ( win ) ;
}
2012-01-06 18:02:02 -08:00
2015-09-01 10:34:43 -07:00
/*** Genlist Tree, Insert Relative *****************************************/
2012-01-06 18:02:02 -08:00
static void
2013-08-31 18:18:03 -07:00
my_gl_insert_before_rel ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-01-06 18:02:02 -08:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2012-01-06 18:02:02 -08:00
static int i = 1000 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli_selected ;
2012-01-06 18:02:02 -08:00
2014-08-27 11:50:43 -07:00
if ( ! api - > itc1 ) api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = NULL ;
api - > itc1 - > func . state_get = NULL ;
api - > itc1 - > func . del = NULL ;
2012-01-06 18:02:02 -08:00
gli_selected = elm_genlist_selected_item_get ( gl ) ;
if ( ! gli_selected )
{
2012-07-31 13:07:09 -07:00
printf ( " no item selected \n " ) ;
2012-01-06 18:02:02 -08:00
return ;
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_insert_before ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2012-01-06 18:02:02 -08:00
elm_genlist_item_parent_get ( gli_selected ) ,
gli_selected /* item before */ ,
ELM_GENLIST_ITEM_NONE ,
NULL /* func */ , NULL /* func data */ ) ;
i + + ;
}
static void
2013-08-31 18:18:03 -07:00
my_gl_insert_after_rel ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-01-06 18:02:02 -08:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
Evas_Object * gl = api - > gl ;
2012-01-06 18:02:02 -08:00
static int i = 0 ;
2012-01-19 21:18:31 -08:00
Elm_Object_Item * gli_selected ;
2012-01-06 18:02:02 -08:00
2014-08-27 11:50:43 -07:00
if ( ! api - > itc1 ) api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get ;
api - > itc1 - > func . content_get = NULL ;
api - > itc1 - > func . state_get = NULL ;
api - > itc1 - > func . del = NULL ;
2012-01-06 18:02:02 -08:00
gli_selected = elm_genlist_selected_item_get ( gl ) ;
if ( ! gli_selected )
{
2012-07-31 13:07:09 -07:00
printf ( " no item selected \n " ) ;
2012-01-06 18:02:02 -08:00
return ;
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_insert_after ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2012-01-06 18:02:02 -08:00
elm_genlist_item_parent_get ( gli_selected ) ,
gli_selected /* item after */ ,
ELM_GENLIST_ITEM_NONE ,
NULL /* func */ , NULL /* func data */ ) ;
i + + ;
}
void
2013-08-31 18:18:03 -07:00
test_genlist14 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-01-06 18:02:02 -08:00
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * pi [ 6 ] ;
2012-02-22 01:31:37 -08:00
Evas_Object * win , * bx , * bx2 , * bt , * gl ;
2012-01-29 17:08:54 -08:00
int i , base ;
2012-01-06 18:02:02 -08:00
/* index: 0, 1, 2, 3, 4, 5
* items : 1 , 15 , 11 , 2 , 33 , 21
* final : 1 , 2 , 11 , 15 , 21 , 33
*/
2012-01-29 17:08:54 -08:00
const int idx [ 6 ] = { 1 , 15 , 11 , 2 , 33 , 21 } ;
2012-01-06 18:02:02 -08:00
const int relative [ 6 ] = {
0 , /* item '1' - not used */
0 , /* item '15' - insert after pi[0], item '1' */
- 1 , /* item '11' - insert before pi[1], item '15' */
- 2 , /* item '2' - insert before pi[2], item '11' */
1 , /* item '33' - insert after pi[1], item '15' */
- 4 /* item '21' - insert before pi[4], item '33' */
} ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-02-22 01:31:37 -08:00
win = elm_win_util_standard_add ( " genlist-tree-insert-relative " , " Genlist Tree, Insert Relative " ) ;
2012-01-06 18:02:02 -08:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2012-01-06 18:02:02 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2012-01-06 18:02:02 -08:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " default " ;
api - > itc2 - > func . text_get = gl4_text_get ;
api - > itc2 - > func . content_get = NULL ;
api - > itc2 - > func . state_get = NULL ;
api - > itc2 - > func . del = NULL ;
2012-01-06 18:02:02 -08:00
/* mixed order to test insert sorted */
// BUG1: should be able to insert before=NULL, prepend
// BUG2: should be able to insert after=NULL, append
pi [ 0 ] = elm_genlist_item_append
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) idx [ 0 ] /* item data */ ,
2012-01-06 18:02:02 -08:00
NULL /* parent */ ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
for ( i = 1 ; i < 3 ; i + + )
{
if ( relative [ i ] < 0 )
pi [ i ] = elm_genlist_item_insert_before
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) idx [ i ] /* item data */ ,
2012-01-06 18:02:02 -08:00
NULL /* parent */ , pi [ - relative [ i ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
else
pi [ i ] = elm_genlist_item_insert_after
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) idx [ i ] /* item data */ ,
2012-01-06 18:02:02 -08:00
NULL /* parent */ , pi [ relative [ i ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
}
for ( i = 0 ; i < 3 ; i + + )
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * sub_glit [ 6 ] ;
2012-01-06 18:02:02 -08:00
int j ;
2013-02-16 19:53:02 -08:00
base = 1000 * ( int ) ( uintptr_t ) elm_object_item_data_get ( pi [ i ] ) ;
2012-01-06 18:02:02 -08:00
2012-01-19 21:18:31 -08:00
sub_glit [ 0 ] = elm_genlist_item_append
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) ( idx [ 0 ] + base ) /* item data */ , pi [ i ] /* parent */ ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
for ( j = 1 ; j < 6 ; j + + ) {
if ( relative [ j ] < 0 )
2012-01-19 21:18:31 -08:00
sub_glit [ j ] = elm_genlist_item_insert_before
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) ( idx [ j ] + base ) /* item data */ ,
2012-01-19 21:18:31 -08:00
pi [ i ] /* parent */ , sub_glit [ - relative [ j ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
else
2012-01-19 21:18:31 -08:00
sub_glit [ j ] = elm_genlist_item_insert_after
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) ( idx [ j ] + base ) /* item data */ ,
2012-01-19 21:18:31 -08:00
pi [ i ] /* parent */ , sub_glit [ relative [ j ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
}
}
for ( i = 3 ; i < 6 ; i + + )
{
if ( relative [ i ] < 0 )
pi [ i ] = elm_genlist_item_insert_before
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) idx [ i ] /* item data */ ,
2012-01-06 18:02:02 -08:00
NULL /* parent */ , pi [ - relative [ i ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
else
pi [ i ] = elm_genlist_item_insert_after
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) idx [ i ] /* item data */ ,
2012-01-06 18:02:02 -08:00
NULL /* parent */ , pi [ relative [ i ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
}
for ( i = 3 ; i < 6 ; i + + )
{
2012-01-19 21:18:31 -08:00
Elm_Object_Item * sub_glit [ 6 ] ;
2012-01-06 18:02:02 -08:00
int j ;
2013-02-16 19:53:02 -08:00
base = 1000 * ( int ) ( uintptr_t ) elm_object_item_data_get ( pi [ i ] ) ;
2012-01-06 18:02:02 -08:00
2012-01-19 21:18:31 -08:00
sub_glit [ 0 ] = elm_genlist_item_append
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) ( idx [ 0 ] + base ) /* item data */ , pi [ i ] /* parent */ ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
for ( j = 1 ; j < 6 ; j + + ) {
if ( relative [ j ] < 0 )
2012-01-19 21:18:31 -08:00
sub_glit [ j ] = elm_genlist_item_insert_before
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) ( idx [ j ] + base ) /* item data */ ,
2012-01-19 21:18:31 -08:00
pi [ i ] /* parent */ , sub_glit [ - relative [ j ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
else
2012-01-19 21:18:31 -08:00
sub_glit [ j ] = elm_genlist_item_insert_after
2014-08-27 11:50:43 -07:00
( gl , api - > itc2 , ( void * ) ( uintptr_t ) ( idx [ j ] + base ) /* item data */ ,
2012-01-19 21:18:31 -08:00
pi [ i ] /* parent */ , sub_glit [ relative [ j ] ] ,
2012-03-07 04:57:13 -08:00
ELM_GENLIST_ITEM_TREE , NULL /* func */ , NULL /* func data */ ) ;
2012-01-06 18:02:02 -08:00
}
}
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( bx ) ;
bx2 = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
bt = elm_button_add ( win ) ;
elm_object_text_set ( bt , " + before " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_insert_before_rel , api ) ;
2012-01-06 18:02:02 -08:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
elm_object_text_set ( bt , " + after " ) ;
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( bt , " clicked " , my_gl_insert_after_rel , api ) ;
2012-01-06 18:02:02 -08:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
2014-08-27 11:50:43 -07:00
/* item_class_ref is needed for itc2. some items can be added in callbacks */
elm_genlist_item_class_ref ( api - > itc2 ) ;
elm_genlist_item_class_free ( api - > itc2 ) ;
2012-02-20 00:26:17 -08:00
2012-01-06 18:02:02 -08:00
evas_object_resize ( win , 320 , 320 ) ;
evas_object_show ( win ) ;
}
2012-02-22 23:39:10 -08:00
2012-06-15 00:58:05 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Decorate All Mode *********************************************/
static void
_edit_icon_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-02-22 23:39:10 -08:00
{
Elm_Object_Item * item = ( Elm_Object_Item * ) data ;
elm_object_item_del ( item ) ;
}
2015-09-01 10:34:43 -07:00
char *
gl15_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
2012-02-22 23:39:10 -08:00
{
const Testitem * tit = data ;
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " Item #%i " , tit - > mode ) ;
return strdup ( buf ) ;
}
2015-09-01 10:34:43 -07:00
Evas_Object *
gl15_content_get ( void * data , Evas_Object * obj , const char * part )
2012-02-22 23:39:10 -08:00
{
Testitem * tit = data ;
char buf [ PATH_MAX ] ;
2013-01-14 04:01:25 -08:00
// "edit" EDC layout is like below. each part is swallow part.
2012-02-22 23:39:10 -08:00
// the existing item is swllowed to elm.swallow.edit.content part.
2012-04-01 19:37:05 -07:00
// --------------------------------------------------------------------
// | elm.edit.icon.1 | elm.swallow.decorate.content | elm.edit.icon,2 |
// --------------------------------------------------------------------
2012-02-22 23:39:10 -08:00
if ( ! strcmp ( part , " elm.swallow.end " ) )
{
2012-02-29 19:38:45 -08:00
Evas_Object * ic = elm_icon_add ( obj ) ;
2015-03-09 02:02:36 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/bubble.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( ic , buf , NULL ) ;
2012-02-22 23:39:10 -08:00
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return ic ;
}
else if ( ! strcmp ( part , " elm.edit.icon.1 " ) )
{
Evas_Object * ck ;
ck = elm_check_add ( obj ) ;
elm_check_state_pointer_set ( ck , & tit - > checked ) ;
evas_object_propagate_events_set ( ck , EINA_FALSE ) ;
evas_object_show ( ck ) ;
return ck ;
}
else if ( ! strcmp ( part , " elm.edit.icon.2 " ) )
{
2012-02-23 05:58:49 -08:00
Evas_Object * icn = elm_icon_add ( obj ) ;
2015-03-09 02:02:36 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/icon_06.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( icn , buf , NULL ) ;
2012-02-23 05:58:49 -08:00
evas_object_propagate_events_set ( icn , EINA_FALSE ) ;
evas_object_size_hint_aspect_set ( icn , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
evas_object_smart_callback_add ( icn , " clicked " , _edit_icon_clicked_cb , ( void * ) tit - > item ) ;
return icn ;
2012-02-22 23:39:10 -08:00
}
else return NULL ;
}
static void
2013-08-31 18:18:03 -07:00
gl15_sel ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2012-02-22 23:39:10 -08:00
{
Testitem * tit = data ;
2012-03-07 08:56:21 -08:00
if ( elm_genlist_decorate_mode_get ( obj ) )
2012-02-22 23:39:10 -08:00
{
if ( ! tit - > checked ) tit - > checked = EINA_TRUE ;
else tit - > checked = EINA_FALSE ;
}
elm_genlist_item_update ( tit - > item ) ;
}
static void
2013-08-31 18:18:03 -07:00
gl15_deco_all_mode ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-02-22 23:39:10 -08:00
{
2012-03-07 08:56:21 -08:00
elm_genlist_decorate_mode_set ( data , EINA_TRUE ) ;
2012-03-07 08:01:37 -08:00
elm_genlist_select_mode_set ( data , ELM_OBJECT_SELECT_MODE_ALWAYS ) ;
2012-02-22 23:39:10 -08:00
}
static void
2013-08-31 18:18:03 -07:00
gl15_normal_mode ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-02-22 23:39:10 -08:00
{
2012-03-07 08:56:21 -08:00
elm_genlist_decorate_mode_set ( data , EINA_FALSE ) ;
2012-03-07 08:01:37 -08:00
elm_genlist_select_mode_set ( data , ELM_OBJECT_SELECT_MODE_DEFAULT ) ;
2012-02-22 23:39:10 -08:00
}
2015-09-01 10:34:43 -07:00
void
gl15_del ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED )
2012-02-22 23:46:05 -08:00
{
2013-04-17 09:08:13 -07:00
Testitem * ti = data ;
printf ( " item deleted. (# %d) \n " , ti - > mode ) ;
2012-02-22 23:46:05 -08:00
}
2012-02-22 23:39:10 -08:00
void
2013-08-31 18:18:03 -07:00
test_genlist15 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-02-22 23:39:10 -08:00
{
2012-03-02 04:07:55 -08:00
Evas_Object * win , * bx , * bx2 , * bt , * gl ;
2012-02-22 23:39:10 -08:00
int i ;
static Testitem tit [ 100 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-04-01 19:37:05 -07:00
win = elm_win_util_standard_add ( " genlist-decorate-all-mode " , " Genlist Decorate All Mode " ) ;
2012-02-22 23:39:10 -08:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2012-02-22 23:39:10 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2012-02-22 23:39:10 -08:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl15_text_get ;
api - > itc1 - > func . content_get = gl15_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = gl15_del ;
api - > itc1 - > decorate_all_item_style = " edit " ;
2012-02-22 23:39:10 -08:00
for ( i = 0 ; i < 100 ; i + + )
{
tit [ i ] . mode = i ;
2014-08-27 11:50:43 -07:00
tit [ i ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
2012-02-22 23:39:10 -08:00
& ( tit [ i ] ) /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE /* flags */ ,
gl15_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) & ( tit [ i ] ) /* func data */ ) ;
2012-02-22 23:39:10 -08:00
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2012-02-22 23:39:10 -08:00
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( bx ) ;
bx2 = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
elm_box_homogeneous_set ( bx2 , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
bt = elm_button_add ( win ) ;
2012-04-01 19:37:05 -07:00
elm_object_text_set ( bt , " Decorate All mode " ) ;
evas_object_smart_callback_add ( bt , " clicked " , gl15_deco_all_mode , gl ) ;
2012-02-22 23:39:10 -08:00
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
bt = elm_button_add ( win ) ;
elm_object_text_set ( bt , " Normal mode " ) ;
evas_object_smart_callback_add ( bt , " clicked " , gl15_normal_mode , gl ) ;
evas_object_size_hint_align_set ( bt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( bt , EVAS_HINT_EXPAND , 0.0 ) ;
elm_box_pack_end ( bx2 , bt ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
evas_object_resize ( win , 520 , 520 ) ;
evas_object_show ( win ) ;
}
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
2012-06-15 00:58:05 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Flip Mode *****************************************************/
static void
_flip_icon_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
{
const Testitem * tit = data ;
if ( elm_genlist_item_flip_get ( tit - > item ) )
elm_genlist_item_flip_set ( tit - > item , EINA_FALSE ) ;
else
elm_genlist_item_flip_set ( tit - > item , EINA_TRUE ) ;
}
2015-09-01 10:34:43 -07:00
char *
gl16_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
{
const Testitem * tit = data ;
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " Item #%i " , tit - > mode ) ;
return strdup ( buf ) ;
}
2015-09-01 10:34:43 -07:00
Evas_Object *
gl16_content_get ( void * data , Evas_Object * obj , const char * part )
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
{
Testitem * tit = data ;
char buf [ PATH_MAX ] ;
if ( ! strcmp ( part , " elm.text.flip " ) )
{
Evas_Object * btn = elm_button_add ( obj ) ;
elm_object_text_set ( btn , " flipped content placement " ) ;
evas_object_size_hint_align_set ( btn , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( btn , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( btn , " clicked " , _flip_icon_clicked_cb , ( void * ) tit ) ;
evas_object_show ( btn ) ;
return btn ;
}
else if ( ! strcmp ( part , " elm.edit.icon.1 " ) )
{
Evas_Object * icn = elm_icon_add ( obj ) ;
2015-03-09 02:02:36 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/icon_04.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( icn , buf , NULL ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
evas_object_propagate_events_set ( icn , EINA_FALSE ) ;
evas_object_size_hint_aspect_set ( icn , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return icn ;
}
else if ( ! strcmp ( part , " elm.edit.icon.2 " ) )
{
Evas_Object * icn = elm_icon_add ( obj ) ;
2015-03-09 02:02:36 -07:00
snprintf ( buf , sizeof ( buf ) , " %s/images/icon_09.png " , elm_app_data_dir_get ( ) ) ;
2012-05-28 14:50:11 -07:00
elm_image_file_set ( icn , buf , NULL ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
evas_object_propagate_events_set ( icn , EINA_FALSE ) ;
evas_object_size_hint_aspect_set ( icn , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
evas_object_smart_callback_add ( icn , " clicked " , _flip_icon_clicked_cb , ( void * ) tit ) ;
return icn ;
}
else return NULL ;
}
void
2013-08-31 18:18:03 -07:00
test_genlist16 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
{
Evas_Object * win , * bx , * gl ;
int i ;
static Testitem tit [ 100 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
win = elm_win_util_standard_add ( " genlist-flip-mode " , " Genlist Flip Mode " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
evas_object_show ( gl ) ;
2012-03-05 18:13:28 -08:00
/* note: flip mode can be used with/without edit mode */
2012-03-07 08:56:21 -08:00
elm_genlist_decorate_mode_set ( gl , EINA_TRUE ) ;
2012-03-07 08:01:37 -08:00
elm_genlist_select_mode_set ( gl , ELM_OBJECT_SELECT_MODE_ALWAYS ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl16_text_get ;
api - > itc1 - > func . content_get = gl16_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
api - > itc1 - > decorate_all_item_style = " edit " ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
for ( i = 0 ; i < 100 ; i + + )
{
tit [ i ] . mode = i ;
2014-08-27 11:50:43 -07:00
tit [ i ] . item = elm_genlist_item_append ( gl , api - > itc1 ,
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
& ( tit [ i ] ) /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE /* flags */ ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) & ( tit [ i ] ) /* func data */ ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
elm genlist: Added elm_genlist_item_flip_get/set APIs. Patch by
Hyoyoung Chang <hyoyoung@gmail.com>
On Wed, Feb 29, 2012 at 9:17 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Dear all.
>
> I made a patch to introduce new genlist item mode.
> Two public apis are added.
> +EAPI void elm_genlist_item_flip_set(Elm_Object_Item *it, Eina_Bool
flip);
> +EAPI Eina_Bool elm_genlist_item_flip_get(Elm_Object_Item *it);
>
> It provides on-the-flying item change. It works like that a new item
> added on existed item.
> In elementary test, you can test it.
> It's useful at adding widgets or show buttons in genlist item.
>
> Thanks.
On Mon, Mar 5, 2012 at 5:56 PM, Hyoyoung Chang <hyoyoung@gmail.com>
wrote:
> Hello, I modifed fliP_set api to use ecore_job.
> It resolved version of mouse_{move, up} bugs.
>
SVN revision: 68727
2012-03-05 07:03:12 -08:00
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( bx ) ;
evas_object_resize ( win , 520 , 520 ) ;
evas_object_show ( win ) ;
}
2012-06-15 00:58:11 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Decorate Modes ************************************************/
2012-06-15 00:58:11 -07:00
char *
2013-08-31 18:18:03 -07:00
gl17_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part )
2012-06-15 00:58:11 -07:00
{
const Testitem * tit = data ;
char buf [ 256 ] ;
if ( ! strcmp ( part , " elm.text.mode " ) )
snprintf ( buf , sizeof ( buf ) , " Mode # %i " , tit - > mode ) ;
else
2013-02-16 19:53:02 -08:00
snprintf ( buf , sizeof ( buf ) , " Item # %i " , ( int ) ( uintptr_t ) data ) ;
2012-06-15 00:58:11 -07:00
return strdup ( buf ) ;
}
Evas_Object *
_decorate_item_mode_frame_new ( Evas_Object * win , Evas_Object * * rdg )
{
Evas_Object * fr , * bx , * rd ;
fr = elm_frame_add ( win ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( fr , " Decorate Item Mode Type " ) ;
evas_object_show ( fr ) ;
bx = elm_box_add ( win ) ;
elm_object_content_set ( fr , bx ) ;
evas_object_show ( bx ) ;
rd = elm_radio_add ( win ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_radio_state_value_set ( rd , 0 ) ;
elm_object_text_set ( rd , " Slide : Sweep genlist items to the right. " ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
* rdg = rd ;
rd = elm_radio_add ( win ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_radio_state_value_set ( rd , 1 ) ;
elm_object_text_set ( rd , " Rotate : Click each item. " ) ;
elm_radio_group_add ( rd , * rdg ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
return fr ;
}
void
2013-08-31 18:18:03 -07:00
_decorate_all_set_btn_clicked_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2012-06-15 00:58:11 -07:00
{
if ( ! data ) return ;
2012-06-19 07:51:38 -07:00
Evas_Object * gl ;
2012-06-15 00:58:11 -07:00
gl = evas_object_data_get ( obj , " gl " ) ;
if ( ! gl ) return ;
2012-06-21 00:48:00 -07:00
if ( evas_object_data_get ( gl , " tree_effect " ) )
elm_genlist_tree_effect_enabled_set ( gl , EINA_FALSE ) ;
2012-06-15 00:58:11 -07:00
elm_genlist_decorate_mode_set ( gl , EINA_TRUE ) ;
}
void
2013-08-31 18:18:03 -07:00
_decorate_all_unset_btn_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-06-15 00:58:11 -07:00
{
2012-06-21 00:48:00 -07:00
if ( evas_object_data_get ( data , " tree_effect " ) )
elm_genlist_tree_effect_enabled_set ( data , EINA_TRUE ) ;
2012-06-15 00:58:11 -07:00
elm_genlist_decorate_mode_set ( data , EINA_FALSE ) ;
}
Evas_Object *
_decorate_all_mode_frame_new ( Evas_Object * win , Evas_Object * rdg , Evas_Object * gl )
{
Evas_Object * fr , * bx , * btn ;
fr = elm_frame_add ( win ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( fr , " Decorate All Mode Type " ) ;
evas_object_show ( fr ) ;
bx = elm_box_add ( win ) ;
elm_object_content_set ( fr , bx ) ;
evas_object_show ( bx ) ;
btn = elm_button_add ( win ) ;
evas_object_data_set ( btn , " gl " , gl ) ;
elm_object_text_set ( btn , " Set Decorate All Mode " ) ;
evas_object_smart_callback_add ( btn , " clicked " , _decorate_all_set_btn_clicked_cb , rdg ) ;
elm_box_pack_end ( bx , btn ) ;
evas_object_show ( btn ) ;
btn = elm_button_add ( win ) ;
elm_object_text_set ( btn , " Unset Decorate All Mode " ) ;
evas_object_smart_callback_add ( btn , " clicked " , _decorate_all_unset_btn_clicked_cb , gl ) ;
elm_box_pack_end ( bx , btn ) ;
evas_object_show ( btn ) ;
return fr ;
}
void
2013-08-31 18:18:03 -07:00
test_genlist17 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-06-15 00:58:11 -07:00
{
Evas_Object * win , * fr1 , * fr2 , * bx , * bx2 , * rdg = NULL , * gl ;
int i ;
static Testitem tit [ 50 ] ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-06-15 00:58:11 -07:00
win = elm_win_util_standard_add ( " genlist-decorate-modes " , " Genlist Decorate Modes " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2012-06-15 00:58:11 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
bx2 = elm_box_add ( win ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
fr1 = _decorate_item_mode_frame_new ( win , & rdg ) ;
elm_box_pack_end ( bx2 , fr1 ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_smart_callback_add ( gl , " drag,start,right " , _my_gl_mode_right , rdg ) ;
evas_object_smart_callback_add ( gl , " drag,start,left " , _my_gl_mode_left , rdg ) ;
evas_object_smart_callback_add ( gl , " drag,start,up " , _my_gl_mode_cancel , rdg ) ;
evas_object_smart_callback_add ( gl , " drag,start,down " , _my_gl_mode_cancel , rdg ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2012-06-15 00:58:11 -07:00
evas_object_show ( gl ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > decorate_item_style = " mode " ;
api - > itc1 - > func . text_get = gl15_text_get ;
api - > itc1 - > func . content_get = gl15_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
api - > itc1 - > decorate_all_item_style = " edit " ;
2012-06-15 00:58:11 -07:00
for ( i = 0 ; i < 50 ; i + + )
{
tit [ i ] . checked = EINA_FALSE ;
tit [ i ] . mode = i ;
tit [ i ] . item = elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc1 ,
2012-06-15 00:58:11 -07:00
& ( tit [ i ] ) /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE /* flags */ ,
NULL /* select func */ ,
NULL /* func data */ ) ;
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2012-06-15 00:58:11 -07:00
elm_box_pack_end ( bx , gl ) ;
fr2 = _decorate_all_mode_frame_new ( win , rdg , gl ) ;
elm_box_pack_end ( bx2 , fr2 ) ;
evas_object_resize ( win , 520 , 520 ) ;
evas_object_show ( win ) ;
}
2015-09-01 10:34:43 -07:00
/*** Genlist Tree and Decorate All Mode ************************************/
2015-09-01 11:08:42 -07:00
static void
_tree_effect_enable_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
elm_genlist_tree_effect_enabled_set ( data , EINA_TRUE ) ;
}
static void
_tree_effect_disable_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
elm_genlist_tree_effect_enabled_set ( data , EINA_FALSE ) ;
}
2012-06-21 00:48:00 -07:00
Evas_Object *
_tree_effect_frame_new ( Evas_Object * win , Evas_Object * * rdg , Evas_Object * gl )
{
Evas_Object * fr , * bx , * rd ;
fr = elm_frame_add ( win ) ;
elm_object_text_set ( fr , " Genlist Tree Effect " ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( fr ) ;
bx = elm_box_add ( win ) ;
elm_box_homogeneous_set ( bx , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( bx , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_content_set ( fr , bx ) ;
evas_object_show ( bx ) ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 0 ) ;
elm_object_text_set ( rd , " Enable " ) ;
evas_object_smart_callback_add ( rd , " changed " , _tree_effect_enable_cb , gl ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
* rdg = rd ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 1 ) ;
elm_radio_group_add ( rd , * rdg ) ;
elm_object_text_set ( rd , " Disable " ) ;
evas_object_smart_callback_add ( rd , " changed " , _tree_effect_disable_cb , gl ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
return fr ;
}
static void
2013-08-31 18:18:03 -07:00
gl18_sel ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2012-06-21 00:48:00 -07:00
{
Elm_Object_Item * glit = event_info ;
int depth = elm_genlist_item_expanded_depth_get ( glit ) ;
2012-07-31 13:07:09 -07:00
printf ( " expanded depth for selected item is %d \n " , depth ) ;
2012-06-21 00:48:00 -07:00
}
static void
2013-08-31 18:18:03 -07:00
gl18_del ( void * data , Evas_Object * obj EINA_UNUSED )
2012-06-21 00:48:00 -07:00
{
free ( data ) ;
}
static void
2013-08-31 18:18:03 -07:00
gl18_exp ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2012-06-21 00:48:00 -07:00
{
2014-08-27 11:50:43 -07:00
api_data * api = data ;
2012-06-21 00:48:00 -07:00
Elm_Object_Item * glit = event_info ;
Evas_Object * gl = elm_object_item_widget_get ( glit ) ;
2012-06-21 03:56:12 -07:00
Testitem * tit = elm_object_item_data_get ( glit ) ;
int i , j , val ;
2012-06-21 00:48:00 -07:00
2012-06-21 03:56:12 -07:00
val = tit - > mode * 10 ;
for ( i = 0 ; i < 100 ; i + + )
2012-06-21 00:48:00 -07:00
{
tit = calloc ( 1 , sizeof ( Testitem ) ) ;
tit - > mode = val + i ;
tit - > item = elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc2 ,
2012-06-21 00:48:00 -07:00
tit /* item data */ ,
glit /* parent */ ,
ELM_GENLIST_ITEM_TREE ,
gl18_sel /* func */ ,
NULL /* func data */ ) ;
}
for ( j = 0 ; j < 3 ; j + + )
{
tit = calloc ( 1 , sizeof ( Testitem ) ) ;
tit - > mode = i ;
tit - > item = elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc1 ,
2012-06-21 00:48:00 -07:00
tit /* item data */ ,
glit /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl18_sel /* func */ ,
NULL /* func data */ ) ;
i + + ;
}
}
static void
2013-08-31 18:18:03 -07:00
gl18_con ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info )
2012-06-21 00:48:00 -07:00
{
Elm_Object_Item * glit = event_info ;
elm_genlist_item_subitems_clear ( glit ) ;
}
static void
2013-08-31 18:18:03 -07:00
gl18_exp_req ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
2012-06-21 00:48:00 -07:00
void * event_info )
{
Elm_Object_Item * glit = event_info ;
elm_genlist_item_expanded_set ( glit , EINA_TRUE ) ;
}
static void
2013-08-31 18:18:03 -07:00
gl18_con_req ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
2012-06-21 00:48:00 -07:00
void * event_info )
{
Elm_Object_Item * glit = event_info ;
elm_genlist_item_expanded_set ( glit , EINA_FALSE ) ;
}
void
2013-08-31 18:18:03 -07:00
test_genlist18 ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2012-06-21 00:48:00 -07:00
{
Evas_Object * win , * gl , * bx , * fr1 , * fr2 , * bx2 , * rdg ;
Testitem * tit = NULL ;
int i , j ;
2014-08-27 11:50:43 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2012-06-21 00:48:00 -07:00
win = elm_win_util_standard_add ( " genlist-tree-decorate-all " ,
" Genlist Tree and Decorate All Mode " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
2014-08-27 11:50:43 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
2012-06-21 00:48:00 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
bx2 = elm_box_add ( win ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2012-06-21 00:48:00 -07:00
evas_object_show ( gl ) ;
elm_genlist_tree_effect_enabled_set ( gl , EINA_TRUE ) ;
evas_object_data_set ( gl , " tree_effect " , " true " ) ;
/* normal item */
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " tree_effect " ; /* item/tree_effect */
api - > itc1 - > func . text_get = gl15_text_get ;
api - > itc1 - > func . content_get = gl15_content_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = gl18_del ;
api - > itc1 - > decorate_all_item_style = " edit " ;
2012-06-21 00:48:00 -07:00
/* expandable item */
2014-08-27 11:50:43 -07:00
api - > itc2 = elm_genlist_item_class_new ( ) ;
api - > itc2 - > item_style = " tree_effect " ; /* tree/tree_effect */
api - > itc2 - > func . text_get = gl15_text_get ;
api - > itc2 - > func . content_get = gl15_content_get ;
api - > itc2 - > func . state_get = gl_state_get ;
api - > itc2 - > func . del = gl18_del ;
api - > itc2 - > decorate_all_item_style = " edit " ;
2012-06-21 00:48:00 -07:00
for ( i = 0 ; i < 5 ; i + + )
{
tit = calloc ( 1 , sizeof ( Testitem ) ) ;
tit - > mode = i ;
tit - > item = elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc2 ,
2012-06-21 00:48:00 -07:00
tit /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_TREE ,
gl18_sel /* func */ ,
NULL /* func data */ ) ;
}
for ( j = 0 ; j < 3 ; j + + )
{
tit = calloc ( 1 , sizeof ( Testitem ) ) ;
tit - > mode = i ;
tit - > item = elm_genlist_item_append ( gl ,
2014-08-27 11:50:43 -07:00
api - > itc1 ,
2012-06-21 00:48:00 -07:00
tit /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl18_sel /* func */ ,
NULL /* func data */ ) ;
i + + ;
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
elm_genlist_item_class_free ( api - > itc2 ) ;
2012-06-21 00:48:00 -07:00
2014-08-27 11:50:43 -07:00
evas_object_smart_callback_add ( gl , " expand,request " , gl18_exp_req , api ) ;
evas_object_smart_callback_add ( gl , " contract,request " , gl18_con_req , api ) ;
evas_object_smart_callback_add ( gl , " expanded " , gl18_exp , api ) ;
evas_object_smart_callback_add ( gl , " contracted " , gl18_con , api ) ;
2012-06-21 00:48:00 -07:00
elm_box_pack_end ( bx , gl ) ;
fr1 = _tree_effect_frame_new ( win , & rdg , gl ) ;
elm_box_pack_end ( bx2 , fr1 ) ;
fr2 = _decorate_all_mode_frame_new ( win , rdg , gl ) ;
elm_box_pack_end ( bx2 , fr2 ) ;
evas_object_resize ( win , 400 , 800 ) ;
evas_object_show ( win ) ;
}
2015-09-01 10:34:43 -07:00
/*** Genlist Full Widget ***************************************************/
2012-07-31 13:07:09 -07:00
void
2013-08-31 18:18:03 -07:00
test_genlist19 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2012-07-31 13:07:09 -07:00
{
Evas_Object * win , * gl , * bt_50 , * bt_1500 , * bx , * bxx , * bt ;
Evas_Object * over ;
Elm_Object_Item * gli ;
int i ;
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
2013-12-15 14:21:23 -08:00
win = elm_win_util_standard_add ( " genlist-full " , " Genlist Full Widget " ) ;
2012-07-31 13:07:09 -07:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
bxx = elm_box_add ( win ) ;
elm_win_resize_object_add ( win , bxx ) ;
evas_object_size_hint_weight_set ( bxx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( bxx ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( bx , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
api - > box = bx ;
evas_object_show ( bx ) ;
bt = elm_button_add ( win ) ;
elm_object_text_set ( bt , " Next API function " ) ;
evas_object_smart_callback_add ( bt , " clicked " , _api_bt_clicked , ( void * ) api ) ;
elm_box_pack_end ( bxx , bt ) ;
elm_object_disabled_set ( bt , api - > state = = API_STATE_LAST ) ;
evas_object_show ( bt ) ;
elm_box_pack_end ( bxx , bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_smart_callback_add ( gl , " selected " , _gl_selected , NULL ) ;
evas_object_smart_callback_add ( gl , " clicked,double " , _gl_double_clicked , NULL ) ;
evas_object_smart_callback_add ( gl , " longpressed " , _gl_longpress , NULL ) ;
// FIXME: This causes genlist to resize the horiz axis very slowly :(
// Reenable this and resize the window horizontally, then try to resize it back
//elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
2014-08-27 11:50:43 -07:00
api - > gl = gl ;
2012-07-31 13:07:09 -07:00
evas_object_show ( gl ) ;
over = evas_object_rectangle_add ( evas_object_evas_get ( win ) ) ;
evas_object_color_set ( over , 0 , 0 , 0 , 0 ) ;
evas_object_event_callback_add ( over , EVAS_CALLBACK_MOUSE_MOVE , _move , gl ) ;
2014-01-06 23:48:58 -08:00
evas_object_repeat_events_set ( over , EINA_TRUE ) ;
2012-07-31 13:07:09 -07:00
evas_object_show ( over ) ;
evas_object_size_hint_weight_set ( over , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , over ) ;
2014-08-27 11:50:43 -07:00
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " full " ;
api - > itc1 - > func . text_get = NULL ;
api - > itc1 - > func . content_get = gl_content_full_get ;
api - > itc1 - > func . state_get = gl_state_get ;
api - > itc1 - > func . del = NULL ;
2012-07-31 13:07:09 -07:00
bt_50 = elm_button_add ( win ) ;
elm_object_text_set ( bt_50 , " Go to 50 " ) ;
evas_object_show ( bt_50 ) ;
elm_box_pack_end ( bx , bt_50 ) ;
bt_1500 = elm_button_add ( win ) ;
elm_object_text_set ( bt_1500 , " Go to 1500 " ) ;
evas_object_show ( bt_1500 ) ;
elm_box_pack_end ( bx , bt_1500 ) ;
for ( i = 0 ; i < 2000 ; i + + )
{
2014-08-27 11:50:43 -07:00
gli = elm_genlist_item_append ( gl , api - > itc1 ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) i /* item data */ ,
2012-07-31 13:07:09 -07:00
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
2013-02-16 19:53:02 -08:00
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
2012-07-31 13:07:09 -07:00
if ( i = = 50 )
evas_object_smart_callback_add ( bt_50 , " clicked " , _bt50_cb , gli ) ;
else if ( i = = 1500 )
evas_object_smart_callback_add ( bt_1500 , " clicked " , _bt1500_cb , gli ) ;
}
2014-08-27 11:50:43 -07:00
elm_genlist_item_class_free ( api - > itc1 ) ;
2012-07-31 13:07:09 -07:00
evas_object_resize ( win , 480 , 800 ) ;
evas_object_show ( win ) ;
}
2012-11-27 07:21:27 -08:00
2015-09-01 10:34:43 -07:00
/*** Genlist Item Styles ***************************************************/
2012-11-27 07:21:27 -08:00
const char * _genlist_styles [ ] = {
" default " , " full " , " one_icon " , " end_icon " , " no_icon " ,
" default_style " , " double_label " , " icon_top_text_bottom " ,
2013-06-23 07:18:13 -07:00
" message " , " media " , " media-album " , " media-preview " ,
2012-11-27 07:21:27 -08:00
NULL
} ;
static void
_genlist_renew ( Evas_Object * obj , const char * style )
{
Elm_Genlist_Item_Class * ic ;
2013-06-12 04:15:52 -07:00
Evas_Object * check ;
2012-11-27 07:21:27 -08:00
int i ;
if ( ! obj ) return ;
2013-09-30 03:21:31 -07:00
2012-11-27 07:21:27 -08:00
elm_genlist_clear ( obj ) ;
2013-06-12 04:15:52 -07:00
check = evas_object_data_get ( obj , " check " ) ;
if ( elm_check_state_get ( check ) )
elm_genlist_mode_set ( obj , ELM_LIST_COMPRESS ) ;
else
elm_genlist_mode_set ( obj , ELM_LIST_SCROLL ) ;
2013-09-30 03:21:31 -07:00
2012-11-27 07:21:27 -08:00
ic = elm_genlist_item_class_new ( ) ;
ic - > item_style = style ;
ic - > func . text_get = gl_text_get ;
ic - > func . content_get = gl_content_get ;
ic - > func . state_get = NULL ;
ic - > func . del = NULL ;
for ( i = 0 ; i < 50 ; i + + )
{
2014-06-10 22:04:48 -07:00
elm_genlist_item_append ( obj , ic , ( void * ) ( uintptr_t ) i , NULL ,
2012-11-27 07:21:27 -08:00
ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
}
elm_genlist_item_class_free ( ic ) ;
}
static void
2013-08-31 18:18:03 -07:00
_item_style_sel_cb ( void * data EINA_UNUSED , Evas_Object * obj , void * event_info )
2012-11-27 07:21:27 -08:00
{
Evas_Object * gl = evas_object_data_get ( obj , " genlist " ) ;
if ( gl )
_genlist_renew ( gl , elm_object_item_text_get ( event_info ) ) ;
}
static Evas_Object *
_item_styles_list_create ( Evas_Object * parent )
{
Evas_Object * list ;
int i = 0 ;
list = elm_list_add ( parent ) ;
2014-02-02 00:25:25 -08:00
evas_object_size_hint_weight_set ( list , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( list , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2012-11-27 07:21:27 -08:00
while ( _genlist_styles [ i ] )
{
elm_list_item_append ( list , _genlist_styles [ i ] , NULL , NULL ,
_item_style_sel_cb , _genlist_styles [ i ] ) ;
i + + ;
}
return list ;
}
void
2013-08-31 18:18:03 -07:00
test_genlist_item_styles ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2012-11-27 07:21:27 -08:00
{
2013-06-12 04:15:52 -07:00
Evas_Object * win , * box , * gl , * list , * table , * check ;
2012-11-27 07:21:27 -08:00
2013-12-15 15:42:06 -08:00
win = elm_win_util_standard_add ( " genlist-item-styles " , " Genlist Item Styles " ) ;
2012-11-27 07:21:27 -08:00
elm_win_autodel_set ( win , EINA_TRUE ) ;
box = elm_box_add ( win ) ;
elm_box_horizontal_set ( box , EINA_TRUE ) ;
2014-02-02 00:25:25 -08:00
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2012-11-27 07:21:27 -08:00
elm_win_resize_object_add ( win , box ) ;
evas_object_show ( box ) ;
list = _item_styles_list_create ( box ) ;
evas_object_show ( list ) ;
2013-06-12 04:15:52 -07:00
table = _elm_min_set ( list , box , 200 , 0 ) ;
2014-02-02 00:25:25 -08:00
evas_object_size_hint_weight_set ( table , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( table , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2012-11-27 07:21:27 -08:00
elm_box_pack_end ( box , table ) ;
evas_object_show ( table ) ;
gl = elm_genlist_add ( box ) ;
2014-02-02 00:25:25 -08:00
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2012-11-27 07:21:27 -08:00
elm_box_pack_end ( box , gl ) ;
evas_object_show ( gl ) ;
2013-09-30 03:21:31 -07:00
2013-06-12 04:15:52 -07:00
check = elm_check_add ( win ) ;
elm_object_text_set ( check , " Compress " ) ;
elm_box_pack_end ( box , check ) ;
evas_object_show ( check ) ;
evas_object_data_set ( gl , " check " , check ) ;
2014-02-05 21:31:15 -08:00
_genlist_renew ( gl , " default " ) ;
2012-11-27 07:21:27 -08:00
evas_object_data_set ( list , " genlist " , gl ) ;
2013-12-14 12:45:57 -08:00
evas_object_resize ( win , 600 , 600 ) ;
evas_object_show ( win ) ;
2012-11-27 07:21:27 -08:00
}
2013-11-05 20:11:23 -08:00
2015-09-01 10:34:43 -07:00
/*** Genlist Multi Select **************************************************/
2013-11-05 20:11:23 -08:00
typedef struct _Genlist_Multi_Data Genlist_Multi_Data ;
struct _Genlist_Multi_Data
{
Evas_Object * gl ;
Evas_Object * rd1 ;
Evas_Object * rd2 ;
} ;
static void
_multi_select_changed_cb ( void * data , Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
Eina_Bool multi = elm_check_state_get ( obj ) ;
Genlist_Multi_Data * gd = data ;
if ( ! gd ) return ;
elm_genlist_multi_select_set ( gd - > gl , multi ) ;
elm_object_disabled_set ( gd - > rd1 , ! multi ) ;
elm_object_disabled_set ( gd - > rd2 , ! multi ) ;
}
static void
_multi_select_mode_changed_cb ( void * data , Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
elm_genlist_multi_select_mode_set ( data , elm_radio_value_get ( obj ) ) ;
}
static void
_multi_select_frame_create ( Evas_Object * bx , Genlist_Multi_Data * gd )
{
Evas_Object * fr , * bx2 , * bx3 , * tg , * rd , * rdg ;
if ( ! gd ) return ;
fr = elm_frame_add ( bx ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , 0.5 ) ;
elm_object_text_set ( fr , " Multi Select Option " ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
bx2 = elm_box_add ( fr ) ;
elm_object_content_set ( fr , bx2 ) ;
evas_object_show ( bx2 ) ;
tg = elm_check_add ( bx2 ) ;
elm_object_style_set ( tg , " toggle " ) ;
elm_object_text_set ( tg , " Multi Select Mode " ) ;
elm_box_pack_end ( bx2 , tg ) ;
evas_object_show ( tg ) ;
bx3 = elm_box_add ( bx2 ) ;
elm_box_horizontal_set ( bx3 , EINA_TRUE ) ;
elm_box_pack_end ( bx2 , bx3 ) ;
evas_object_show ( bx3 ) ;
gd - > rd1 = rdg = rd = elm_radio_add ( bx3 ) ;
elm_radio_state_value_set ( rd , ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT ) ;
elm_object_text_set ( rd , " Default Mode " ) ;
elm_box_pack_end ( bx3 , rd ) ;
evas_object_show ( rd ) ;
elm_object_disabled_set ( rd , EINA_TRUE ) ;
evas_object_smart_callback_add ( rd , " changed " ,
_multi_select_mode_changed_cb , gd - > gl ) ;
gd - > rd2 = rd = elm_radio_add ( bx3 ) ;
elm_radio_state_value_set ( rd , ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL ) ;
elm_radio_group_add ( rd , rdg ) ;
elm_object_text_set ( rd , " With Control Mode " ) ;
elm_box_pack_end ( bx3 , rd ) ;
evas_object_show ( rd ) ;
elm_object_disabled_set ( rd , EINA_TRUE ) ;
evas_object_smart_callback_add ( rd , " changed " ,
_multi_select_mode_changed_cb , gd - > gl ) ;
evas_object_smart_callback_add ( tg , " changed " ,
_multi_select_changed_cb , gd ) ;
}
2016-03-21 05:33:19 -07:00
static void
_multi_data_free_cb ( void * data , Evas * e EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
free ( data ) ;
}
2013-11-05 20:11:23 -08:00
void
test_genlist_multi_select ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * gl , * bx ;
Genlist_Multi_Data * gd = calloc ( 1 , sizeof ( Genlist_Multi_Data ) ) ;
Elm_Genlist_Item_Class * itc = NULL ;
int i = 0 ;
win = elm_win_util_standard_add ( " genlist-multi-select " , " Genlist Multi Select " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
2016-03-21 05:33:19 -07:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _multi_data_free_cb , gd ) ;
2013-11-05 20:11:23 -08:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
gd - > gl = gl = elm_genlist_add ( bx ) ;
_multi_select_frame_create ( bx , gd ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( gl ) ;
itc = elm_genlist_item_class_new ( ) ;
2013-11-17 16:57:16 -08:00
itc - > item_style = " default " ;
2013-11-05 20:11:23 -08:00
itc - > func . text_get = gl_text_get ;
2014-07-09 08:30:48 -07:00
itc - > func . content_get = gl_content_get ;
2013-11-05 20:11:23 -08:00
itc - > func . state_get = gl_state_get ;
2013-11-17 16:57:16 -08:00
itc - > func . del = NULL ;
2013-11-05 20:11:23 -08:00
for ( i = 0 ; i < 100 ; i + + )
{
elm_genlist_item_append ( gl , itc ,
( void * ) ( uintptr_t ) i /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
gl_sel /* func */ ,
( void * ) ( uintptr_t ) ( i * 10 ) /* func data */ ) ;
}
2013-11-06 08:24:12 -08:00
elm_genlist_item_class_free ( itc ) ;
2013-12-14 12:45:57 -08:00
evas_object_resize ( win , 320 , 500 ) ;
evas_object_show ( win ) ;
2013-11-05 20:11:23 -08:00
}
2013-11-13 00:03:49 -08:00
2014-05-26 23:53:11 -07:00
2015-09-01 10:34:43 -07:00
/*** Genlist Item Search By Text *******************************************/
2014-05-26 23:53:11 -07:00
typedef struct _gl20_Event_Data gl20_Event_Data ;
struct _gl20_Event_Data
{
Evas_Object * gl_obj ;
Evas_Object * tg_obj ;
Evas_Object * en_obj ;
Elm_Object_Item * last_item_found ;
} ;
static const char * _gl20_items_text [ ] = {
" Albany " , " Annapolis " ,
" Atlanta " , " Augusta " ,
" Austin " , " Baton Rouge " ,
" Bismarck " , " Boise " ,
" Boston " , " Carson City " ,
" Charleston " , " Cheyenne " ,
" Columbia " , " Columbus " ,
" Concord " , " Denver " ,
" Des Moines " , " Dover " ,
" Frankfort " , " Harrisburg " ,
" Hartford " , " Helena " ,
" Honolulu " , " Indianapolis " ,
" Jackson " , " Jefferson City " ,
" Juneau " , " Lansing " ,
" Lincoln " , " Little Rock " ,
" Madison " , " Montgomery " ,
" Montpelier " , " Nashville " ,
" Oklahoma City " , " Olympia " ,
" Phoenix " , " Pierre " ,
" Providence " , " Raleigh " ,
" Richmond " , " Sacramento " ,
" Saint Paul " , " Salem " ,
" Salt Lake City " , " Santa Fe " ,
" Springfield " , " Tallahassee " ,
" Topeka " , " Trenton " } ;
2016-02-01 03:48:21 -08:00
static void
_gl20_del_cb ( void * data , Evas * e EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
free ( data ) ;
}
2014-05-26 23:53:11 -07:00
static char *
2014-07-23 20:41:33 -07:00
_gl20_text_get ( void * data , Evas_Object * obj EINA_UNUSED ,
const char * part EINA_UNUSED )
2014-05-26 23:53:11 -07:00
{
char buf [ 32 ] ;
int item_index = ( int ) ( uintptr_t ) data ;
if ( item_index < 50 )
{
snprintf ( buf , sizeof ( buf ) , " %s " , _gl20_items_text [ item_index ] ) ;
return strdup ( buf ) ;
}
else if ( item_index < 100 )
{
snprintf ( buf , sizeof ( buf ) , " %X " , ( item_index - 50 ) ) ;
return strdup ( buf ) ;
}
else if ( item_index = = 100 )
return strdup ( " Tree Item " ) ;
return NULL ;
}
static void
2014-07-23 20:41:33 -07:00
_gl20_search_item ( gl20_Event_Data * event_data , Elm_Object_Item * it )
2014-05-26 23:53:11 -07:00
{
const char * str = elm_entry_entry_get ( event_data - > en_obj ) ;
if ( ! str | | ! strlen ( str ) ) return ;
2014-07-23 20:41:33 -07:00
Elm_Glob_Match_Flags flag = 0 ;
if ( ! elm_check_state_get ( event_data - > tg_obj ) ) flag = ELM_GLOB_MATCH_NOCASE ;
2014-05-26 23:53:11 -07:00
printf ( " Looking for \" %s \" . " , str ) ;
2014-07-23 20:41:33 -07:00
event_data - > last_item_found = elm_genlist_search_by_text_item_get
( event_data - > gl_obj , it , NULL , str , flag ) ;
2014-05-26 23:53:11 -07:00
if ( event_data - > last_item_found )
{
printf ( " Found. \n " ) ;
elm_genlist_item_selected_set ( event_data - > last_item_found , EINA_TRUE ) ;
elm_genlist_item_bring_in ( event_data - > last_item_found ,
ELM_GENLIST_ITEM_SCROLLTO_MIDDLE ) ;
elm_object_focus_set ( event_data - > en_obj , EINA_TRUE ) ;
}
else
printf ( " Not Found. \n " ) ;
}
static void
_gl20_search_settings_changed_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * einfo EINA_UNUSED )
{
2014-07-23 20:41:33 -07:00
_gl20_search_item ( data , NULL ) ;
2014-05-26 23:53:11 -07:00
}
static Elm_Genlist_Item_Class *
_gl20_item_class_create ( const char * item_style )
{
Elm_Genlist_Item_Class * itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = item_style ;
itc - > func . text_get = _gl20_text_get ;
2014-07-09 08:30:48 -07:00
itc - > func . content_get = gl_content_get ;
2014-05-26 23:53:11 -07:00
itc - > func . state_get = gl_state_get ;
2014-07-09 08:30:48 -07:00
itc - > func . del = NULL ;
2014-05-26 23:53:11 -07:00
return itc ;
}
static void
_gl20_expand_cb ( void * data EINA_UNUSED , Evas_Object * o EINA_UNUSED ,
void * event_info )
{
Elm_Object_Item * glit = event_info ;
Evas_Object * gl = elm_object_item_widget_get ( glit ) ;
Elm_Genlist_Item_Class * itc = NULL ;
int i = 0 ;
itc = _gl20_item_class_create ( " default " ) ;
for ( i = 50 ; i < 100 ; i + + )
{
elm_genlist_item_append ( gl , itc ,
( void * ) ( uintptr_t ) i /* item data */ ,
glit /* parent */ ,
ELM_GENLIST_ITEM_NONE , NULL /* func */ ,
NULL /* func data */ ) ;
}
elm_genlist_item_class_free ( itc ) ;
}
static void _gl20_on_keydown ( void * data , Evas * evas EINA_UNUSED ,
Evas_Object * o EINA_UNUSED , void * einfo )
{
Evas_Event_Key_Down * ev = einfo ;
gl20_Event_Data * event_data = ( gl20_Event_Data * ) data ;
if ( ! strcmp ( ev - > key , " Return " ) )
{
printf ( " Looking for next item \n " ) ;
2014-07-23 20:41:33 -07:00
_gl20_search_item ( data , event_data - > last_item_found ) ;
2014-05-26 23:53:11 -07:00
}
}
void
test_genlist20 ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * bx , * gl ;
Evas_Object * fr , * lb_frame ; // info frame
Evas_Object * bx_entry , * lb_entry , * en ; // search line
Evas_Object * tg ; // "case sensitive" toggle
Elm_Genlist_Item_Class * itc = NULL ;
gl20_Event_Data * event_data = NULL ;
int i = 0 ;
win = elm_win_util_standard_add ( " genlist-item-search-by-text " ,
" Genlist Item Search By Text " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
fr = elm_frame_add ( bx ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( fr , " Information " ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
lb_frame = elm_label_add ( fr ) ;
elm_object_text_set ( lb_frame ,
" <align=left>This is an example of "
" elm_genlist_search_by_text_item_get() usage.<br> "
" Enter search string to the entry and press Enter to "
" show next search result.<br> " ) ;
elm_object_content_set ( fr , lb_frame ) ;
evas_object_show ( lb_frame ) ;
tg = elm_check_add ( win ) ;
elm_object_style_set ( tg , " toggle " ) ;
elm_object_text_set ( tg , " Case Sensitive Search " ) ;
elm_check_state_set ( tg , EINA_TRUE ) ;
elm_box_pack_end ( bx , tg ) ;
evas_object_show ( tg ) ;
bx_entry = elm_box_add ( win ) ;
elm_box_horizontal_set ( bx_entry , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( bx_entry , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx_entry , EVAS_HINT_FILL , 0.0 ) ;
elm_box_pack_end ( bx , bx_entry ) ;
evas_object_show ( bx_entry ) ;
lb_entry = elm_label_add ( win ) ;
elm_object_text_set ( lb_entry , " Search: " ) ;
evas_object_size_hint_weight_set ( lb_entry , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( lb_entry , 0.0 , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx_entry , lb_entry ) ;
evas_object_show ( lb_entry ) ;
en = elm_entry_add ( win ) ;
elm_entry_single_line_set ( en , EINA_TRUE ) ;
elm_entry_scrollable_set ( en , EINA_TRUE ) ;
elm_object_part_text_set ( en , " guide " , " Type item's name here to search. " ) ;
evas_object_size_hint_weight_set ( en , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( en , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx_entry , en ) ;
evas_object_show ( en ) ;
elm_object_focus_set ( en , EINA_TRUE ) ;
gl = elm_genlist_add ( bx ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( gl ) ;
event_data = calloc ( 1 , sizeof ( gl20_Event_Data ) ) ;
event_data - > tg_obj = tg ;
event_data - > en_obj = en ;
event_data - > gl_obj = gl ;
event_data - > last_item_found = NULL ;
evas_object_event_callback_add ( en , EVAS_CALLBACK_KEY_DOWN ,
_gl20_on_keydown , ( void * ) event_data ) ;
evas_object_event_callback_add ( gl , EVAS_CALLBACK_FREE ,
2016-02-01 03:48:21 -08:00
_gl20_del_cb , ( void * ) event_data ) ;
2014-05-26 23:53:11 -07:00
evas_object_smart_callback_add ( en , " changed,user " ,
_gl20_search_settings_changed_cb , ( void * ) event_data ) ;
evas_object_smart_callback_add ( tg , " changed " ,
_gl20_search_settings_changed_cb , ( void * ) event_data ) ;
evas_object_smart_callback_add ( gl , " expand,request " , gl4_exp_req , gl ) ;
evas_object_smart_callback_add ( gl , " contract,request " , gl4_con_req , gl ) ;
evas_object_smart_callback_add ( gl , " contracted " , gl4_con , gl ) ;
evas_object_smart_callback_add ( gl , " expanded " , _gl20_expand_cb , gl ) ;
itc = _gl20_item_class_create ( " tree_effect " ) ;
elm_genlist_item_append ( gl , itc ,
( void * ) 100 /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_TREE ,
NULL /* func */ ,
NULL /* func data */ ) ;
itc - > item_style = " default " ;
for ( i = 0 ; i < 50 ; i + + )
{
elm_genlist_item_append ( gl , itc ,
( void * ) ( uintptr_t ) i /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
NULL /* func */ ,
NULL /* func data */ ) ;
}
elm_genlist_item_class_free ( itc ) ;
evas_object_resize ( win , 320 , 500 ) ;
evas_object_show ( win ) ;
}
2013-11-13 00:03:49 -08:00
2015-09-01 10:34:43 -07:00
/*** Genlist Del ***********************************************************/
2013-11-13 00:03:49 -08:00
static void _gl_del_sel ( void * data , Evas_Object * obj , void * event_info ) ;
static void
_gl_del_win_del_cb ( void * data , Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
if ( ! data ) return ;
elm_genlist_item_class_free ( data ) ;
}
2013-11-17 16:54:21 -08:00
static void
_gl_del_unrealized_cb ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info )
{
int num = ( int ) ( uintptr_t ) elm_object_item_data_get ( event_info ) ;
printf ( " unrealized item # %d \n " , num ) ;
}
2014-08-09 08:53:46 -07:00
static void
_gl_del_doubleclick_cb ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info )
{
int num = ( int ) ( uintptr_t ) elm_object_item_data_get ( event_info ) ;
int num_category = num % 4 ;
if ( num_category = = 3 )
elm_genlist_clear ( obj ) ;
}
2013-11-13 00:03:49 -08:00
static Evas_Object *
_gl_del_genlist_add ( Evas_Object * bx )
{
Evas_Object * gl = NULL ;
gl = elm_genlist_add ( bx ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( gl ) ;
2013-11-17 16:54:21 -08:00
evas_object_smart_callback_add ( gl , " unrealized " ,
_gl_del_unrealized_cb , NULL ) ;
2014-08-09 08:53:46 -07:00
evas_object_smart_callback_add ( gl , " clicked,double " ,
_gl_del_doubleclick_cb , NULL ) ;
2013-11-13 00:03:49 -08:00
return gl ;
}
static void
_gl_del_item_append ( Evas_Object * gl , Elm_Genlist_Item_Class * itc )
{
int i = 0 ;
for ( i = 0 ; i < 1000 ; i + + )
{
elm_genlist_item_append ( gl , itc ,
( void * ) ( uintptr_t ) i /* item data */ ,
NULL /* parent */ ,
ELM_GENLIST_ITEM_NONE ,
_gl_del_sel /* func */ ,
( void * ) ( uintptr_t ) ( i ) /* func data */ ) ;
}
}
2015-09-01 10:34:43 -07:00
char *
_gl_del_text_get ( void * data , Evas_Object * obj EINA_UNUSED ,
const char * part EINA_UNUSED )
2013-11-13 00:03:49 -08:00
{
char buf [ 256 ] = { 0 } ;
int num = ( int ) ( uintptr_t ) data ;
2015-12-24 10:31:14 -08:00
int num_category = num % 10 ;
2013-11-13 00:03:49 -08:00
2015-12-24 10:31:14 -08:00
if ( num_category = = 3 )
2014-08-09 08:53:46 -07:00
snprintf ( buf , sizeof ( buf ) ,
" Item #%.02i - 1. Item Del " , num ) ;
2015-12-24 10:31:14 -08:00
else if ( num_category = = 5 )
2014-08-09 08:53:46 -07:00
snprintf ( buf , sizeof ( buf ) ,
" Item #%.02i - 2. Genlist Clear and Item Append " , num ) ;
2015-12-24 10:31:14 -08:00
else if ( num_category = = 7 )
2014-08-09 08:53:46 -07:00
snprintf ( buf , sizeof ( buf ) ,
" Item #%.02i - 3. Genlist Del " , num ) ;
2015-12-24 10:31:14 -08:00
else if ( num_category = = 9 )
2014-08-09 08:53:46 -07:00
snprintf ( buf , sizeof ( buf ) ,
" Item #%.02i - 4. Genlist Clear on double-click " , num ) ;
2015-12-24 10:31:14 -08:00
else
snprintf ( buf , sizeof ( buf ) ,
" Item #%.02i - Normal item " , num ) ;
2013-11-13 00:03:49 -08:00
return strdup ( buf ) ;
}
static void
_gl_del_sel ( void * data , Evas_Object * obj , void * event_info )
{
int num = ( int ) ( uintptr_t ) data ;
2015-12-24 10:31:14 -08:00
int num_category = num % 10 ;
2013-11-13 00:03:49 -08:00
Elm_Object_Item * it = event_info ;
Elm_Genlist_Item_Class * itc =
( Elm_Genlist_Item_Class * ) elm_genlist_item_item_class_get ( it ) ;
2015-12-24 10:31:14 -08:00
if ( num_category = = 3 )
2013-11-13 00:03:49 -08:00
elm_object_item_del ( it ) ;
2015-12-24 10:31:14 -08:00
else if ( num_category = = 5 )
2013-11-13 00:03:49 -08:00
{
elm_genlist_clear ( obj ) ;
2015-01-15 05:36:57 -08:00
_gl_del_item_append ( obj , itc ) ;
2013-11-13 00:03:49 -08:00
}
2015-12-24 10:31:14 -08:00
else if ( num_category = = 7 )
2013-11-13 00:03:49 -08:00
{
evas_object_del ( obj ) ;
}
}
2013-11-17 16:54:21 -08:00
static void
_gl_del_del_cb ( void * data , Evas_Object * obj EINA_UNUSED )
{
printf ( " deleted item # %d \n " , ( int ) ( uintptr_t ) data ) ;
}
2013-11-13 00:03:49 -08:00
void
test_genlist_del ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * bx , * fr , * lb , * gl ;
Elm_Genlist_Item_Class * itc = NULL ;
win = elm_win_util_standard_add ( " genlist-del " , " Genlist Del " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
elm_box_align_set ( bx , 0.5 , 0.0 ) ;
evas_object_show ( bx ) ;
fr = elm_frame_add ( bx ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( fr , " Information " ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
lb = elm_label_add ( fr ) ;
elm_object_text_set ( lb , " <align=left>This example tests the following cases "
" on item selection.<br/> "
" 1. genlist item deletion<br/> "
" 2. genlist clear and item append<br/> "
2014-08-09 08:53:46 -07:00
" 3. genlist del<br/> "
" 4. genlist clear on double-click</align> " ) ;
2013-11-13 00:03:49 -08:00
elm_object_content_set ( fr , lb ) ;
evas_object_show ( lb ) ;
itc = elm_genlist_item_class_new ( ) ;
2013-11-17 16:57:16 -08:00
itc - > item_style = " default " ;
2013-11-13 00:03:49 -08:00
itc - > func . text_get = _gl_del_text_get ;
2014-07-09 08:30:48 -07:00
itc - > func . content_get = gl_content_get ;
2013-11-13 00:03:49 -08:00
itc - > func . state_get = NULL ;
2013-11-17 16:57:16 -08:00
itc - > func . del = _gl_del_del_cb ;
2013-11-13 00:03:49 -08:00
evas_object_event_callback_add ( win , EVAS_CALLBACK_DEL ,
_gl_del_win_del_cb , itc ) ;
gl = _gl_del_genlist_add ( bx ) ;
_gl_del_item_append ( gl , itc ) ;
2013-12-14 12:45:57 -08:00
evas_object_resize ( win , 320 , 500 ) ;
evas_object_show ( win ) ;
2013-11-13 00:03:49 -08:00
}
2014-02-04 03:29:29 -08:00
2015-09-01 10:34:43 -07:00
/*** Genlist Focus *********************************************************/
2014-04-23 22:12:52 -07:00
static unsigned _gl_focus_objects = 3 ;
2014-03-22 08:13:58 -07:00
static const char * _gl_focus_object_names [ ] = { " None " , " Square " , " Button " , " Check " , " Box " } ;
2014-12-13 11:06:44 -08:00
// for the top genlist items
2014-09-07 03:43:24 -07:00
static char *
2014-12-13 11:06:44 -08:00
gl_focus_top_items_text_get ( void * data , Evas_Object * obj EINA_UNUSED ,
const char * part EINA_UNUSED )
2014-09-07 03:43:24 -07:00
{
if ( ! data ) return NULL ;
2014-12-13 11:06:44 -08:00
if ( ! strcmp ( data , " do_nothing " ) )
return strdup ( " Genlist Item " ) ;
else if ( ! strcmp ( data , " popup_sel " ) )
2016-01-24 06:44:48 -08:00
return strdup ( " Create a popup on Select (popup parent is gl) " ) ;
2014-09-07 03:43:24 -07:00
else if ( ! strcmp ( data , " popup_mouse_down " ) )
2016-01-24 06:44:48 -08:00
return strdup ( " Create a popup on Mouse Down (popup parent is gl) " ) ;
else if ( ! strcmp ( data , " popup_activate " ) )
return strdup ( " Create a popup on Activate (popup parent is win) " ) ;
2014-12-13 11:06:44 -08:00
else if ( ! strcmp ( data , " clear_on_focus " ) )
return strdup ( " Genlist Clear on Focus " ) ;
2014-09-07 03:43:24 -07:00
else
return NULL ;
}
2014-03-22 08:13:58 -07:00
static char *
gl_focus_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
{
char buf [ 256 ] ;
unsigned char op = ( uintptr_t ) data % 100 ;
unsigned char v1 , v2 ;
v1 = op / 10 ;
if ( v1 > 4 ) v1 = 4 ;
v2 = op % 10 ;
if ( v2 > 4 ) v2 = 4 ;
snprintf ( buf , sizeof ( buf ) , " %s / %s " ,
_gl_focus_object_names [ v1 ] , _gl_focus_object_names [ v2 ] ) ;
return strdup ( buf ) ;
}
static Evas_Object *
gl_focus_content_get ( void * data , Evas_Object * obj , const char * part )
{
Evas_Object * cnt = NULL ;
char op = ( uintptr_t ) data % 100 ;
char type = ( ! strcmp ( part , " elm.swallow.icon " ) ) ? op / 10 : op % 10 ;
switch ( type )
{
case 1 :
cnt = elm_bg_add ( obj ) ;
evas_object_color_set ( cnt , 128 , 18 , 128 , 255 ) ;
break ;
case 2 :
cnt = elm_button_add ( obj ) ;
break ;
case 3 :
cnt = elm_check_add ( obj ) ;
break ;
case 4 :
cnt = elm_box_add ( obj ) ;
evas_object_size_hint_align_set ( cnt , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( cnt , EINA_TRUE ) ;
elm_box_pack_end ( cnt , gl_focus_content_get ( ( void * ) 2 , obj , " " ) ) ;
elm_box_pack_end ( cnt , gl_focus_content_get ( ( void * ) 3 , obj , " " ) ) ;
elm_box_pack_end ( cnt , gl_focus_content_get ( ( void * ) 2 , obj , " " ) ) ;
break ;
default :
break ;
}
if ( cnt )
{
evas_object_size_hint_weight_set ( cnt , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( cnt ) ;
}
return cnt ;
}
2014-09-07 03:43:24 -07:00
static void
_gl_focus_sel_popup_close_btn_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
evas_object_del ( data ) ;
}
static void
_gl_focus_sel_popup_create ( Evas_Object * parent )
{
Evas_Object * popup = NULL , * btn = NULL ;
popup = elm_popup_add ( parent ) ;
elm_object_text_set ( popup , " Popup for the genlist focus test with popup creation. " ) ;
// popup buttons
btn = elm_button_add ( popup ) ;
elm_object_text_set ( btn , " Close " ) ;
elm_object_part_content_set ( popup , " button1 " , btn ) ;
evas_object_smart_callback_add ( btn , " clicked " , _gl_focus_sel_popup_close_btn_cb , popup ) ;
// popup show should be called after adding all the contents and the buttons
// of popup to set the focus into popup's contents correctly.
evas_object_show ( popup ) ;
2015-10-16 12:20:17 -07:00
elm_object_focus_set ( btn , EINA_TRUE ) ;
2014-09-07 03:43:24 -07:00
}
static void
_gl_focus_0_item_sel_cb ( void * data EINA_UNUSED , Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
_gl_focus_sel_popup_create ( obj ) ;
}
2014-04-23 22:12:52 -07:00
static void
2014-04-26 21:04:26 -07:00
_gl_focus_item_loop_enable_changed_cb ( void * data , Evas_Object * obj ,
2014-07-09 08:30:48 -07:00
void * event_info EINA_UNUSED )
2014-04-23 22:12:52 -07:00
{
Evas_Object * gl = data ;
elm_object_scroll_item_loop_enabled_set ( gl , elm_check_state_get ( obj ) ) ;
}
2014-03-22 08:13:58 -07:00
static void
2014-04-26 21:04:26 -07:00
_gl_focus_focus_on_selection_set ( Evas_Object * gl ,
Evas_Object * chk , Eina_Bool focus )
2014-03-22 08:13:58 -07:00
{
2014-03-22 08:38:01 -07:00
elm_genlist_focus_on_selection_set ( gl , focus ) ;
elm_check_state_set ( chk , focus ) ;
printf ( " genlist_focus_on_selection = %s \n " , ( focus ) ? " true " : " false " ) ;
2014-03-22 08:13:58 -07:00
}
static void
2014-04-26 21:04:26 -07:00
_gl_focus_focus_on_selection_changed_cb ( void * data , Evas_Object * obj ,
2014-07-09 08:30:48 -07:00
void * event_info EINA_UNUSED )
2014-03-22 08:13:58 -07:00
{
Eina_Bool nextstate = ! elm_genlist_focus_on_selection_get ( data ) ;
2014-04-26 21:04:26 -07:00
_gl_focus_focus_on_selection_set ( data , obj , nextstate ) ;
2014-03-22 08:13:58 -07:00
}
2015-08-04 23:57:11 -07:00
static void
_gl_focus_win_auto_focus_enable_changed ( void * data EINA_UNUSED ,
Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
elm_config_window_auto_focus_enable_set ( elm_check_state_get ( obj ) ) ;
}
static void
_gl_focus_win_auto_focus_animate_changed ( void * data EINA_UNUSED ,
Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
elm_config_window_auto_focus_animate_set ( elm_check_state_get ( obj ) ) ;
}
2014-03-22 08:13:58 -07:00
static void
2014-04-26 21:04:26 -07:00
_gl_focus_focus_highlight_changed_cb ( void * data , Evas_Object * obj ,
void * event_info EINA_UNUSED )
2014-03-22 08:38:01 -07:00
{
2014-03-23 07:32:43 -07:00
elm_win_focus_highlight_enabled_set ( data ,
2014-03-22 08:38:01 -07:00
elm_check_state_get ( obj ) ) ;
}
static void
2014-04-26 21:04:26 -07:00
_gl_focus_focus_animate_changed_cb ( void * data , Evas_Object * obj ,
void * event_info EINA_UNUSED )
2014-03-22 08:13:58 -07:00
{
2014-03-23 07:32:43 -07:00
elm_win_focus_highlight_animate_set ( data ,
2014-03-22 08:13:58 -07:00
elm_check_state_get ( obj ) ) ;
}
2014-03-23 07:32:43 -07:00
static void
2014-04-26 21:04:26 -07:00
_gl_focus_move_policy_changed_cb ( void * data EINA_UNUSED ,
Evas_Object * obj ,
void * event_info EINA_UNUSED )
2014-03-23 07:32:43 -07:00
{
int val = elm_radio_value_get ( obj ) ;
if ( val = = 0 )
elm_config_focus_move_policy_set ( ELM_FOCUS_MOVE_POLICY_CLICK ) ;
else if ( val = = 1 )
elm_config_focus_move_policy_set ( ELM_FOCUS_MOVE_POLICY_IN ) ;
}
2014-09-17 16:37:55 -07:00
static void
_gl_focus_item_focus_cb ( void * data , Evas_Object * obj , void * event_info )
{
2014-12-13 11:06:44 -08:00
printf ( " item,focused: %p \n " , event_info ) ;
if ( event_info = = data )
elm_genlist_clear ( obj ) ;
}
static void
_gl_focus_item_unfocus_cb ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info )
{
printf ( " item,unfocused %p \n " , event_info ) ;
2014-09-17 16:37:55 -07:00
}
2014-03-23 00:53:08 -07:00
static void
2016-01-24 06:44:48 -08:00
_gl_focus_item_cb ( void * data , Evas_Object * obj , void * event_info )
2014-03-23 00:53:08 -07:00
{
2016-01-24 06:44:48 -08:00
Elm_Object_Item * it = event_info ;
printf ( " %s: %p \n " , ( char * ) data , it ) ;
if ( ! strcmp ( ( char * ) data , " activated " ) & &
! strcmp ( ( char * ) elm_object_item_data_get ( it ) , " popup_activate " ) )
{
_gl_focus_sel_popup_create ( elm_object_top_widget_get ( obj ) ) ;
}
2014-03-23 00:53:08 -07:00
}
static void
_gl_focus_key_down_cb ( void * data EINA_UNUSED , Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED , void * event_info )
{
Evas_Event_Key_Down * ev = event_info ;
printf ( " \n === Key Down : %s === \n " , ev - > keyname ) ;
}
2014-09-07 03:43:24 -07:00
static void
_gl_focus_mouse_down_cb ( void * data EINA_UNUSED , Evas * e EINA_UNUSED ,
Evas_Object * obj , void * event_info )
{
Evas_Event_Mouse_Down * ev = event_info ;
Elm_Object_Item * it = NULL ;
int postret = 0 ;
it = elm_genlist_at_xy_item_get ( obj , ev - > canvas . x , ev - > canvas . y , & postret ) ;
if ( ! it ) return ;
2014-12-13 11:06:44 -08:00
if ( elm_genlist_item_index_get ( it ) = = 4 )
2014-09-07 03:43:24 -07:00
_gl_focus_sel_popup_create ( obj ) ;
}
2014-03-22 08:38:01 -07:00
static Ecore_Timer * timer = NULL ;
static void
2014-04-26 21:04:26 -07:00
_gl_focus_win_del_cb ( void * data EINA_UNUSED , Evas * e EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2014-03-22 08:38:01 -07:00
{
ecore_timer_del ( timer ) ;
timer = NULL ;
}
2014-04-26 20:38:27 -07:00
static void
2014-04-26 21:04:26 -07:00
_gl_focus_item_select_on_focus_disable_changed_cb ( void * data EINA_UNUSED , Evas_Object * obj ,
2014-07-09 08:30:48 -07:00
void * event_info EINA_UNUSED )
2014-04-26 20:38:27 -07:00
{
elm_config_item_select_on_focus_disabled_set ( elm_check_state_get ( obj ) ) ;
}
2014-07-21 02:55:55 -07:00
static void
_gl_first_item_focus_on_first_focus_in_cb ( void * data EINA_UNUSED , Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
elm_config_first_item_focus_on_first_focusin_set ( elm_check_state_get ( obj ) ) ;
}
2015-06-24 21:24:21 -07:00
static void
_gl_wheel_disabled_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
{
elm_scroller_wheel_disabled_set ( data , elm_check_state_get ( obj ) ) ;
}
2014-03-22 08:38:01 -07:00
static Eina_Bool
_focus_timer_cb ( void * data )
{
elm_object_item_focus_set ( data , EINA_TRUE ) ;
timer = NULL ;
return ECORE_CALLBACK_CANCEL ;
}
static Eina_Bool
_select_timer_cb ( void * data )
{
elm_genlist_item_selected_set ( data , EINA_TRUE ) ;
timer = NULL ;
return ECORE_CALLBACK_CANCEL ;
}
static void
_focus_btn_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
ecore_timer_del ( timer ) ;
timer = ecore_timer_add ( 1.5 , _focus_timer_cb , data ) ;
}
static void
_sel_btn_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
ecore_timer_del ( timer ) ;
timer = ecore_timer_add ( 1.5 , _select_timer_cb , data ) ;
}
2014-03-23 10:07:41 -07:00
static void
_dis_btn_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
elm_object_item_disabled_set ( data , EINA_TRUE ) ;
}
2014-09-07 02:46:15 -07:00
static void
_add_more_items_btn_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Elm_Genlist_Item_Class * itc = NULL ;
int i = 0 ;
itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = " default " ;
itc - > func . text_get = gl_text_get ;
itc - > func . content_get = NULL ;
itc - > func . state_get = NULL ;
itc - > func . del = NULL ;
for ( i = 0 ; i < 1000 ; i + + )
{
elm_genlist_item_append ( data , itc , ( void * ) ( uintptr_t ) i ,
NULL , ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
}
elm_genlist_item_class_free ( itc ) ;
}
2014-03-22 08:38:01 -07:00
static void
_focus_button_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
printf ( " Button clicked: %s \n " , ( char * ) data ) ;
}
2014-03-22 08:13:58 -07:00
2014-05-11 06:42:45 -07:00
void
_focus_autoscroll_changed_cb ( void * data EINA_UNUSED ,
Evas_Object * obj ,
void * event_info EINA_UNUSED )
2014-04-26 12:15:26 -07:00
{
2014-05-11 06:42:45 -07:00
elm_config_focus_autoscroll_mode_set ( elm_radio_value_get ( obj ) ) ;
}
/* this function is used in another tests such as list, gengrid, and toolbar. */
Evas_Object *
_focus_autoscroll_mode_frame_create ( Evas_Object * parent )
{
Evas_Object * fr , * bx , * rdg , * rd ;
fr = elm_frame_add ( parent ) ;
elm_object_text_set ( fr , " Focus Autoscroll Mode " ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , 0.5 ) ;
evas_object_show ( fr ) ;
bx = elm_box_add ( fr ) ;
elm_object_content_set ( fr , bx ) ;
evas_object_show ( bx ) ;
rdg = rd = elm_radio_add ( bx ) ;
elm_radio_state_value_set ( rd , ELM_FOCUS_AUTOSCROLL_MODE_SHOW ) ;
elm_object_text_set ( rd , " ELM_FOCUS_AUTOSCROLL_MODE_SHOW " ) ;
elm_object_tooltip_text_set ( rd , " Directly show the focused region<br/> "
" or item automatically inside a scroller. " ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( rd , 0.0 , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , rd ) ;
evas_object_show ( rd ) ;
evas_object_smart_callback_add ( rd , " changed " ,
_focus_autoscroll_changed_cb ,
NULL ) ;
rd = elm_radio_add ( bx ) ;
elm_radio_state_value_set ( rd , ELM_FOCUS_AUTOSCROLL_MODE_NONE ) ;
elm_object_text_set ( rd , " ELM_FOCUS_AUTOSCROLL_MODE_NONE " ) ;
elm_object_tooltip_text_set ( rd , " Do not show the focused region or<br/> "
" item automatically inside a scroller. " ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( rd , 0.0 , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , rd ) ;
elm_radio_group_add ( rd , rdg ) ;
evas_object_show ( rd ) ;
evas_object_smart_callback_add ( rd , " changed " ,
_focus_autoscroll_changed_cb ,
NULL ) ;
rd = elm_radio_add ( bx ) ;
elm_radio_state_value_set ( rd , ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN ) ;
elm_object_text_set ( rd , " ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN " ) ;
elm_object_tooltip_text_set ( rd , " Bring in the focused region or item<br/> "
" automatically which might invole the scrolling. " ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( rd , 0.0 , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , rd ) ;
elm_radio_group_add ( rd , rdg ) ;
evas_object_show ( rd ) ;
evas_object_smart_callback_add ( rd , " changed " ,
_focus_autoscroll_changed_cb ,
NULL ) ;
elm_radio_value_set ( rdg , elm_config_focus_autoscroll_mode_get ( ) ) ;
return fr ;
2014-04-26 12:15:26 -07:00
}
2014-09-07 01:49:04 -07:00
static void
_test_genlist_focus_option_panel_create ( Evas_Object * win , Evas_Object * bx ,
Evas_Object * gl , Elm_Object_Item * it_0 ,
Elm_Object_Item * it_2 )
2014-02-04 03:29:29 -08:00
{
2014-09-07 01:49:04 -07:00
Evas_Object * fr = NULL , * bx_opt = NULL , * chk = NULL ;
Evas_Object * bx_mv = NULL , * rd = NULL , * rdg = NULL ;
2014-09-07 01:49:59 -07:00
Evas_Object * btn_box = NULL , * btn = NULL ;
2014-03-22 08:13:58 -07:00
2014-03-22 08:38:01 -07:00
fr = elm_frame_add ( bx ) ;
elm_object_text_set ( fr , " Options " ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
bx_opt = elm_box_add ( fr ) ;
2016-01-31 20:25:01 -08:00
elm_box_layout_set ( bx_opt , evas_object_box_layout_flow_horizontal , NULL , NULL ) ;
evas_object_size_hint_weight_set ( bx_opt , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( bx_opt , EVAS_HINT_FILL , 0.0 ) ;
elm_box_align_set ( bx_opt , 0.0 , 0.5 ) ;
2014-03-22 08:38:01 -07:00
elm_object_content_set ( fr , bx_opt ) ;
evas_object_show ( bx_opt ) ;
chk = elm_check_add ( bx_opt ) ;
2015-08-04 23:57:11 -07:00
elm_object_text_set ( chk , " Window Auto Focus Enable " ) ;
elm_check_state_set ( chk , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " ,
_gl_focus_win_auto_focus_enable_changed ,
NULL ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " Window Auto Focus Animate " ) ;
2014-03-22 08:38:01 -07:00
elm_check_state_set ( chk , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
2015-08-04 23:57:11 -07:00
evas_object_smart_callback_add ( chk , " changed " ,
_gl_focus_win_auto_focus_animate_changed ,
NULL ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " Focus Highlight " ) ;
elm_check_state_set ( chk , EINA_FALSE ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
2014-03-22 08:38:01 -07:00
evas_object_smart_callback_add ( chk , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_focus_highlight_changed_cb ,
2014-03-22 08:38:01 -07:00
win ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " Focus Animation " ) ;
2015-08-04 23:57:11 -07:00
elm_check_state_set ( chk , EINA_FALSE ) ;
2014-03-22 08:38:01 -07:00
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_focus_animate_changed_cb ,
2014-03-22 08:38:01 -07:00
win ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " Focus on selection " ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_focus_on_selection_changed_cb , gl ) ;
2014-03-22 08:38:01 -07:00
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
2014-04-23 22:12:52 -07:00
chk = elm_check_add ( bx_opt ) ;
2014-09-07 06:06:47 -07:00
elm_object_text_set ( chk , " Item Looping Enable " ) ;
2014-04-23 22:12:52 -07:00
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_item_loop_enable_changed_cb , gl ) ;
2014-04-23 22:12:52 -07:00
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
2014-04-26 20:38:27 -07:00
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " Item Select on Focus disable " ) ;
elm_check_state_set ( chk , elm_config_item_select_on_focus_disabled_get ( ) ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_item_select_on_focus_disable_changed_cb ,
2014-04-26 20:38:27 -07:00
NULL ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
2014-07-21 02:55:55 -07:00
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " First item focus on first focus in " ) ;
elm_check_state_set ( chk , elm_config_first_item_focus_on_first_focusin_get ( ) ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " ,
_gl_first_item_focus_on_first_focus_in_cb ,
NULL ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
2015-06-24 21:24:21 -07:00
chk = elm_check_add ( bx_opt ) ;
elm_object_text_set ( chk , " Wheel Disabled " ) ;
elm_check_state_set ( chk , elm_scroller_wheel_disabled_get ( gl ) ) ;
evas_object_size_hint_weight_set ( chk , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( chk , " changed " , _gl_wheel_disabled_cb , gl ) ;
elm_box_pack_end ( bx_opt , chk ) ;
evas_object_show ( chk ) ;
2014-05-11 06:42:45 -07:00
// Focus Autoscroll Mode
fr = _focus_autoscroll_mode_frame_create ( bx ) ;
elm_box_pack_end ( bx , fr ) ;
2014-03-23 07:32:43 -07:00
// Focus Movement Policy
fr = elm_frame_add ( bx ) ;
elm_object_text_set ( fr , " Focus Movement Policy " ) ;
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
bx_mv = elm_box_add ( fr ) ;
elm_box_horizontal_set ( bx_mv , EINA_TRUE ) ;
elm_object_content_set ( fr , bx_mv ) ;
evas_object_show ( bx_mv ) ;
rdg = rd = elm_radio_add ( bx_mv ) ;
elm_object_text_set ( rd , " Focus Move by Click " ) ;
elm_radio_state_value_set ( rd , 0 ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( rd , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_move_policy_changed_cb ,
2014-03-23 07:32:43 -07:00
NULL ) ;
elm_box_pack_end ( bx_mv , rd ) ;
evas_object_show ( rd ) ;
rd = elm_radio_add ( bx_mv ) ;
elm_object_text_set ( rd , " Focus Move by Mouse-In " ) ;
elm_radio_group_add ( rd , rdg ) ;
elm_radio_state_value_set ( rd , 1 ) ;
evas_object_size_hint_weight_set ( rd , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_smart_callback_add ( rd , " changed " ,
2014-04-26 21:04:26 -07:00
_gl_focus_move_policy_changed_cb ,
2014-03-23 07:32:43 -07:00
NULL ) ;
elm_box_pack_end ( bx_mv , rd ) ;
evas_object_show ( rd ) ;
2014-09-23 10:10:55 -07:00
// Options
2014-03-22 08:38:01 -07:00
fr = elm_frame_add ( bx ) ;
2014-09-23 10:10:55 -07:00
elm_object_text_set ( fr , " Options " ) ;
2014-03-22 08:38:01 -07:00
evas_object_size_hint_weight_set ( fr , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( fr , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
2014-09-07 01:49:59 -07:00
btn_box = elm_box_add ( fr ) ;
elm_object_content_set ( fr , btn_box ) ;
evas_object_show ( btn_box ) ;
btn = elm_button_add ( btn_box ) ;
elm_object_text_set ( btn , " Focus 2nd Item after 1.5 seconds. " ) ;
evas_object_size_hint_weight_set ( btn , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( btn , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( btn_box , btn ) ;
evas_object_show ( btn ) ;
evas_object_smart_callback_add ( btn , " clicked " , _focus_btn_cb , it_2 ) ;
btn = elm_button_add ( btn_box ) ;
elm_object_text_set ( btn , " Select 2nd Item after 1.5 seconds. " ) ;
evas_object_size_hint_weight_set ( btn , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( btn , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( btn_box , btn ) ;
evas_object_show ( btn ) ;
evas_object_smart_callback_add ( btn , " clicked " , _sel_btn_cb , it_2 ) ;
btn = elm_button_add ( btn_box ) ;
elm_object_text_set ( btn , " Disable 1st Item. " ) ;
evas_object_size_hint_weight_set ( btn , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( btn , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( btn_box , btn ) ;
evas_object_show ( btn ) ;
evas_object_smart_callback_add ( btn , " clicked " , _dis_btn_cb , it_0 ) ;
2014-09-07 02:46:15 -07:00
btn = elm_button_add ( btn_box ) ;
elm_object_text_set ( btn , " Add more Genlist items " ) ;
evas_object_size_hint_weight_set ( btn , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( btn , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( btn_box , btn ) ;
evas_object_show ( btn ) ;
evas_object_smart_callback_add ( btn , " clicked " , _add_more_items_btn_cb , gl ) ;
2014-09-07 01:49:04 -07:00
}
void
test_genlist_focus ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * bx , * bx2 , * gl , * btn ;
unsigned lhand , rhand ;
2014-12-13 11:06:44 -08:00
Elm_Object_Item * it = NULL , * it_1 = NULL , * it_2 = NULL ;
Elm_Genlist_Item_Class * itc = NULL , * itc1 = NULL , * itc2 = NULL ;
2014-09-07 01:49:04 -07:00
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
win = elm_win_util_standard_add ( " genlist-focus " , " Genlist Focus " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
evas_object_event_callback_add ( win , EVAS_CALLBACK_DEL ,
_gl_focus_win_del_cb , NULL ) ;
2015-08-04 23:57:11 -07:00
elm_config_window_auto_focus_enable_set ( EINA_TRUE ) ;
elm_config_window_auto_focus_animate_set ( EINA_TRUE ) ;
elm_win_focus_highlight_enabled_set ( win , EINA_FALSE ) ;
elm_win_focus_highlight_animate_set ( win , EINA_FALSE ) ;
2014-09-07 01:49:04 -07:00
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
btn = elm_button_add ( bx ) ;
elm_object_text_set ( btn , " Up " ) ;
elm_box_pack_end ( bx , btn ) ;
evas_object_smart_callback_add ( btn , " clicked " ,
_focus_button_clicked_cb , " Up " ) ;
evas_object_show ( btn ) ;
bx2 = elm_box_add ( bx ) ;
elm_box_horizontal_set ( bx2 , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
btn = elm_button_add ( bx2 ) ;
elm_object_text_set ( btn , " Left " ) ;
elm_box_pack_end ( bx2 , btn ) ;
evas_object_smart_callback_add ( btn , " clicked " ,
_focus_button_clicked_cb , " Left " ) ;
evas_object_show ( btn ) ;
gl = elm_genlist_add ( bx ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_genlist_select_mode_set ( gl , ELM_OBJECT_SELECT_MODE_ALWAYS ) ;
elm_box_pack_end ( bx2 , gl ) ;
api - > gl = gl ;
evas_object_show ( gl ) ;
evas_object_smart_callback_add ( gl , " selected " , _gl_focus_item_cb , " selected " ) ;
evas_object_smart_callback_add ( gl , " unselected " , _gl_focus_item_cb , " unselected " ) ;
evas_object_smart_callback_add ( gl , " activated " , _gl_focus_item_cb , " activated " ) ;
evas_object_smart_callback_add ( gl , " highlighted " , _gl_focus_item_cb , " highlighted " ) ;
evas_object_smart_callback_add ( gl , " unhighlighted " , _gl_focus_item_cb , " unhighlighted " ) ;
evas_object_event_callback_add ( gl , EVAS_CALLBACK_KEY_DOWN , _gl_focus_key_down_cb , NULL ) ;
2014-09-07 03:43:24 -07:00
evas_object_event_callback_add ( gl , EVAS_CALLBACK_MOUSE_DOWN , _gl_focus_mouse_down_cb , NULL ) ;
2014-09-07 01:49:04 -07:00
btn = elm_button_add ( bx2 ) ;
elm_object_text_set ( btn , " Right " ) ;
elm_box_pack_end ( bx2 , btn ) ;
evas_object_smart_callback_add ( btn , " clicked " ,
_focus_button_clicked_cb , " Right " ) ;
evas_object_show ( btn ) ;
btn = elm_button_add ( bx ) ;
elm_object_text_set ( btn , " Down " ) ;
elm_box_pack_end ( bx , btn ) ;
evas_object_smart_callback_add ( btn , " clicked " ,
_focus_button_clicked_cb , " Down " ) ;
evas_object_show ( btn ) ;
2014-09-07 03:43:24 -07:00
itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = " default " ;
2014-12-13 11:06:44 -08:00
itc - > func . text_get = gl_focus_top_items_text_get ;
2014-09-07 03:43:24 -07:00
itc - > func . content_get = NULL ;
itc - > func . state_get = NULL ;
itc - > func . del = NULL ;
2014-12-13 11:06:44 -08:00
itc1 = elm_genlist_item_class_new ( ) ;
itc1 - > item_style = " default " ;
itc1 - > func . text_get = gl_focus_text_get ;
itc1 - > func . content_get = gl_focus_content_get ;
itc1 - > func . state_get = NULL ;
itc1 - > func . del = NULL ;
itc2 = elm_genlist_item_class_new ( ) ;
itc2 - > item_style = " tree_effect " ;
itc2 - > func . text_get = gl_focus_text_get ;
itc2 - > func . content_get = gl_focus_content_get ;
itc2 - > func . state_get = NULL ;
itc2 - > func . del = NULL ;
it_1 = elm_genlist_item_append ( gl , itc , " do_nothing " , NULL , ELM_GENLIST_ITEM_NONE ,
NULL , NULL ) ;
it_2 = elm_genlist_item_append ( gl , itc , " do_nothing " , NULL , ELM_GENLIST_ITEM_NONE ,
NULL , NULL ) ;
2014-09-07 03:43:24 -07:00
elm_genlist_item_append ( gl , itc , " popup_sel " , NULL , ELM_GENLIST_ITEM_NONE ,
_gl_focus_0_item_sel_cb , NULL ) ;
elm_genlist_item_append ( gl , itc , " popup_mouse_down " , NULL , ELM_GENLIST_ITEM_NONE ,
NULL , NULL ) ;
2016-01-24 06:44:48 -08:00
elm_genlist_item_append ( gl , itc , " popup_activate " , NULL , ELM_GENLIST_ITEM_NONE ,
NULL , NULL ) ;
2014-09-07 03:43:24 -07:00
2014-12-13 11:06:44 -08:00
it = elm_genlist_item_append ( gl , itc , " clear_on_focus " , NULL , ELM_GENLIST_ITEM_NONE ,
NULL , NULL ) ;
evas_object_smart_callback_add ( gl , " item,focused " , _gl_focus_item_focus_cb , it ) ;
evas_object_smart_callback_add ( gl , " item,unfocused " , _gl_focus_item_unfocus_cb , NULL ) ;
2014-09-07 01:49:04 -07:00
for ( lhand = 0 ; lhand < _gl_focus_objects ; lhand + + )
{
for ( rhand = 0 ; rhand < _gl_focus_objects ; rhand + + )
{
unsigned digit1 = lhand * 10 + rhand ;
2014-12-13 19:07:06 -08:00
elm_genlist_item_append ( gl , itc1 , ( void * ) ( uintptr_t ) digit1 ,
NULL , ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
2014-09-07 01:49:04 -07:00
unsigned digit2 = ( _gl_focus_objects - lhand - 1 ) * 10 +
( _gl_focus_objects - rhand - 1 ) ;
2014-12-13 11:06:44 -08:00
it = elm_genlist_item_append ( gl , itc1 , ( void * ) ( uintptr_t ) digit2 ,
2014-09-07 01:49:04 -07:00
NULL , ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
if ( rhand = = 4 )
elm_object_item_disabled_set ( it , EINA_TRUE ) ;
if ( rhand = = ( _gl_focus_objects - 1 ) )
2014-12-13 11:06:44 -08:00
elm_genlist_item_append ( gl , itc2 , ( void * ) ( uintptr_t ) digit1 ,
2014-09-07 01:49:04 -07:00
NULL , ELM_GENLIST_ITEM_TREE , NULL , NULL ) ;
}
}
2014-12-13 11:06:44 -08:00
elm_genlist_item_class_free ( itc ) ;
elm_genlist_item_class_free ( itc1 ) ;
elm_genlist_item_class_free ( itc2 ) ;
2014-09-07 01:49:04 -07:00
// Options
2014-12-13 11:06:44 -08:00
_test_genlist_focus_option_panel_create ( win , bx , gl , it_1 , it_2 ) ;
2014-03-22 08:38:01 -07:00
evas_object_resize ( win , 420 , 600 ) ;
2014-02-04 03:29:29 -08:00
evas_object_show ( win ) ;
}
2016-04-24 02:46:45 -07:00
/*** Genlist Filteer *******************************************************/
2015-09-23 04:50:05 -07:00
char * genlist_demo_names [ ] = {
" Aaliyah " , " Aamir " , " Aaralyn " , " Aaron " , " Abagail " ,
" Babitha " , " Bahuratna " , " Bandana " , " Bulbul " , " Cade " , " Caldwell " ,
" Chandan " , " Caster " , " Dagan " , " Daulat " , " Dag " , " Earl " , " Ebenzer " ,
" Ellison " , " Elizabeth " , " Filbert " , " Fitzpatrick " , " Florian " , " Fulton " ,
" Frazer " , " Gabriel " , " Gage " , " Galen " , " Garland " , " Gauhar " , " Hadden " ,
" Hafiz " , " Hakon " , " Haleem " , " Hank " , " Hanuman " , " Jabali " , " Jaimini " ,
" Jayadev " , " Jake " , " Jayatsena " , " Jonathan " , " Kamaal " , " Jeirk " ,
" Jasper " , " Jack " , " Mac " , " Macy " , " Marlon " , " Milson " ,
NULL
} ;
static char *
glf_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
{
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " %s " , genlist_demo_names [ ( ( int ) ( uintptr_t ) data ) % 50 ] ) ;
return strdup ( buf ) ;
}
Eina_Bool
gl_filter_get ( void * data , Evas_Object * obj EINA_UNUSED , void * key )
{
if ( ! strlen ( ( char * ) key ) ) return EINA_TRUE ;
if ( strcasestr ( genlist_demo_names [ ( ( int ) ( uintptr_t ) data ) % 50 ] , ( char * ) key ) )
return EINA_TRUE ;
// Default case should return false (item fails filter hence will be hidden)
return EINA_FALSE ;
}
static void
2016-03-04 15:41:02 -08:00
_gl_filter_finished_cb ( void * data ,
2015-09-23 09:51:39 -07:00
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
2015-09-23 04:50:05 -07:00
{
2016-03-04 15:41:02 -08:00
printf ( " Filter finished, filtered items count is %d \n " , elm_genlist_filtered_items_count ( ( Evas_Object * ) data ) ) ;
2015-09-23 04:50:05 -07:00
}
void
_entry_change_cb ( void * data , Evas_Object * obj , void * event EINA_UNUSED )
{
api_data * api = ( api_data * ) data ;
char buf [ 100 ] ;
unsigned int count = 0 ;
Elm_Object_Item * item ;
if ( api - > filter_data ) free ( api - > filter_data ) ;
sprintf ( buf , " %s " , elm_object_text_get ( obj ) ) ;
api - > filter_data = strdup ( buf ) ;
elm_genlist_filter_set ( api - > gl , ( void * ) ( api - > filter_data ) ) ;
2015-10-01 11:56:16 -07:00
if ( ! strlen ( buf ) )
2015-09-23 04:50:05 -07:00
{
printf ( " Input data string empty; returning \n " ) ;
return ;
}
2015-11-09 16:03:05 -08:00
item = elm_genlist_first_item_get ( api - > gl ) ;
if ( ! item )
{
printf ( " No matches for the key %s \n " , buf ) ;
return ;
}
while ( item )
{
+ + count ;
item = elm_genlist_item_next_get ( item ) ;
}
2015-09-23 04:50:05 -07:00
printf ( " Number of matches for %s is %d \n " , buf , count ) ;
}
void
test_genlist_filter ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * bx , * bx2 , * entry , * gl ;
Elm_Genlist_Item_Class * itc = NULL ;
int i ;
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
win = elm_win_util_standard_add ( " genlist-filter " , " Genlist filter " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
evas_object_event_callback_add ( win , EVAS_CALLBACK_FREE , _cleanup_cb , api ) ;
evas_object_event_callback_add ( win , EVAS_CALLBACK_DEL ,
_gl_focus_win_del_cb , NULL ) ;
elm_win_focus_highlight_enabled_set ( win , EINA_TRUE ) ;
elm_win_focus_highlight_animate_set ( win , EINA_TRUE ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
entry = elm_entry_add ( bx ) ;
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , 0.0 ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , 0.0 ) ;
elm_object_part_text_set ( entry , " guide " , " Search. " ) ;
elm_box_pack_end ( bx , entry ) ;
evas_object_show ( entry ) ;
bx2 = elm_box_add ( bx ) ;
evas_object_size_hint_weight_set ( bx2 , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( bx2 , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , bx2 ) ;
evas_object_show ( bx2 ) ;
gl = elm_genlist_add ( bx ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_genlist_select_mode_set ( gl , ELM_OBJECT_SELECT_MODE_ALWAYS ) ;
elm_genlist_mode_set ( gl , ELM_LIST_COMPRESS ) ;
elm_genlist_homogeneous_set ( gl , EINA_TRUE ) ;
elm_box_pack_end ( bx2 , gl ) ;
api - > gl = gl ;
evas_object_show ( gl ) ;
evas_object_smart_callback_add ( gl , " selected " , _gl_focus_item_cb , " selected " ) ;
evas_object_smart_callback_add ( gl , " unselected " , _gl_focus_item_cb , " unselected " ) ;
evas_object_smart_callback_add ( gl , " activated " , _gl_focus_item_cb , " activated " ) ;
evas_object_smart_callback_add ( gl , " highlighted " , _gl_focus_item_cb , " highlighted " ) ;
evas_object_smart_callback_add ( gl , " unhighlighted " , _gl_focus_item_cb , " unhighlighted " ) ;
2016-03-04 15:41:02 -08:00
evas_object_smart_callback_add ( gl , " filter,done " , _gl_filter_finished_cb , gl ) ;
2015-09-23 04:50:05 -07:00
evas_object_event_callback_add ( gl , EVAS_CALLBACK_KEY_DOWN , _gl_focus_key_down_cb , NULL ) ;
itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = " default " ;
itc - > func . text_get = glf_text_get ;
itc - > func . content_get = NULL ;
itc - > func . filter_get = gl_filter_get ;
itc - > func . state_get = NULL ;
itc - > func . del = NULL ;
for ( i = 0 ; i < 500 ; i + + )
elm_genlist_item_append ( gl , itc ,
2016-04-24 21:49:43 -07:00
( void * ) ( intptr_t ) i , NULL ,
2015-09-23 04:50:05 -07:00
ELM_GENLIST_ITEM_NONE ,
NULL , NULL ) ;
evas_object_resize ( win , 420 , 600 ) ;
evas_object_show ( win ) ;
elm_object_focus_set ( entry , EINA_TRUE ) ;
evas_object_smart_callback_add ( entry , " changed,user " , _entry_change_cb , api ) ;
}
2016-04-24 02:46:45 -07:00
/*** Genlist Show/BringIN **************************************************/
2016-01-04 14:05:29 -08:00
static void
_rd_changed_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
{
api_data * ad = data ;
ad - > scrollto = elm_radio_state_value_get ( obj ) ;
}
static Evas_Object *
_scrollto_mode_frame_new ( Evas_Object * win , void * data )
{
Evas_Object * fr , * bx , * rd , * rdg ;
api_data * sd = data ;
fr = elm_frame_add ( win ) ;
elm_object_text_set ( fr , " Scrollto Mode " ) ;
evas_object_show ( fr ) ;
bx = elm_box_add ( win ) ;
elm_object_content_set ( fr , bx ) ;
evas_object_show ( bx ) ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 0 ) ;
elm_object_text_set ( rd , " SCROLLTO_NONE " ) ;
evas_object_smart_callback_add ( rd , " changed " , _rd_changed_cb , sd ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
rdg = rd ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 1 ) ;
elm_object_text_set ( rd , " SCROLLTO_IN " ) ;
elm_radio_group_add ( rd , rdg ) ;
evas_object_smart_callback_add ( rd , " changed " , _rd_changed_cb , sd ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 2 ) ;
elm_object_text_set ( rd , " SCROLLTO_TOP " ) ;
elm_radio_group_add ( rd , rdg ) ;
evas_object_smart_callback_add ( rd , " changed " , _rd_changed_cb , sd ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 4 ) ;
elm_object_text_set ( rd , " SCROLLTO_MIDDLE " ) ;
elm_radio_group_add ( rd , rdg ) ;
evas_object_smart_callback_add ( rd , " changed " , _rd_changed_cb , sd ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
rd = elm_radio_add ( win ) ;
elm_radio_state_value_set ( rd , 8 ) ;
elm_object_text_set ( rd , " SCROLLTO_BOTTOM " ) ;
elm_radio_group_add ( rd , rdg ) ;
evas_object_smart_callback_add ( rd , " changed " , _rd_changed_cb , sd ) ;
evas_object_show ( rd ) ;
elm_box_pack_end ( bx , rd ) ;
return fr ;
}
void
_scrollto_item_show ( void * data ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
api_data * api = data ;
Elm_Object_Item * it = elm_genlist_selected_item_get ( api - > gl ) ;
elm_genlist_item_show ( it , api - > scrollto ) ;
}
void
_scrollto_item_bring ( void * data ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
api_data * api = data ;
Elm_Object_Item * it = elm_genlist_selected_item_get ( api - > gl ) ;
elm_genlist_item_bring_in ( it , api - > scrollto ) ;
}
void
test_genlist_show_bring ( void * data EINA_UNUSED ,
Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * gl , * bt_show , * bt_bring , * bx , * bxx , * fr ;
Elm_Object_Item * gli ;
int i , max ;
api_data * api = calloc ( 1 , sizeof ( api_data ) ) ;
win = elm_win_util_standard_add ( " genlist " , " Genlist Item Show/Bring " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
evas_object_event_callback_add ( win , EVAS_CALLBACK_DEL , _cleanup_cb , api ) ;
bxx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bxx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bxx ) ;
evas_object_show ( bxx ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_weight_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( bx , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( bx ) ;
elm_box_pack_end ( bxx , bx ) ;
gl = elm_genlist_add ( win ) ;
evas_object_size_hint_weight_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( gl ) ;
api - > gl = gl ;
api - > itc1 = elm_genlist_item_class_new ( ) ;
api - > itc1 - > item_style = " default " ;
api - > itc1 - > func . text_get = gl_text_get1 ;
api - > itc1 - > func . content_get = gl_content_get ;
api - > itc1 - > func . state_get = NULL ;
api - > itc1 - > func . del = NULL ;
bt_show = elm_button_add ( win ) ;
elm_object_text_set ( bt_show , " Show " ) ;
evas_object_smart_callback_add ( bt_show , " clicked " , _scrollto_item_show , api ) ;
evas_object_show ( bt_show ) ;
elm_box_pack_end ( bx , bt_show ) ;
bt_bring = elm_button_add ( win ) ;
elm_object_text_set ( bt_bring , " Bring " ) ;
evas_object_smart_callback_add ( bt_bring , " clicked " , _scrollto_item_bring , api ) ;
evas_object_show ( bt_bring ) ;
elm_box_pack_end ( bx , bt_bring ) ;
fr = _scrollto_mode_frame_new ( win , api ) ;
elm_box_pack_end ( bx , fr ) ;
max = 2000 ;
for ( i = 0 ; i < max ; i + + )
elm_genlist_item_append ( gl , api - > itc1 , ( void * ) ( uintptr_t ) i , NULL , ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
elm_genlist_item_class_free ( api - > itc1 ) ;
gli = elm_genlist_nth_item_get ( gl , 1340 ) ;
elm_genlist_item_selected_set ( gli , EINA_TRUE ) ;
elm_genlist_item_show ( gli , ELM_GENLIST_ITEM_SCROLLTO_MIDDLE ) ;
evas_object_resize ( win , 480 , 400 ) ;
explode_win_enable ( win ) ;
evas_object_show ( win ) ;
}
2016-04-24 02:46:45 -07:00
/*** Genlist Cache *********************************************************/
static char *
gl_cache_text_get ( void * data , Evas_Object * obj EINA_UNUSED , const char * part EINA_UNUSED )
{
char buf [ 256 ] ;
int num = ( int ) ( uintptr_t ) data ;
if ( ( num % 2 ) = = 0 )
snprintf ( buf , sizeof ( buf ) ,
" <align=left> ← only icon (Item # %d)</align> " , num ) ;
else
snprintf ( buf , sizeof ( buf ) ,
" <align=right>(Item # %d) only end → </align> " , num ) ;
return strdup ( buf ) ;
}
static Evas_Object *
gl_cache_content_get ( void * data , Evas_Object * obj , const char * part )
{
char buf [ PATH_MAX ] ;
Evas_Object * ic ;
Eina_Bool even = ( ( ( int ) ( uintptr_t ) data % 2 ) = = 0 ) ;
if ( even & & ! strcmp ( part , " elm.swallow.icon " ) )
snprintf ( buf , sizeof ( buf ) , " %s/images/bubble.png " , elm_app_data_dir_get ( ) ) ;
else if ( ! even & & ! strcmp ( part , " elm.swallow.end " ) )
snprintf ( buf , sizeof ( buf ) , " %s/images/logo_small.png " , elm_app_data_dir_get ( ) ) ;
else
return NULL ;
ic = elm_icon_add ( obj ) ;
elm_image_file_set ( ic , buf , NULL ) ;
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
return ic ;
}
void
test_genlist_cache ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * bx , * fr , * lb , * gl ;
Elm_Genlist_Item_Class * itc ;
int i ;
win = elm_win_util_standard_add ( " genlist-cache " , " Genlist Cache " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_expand_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
fr = elm_frame_add ( bx ) ;
elm_object_text_set ( fr , " Information " ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
lb = elm_label_add ( fr ) ;
elm_object_text_set ( lb , " Even items should have only the icon (left),<br> "
" while odd items should have only the end icon (right) " ) ;
elm_object_content_set ( fr , lb ) ;
evas_object_show ( lb ) ;
gl = elm_genlist_add ( bx ) ;
evas_object_size_hint_expand_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_fill_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( gl ) ;
itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = " default_style " ;
itc - > func . text_get = gl_cache_text_get ;
itc - > func . content_get = gl_cache_content_get ;
for ( i = 1 ; i < = 200 ; i + + )
elm_genlist_item_append ( gl , itc , ( void * ) ( uintptr_t ) i , NULL ,
ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
elm_genlist_item_class_free ( itc ) ;
evas_object_resize ( win , 480 , 400 ) ;
explode_win_enable ( win ) ;
evas_object_show ( win ) ;
}
2016-08-09 06:30:07 -07:00
/*** Genlist Reusable Contents *********************************************/
static char *
gl_re2_text_get ( void * data , Evas_Object * obj EINA_UNUSED ,
const char * part EINA_UNUSED )
{
int num = ( int ) ( uintptr_t ) data ;
2016-08-11 03:06:51 -07:00
char buf [ 32 ] ;
2016-08-09 06:30:07 -07:00
snprintf ( buf , sizeof ( buf ) , " Item # %d " , num ) ;
return strdup ( buf ) ;
}
static Evas_Object *
gl_re2_content_get ( void * data , Evas_Object * obj , const char * part )
{
int num = ( int ) ( uintptr_t ) data ;
2017-03-09 18:17:16 -08:00
Evas_Object * content = NULL ;
2016-08-11 03:06:51 -07:00
char buf [ 64 ] ;
2016-08-09 06:30:07 -07:00
if ( ! strcmp ( part , " elm.swallow.icon " ) )
{
2016-08-11 03:06:51 -07:00
printf ( " Creating NEW content (icon) for item # %d \n " , num ) ;
2017-03-09 18:17:16 -08:00
content = elm_label_add ( obj ) ;
evas_object_color_set ( content , 255 , 0 , 0 , 255 ) ; // NOTE: never do this in real app
2016-08-11 03:06:51 -07:00
snprintf ( buf , sizeof ( buf ) , " Content for item # %d " , num ) ;
2017-03-09 18:17:16 -08:00
elm_object_text_set ( content , buf ) ;
2016-08-09 06:30:07 -07:00
}
2016-08-11 03:06:51 -07:00
if ( ! strcmp ( part , " elm.swallow.end " ) )
2016-08-09 06:30:07 -07:00
{
2016-08-11 03:06:51 -07:00
printf ( " Creating NEW content (end) for item # %d \n " , num ) ;
2017-03-09 18:17:16 -08:00
content = elm_button_add ( obj ) ;
evas_object_color_set ( content , 0 , 255 , 0 , 255 ) ; // NOTE: never do this in real app
2016-08-11 03:06:51 -07:00
snprintf ( buf , sizeof ( buf ) , " Content for item # %d " , num ) ;
2017-03-09 18:17:16 -08:00
elm_object_text_set ( content , buf ) ;
if ( ( num % 5 ) = = 0 ) elm_object_disabled_set ( content , EINA_TRUE ) ;
2016-08-09 06:30:07 -07:00
}
2017-03-09 18:17:16 -08:00
return content ;
2016-08-09 06:30:07 -07:00
}
static Evas_Object *
gl_re2_reusable_content_get ( void * data , Evas_Object * obj ,
const char * part , Evas_Object * old )
{
Eina_Bool enabled = ( Eina_Bool ) ( uintptr_t ) evas_object_data_get ( obj , " reusable_enabled " ) ;
int num = ( int ) ( uintptr_t ) data ;
2016-08-11 03:06:51 -07:00
char buf [ 64 ] ;
2017-11-15 00:41:45 -08:00
// Returning NULL from this callback means that content_get should be used instead.
// In this case if old object is not NULL, it will be deleted by genlist.
2016-08-11 03:06:51 -07:00
if ( ! enabled | | ! old )
return NULL ;
2016-08-09 06:30:07 -07:00
2017-11-15 00:41:45 -08:00
// Genlist preserves whole state of the old content.
// But we don't know for which item it was used before. We know only that
// the old item had same item_class, same tree mode and that content was created for "part".
// This means that we should apply all item-specific properties to the old object.
2016-08-11 03:06:51 -07:00
if ( ! strcmp ( part , " elm.swallow.icon " ) )
{
printf ( " REUSING content (icon) for item # %d \n " , num ) ;
2017-11-15 00:41:45 -08:00
// No need to change color, because all contents for "elm.swallow.icon"
// have same red color
snprintf ( buf , sizeof ( buf ) , " Reused content for item # %d " , num ) ;
// But we need to set correct text, because it's different for different items
2016-08-11 03:06:51 -07:00
elm_object_text_set ( old , buf ) ;
2017-11-15 00:41:45 -08:00
// Object is ready for use.
2016-08-11 03:06:51 -07:00
return old ;
}
if ( ! strcmp ( part , " elm.swallow.end " ) )
2016-08-09 06:30:07 -07:00
{
2016-08-11 03:06:51 -07:00
printf ( " REUSING content (end) for item # %d \n " , num ) ;
2017-11-15 00:41:45 -08:00
// Also not changing color, it's already correct.
snprintf ( buf , sizeof ( buf ) , " Reused content for item # %d " , num ) ;
// Updating text.
2016-08-11 03:06:51 -07:00
elm_object_text_set ( old , buf ) ;
2017-11-15 00:41:45 -08:00
// Changing disabled state of content:
if ( ( num % 5 ) = = 0 )
// disabling every 5th item's content in the same way as in content_get
elm_object_disabled_set ( old , EINA_TRUE ) ;
else
// but also explicitly enabling other contents, because the old object
// could be disabled if it was used in one of the 5th items previously
elm_object_disabled_set ( old , EINA_FALSE ) ;
// Object is ready for use.
2016-08-09 06:30:07 -07:00
return old ;
}
return NULL ;
}
static void
gl_re2_check_changed_cb ( void * data , Evas_Object * obj ,
void * event_info EINA_UNUSED )
{
Eina_Bool enabled = elm_check_state_get ( obj ) ;
Evas_Object * gl = data ;
evas_object_data_set ( gl , " reusable_enabled " , ( void * ) ( uintptr_t ) enabled ) ;
elm_genlist_realized_items_update ( gl ) ;
}
void
test_genlist_reusable ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED ,
void * event_info EINA_UNUSED )
{
Evas_Object * win , * bx , * fr , * lb , * gl , * ck ;
Elm_Genlist_Item_Class * itc ;
int i ;
// window
win = elm_win_util_standard_add ( " genlist-reusable " , " Genlist Reusable Contents " ) ;
elm_win_autodel_set ( win , EINA_TRUE ) ;
bx = elm_box_add ( win ) ;
evas_object_size_hint_expand_set ( bx , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_win_resize_object_add ( win , bx ) ;
evas_object_show ( bx ) ;
fr = elm_frame_add ( bx ) ;
evas_object_size_hint_expand_set ( fr , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_fill_set ( fr , EVAS_HINT_FILL , 0 ) ;
elm_object_text_set ( fr , " Information " ) ;
elm_box_pack_end ( bx , fr ) ;
evas_object_show ( fr ) ;
lb = elm_label_add ( fr ) ;
2016-08-11 03:06:51 -07:00
elm_object_text_set ( lb , " Labels in left content (icon) must be red.<br> "
" Labels in right content (end) must be green.<br> "
" The 3 numbers in one row should always match. " ) ;
2016-08-09 06:30:07 -07:00
elm_object_content_set ( fr , lb ) ;
evas_object_show ( lb ) ;
// genlist
gl = elm_genlist_add ( bx ) ;
elm_genlist_homogeneous_set ( gl , EINA_TRUE ) ;
evas_object_size_hint_expand_set ( gl , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_fill_set ( gl , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( bx , gl ) ;
evas_object_show ( gl ) ;
evas_object_data_set ( gl , " reusable_enabled " , ( void * ) EINA_TRUE ) ;
itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = " default " ;
itc - > func . text_get = gl_re2_text_get ;
itc - > func . content_get = gl_re2_content_get ;
itc - > func . reusable_content_get = gl_re2_reusable_content_get ;
for ( i = 1 ; i < = 2000 ; i + + )
elm_genlist_item_append ( gl , itc , ( void * ) ( uintptr_t ) i , NULL ,
ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
elm_genlist_item_class_free ( itc ) ;
// buttons
ck = elm_check_add ( bx ) ;
elm_object_text_set ( ck , " Enable reusable contents " ) ;
elm_check_state_set ( ck , EINA_TRUE ) ;
evas_object_smart_callback_add ( ck , " changed " , gl_re2_check_changed_cb , gl ) ;
elm_box_pack_end ( bx , ck ) ;
evas_object_show ( ck ) ;
// show everything
evas_object_resize ( win , 400 , 400 ) ;
explode_win_enable ( win ) ;
evas_object_show ( win ) ;
}