|
|
|
@ -1,22 +1,11 @@ |
|
|
|
|
#include "ephoto.h" |
|
|
|
|
|
|
|
|
|
static void _entry_free(void *data __UNUSED__, const Ephoto_Entry *entry __UNUSED__); |
|
|
|
|
static Evas_Object *_ephoto_add_image_edje(const char *swallow); |
|
|
|
|
static Evas_Object *_ephoto_add_image(Evas_Object *swallow); |
|
|
|
|
static void _ephoto_flow_done(void *data __UNUSED__, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__); |
|
|
|
|
static void _ephoto_flow_back(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__); |
|
|
|
|
static void _ephoto_flow_prev(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__); |
|
|
|
|
static void _ephoto_flow_next(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__); |
|
|
|
|
static void _ephoto_center_image_clicked(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__); |
|
|
|
|
static void _ephoto_show_slideshow(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__); |
|
|
|
|
static void _ephoto_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event_info); |
|
|
|
|
static void _ephoto_mouse_wheel(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event_info); |
|
|
|
|
|
|
|
|
|
typedef enum _Ephoto_Flow_State |
|
|
|
|
typedef enum _Ephoto_Flow_State Ephoto_Flow_State; |
|
|
|
|
enum _Ephoto_Flow_State |
|
|
|
|
{ |
|
|
|
|
EPHOTO_FLOW_STATE_FLOW, |
|
|
|
|
EPHOTO_FLOW_STATE_SINGLE |
|
|
|
|
} Ephoto_Flow_State; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
typedef struct _Ephoto_Flow_Browser Ephoto_Flow_Browser; |
|
|
|
|
struct _Ephoto_Flow_Browser |
|
|
|
@ -25,13 +14,15 @@ struct _Ephoto_Flow_Browser |
|
|
|
|
Eina_Bool mouse_wheel; |
|
|
|
|
Eina_List *current_index; |
|
|
|
|
Eina_List *items; |
|
|
|
|
Evas_Object *box; |
|
|
|
|
Evas_Object *edje; |
|
|
|
|
Evas_Object *layout; |
|
|
|
|
Evas_Object *main_layout; |
|
|
|
|
Evas_Object *images[5]; |
|
|
|
|
Evas_Object *img_edje[5]; |
|
|
|
|
Evas_Object *toolbar; |
|
|
|
|
Ephoto_Flow_State efs; |
|
|
|
|
Ephoto_Entry *entry; |
|
|
|
|
Ephoto *ephoto; |
|
|
|
|
char *swallows[5]; |
|
|
|
|
int flow_direct; |
|
|
|
|
struct { |
|
|
|
@ -42,91 +33,44 @@ struct _Ephoto_Flow_Browser |
|
|
|
|
} action; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
Ephoto *ephoto; |
|
|
|
|
Ephoto_Flow_Browser *efb; |
|
|
|
|
|
|
|
|
|
Evas_Object * |
|
|
|
|
ephoto_flow_browser_add(Ephoto *e, Evas_Object *parent) |
|
|
|
|
static void |
|
|
|
|
_entry_free(void *data, const Ephoto_Entry *entry __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
efb = calloc(1, sizeof(Ephoto_Flow_Browser)); |
|
|
|
|
|
|
|
|
|
efb->efs = EPHOTO_FLOW_STATE_FLOW; |
|
|
|
|
efb->swallows[0] = "offscreen_left"; |
|
|
|
|
efb->swallows[1] = "left"; |
|
|
|
|
efb->swallows[2] = "center"; |
|
|
|
|
efb->swallows[3] = "right"; |
|
|
|
|
efb->swallows[4] = "offscreen_right"; |
|
|
|
|
efb->key_down = EINA_FALSE; |
|
|
|
|
efb->mouse_wheel = EINA_FALSE; |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
|
|
|
|
|
ephoto = e; |
|
|
|
|
efb->entry = NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
efb->box = elm_box_add(parent); |
|
|
|
|
elm_box_horizontal_set(efb->box, EINA_FALSE); |
|
|
|
|
elm_box_homogenous_set(efb->box, EINA_FALSE); |
|
|
|
|
evas_object_size_hint_weight_set |
|
|
|
|
(efb->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
|
|
|
elm_win_resize_object_add(ephoto->win, efb->box); |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->box, EVAS_CALLBACK_MOUSE_WHEEL, _ephoto_mouse_wheel, NULL); |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->box, EVAS_CALLBACK_KEY_DOWN, _ephoto_key_down, NULL); |
|
|
|
|
evas_object_show(efb->box); |
|
|
|
|
static Evas_Object * |
|
|
|
|
_add_image_edje(const char *swallow, Evas_Object *parent) |
|
|
|
|
{ |
|
|
|
|
Evas_Object *o; |
|
|
|
|
|
|
|
|
|
efb->toolbar = elm_toolbar_add(efb->box); |
|
|
|
|
elm_toolbar_homogenous_set(efb->toolbar, EINA_TRUE); |
|
|
|
|
elm_toolbar_mode_shrink_set(efb->toolbar, ELM_TOOLBAR_SHRINK_MENU); |
|
|
|
|
elm_toolbar_menu_parent_set(efb->toolbar, efb->box); |
|
|
|
|
evas_object_size_hint_weight_set(efb->toolbar, 0.0, 0.0); |
|
|
|
|
evas_object_size_hint_align_set(efb->toolbar, EVAS_HINT_FILL, 0.0); |
|
|
|
|
|
|
|
|
|
efb->action.go_back = elm_toolbar_item_append |
|
|
|
|
(efb->toolbar, "edit-undo", "Back", _ephoto_flow_back, NULL); |
|
|
|
|
elm_toolbar_item_priority_set(efb->action.go_back, 0); |
|
|
|
|
efb->action.go_prev = elm_toolbar_item_append |
|
|
|
|
(efb->toolbar, "go-previous", "Previous", _ephoto_flow_prev, NULL); |
|
|
|
|
elm_toolbar_item_priority_set(efb->action.go_prev, 1); |
|
|
|
|
efb->action.go_next = elm_toolbar_item_append |
|
|
|
|
(efb->toolbar, "go-next", "Next", _ephoto_flow_next, NULL); |
|
|
|
|
elm_toolbar_item_priority_set(efb->action.go_next, 2); |
|
|
|
|
efb->action.slideshow = elm_toolbar_item_append |
|
|
|
|
(efb->toolbar, "media-playback-start", "Slideshow", _ephoto_show_slideshow, NULL); |
|
|
|
|
elm_toolbar_item_priority_set(efb->action.slideshow, 3); |
|
|
|
|
|
|
|
|
|
elm_toolbar_icon_size_set(efb->toolbar, 32); |
|
|
|
|
elm_box_pack_end(efb->box, efb->toolbar); |
|
|
|
|
evas_object_show(efb->toolbar); |
|
|
|
|
|
|
|
|
|
efb->layout = elm_layout_add(ephoto->win); |
|
|
|
|
o = elm_layout_add(parent); |
|
|
|
|
elm_layout_file_set |
|
|
|
|
(efb->layout, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "flow"); |
|
|
|
|
evas_object_size_hint_weight_set |
|
|
|
|
(efb->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
|
|
|
evas_object_size_hint_fill_set |
|
|
|
|
(efb->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
|
|
|
elm_win_resize_object_add(ephoto->win, efb->layout); |
|
|
|
|
elm_box_pack_end(efb->box, efb->layout); |
|
|
|
|
evas_object_show(efb->layout); |
|
|
|
|
(o, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "flow_image"); |
|
|
|
|
elm_layout_content_set(parent, swallow, o); |
|
|
|
|
evas_object_show(o); |
|
|
|
|
|
|
|
|
|
edje_object_signal_callback_add |
|
|
|
|
(elm_layout_edje_get(efb->layout), "done", "ephoto", _ephoto_flow_done, NULL); |
|
|
|
|
return o; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 5; i++) |
|
|
|
|
{ |
|
|
|
|
efb->img_edje[i] = _ephoto_add_image_edje(efb->swallows[i]); |
|
|
|
|
efb->images[i] = _ephoto_add_image(efb->img_edje[i]); |
|
|
|
|
if (i == 2) |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->img_edje[2], EVAS_CALLBACK_MOUSE_DOWN, _ephoto_center_image_clicked, NULL); |
|
|
|
|
} |
|
|
|
|
static Evas_Object * |
|
|
|
|
_add_image(Evas_Object *swallow, Evas_Object *parent) |
|
|
|
|
{ |
|
|
|
|
Evas_Object *o; |
|
|
|
|
|
|
|
|
|
o = elm_thumb_add(parent); |
|
|
|
|
elm_object_style_set(o, "noframe"); |
|
|
|
|
elm_layout_content_set(swallow, "image", o); |
|
|
|
|
evas_object_show(o); |
|
|
|
|
|
|
|
|
|
return efb->box; |
|
|
|
|
return o; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
ephoto_flow_browser_image_set(void) |
|
|
|
|
static void |
|
|
|
|
_flow_browser_image_set(Ephoto_Flow_Browser *efb) |
|
|
|
|
{ |
|
|
|
|
Eina_List *prevv, *prev, *next, *nextt;
|
|
|
|
|
Ephoto_Entry *pp, *p, *n, *nn, *c; |
|
|
|
@ -173,114 +117,13 @@ ephoto_flow_browser_image_set(void) |
|
|
|
|
elm_layout_content_set(efb->img_edje[4], "image", efb->images[4]); |
|
|
|
|
elm_layout_content_set(efb->layout, "offscreen_right", efb->img_edje[4]); |
|
|
|
|
|
|
|
|
|
elm_object_focus(efb->box); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
ephoto_flow_browser_del(void) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 5; i++) |
|
|
|
|
evas_object_del(efb->images[i]); |
|
|
|
|
eina_list_free(efb->items); |
|
|
|
|
if (efb->entry) |
|
|
|
|
ephoto_entry_free_listener_del(efb->entry, _entry_free, NULL); |
|
|
|
|
evas_object_del(efb->layout); |
|
|
|
|
evas_object_del(efb->toolbar); |
|
|
|
|
evas_object_del(efb->box); |
|
|
|
|
free(efb); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
ephoto_flow_browser_entry_set(Evas_Object *obj __UNUSED__, Ephoto_Entry *entry) |
|
|
|
|
{ |
|
|
|
|
Eina_Bool same_file = EINA_FALSE; |
|
|
|
|
Eina_List *l; |
|
|
|
|
Ephoto_Entry *itr; |
|
|
|
|
|
|
|
|
|
elm_object_focus(efb->layout); |
|
|
|
|
if (!evas_object_key_grab(efb->box, "Escape", 0, 0, 1)) |
|
|
|
|
printf("Couldn't grab Escape key\n"); |
|
|
|
|
if (!evas_object_key_grab(efb->box, "Left", 0, 0, 1)) |
|
|
|
|
printf("Couldn't grab Left key\n"); |
|
|
|
|
if (!evas_object_key_grab(efb->box, "Right", 0, 0, 1)) |
|
|
|
|
printf("Couldn't grab Right key\n"); |
|
|
|
|
if (!evas_object_key_grab(efb->box, "BackSpace", 0, 0, 1)) |
|
|
|
|
printf("Couldn't grab BackSpace key\n"); |
|
|
|
|
if (!evas_object_key_grab(efb->box, "space", 0, 0, 1)) |
|
|
|
|
printf("Couldn't grab space key\n"); |
|
|
|
|
|
|
|
|
|
if (efb->entry) |
|
|
|
|
{ |
|
|
|
|
ephoto_entry_free_listener_del(efb->entry, _entry_free, NULL); |
|
|
|
|
if (entry && entry->path == efb->entry->path) |
|
|
|
|
same_file = EINA_TRUE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
efb->entry = entry; |
|
|
|
|
|
|
|
|
|
if (entry) |
|
|
|
|
ephoto_entry_free_listener_add(entry, _entry_free, NULL); |
|
|
|
|
if (!efb->entry || same_file) |
|
|
|
|
{ |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_prev, EINA_TRUE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_next, EINA_TRUE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.slideshow, EINA_TRUE); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_prev, EINA_FALSE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_next, EINA_FALSE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.slideshow, EINA_FALSE); |
|
|
|
|
} |
|
|
|
|
eina_list_free(efb->items); |
|
|
|
|
efb->items = NULL; |
|
|
|
|
EINA_LIST_FOREACH(ephoto->entries, l, itr) |
|
|
|
|
{ |
|
|
|
|
efb->items = eina_list_append(efb->items, itr); |
|
|
|
|
if (itr == entry) efb->current_index = eina_list_last(efb->items); |
|
|
|
|
} |
|
|
|
|
ephoto_flow_browser_image_set(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_entry_free(void *data __UNUSED__, const Ephoto_Entry *entry __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
efb->entry = NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static Evas_Object * |
|
|
|
|
_ephoto_add_image_edje(const char *swallow) |
|
|
|
|
{ |
|
|
|
|
Evas_Object *o; |
|
|
|
|
|
|
|
|
|
o = elm_layout_add(efb->box); |
|
|
|
|
elm_layout_file_set |
|
|
|
|
(o, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "flow_image"); |
|
|
|
|
elm_layout_content_set(efb->layout, swallow, o); |
|
|
|
|
evas_object_show(o); |
|
|
|
|
|
|
|
|
|
return o; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static Evas_Object * |
|
|
|
|
_ephoto_add_image(Evas_Object *swallow) |
|
|
|
|
{ |
|
|
|
|
Evas_Object *o; |
|
|
|
|
|
|
|
|
|
o = elm_thumb_add(efb->box); |
|
|
|
|
elm_object_style_set(o, "noframe"); |
|
|
|
|
elm_layout_content_set(swallow, "image", o); |
|
|
|
|
evas_object_show(o); |
|
|
|
|
|
|
|
|
|
return o; |
|
|
|
|
elm_object_focus(efb->main_layout); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
_ephoto_flow_done(void *data __UNUSED__, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) |
|
|
|
|
_flow_done(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
Evas_Object *edje; |
|
|
|
|
|
|
|
|
|
edje = elm_layout_edje_get(efb->layout); |
|
|
|
@ -291,14 +134,14 @@ _ephoto_flow_done(void *data __UNUSED__, Evas_Object *o __UNUSED__, const char * |
|
|
|
|
efb->current_index = eina_list_prev(efb->current_index); |
|
|
|
|
if (!eina_list_data_get(efb->current_index)) |
|
|
|
|
efb->current_index = eina_list_last(efb->items); |
|
|
|
|
ephoto_flow_browser_image_set(); |
|
|
|
|
_flow_browser_image_set(efb); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
efb->current_index = eina_list_next(efb->current_index); |
|
|
|
|
if (!eina_list_data_get(efb->current_index)) |
|
|
|
|
efb->current_index = eina_list_nth_list(efb->items, 0); |
|
|
|
|
ephoto_flow_browser_image_set(); |
|
|
|
|
_flow_browser_image_set(efb); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
edje_object_signal_emit(edje, "reset", "ephoto"); |
|
|
|
@ -311,23 +154,20 @@ _ephoto_flow_done(void *data __UNUSED__, Evas_Object *o __UNUSED__, const char * |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_ephoto_flow_back(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
_flow_back(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
elm_toolbar_item_selected_set(efb->action.go_back, EINA_FALSE); |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
|
|
|
|
|
evas_object_key_ungrab(efb->box, "Escape", 0, 0); |
|
|
|
|
evas_object_key_ungrab(efb->box, "Left", 0, 0); |
|
|
|
|
evas_object_key_ungrab(efb->box, "Right", 0, 0); |
|
|
|
|
evas_object_key_ungrab(efb->box, "BackSpace", 0, 0); |
|
|
|
|
evas_object_key_ungrab(efb->box, "space", 0, 0); |
|
|
|
|
elm_toolbar_item_selected_set(efb->action.go_back, EINA_FALSE); |
|
|
|
|
|
|
|
|
|
elm_object_unfocus(efb->layout); |
|
|
|
|
evas_object_smart_callback_call(efb->box, "back", efb->entry); |
|
|
|
|
elm_object_unfocus(efb->main_layout); |
|
|
|
|
evas_object_smart_callback_call(efb->main_layout, "back", efb->entry); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
_ephoto_flow_prev(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
_flow_prev(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
Evas_Object *edje; |
|
|
|
|
|
|
|
|
|
elm_toolbar_item_selected_set(efb->action.go_prev, EINA_FALSE); |
|
|
|
@ -349,8 +189,9 @@ _ephoto_flow_prev(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
_ephoto_flow_next(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
_flow_next(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
Evas_Object *edje; |
|
|
|
|
|
|
|
|
|
elm_toolbar_item_selected_set(efb->action.go_next, EINA_FALSE); |
|
|
|
@ -372,8 +213,9 @@ _ephoto_flow_next(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
_ephoto_center_image_clicked(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
_center_image_clicked(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
Evas_Object *edje; |
|
|
|
|
|
|
|
|
|
edje = elm_layout_edje_get(efb->layout); |
|
|
|
@ -391,16 +233,19 @@ _ephoto_center_image_clicked(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Obj |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_ephoto_show_slideshow(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
_show_slideshow(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
|
|
|
|
|
elm_toolbar_item_selected_set(efb->action.slideshow, EINA_FALSE); |
|
|
|
|
|
|
|
|
|
evas_object_smart_callback_call(efb->box, "slideshow", efb->entry); |
|
|
|
|
evas_object_smart_callback_call(efb->main_layout, "slideshow", efb->entry); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_ephoto_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) |
|
|
|
|
_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
Evas_Event_Key_Down *ev = event_info; |
|
|
|
|
const char *k = ev->keyname; |
|
|
|
|
|
|
|
|
@ -409,16 +254,17 @@ _ephoto_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __U |
|
|
|
|
efb->key_down = EINA_TRUE; |
|
|
|
|
|
|
|
|
|
if (!strcmp(k, "Escape")) |
|
|
|
|
_ephoto_flow_back(NULL, NULL, NULL); |
|
|
|
|
_flow_back(efb, NULL, NULL); |
|
|
|
|
if (!strcmp(k, "Left") || !strcmp(k, "BackSpace")) |
|
|
|
|
_ephoto_flow_prev(NULL, NULL, NULL); |
|
|
|
|
_flow_prev(efb, NULL, NULL); |
|
|
|
|
if (!strcmp(k, "Right") || !strcmp(k, "space")) |
|
|
|
|
_ephoto_flow_next(NULL, NULL, NULL); |
|
|
|
|
_flow_next(efb, NULL, NULL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_ephoto_mouse_wheel(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) |
|
|
|
|
_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
Evas_Event_Mouse_Wheel *ev = event_info; |
|
|
|
|
|
|
|
|
|
if (efb->mouse_wheel) |
|
|
|
@ -426,7 +272,154 @@ _ephoto_mouse_wheel(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj |
|
|
|
|
efb->mouse_wheel = EINA_TRUE; |
|
|
|
|
|
|
|
|
|
if (ev->z > 0)
|
|
|
|
|
_ephoto_flow_next(NULL, NULL, NULL); |
|
|
|
|
_flow_next(efb, NULL, NULL); |
|
|
|
|
else |
|
|
|
|
_flow_prev(efb, NULL, NULL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_layout_del(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = data; |
|
|
|
|
|
|
|
|
|
if (efb->entry) |
|
|
|
|
ephoto_entry_free_listener_del(efb->entry, _entry_free, efb); |
|
|
|
|
|
|
|
|
|
free(efb); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static Elm_Toolbar_Item * |
|
|
|
|
_toolbar_item_add(Ephoto_Flow_Browser *efb, const char *icon, const char *label, int priority, Evas_Smart_Cb cb) |
|
|
|
|
{ |
|
|
|
|
Elm_Toolbar_Item *item = elm_toolbar_item_append(efb->toolbar, icon, label, |
|
|
|
|
cb, efb); |
|
|
|
|
elm_toolbar_item_priority_set(item, priority); |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Evas_Object * |
|
|
|
|
ephoto_flow_browser_add(Ephoto *e, Evas_Object *parent) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
efb = calloc(1, sizeof(Ephoto_Flow_Browser)); |
|
|
|
|
|
|
|
|
|
efb->efs = EPHOTO_FLOW_STATE_FLOW; |
|
|
|
|
efb->swallows[0] = "offscreen_left"; |
|
|
|
|
efb->swallows[1] = "left"; |
|
|
|
|
efb->swallows[2] = "center"; |
|
|
|
|
efb->swallows[3] = "right"; |
|
|
|
|
efb->swallows[4] = "offscreen_right"; |
|
|
|
|
efb->key_down = EINA_FALSE; |
|
|
|
|
efb->mouse_wheel = EINA_FALSE; |
|
|
|
|
efb->ephoto = e; |
|
|
|
|
|
|
|
|
|
efb->main_layout = elm_layout_add(parent); |
|
|
|
|
efb->edje = elm_layout_edje_get(efb->main_layout); |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->main_layout, EVAS_CALLBACK_DEL, _layout_del, efb); |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->main_layout, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel, efb); |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->main_layout, EVAS_CALLBACK_KEY_DOWN, _key_down, efb); |
|
|
|
|
evas_object_data_set(efb->main_layout, "flow_browser", efb); |
|
|
|
|
|
|
|
|
|
if (!elm_layout_theme_set |
|
|
|
|
(efb->main_layout, "layout", "application", "toolbar-vbox")) |
|
|
|
|
{ |
|
|
|
|
ERR("could not load style 'toolbar-vbox' from theme"); |
|
|
|
|
goto error; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
efb->toolbar = edje_object_part_external_object_get |
|
|
|
|
(efb->edje, "elm.external.toolbar"); |
|
|
|
|
elm_toolbar_homogenous_set(efb->toolbar, EINA_TRUE); |
|
|
|
|
elm_toolbar_mode_shrink_set(efb->toolbar, ELM_TOOLBAR_SHRINK_MENU); |
|
|
|
|
elm_toolbar_menu_parent_set(efb->toolbar, parent); |
|
|
|
|
|
|
|
|
|
efb->action.go_back = _toolbar_item_add |
|
|
|
|
(efb, "edit-undo", "Back", 120, _flow_back); |
|
|
|
|
efb->action.go_prev = _toolbar_item_add |
|
|
|
|
(efb, "go-previous", "Previous", 100, _flow_prev); |
|
|
|
|
efb->action.go_next = _toolbar_item_add |
|
|
|
|
(efb, "go-next", "Next", 80, _flow_next); |
|
|
|
|
efb->action.slideshow = _toolbar_item_add |
|
|
|
|
(efb, "media-playback-start", "Slideshow", 70, _show_slideshow); |
|
|
|
|
|
|
|
|
|
efb->layout = elm_layout_add(efb->main_layout); |
|
|
|
|
elm_layout_file_set |
|
|
|
|
(efb->layout, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "flow"); |
|
|
|
|
evas_object_size_hint_weight_set |
|
|
|
|
(efb->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
|
|
|
evas_object_size_hint_fill_set |
|
|
|
|
(efb->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
|
|
|
evas_object_show(efb->layout); |
|
|
|
|
elm_layout_box_append |
|
|
|
|
(efb->main_layout, "elm.box.content", efb->layout); |
|
|
|
|
|
|
|
|
|
edje_object_signal_callback_add |
|
|
|
|
(elm_layout_edje_get(efb->layout), "done", "ephoto", _flow_done, efb); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 5; i++) |
|
|
|
|
{ |
|
|
|
|
efb->img_edje[i] = _add_image_edje(efb->swallows[i], efb->layout); |
|
|
|
|
efb->images[i] = _add_image(efb->img_edje[i], efb->layout); |
|
|
|
|
if (i == 2) |
|
|
|
|
evas_object_event_callback_add |
|
|
|
|
(efb->img_edje[2], EVAS_CALLBACK_MOUSE_DOWN, _center_image_clicked, efb); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return efb->main_layout; |
|
|
|
|
|
|
|
|
|
error: |
|
|
|
|
evas_object_del(efb->main_layout); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
ephoto_flow_browser_entry_set(Evas_Object *obj, Ephoto_Entry *entry) |
|
|
|
|
{ |
|
|
|
|
Ephoto_Flow_Browser *efb = evas_object_data_get(obj, "flow_browser"); |
|
|
|
|
Eina_Bool same_file = EINA_FALSE; |
|
|
|
|
Eina_List *l; |
|
|
|
|
Ephoto_Entry *itr; |
|
|
|
|
|
|
|
|
|
elm_object_focus(efb->main_layout); |
|
|
|
|
|
|
|
|
|
if (efb->entry) |
|
|
|
|
{ |
|
|
|
|
ephoto_entry_free_listener_del(efb->entry, _entry_free, efb); |
|
|
|
|
if (entry && entry->path == efb->entry->path) |
|
|
|
|
same_file = EINA_TRUE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
efb->entry = entry; |
|
|
|
|
|
|
|
|
|
if (entry) |
|
|
|
|
ephoto_entry_free_listener_add(entry, _entry_free, efb); |
|
|
|
|
if (!efb->entry || same_file) |
|
|
|
|
{ |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_prev, EINA_TRUE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_next, EINA_TRUE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.slideshow, EINA_TRUE); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
_ephoto_flow_prev(NULL, NULL, NULL); |
|
|
|
|
{ |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_prev, EINA_FALSE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.go_next, EINA_FALSE); |
|
|
|
|
elm_toolbar_item_disabled_set(efb->action.slideshow, EINA_FALSE); |
|
|
|
|
} |
|
|
|
|
eina_list_free(efb->items); |
|
|
|
|
efb->items = NULL; |
|
|
|
|
EINA_LIST_FOREACH(efb->ephoto->entries, l, itr) |
|
|
|
|
{ |
|
|
|
|
efb->items = eina_list_append(efb->items, itr); |
|
|
|
|
if (itr == entry) efb->current_index = eina_list_last(efb->items); |
|
|
|
|
} |
|
|
|
|
_flow_browser_image_set(efb); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|