@ -14,10 +14,11 @@ struct _Ephoto_Thumb_Browser
{
Ephoto * ephoto ;
Evas_Object * main ;
Evas_Object * table ;
Evas_Object * bar ;
Evas_Object * edje ;
Evas_Object * entry ;
Evas_Object * grid ;
Evas_Object * panel ;
Eio_File * ls ;
Eina_List * todo_items ;
Eina_List * grid_items ;
@ -48,16 +49,6 @@ _grid_items_free(Ephoto_Thumb_Browser *tb)
tb - > grid_items = NULL ;
}
static Ephoto_Entry *
_first_file_entry_find ( Ephoto_Thumb_Browser * tb )
{
const Eina_List * l ;
Ephoto_Entry * entry ;
EINA_LIST_FOREACH ( tb - > ephoto - > entries , l , entry )
if ( ! entry - > is_dir ) return entry ;
return NULL ;
}
static char *
_ephoto_thumb_item_text_get ( void * data , Evas_Object * obj __UNUSED__ , const char * part __UNUSED__ )
{
@ -65,30 +56,6 @@ _ephoto_thumb_item_text_get(void *data, Evas_Object *obj __UNUSED__, const char
return strdup ( e - > label ) ;
}
static Evas_Object *
_ephoto_thumb_up_icon_get ( void * data __UNUSED__ , Evas_Object * obj , const char * part __UNUSED__ )
{
Evas_Object * ic ;
ic = elm_icon_add ( obj ) ;
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
elm_icon_standard_set ( ic , " go-up " ) ;
return ic ;
}
static Evas_Object *
_ephoto_thumb_dir_icon_get ( void * data __UNUSED__ , Evas_Object * obj , const char * part __UNUSED__ )
{
Evas_Object * ic ;
ic = elm_icon_add ( obj ) ;
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
elm_icon_standard_set ( ic , " folder " ) ;
return ic ;
}
static Evas_Object *
_ephoto_thumb_file_icon_get ( void * data , Evas_Object * obj , const char * part __UNUSED__ )
{
@ -107,65 +74,17 @@ _ephoto_thumb_item_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
*/
}
static Elm_Gengrid_Item_Class _ephoto_thumb_up_class ;
static Elm_Gengrid_Item_Class _ephoto_thumb_dir_class ;
static Elm_Gengrid_Item_Class _ephoto_thumb_file_class ;
static int
_entry_cmp ( const void * pa , const void * pb )
{
const Elm_Object_Item * ia = pa ;
const Ephoto_Entry * a , * b = pb ;
a = elm_object_item_data_get ( ia ) ;
if ( a - > is_dir = = b - > is_dir )
return strcoll ( a - > basename , b - > basename ) ;
else if ( a - > is_dir )
return - 1 ;
else
return 1 ;
}
static void
_entry_item_add ( Ephoto_Thumb_Browser * tb , Ephoto_Entry * e )
{
const Elm_Gengrid_Item_Class * ic ;
int near_cmp ;
Elm_Object_Item * near_item = NULL ;
Eina_List * near_node = NULL ;
near_node = eina_list_search_sorted_near_list
( tb - > grid_items , _entry_cmp , e , & near_cmp ) ;
if ( near_node )
near_item = near_node - > data ;
ic = & _ephoto_thumb_file_class ;
if ( e - > is_dir ) ic = & _ephoto_thumb_dir_class ;
else ic = & _ephoto_thumb_file_class ;
if ( ! near_item )
{
e - > item = elm_gengrid_item_append ( tb - > grid , ic , e , NULL , NULL ) ;
tb - > grid_items = eina_list_append ( tb - > grid_items , e - > item ) ;
}
else
{
if ( near_cmp < 0 )
{
e - > item = elm_gengrid_item_insert_after
( tb - > grid , ic , e , near_item , NULL , NULL ) ;
tb - > grid_items = eina_list_append_relative
( tb - > grid_items , e - > item , near_item ) ;
}
else
{
e - > item = elm_gengrid_item_insert_before
( tb - > grid , ic , e , near_item , NULL , NULL ) ;
tb - > grid_items = eina_list_prepend_relative
( tb - > grid_items , e - > item , near_item ) ;
}
}
e - > item = elm_gengrid_item_append ( tb - > grid , ic , e , NULL , NULL ) ;
tb - > grid_items = eina_list_append ( tb - > grid_items , e - > item ) ;
if ( e - > item )
elm_object_item_data_set ( e - > item , e ) ;
@ -177,27 +96,6 @@ _entry_item_add(Ephoto_Thumb_Browser *tb, Ephoto_Entry *e)
}
}
static void
_up_item_add_if_required ( Ephoto_Thumb_Browser * tb )
{
Ephoto_Entry * entry ;
char * parent_dir ;
if ( ( strcmp ( tb - > ephoto - > config - > directory , " / " ) = = 0 ) )
return ;
parent_dir = ecore_file_dir_get ( tb - > ephoto - > config - > directory ) ;
if ( ! parent_dir ) return ;
entry = ephoto_entry_new ( tb - > ephoto , parent_dir , PARENT_DIR ) ;
free ( parent_dir ) ;
EINA_SAFETY_ON_NULL_RETURN ( entry ) ;
entry - > is_up = EINA_TRUE ;
entry - > is_dir = EINA_TRUE ;
entry - > item = elm_gengrid_item_append
( tb - > grid , & _ephoto_thumb_up_class , entry , NULL , NULL ) ;
}
static Eina_Bool
_todo_items_process ( void * data )
{
@ -224,10 +122,7 @@ _ephoto_thumb_selected(void *data, Evas_Object *o __UNUSED__, void *event_info)
elm_gengrid_item_selected_set ( it , EINA_FALSE ) ;
if ( e - > is_dir )
ephoto_directory_set ( tb - > ephoto , e - > path ) ;
else
evas_object_smart_callback_call ( tb - > main , " view " , e ) ;
evas_object_smart_callback_call ( tb - > main , " view " , e ) ;
}
static void
@ -292,13 +187,10 @@ _view_single(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
Ephoto_Entry * entry ;
if ( it ) entry = elm_object_item_data_get ( it ) ;
else entry = _first_file_entry_find ( tb ) ;
else entry = eina_list_nth ( tb - > ephoto - > entries , 0 ) ;
if ( ! entry ) return ;
if ( entry - > is_dir )
ephoto_directory_set ( tb - > ephoto , entry - > path ) ;
else
evas_object_smart_callback_call ( tb - > main , " view " , entry ) ;
evas_object_smart_callback_call ( tb - > main , " view " , entry ) ;
}
static void
@ -309,7 +201,7 @@ _slideshow(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
Ephoto_Entry * entry ;
if ( it ) entry = elm_object_item_data_get ( it ) ;
else entry = _first_file_entry_find ( tb ) ;
else entry = eina_list_nth ( tb - > ephoto - > entries , 0 ) ;
if ( ! entry ) return ;
evas_object_smart_callback_call ( tb - > main , " slideshow " , entry ) ;
@ -345,7 +237,7 @@ _key_down(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event
Elm_Object_Item * it = elm_gengrid_selected_item_get ( tb - > grid ) ;
Ephoto_Entry * entry ;
if ( it ) entry = elm_object_item_data_get ( it ) ;
else entry = _first_file_entry_find ( tb ) ;
else entry = eina_list_nth ( tb - > grid_items , 0 ) ;
if ( entry )
evas_object_smart_callback_call ( tb - > main , " slideshow " , entry ) ;
@ -389,7 +281,6 @@ _ephoto_thumb_populate_start(void *data, int type __UNUSED__, void *event __UNUS
_grid_items_free ( tb ) ;
elm_gengrid_clear ( tb - > grid ) ;
elm_fileselector_path_set ( tb - > entry , tb - > ephoto - > config - > directory ) ;
_up_item_add_if_required ( tb ) ;
return ECORE_CALLBACK_PASS_ON ;
}
@ -434,28 +325,16 @@ _ephoto_thumb_entry_create(void *data, int type __UNUSED__, void *event)
Evas_Object *
ephoto_thumb_browser_add ( Ephoto * ephoto , Evas_Object * parent )
{
Evas_Object * layout = elm_layout _add( parent ) ;
Evas_Object * box = elm_box _add( parent ) ;
Elm_Object_Item * icon ;
Evas_Object * min , * max , * ic ;
Ephoto_Thumb_Browser * tb ;
EINA_SAFETY_ON_NULL_RETURN_VAL ( layout , NULL ) ;
EINA_SAFETY_ON_NULL_RETURN_VAL ( box , NULL ) ;
tb = calloc ( 1 , sizeof ( Ephoto_Thumb_Browser ) ) ;
EINA_SAFETY_ON_NULL_GOTO ( tb , error ) ;
_ephoto_thumb_up_class . item_style = " default " ;
_ephoto_thumb_up_class . func . text_get = _ephoto_thumb_item_text_get ;
_ephoto_thumb_up_class . func . content_get = _ephoto_thumb_up_icon_get ;
_ephoto_thumb_up_class . func . state_get = NULL ;
_ephoto_thumb_up_class . func . del = _ephoto_thumb_item_del ;
_ephoto_thumb_dir_class . item_style = " default " ;
_ephoto_thumb_dir_class . func . text_get = _ephoto_thumb_item_text_get ;
_ephoto_thumb_dir_class . func . content_get = _ephoto_thumb_dir_icon_get ;
_ephoto_thumb_dir_class . func . state_get = NULL ;
_ephoto_thumb_dir_class . func . del = _ephoto_thumb_item_del ;
_ephoto_thumb_file_class . item_style = " thumb " ;
_ephoto_thumb_file_class . func . text_get = _ephoto_thumb_item_text_get ;
_ephoto_thumb_file_class . func . content_get = _ephoto_thumb_file_icon_get ;
@ -465,40 +344,15 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent)
elm_theme_extension_add ( NULL , PACKAGE_DATA_DIR " /themes/default/ephoto.edj " ) ;
tb - > ephoto = ephoto ;
tb - > edje = elm_layout_edje_get ( layout ) ;
tb - > main = layout ;
tb - > main = box ;
evas_object_size_hint_weight_set ( tb - > main , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( tb - > main , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_event_callback_add ( tb - > main , EVAS_CALLBACK_DEL , _main_del , tb ) ;
evas_object_event_callback_add
( tb - > main , EVAS_CALLBACK_KEY_DOWN , _key_down , tb ) ;
evas_object_data_set ( tb - > main , " thumb_browser " , tb ) ;
if ( ! elm_layout_theme_set ( tb - > main , " layout " , " application " , " toolbar-vbox " ) )
{
ERR ( " Could not load style 'toolbar-vbox' from theme! " ) ;
goto error ;
}
tb - > bar = edje_object_part_external_object_get ( tb - > edje , " elm.external.toolbar " ) ;
if ( ! tb - > bar )
{
ERR ( " Could not find toolbar in layout! " ) ;
goto error ;
}
elm_toolbar_homogeneous_set ( tb - > bar , EINA_FALSE ) ;
elm_toolbar_shrink_mode_set ( tb - > bar , ELM_TOOLBAR_SHRINK_MENU ) ;
elm_toolbar_menu_parent_set ( tb - > bar , parent ) ;
elm_toolbar_select_mode_set ( tb - > bar , ELM_OBJECT_SELECT_MODE_NONE ) ;
elm_toolbar_item_append ( tb - > bar , " image " , " View Single " , _view_single , tb ) ;
elm_toolbar_item_append ( tb - > bar , " media-playback-start " , " Slideshow " , _slideshow , tb ) ;
icon = elm_toolbar_item_append ( tb - > bar , " zoom-in " , " Zoom In " , _zoom_in , tb ) ;
max = elm_object_item_widget_get ( icon ) ;
icon = elm_toolbar_item_append ( tb - > bar , " zoom-out " , " Zoom Out " , _zoom_out , tb ) ;
min = elm_object_item_widget_get ( icon ) ;
evas_object_data_set ( max , " min " , min ) ;
evas_object_data_set ( min , " max " , max ) ;
ic = elm_icon_add ( tb - > main ) ;
elm_icon_standard_set ( ic , " folder " ) ;
evas_object_size_hint_aspect_set ( ic , EVAS_ASPECT_CONTROL_VERTICAL , 1 , 1 ) ;
@ -516,10 +370,16 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent)
( tb - > entry , " file,chosen " , _changed_dir , tb ) ;
evas_object_smart_callback_add
( tb - > entry , " activated " , _changed_dir_text , tb ) ;
elm_box_pack_end ( tb - > main , tb - > entry ) ;
evas_object_show ( tb - > entry ) ;
elm_layout_box_append ( tb - > main , " elm.box.content " , tb - > entry ) ;
tb - > grid = elm_gengrid_add ( tb - > main ) ;
tb - > table = elm_table_add ( tb - > main ) ;
evas_object_size_hint_weight_set ( tb - > table , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( tb - > table , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_pack_end ( tb - > main , tb - > table ) ;
evas_object_show ( tb - > table ) ;
tb - > grid = elm_gengrid_add ( tb - > table ) ;
EINA_SAFETY_ON_NULL_GOTO ( tb - > grid , error ) ;
evas_object_size_hint_weight_set
( tb - > grid , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
@ -538,7 +398,36 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent)
_zoom_set ( tb , tb - > ephoto - > config - > thumb_size ) ;
evas_object_show ( tb - > grid ) ;
elm_layout_box_append ( tb - > main , " elm.box.content " , tb - > grid ) ;
elm_table_pack ( tb - > table , tb - > grid , 0 , 0 , 4 , 1 ) ;
tb - > panel = elm_panel_add ( tb - > table ) ;
EINA_SAFETY_ON_NULL_GOTO ( tb - > panel , error ) ;
elm_panel_orient_set ( tb - > panel , ELM_PANEL_ORIENT_LEFT ) ;
evas_object_size_hint_weight_set ( tb - > panel , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( tb - > panel , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_panel_hidden_set ( tb - > panel , EINA_TRUE ) ;
elm_table_pack ( tb - > table , tb - > panel , 0 , 0 , 1 , 1 ) ;
evas_object_show ( tb - > panel ) ;
tb - > bar = elm_toolbar_add ( tb - > panel ) ;
EINA_SAFETY_ON_NULL_GOTO ( tb - > bar , error ) ;
elm_toolbar_horizontal_set ( tb - > bar , EINA_FALSE ) ;
elm_toolbar_shrink_mode_set ( tb - > bar , ELM_TOOLBAR_SHRINK_SCROLL ) ;
elm_toolbar_select_mode_set ( tb - > bar , ELM_OBJECT_SELECT_MODE_NONE ) ;
evas_object_size_hint_weight_set ( tb - > bar , 0.0 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( tb - > bar , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_toolbar_item_append ( tb - > bar , " image " , " View Single " , _view_single , tb ) ;
elm_toolbar_item_append ( tb - > bar , " media-playback-start " , " Slideshow " , _slideshow , tb ) ;
icon = elm_toolbar_item_append ( tb - > bar , " zoom-in " , " Zoom In " , _zoom_in , tb ) ;
max = elm_object_item_widget_get ( icon ) ;
icon = elm_toolbar_item_append ( tb - > bar , " zoom-out " , " Zoom Out " , _zoom_out , tb ) ;
min = elm_object_item_widget_get ( icon ) ;
evas_object_data_set ( max , " min " , min ) ;
evas_object_data_set ( min , " max " , max ) ;
elm_object_content_set ( tb - > panel , tb - > bar ) ;
evas_object_show ( tb - > bar ) ;
tb - > handlers = eina_list_append
( tb - > handlers , ecore_event_handler_add