From ba54326c1ea0240b3fe3eabafdc90e75d0edd7e9 Mon Sep 17 00:00:00 2001 From: Stephen Houston Date: Tue, 18 Nov 2014 13:37:49 -0600 Subject: [PATCH] @feature Moved toolbars to left side panels. Removed grid directory browsing. Moved the toolbars to panels on the left side in order to make better use of space. Removed the ability to browse using the grid as it is redundant with the entry and file selector. --- src/bin/ephoto.h | 4 +- src/bin/ephoto_main.c | 34 +---- src/bin/ephoto_single_browser.c | 85 +++++++------ src/bin/ephoto_slideshow.c | 1 - src/bin/ephoto_thumb_browser.c | 217 ++++++++------------------------ 5 files changed, 100 insertions(+), 241 deletions(-) diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index fadf91a..9e21fa3 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -106,6 +106,7 @@ struct _Ephoto { Evas_Object *win; Evas_Object *bg; + Evas_Object *panel; Evas_Object *pager; Evas_Object *thumb_browser; @@ -139,8 +140,6 @@ struct _Ephoto_Entry Ephoto *ephoto; Elm_Object_Item *item; Eina_List *free_listeners; - Eina_Bool is_dir : 1; - Eina_Bool is_up : 1; }; struct _Ephoto_Event_Entry_Create @@ -153,7 +152,6 @@ void ephoto_entry_free(Ephoto_Entry *entry); void ephoto_entry_free_listener_add(Ephoto_Entry *entry, void (*cb)(void *data, const Ephoto_Entry *entry), const void *data); void ephoto_entry_free_listener_del(Ephoto_Entry *entry, void (*cb)(void *data, const Ephoto_Entry *entry), const void *data); void ephoto_entries_free(Ephoto *ephoto); -int ephoto_entries_cmp(const void *pa, const void *pb); extern int __log_domain; #define DBG(...) EINA_LOG_DOM_DBG(__log_domain, __VA_ARGS__) diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 97028be..1857933 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -259,18 +259,6 @@ ephoto_title_set(Ephoto *ephoto, const char *title) elm_win_title_set(ephoto->win, buf); } -int -ephoto_entries_cmp(const void *pa, const void *pb) -{ - const Ephoto_Entry *a = pa, *b = pb; - 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 _ephoto_populate_main(void *data, Eio_File *handler __UNUSED__, const Eina_File_Direct_Info *info) { @@ -279,26 +267,8 @@ _ephoto_populate_main(void *data, Eio_File *handler __UNUSED__, const Eina_File_ Ephoto_Event_Entry_Create *ev; e = ephoto_entry_new(ephoto, info->path, info->path + info->name_start); - if (info->type == EINA_FILE_DIR) e->is_dir = EINA_TRUE; - else if (info->type == EINA_FILE_REG) e->is_dir = EINA_FALSE; - else e->is_dir = !_ephoto_eina_file_direct_info_image_useful(info); - - if (!ephoto->entries) - ephoto->entries = eina_list_append(ephoto->entries, e); - else - { - int near_cmp; - Eina_List *near_node = eina_list_search_sorted_near_list - (ephoto->entries, ephoto_entries_cmp, e, &near_cmp); - - if (near_cmp < 0) - ephoto->entries = eina_list_append_relative_list - (ephoto->entries, e, near_node); - else - ephoto->entries = eina_list_prepend_relative_list - (ephoto->entries, e, near_node); - } + ephoto->entries = eina_list_append(ephoto->entries, e); ev = calloc(1, sizeof(Ephoto_Event_Entry_Create)); ev->entry = e; @@ -311,7 +281,7 @@ _ephoto_populate_filter(void *data __UNUSED__, Eio_File *handler __UNUSED__, con const char *bname = info->path + info->name_start; if (bname[0] == '.') return EINA_FALSE; - if (info->type == EINA_FILE_DIR) return EINA_TRUE; + if (info->type == EINA_FILE_DIR) return EINA_FALSE; return _ephoto_eina_file_direct_info_image_useful(info); } diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c index 613be0e..9f8204a 100644 --- a/src/bin/ephoto_single_browser.c +++ b/src/bin/ephoto_single_browser.c @@ -20,7 +20,8 @@ struct _Ephoto_Single_Browser Ephoto *ephoto; Evas_Object *main; Evas_Object *bar; - Evas_Object *edje; + Evas_Object *table; + Evas_Object *panel; Evas_Object *viewer; const char *pending_path; Ephoto_Entry *entry; @@ -422,25 +423,16 @@ _mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *ev static Ephoto_Entry * _first_entry_find(Ephoto_Single_Browser *sb) { - const Eina_List *l; - Ephoto_Entry *entry; EINA_SAFETY_ON_NULL_RETURN_VAL(sb->ephoto, NULL); - EINA_LIST_FOREACH(sb->ephoto->entries, l, entry) - if (!entry->is_dir) return entry; - return NULL; + return eina_list_nth(sb->ephoto->entries, 0); } static Ephoto_Entry * _last_entry_find(Ephoto_Single_Browser *sb) { - const Eina_List *l; - Ephoto_Entry *entry; EINA_SAFETY_ON_NULL_RETURN_VAL(sb->ephoto, NULL); - - EINA_LIST_REVERSE_FOREACH(sb->ephoto->entries, l, entry) - if (!entry->is_dir) return entry; - return NULL; + return eina_list_last_data_get(sb->ephoto->entries); } Ephoto_Orient @@ -490,14 +482,19 @@ _ephoto_single_browser_recalc(Ephoto_Single_Browser *sb) if (sb->entry) { const char *bname = ecore_file_file_get(sb->entry->path); + + elm_table_clear(sb->table, EINA_FALSE); + sb->viewer = _viewer_add(sb->main, sb->entry->path); - elm_layout_box_append(sb->main, "elm.box.content", sb->viewer); + elm_table_pack(sb->table, sb->viewer, 0, 0, 4, 1); evas_object_show(sb->viewer); evas_object_event_callback_add (sb->viewer, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel, sb); ephoto_title_set(sb->ephoto, bname); sb->orient = ephoto_file_orient_get(sb->entry->path); _orient_apply(sb); + + elm_table_pack(sb->table, sb->panel, 0, 0, 1, 1); } elm_object_focus_set(sb->main, EINA_TRUE); @@ -566,8 +563,7 @@ _next_entry(Ephoto_Single_Browser *sb) Eina_List *node; EINA_SAFETY_ON_NULL_RETURN(sb->entry); - node = eina_list_search_sorted_list(sb->ephoto->entries, ephoto_entries_cmp, - sb->entry); + node = eina_list_data_find_list(sb->ephoto->entries, sb->entry); if (!node) return; if ((node = node->next)) entry = node->data; @@ -587,15 +583,10 @@ _prev_entry(Ephoto_Single_Browser *sb) Ephoto_Entry *entry = NULL; EINA_SAFETY_ON_NULL_RETURN(sb->entry); - node = eina_list_search_sorted_list(sb->ephoto->entries, ephoto_entries_cmp, - sb->entry); + node = eina_list_data_find_list(sb->ephoto->entries, sb->entry); if (!node) return; if ((node = node->prev)) - { - entry = node->data; - if (entry->is_dir) - entry = NULL; - } + entry = node->data; if (!entry) entry = _last_entry_find(sb); if (entry) @@ -801,38 +792,47 @@ _ephoto_single_entry_create(void *data, int type __UNUSED__, void *event __UNUSE Evas_Object * ephoto_single_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; Ephoto_Single_Browser *sb; - EINA_SAFETY_ON_NULL_RETURN_VAL(layout, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(box, NULL); sb = calloc(1, sizeof(Ephoto_Single_Browser)); EINA_SAFETY_ON_NULL_GOTO(sb, error); - sb->ephoto = ephoto; - sb->main = layout; - sb->edje = elm_layout_edje_get(layout); + sb->ephoto = ephoto; + sb->main = box; + + evas_object_size_hint_weight_set(sb->main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sb->main, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_event_callback_add(sb->main, EVAS_CALLBACK_DEL, _main_del, sb); evas_object_event_callback_add (sb->main, EVAS_CALLBACK_KEY_DOWN, _key_down, sb); evas_object_data_set(sb->main, "single_browser", sb); - if (!elm_layout_theme_set(sb->main, "layout", "application", "toolbar-vbox")) - { - ERR("Could not load style 'toolbar-vbox' from theme!"); - goto error; - } - sb->bar = edje_object_part_external_object_get(sb->edje, "elm.external.toolbar"); - if (!sb->bar) - { - ERR("Could not find toolbar in layout!"); - goto error; - } - elm_toolbar_homogeneous_set(sb->bar, EINA_FALSE); - elm_toolbar_shrink_mode_set(sb->bar, ELM_TOOLBAR_SHRINK_MENU); - elm_toolbar_menu_parent_set(sb->bar, parent); + sb->table = elm_table_add(sb->main); + evas_object_size_hint_weight_set(sb->table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sb->table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(sb->main, sb->table); + evas_object_show(sb->table); + + sb->panel = elm_panel_add(sb->table); + EINA_SAFETY_ON_NULL_GOTO(sb->panel, error); + elm_panel_orient_set(sb->panel, ELM_PANEL_ORIENT_LEFT); + evas_object_size_hint_weight_set(sb->panel, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sb->panel, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_panel_hidden_set(sb->panel, EINA_TRUE); + elm_table_pack(sb->table, sb->panel, 0, 0, 1, 1); + evas_object_show(sb->panel); + + sb->bar = elm_toolbar_add(sb->panel); + EINA_SAFETY_ON_NULL_GOTO(sb->bar, error); + elm_toolbar_horizontal_set(sb->bar, EINA_FALSE); + elm_toolbar_shrink_mode_set(sb->bar, ELM_TOOLBAR_SHRINK_SCROLL); elm_toolbar_select_mode_set(sb->bar, ELM_OBJECT_SELECT_MODE_NONE); + evas_object_size_hint_weight_set(sb->bar, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sb->bar, EVAS_HINT_FILL, EVAS_HINT_FILL); icon = elm_toolbar_item_append(sb->bar, "go-home", "Back", _back, sb); elm_toolbar_item_priority_set(icon, 150); @@ -868,6 +868,9 @@ ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent) icon = elm_toolbar_item_append(sb->bar, "go-last", "Last", _go_last, sb); elm_toolbar_item_priority_set(icon, 60); + elm_object_content_set(sb->panel, sb->bar); + evas_object_show(sb->bar); + sb->handlers = eina_list_append (sb->handlers, ecore_event_handler_add (EPHOTO_EVENT_POPULATE_END, _ephoto_single_populate_end, sb)); diff --git a/src/bin/ephoto_slideshow.c b/src/bin/ephoto_slideshow.c index bb71d32..6b32f6d 100644 --- a/src/bin/ephoto_slideshow.c +++ b/src/bin/ephoto_slideshow.c @@ -202,7 +202,6 @@ ephoto_slideshow_entry_set(Evas_Object *obj, Ephoto_Entry *entry) EINA_LIST_FOREACH(ss->ephoto->entries, l, itr) { Elm_Object_Item *slideshow_item; - if (itr->is_dir) continue; slideshow_item = elm_slideshow_item_add(ss->slideshow, &_item_cls, itr); if (itr == entry) elm_slideshow_item_show(slideshow_item); } diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index 30b7e0d..c7c316c 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -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); + ic = &_ephoto_thumb_file_class; - if (near_node) - near_item = near_node->data; - - 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