diff --git a/src/photo_menu.c b/src/photo_menu.c index 8853c04..8ca8a0e 100644 --- a/src/photo_menu.c +++ b/src/photo_menu.c @@ -9,7 +9,21 @@ static void _cb_picture_viewer(void *data, E_Menu *m, E_Menu_Item *mi); static void _cb_pause_toggle(void *data, E_Menu *m, E_Menu_Item *mi); static void _cb_configure_item(void *data, E_Menu *m, E_Menu_Item *mi); static void _cb_configure_general(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_hist_menu_populate(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_hist_menu_activate(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_hist_menu_populate(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_hist_menu_activate(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_hist_menu_select(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_hist_menu_pre_select(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void _cb_hist_menu_post_select(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void _cb_hist_menu_deactivate_post(void *data, E_Menu *m); +static void _cb_popi_close(void *data); +void photo_picture_histo_menu_append(Photo_Item *pi, E_Menu *mn_main) +{ + E_Menu_Item *mi; + +} /* * Public functions @@ -17,68 +31,72 @@ static void _cb_configure_general(void *data, E_Menu *m, E_Menu_Item *mi); int photo_menu_show(Photo_Item *pi) { - E_Menu *ma, *mg; + E_Menu *m; E_Menu_Item *mi; char buf[4096]; - ma = e_menu_new(); - e_menu_post_deactivate_callback_set(ma, _cb_deactivate_post, pi); - pi->menu = ma; + m = e_menu_new(); - mi = e_menu_item_new(ma); - if (pi->config->timer_active) - { - e_menu_item_label_set(mi, D_("Pause slideshow")); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_PAUSE); - } - else - { - e_menu_item_label_set(mi, D_("Resume slideshow")); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_RESUME); - } - e_menu_item_callback_set(mi, _cb_pause_toggle, pi); - mi = e_menu_item_new(ma); - e_menu_item_label_set(mi, D_("Next picture")); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_NEXT); - e_menu_item_callback_set(mi, _cb_picture_next, pi); - mi = e_menu_item_new(ma); - e_menu_item_label_set(mi, D_("Previous picture")); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_PREVIOUS); - e_menu_item_callback_set(mi, _cb_picture_prev, pi); - - photo_picture_histo_menu_append(pi, ma); - - mi = e_menu_item_new(ma); - e_menu_item_separator_set(mi, 1); - - mi = e_menu_item_new(ma); - e_menu_item_label_set(mi, D_("Picture informations")); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_INFOS); - e_menu_item_callback_set(mi, _cb_picture_info, pi); - mi = e_menu_item_new(ma); - e_menu_item_label_set(mi, D_("Set as background")); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_SETBG); - e_menu_item_callback_set(mi, _cb_picture_setbg, pi); - mi = e_menu_item_new(ma); - snprintf(buf, sizeof(buf), "%s %s", D_("Open in"), photo->config->pictures_viewer); - e_menu_item_label_set(mi, buf); - photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_VIEWER); - e_menu_item_callback_set(mi, _cb_picture_viewer, pi); - - mg = e_menu_new(); - - mi = e_menu_item_new(mg); + mi = e_menu_item_new(m); e_menu_item_label_set(mi, D_("Module Settings")); e_util_menu_item_theme_icon_set(mi, "preferences-system"); e_menu_item_callback_set(mi, _cb_configure_general, NULL); - mi = e_menu_item_new(mg); + mi = e_menu_item_new(m); e_menu_item_separator_set(mi, 1); - mi = e_menu_item_new(mg); + mi = e_menu_item_new(m); e_menu_item_label_set(mi, D_("Settings")); e_util_menu_item_theme_icon_set(mi, "preferences-system"); e_menu_item_callback_set(mi, _cb_configure_item, pi); - e_gadcon_client_util_menu_items_append(pi->gcc, ma, mg, 0); + m = e_gadcon_client_util_menu_items_append(pi->gcc, m, 0); + e_menu_post_deactivate_callback_set(m, _cb_deactivate_post, pi); + pi->menu = m; + + mi = e_menu_item_new_relative(m, NULL); + if (pi->config->timer_active) + { + e_menu_item_label_set(mi, D_("Pause slideshow")); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_PAUSE); + } + else + { + e_menu_item_label_set(mi, D_("Resume slideshow")); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_RESUME); + } + e_menu_item_callback_set(mi, _cb_pause_toggle, pi); + mi = e_menu_item_new_relative(m, mi); + e_menu_item_label_set(mi, D_("Next picture")); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_NEXT); + e_menu_item_callback_set(mi, _cb_picture_next, pi); + mi = e_menu_item_new_relative(m, mi); + e_menu_item_label_set(mi, D_("Previous picture")); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_PREVIOUS); + e_menu_item_callback_set(mi, _cb_picture_prev, pi); + + + mi = e_menu_item_new_relative(m, mi); + e_menu_item_label_set(mi, D_("Historic")); + e_menu_item_submenu_pre_callback_set(mi, + _cb_hist_menu_populate, pi); + e_menu_item_submenu_post_callback_set(mi, + _cb_hist_menu_activate, pi); + + mi = e_menu_item_new_relative(m, mi); + e_menu_item_separator_set(mi, 1); + + mi = e_menu_item_new_relative(m, mi); + e_menu_item_label_set(mi, D_("Picture informations")); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_INFOS); + e_menu_item_callback_set(mi, _cb_picture_info, pi); + mi = e_menu_item_new_relative(m, mi); + e_menu_item_label_set(mi, D_("Set as background")); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_SETBG); + e_menu_item_callback_set(mi, _cb_picture_setbg, pi); + mi = e_menu_item_new_relative(m, mi); + snprintf(buf, sizeof(buf), "%s %s", D_("Open in"), photo->config->pictures_viewer); + e_menu_item_label_set(mi, buf); + photo_util_menu_icon_set(mi, PHOTO_THEME_ICON_VIEWER); + e_menu_item_callback_set(mi, _cb_picture_viewer, pi); return 1; } @@ -196,3 +214,152 @@ _cb_configure_general(void *data, E_Menu *m, E_Menu_Item *mi) photo_config_dialog_show(); } + +static void +_cb_hist_menu_select(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Photo_Item *pi; + int no; + + pi = data; + + no = e_menu_item_num_get(mi); + photo_item_action_change(pi, + pi->histo.pos - + (eina_list_count(pi->histo.list) - (no+1))); + photo_item_timer_set(pi, pi->config->timer_active, 0); +} + +static void +_cb_hist_menu_pre_select(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + E_Menu_Item *mi; + Photo_Item *pi; + Picture *p; + char *text; + int number; + + mi = data; + if (!mi) return; + pi = mi->cb.data; + if (!pi) return; + + number = (eina_list_count(pi->histo.list) - (e_menu_item_num_get(mi)+1)); + + DPIC(("Histo menu : Select %d in histo list", number)); + + p = eina_list_nth(pi->histo.list, number); + if (!p) return; + + text = photo_picture_infos_get(p); + + if (pi->histo.popi) + photo_popup_info_del(pi->histo.popi); + + pi->histo.popi = photo_popup_info_add(pi, p->infos.name, text, p, + PICTURE_HISTO_POPUP_TIMER, + POPUP_INFO_PLACEMENT_CENTERED, + _cb_popi_close, NULL); + + free(text); +} + +static void +_cb_hist_menu_post_select(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + E_Menu_Item *mi; + Photo_Item *pi; + + mi = data; + if (!mi) return; + pi = mi->cb.data; + if (!pi) return; + + DPIC(("Histo menu : Post select callback")); + + if (pi->histo.popi) + photo_popup_info_del(pi->histo.popi); + pi->histo.popi = NULL; +} + +static void +_cb_hist_menu_deactivate_post(void *data, E_Menu *m) +{ + Photo_Item *pi; + + pi = data; + pi->menu_histo = NULL; + + DD(("deactivate cb post")); + + e_object_del(E_OBJECT(m)); +} + +static void +_cb_hist_menu_populate(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Photo_Item *pi; + E_Menu *mn; + Picture *p; + int pos; + + pi = data; + + mn = e_menu_new(); + pi->menu_histo = mn; + e_menu_post_deactivate_callback_set(mn, _cb_hist_menu_deactivate_post, pi); + e_menu_item_submenu_set(mi, mn); + + pos = eina_list_count(pi->histo.list) - 1; + while ( (p=eina_list_nth(pi->histo.list, pos)) ) + { + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, p->infos.name); + e_menu_item_radio_group_set(mi, 1); + e_menu_item_radio_set(mi, 1); + if (pi->histo.pos == pos) + e_menu_item_toggle_set(mi, 1); + + e_menu_item_callback_set(mi, _cb_hist_menu_select, pi); + evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_IN, + _cb_hist_menu_pre_select, mi); + evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_OUT, + _cb_hist_menu_post_select, mi); + + pos--; + } +} + +static void +_cb_hist_menu_activate(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Photo_Item *pi; + E_Menu *mn; + Eina_List *l; + + pi = data; + mn = pi->menu_histo; + + if (!mn) return; + + for (l=mn->items; l; l=eina_list_next(l)) + { + E_Menu_Item *mi; + + mi = eina_list_data_get(l); + if (!mi || mi->separator) continue; + evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_IN, + _cb_hist_menu_pre_select, mi); + evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_OUT, + _cb_hist_menu_post_select, mi); + } +} + +static void +_cb_popi_close(void *data) +{ + Photo_Item *pi; + + pi = data; + pi->histo.popi = NULL; +} diff --git a/src/photo_picture_histo.c b/src/photo_picture_histo.c index 22be225..d5916ed 100644 --- a/src/photo_picture_histo.c +++ b/src/photo_picture_histo.c @@ -1,12 +1,6 @@ #include "Photo.h" -static void _cb_menu_populate(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cb_menu_activate(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cb_menu_select(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cb_menu_pre_select(void *data, Evas *evas, Evas_Object *obj, void *event_info); -static void _cb_menu_post_select(void *data, Evas *evas, Evas_Object *obj, void *event_info); -static void _cb_menu_deactivate_post(void *data, E_Menu *m); -static void _cb_popi_close(void *data); + /* * Public functions @@ -112,170 +106,3 @@ void photo_picture_histo_picture_del(Picture *picture) eina_list_free(picture->items_histo); } - -void photo_picture_histo_menu_append(Photo_Item *pi, E_Menu *mn_main) -{ - E_Menu_Item *mi; - - mi = e_menu_item_new(mn_main); - e_menu_item_label_set(mi, D_("Historic")); - e_menu_item_submenu_pre_callback_set(mi, - _cb_menu_populate, pi); - e_menu_item_submenu_post_callback_set(mi, - _cb_menu_activate, pi); -} - - -/* - * Private functions - * - */ - -static void -_cb_menu_populate(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Photo_Item *pi; - E_Menu *mn; - Picture *p; - int pos; - - pi = data; - - mn = e_menu_new(); - pi->menu_histo = mn; - e_menu_post_deactivate_callback_set(mn, _cb_menu_deactivate_post, pi); - e_menu_item_submenu_set(mi, mn); - - pos = eina_list_count(pi->histo.list) - 1; - while ( (p=eina_list_nth(pi->histo.list, pos)) ) - { - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, p->infos.name); - e_menu_item_radio_group_set(mi, 1); - e_menu_item_radio_set(mi, 1); - if (pi->histo.pos == pos) - e_menu_item_toggle_set(mi, 1); - - e_menu_item_callback_set(mi, _cb_menu_select, pi); - evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_IN, - _cb_menu_pre_select, mi); - evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_OUT, - _cb_menu_post_select, mi); - - pos--; - } -} - -static void -_cb_menu_activate(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Photo_Item *pi; - E_Menu *mn; - Eina_List *l; - - pi = data; - mn = pi->menu_histo; - - if (!mn) return; - - for (l=mn->items; l; l=eina_list_next(l)) - { - E_Menu_Item *mi; - - mi = eina_list_data_get(l); - if (!mi || mi->separator) continue; - evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_IN, - _cb_menu_pre_select, mi); - evas_object_event_callback_add(mi->event_object, EVAS_CALLBACK_MOUSE_OUT, - _cb_menu_post_select, mi); - } -} - -static void -_cb_menu_select(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Photo_Item *pi; - int no; - - pi = data; - - no = e_menu_item_num_get(mi); - photo_item_action_change(pi, - pi->histo.pos - - (eina_list_count(pi->histo.list) - (no+1))); - photo_item_timer_set(pi, pi->config->timer_active, 0); -} - -static void -_cb_menu_pre_select(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - E_Menu_Item *mi; - Photo_Item *pi; - Picture *p; - char *text; - int number; - - mi = data; - if (!mi) return; - pi = mi->cb.data; - if (!pi) return; - - number = (eina_list_count(pi->histo.list) - (e_menu_item_num_get(mi)+1)); - - DPIC(("Histo menu : Select %d in histo list", number)); - - p = eina_list_nth(pi->histo.list, number); - if (!p) return; - - text = photo_picture_infos_get(p); - - if (pi->histo.popi) - photo_popup_info_del(pi->histo.popi); - - pi->histo.popi = photo_popup_info_add(pi, p->infos.name, text, p, - PICTURE_HISTO_POPUP_TIMER, - POPUP_INFO_PLACEMENT_CENTERED, - _cb_popi_close, NULL); - - free(text); -} - -static void -_cb_menu_post_select(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - E_Menu_Item *mi; - Photo_Item *pi; - - mi = data; - if (!mi) return; - pi = mi->cb.data; - if (!pi) return; - - DPIC(("Histo menu : Post select callback")); - - if (pi->histo.popi) - photo_popup_info_del(pi->histo.popi); - pi->histo.popi = NULL; -} - -static void -_cb_menu_deactivate_post(void *data, E_Menu *m) -{ - Photo_Item *pi; - - pi = data; - pi->menu_histo = NULL; - - DD(("deactivate cb post")); - - e_object_del(E_OBJECT(m)); -} - -static void -_cb_popi_close(void *data) -{ - Photo_Item *pi; - - pi = data; - pi->histo.popi = NULL; -} diff --git a/src/photo_picture_histo.h b/src/photo_picture_histo.h index 690bbdf..e270839 100644 --- a/src/photo_picture_histo.h +++ b/src/photo_picture_histo.h @@ -20,7 +20,5 @@ Picture *photo_picture_histo_change(Photo_Item *pi, int offset); void photo_picture_histo_picture_del(Picture *picture); -void photo_picture_histo_menu_append(Photo_Item *pi, E_Menu *mn_main); - #endif #endif