From: Jehun Lim Date: Mon, 23 Mar 2015 10:51:51 +0000 (+0900) Subject: add photo previewbar in photoviewer view X-Git-Tag: accepted/tizen/tv/20150325.011522~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F54%2F37254%2F2;p=profile%2Ftv%2Fapps%2Fnative%2Fgallery.git add photo previewbar in photoviewer view Change-Id: I5449c6781ef78a50f43630dcfdf6056718b26620 Signed-off-by: Jehun Lim --- diff --git a/include/common/define.h b/include/common/define.h index 3638913..61556f1 100644 --- a/include/common/define.h +++ b/include/common/define.h @@ -46,6 +46,10 @@ #define PART_DATETEXT "date.text" #define PART_COUNTTEXT "count.text" #define PART_CURRENTTEXT "current.text" +#define PART_PREVIEWBAR "previewbar" +#define PART_PREVIEWBAR_BORDER "previewbar.border" +#define PART_PREVIEWBAR_IMG "previewbar.image" +#define PART_PREVIEWBAR_SCR "previewbar.scroller" #define PART_LEFTSWALLOW "left_swallow" #define PART_HOVERSELAREA1 "hoversel_area1" #define PART_HOVERSELAREA2 "hoversel_area2" @@ -87,6 +91,8 @@ #define GRP_LAYOUT_EVENTS "layout_events" #define GRP_ZOOM_VIEW "zoom_view" #define GRP_ZOOM_NAVI "zoom_navi" +#define GRP_PREVIEWBAR "previewbar" +#define GRP_PREVIEWBAR_ITEM "previewbar_item" /* Signal definitions */ #define SIG_SELECTED "selected" @@ -98,9 +104,14 @@ #define SIG_ACTIVATED "activated" #define SIG_REALIZED "realized" #define SIG_UNREALIZED "unrealized" -#define SIG_HIDE "hide" #define SIG_SHOW "show" -#define SIG_SHOW_FINISH "show,finish" +#define SIG_HIDE "hide" +#define SIG_MENU_SHOW "menu,show" +#define SIG_MENU_SHOW_FINISH "menu,show,finish" +#define SIG_MENU_HIDE "menu,hide" +#define SIG_PREVIEWBAR_SHOW "previewbar,show" +#define SIG_PREVIEWBAR_SHOW_FINISH "previewbar,show,finish" +#define SIG_PREVIEWBAR_HIDE "previewbar,hide" #define SIG_UPARROW_SHOW "uparrow,show" #define SIG_UPARROW_HIDE "uparrow,hide" #define SIG_DOWNARROW_SHOW "downarrow,show" @@ -200,6 +211,8 @@ #define SIZE_BTN_LABEL_WIDTH 103 #define SIZE_CONTENT_LABEL_WIDTH 550 +#define SIZE_PREVIEWBAR_ITEM_W 140 + #define CTXT_MENU_GENGRID_ITEM_SIZE_W (238+14) #define CTXT_MENU_GENGRID_ITEM_SIZE_H (293+14) @@ -212,9 +225,11 @@ #define RGB_GALLERY 147 170 0 #define RGBA_BLACK_BG 0 0 0 (255*0.9) #define RGBA_COLOR_BG RGB_GALLERY (255*0.25) +#define PREVIEWBAR_BOX_ALPHA 100 /* others */ #define TIMEOUT_TOOLTIP 3.0 +#define TIMEOUT_PREVIEWBAR 2.0 #define TIMEOUT_ZOOMNAVI 0.25 /* TODO: Need to set timers as per specs */ #define TIMEOUT_PHOTOVIEWER 3.0 diff --git a/include/view/photo-viewer/photoviewer_view.h b/include/view/photo-viewer/photoviewer_view.h index 9b904a6..6b6cc68 100644 --- a/include/view/photo-viewer/photoviewer_view.h +++ b/include/view/photo-viewer/photoviewer_view.h @@ -73,13 +73,18 @@ private: static void sm_CbSetSlideshowSpeed(void *cookie, int speed); static void sm_CbSetZoomLevel(void *cookie, int zoom_level); - static Eina_Bool sm_CbTimerTooltip(void *dt); + static Eina_Bool sm_CbTimerTooltip(void *cookie); Eina_Bool m_OnTimerTooltip(void); + static Eina_Bool sm_CbTimerPreviewBar(void *cookie); + Eina_Bool m_OnTimerPreviewBar(void); + static Eina_Bool sm_CbFocus(void *dt); Eina_Bool OnFocus(void); - static void sm_CbShowViewFinish(void *dt, Evas_Object *obj, + static void sm_CbShowMenuViewFinish(void *dt, Evas_Object *obj, + const char *emission, const char *source); + static void sm_CbShowPreviewBarFinish(void *dt, Evas_Object *obj, const char *emission, const char *source); static Eina_Bool sm_CbTimerSlideshow(void *dt); @@ -87,6 +92,12 @@ private: private: bool m_DrawContentArea(CMediaInfo *minfo); bool m_DrawTopArea(CMediaInfo *minfo); + bool m_DrawPreviewBar(void); + bool m_DrawPreviewBarItem(void); + bool m_DrawPreviewBarBorder(void); + bool m_UpdatePreviewBar(void); + Evas_Object *m_MovePreviewBar(int new_x, + int unpack_item_idx, int new_item_idx); bool m_DrawBottomArea(void); bool m_DrawItems(void); void m_HandleZoomFunction(const char *btn_id); diff --git a/res/edc/views/photoviewer_view.edc b/res/edc/views/photoviewer_view.edc index 8b9b9c6..4c12266 100644 --- a/res/edc/views/photoviewer_view.edc +++ b/res/edc/views/photoviewer_view.edc @@ -317,6 +317,68 @@ group { align: 1.0 0.0; } } + part { + name: "padding_previewbar"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 614 274; + rel1.relative: 0.0 1.0; + rel2.relative: 0.0 1.0; + fixed: 1 1; + align: 0.0 1.0; + } + description { + state: "bottom" 0.0; + inherit: "default" 0.0; + min: 614 150; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + min: 614 0; + } + } + part { + name: PART_PREVIEWBAR; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 700 120; + rel1 { + to: "padding_previewbar"; + relative: 1.0 0.0; + } + rel2 { + to: "padding_previewbar"; + relative: 1.0 0.0; + } + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: PART_PREVIEWBAR_BORDER; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 140 120; + rel1 { + to: PART_PREVIEWBAR; + relative: 0.5 0.5; + } + rel2 { + to: PART_PREVIEWBAR; + relative: 0.5 0.5; + } + fixed: 1 1; + align: 0.5 0.5; + } + } + /* bottom area drawing */ part { name: "bottomarea"; @@ -434,8 +496,8 @@ group { programs { program { - name : "hide"; - signal: SIG_HIDE; + name: "menu_hide"; + signal: SIG_MENU_HIDE; source: ""; action: STATE_SET "hide" 0.0; target: "toparea"; @@ -443,18 +505,121 @@ group { transition: LINEAR 0.2; } program { - name : "show"; - signal: SIG_SHOW; + name: "previewbar_bottom"; + signal: SIG_MENU_HIDE; + source: ""; + action: STATE_SET "bottom" 0.0; + target: "padding_previewbar"; + transition: LINEAR 0.2; + } + program { + name: "menu_show"; + signal: SIG_MENU_SHOW; source: ""; action: STATE_SET "default" 0.0; target: "toparea"; target: "bottomarea"; + target: "padding_previewbar"; + transition: LINEAR 0.2; + after: "emit,menu_signal"; + } + program { + name: "emit,menu_signal"; + action: SIGNAL_EMIT SIG_MENU_SHOW_FINISH ""; + } + program { + name: "previewbar_hide"; + signal: SIG_PREVIEWBAR_HIDE; + source: ""; + action: STATE_SET "hide" 0.0; + target: "padding_previewbar"; transition: LINEAR 0.2; - after: "emit,signal"; } program { - name: "emit,signal"; - action: SIGNAL_EMIT SIG_SHOW_FINISH ""; + name: "previewbar_show"; + signal: SIG_PREVIEWBAR_SHOW; + source: ""; + action: STATE_SET "bottom" 0.0; + target: "padding_previewbar"; + transition: LINEAR 0.2; + after: "emit,previewbar_signal"; + } + program { + name: "emit,previewbar_signal"; + action: SIGNAL_EMIT SIG_PREVIEWBAR_SHOW_FINISH ""; + } + } +} + +group { + name: GRP_PREVIEWBAR; + parts { + part { + name: "area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 700 120; + visible, 0; + } + } + part { + name: PART_PREVIEWBAR_SCR; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.5 0.0; + rel2.relative: 0.5 0.0; + min: 700 120; + fixed: 1 1; + align: 0.5 0.0; + } + } + } +} + +group { + name: GRP_PREVIEWBAR_ITEM; + parts { + part { + name: "area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 140 120; + visible, 0; + } + } + part { + name: "img_bg"; + type: RECT; + scale: 1; + description { + state, "default" 0.0; + rel1.relative: 0.5 0.0; + rel2.relative: 0.5 0.0; + min: 140 120; + fixed: 1 1; + align: 0.5 0.0; + color: 0 0 0 255; + } + } + part { + name: PART_PREVIEWBAR_IMG; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.5 0.0; + rel2.relative: 0.5 0.0; + min: 140 120; + fixed: 1 1; + align: 0.5 0.0; + color: 255 255 255 30; + } } } } diff --git a/src/main.cpp b/src/main.cpp index 2980490..513bc5a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -74,7 +74,6 @@ struct SGalleryApp { int media_type; char *id; - CGalleryView *pGalleryView; CPhotoViewerView *pPhotoViewerView; CPhotoZoomView *pPhotoZoomView; diff --git a/src/view/photo-viewer/photoviewer_view.cpp b/src/view/photo-viewer/photoviewer_view.cpp index 47bba8a..31856bb 100644 --- a/src/view/photo-viewer/photoviewer_view.cpp +++ b/src/view/photo-viewer/photoviewer_view.cpp @@ -35,8 +35,13 @@ #include "SettingCtxPopup.h" #include "ZoomCtxPopup.h" +#define MAX_PREVIEWBAR_IMG 7 +#define PREVIEWBAR_CENTER_IDX 3 #define SLIDESHOW_BTN_IDX 2 +#define BORDER_SIZE 5 + +#define IMAGE_PREVIEWBAR_BORDER IMAGEDIR"/zoom_navigator.png" double slideshow_timeout[] = { TIMEOUT_SLIDESHOW_NORMAL, @@ -55,6 +60,11 @@ enum _slideshow_speed { SETTING_SPEED_FAST }; +enum PreviewBarDir { + PREVIEWBAR_TO_NEXT = 0, + PREVIEWBAR_TO_PREV +}; + enum EObjectType { PHOTOVIEWER_BTN = 0, PHOTOVIEWER_CTXPOPUP @@ -70,11 +80,19 @@ struct SPhotoViewerView { struct view_data *vd; int totalcount; + int current_idx; Evas_Object *photocam; + + Evas_Object *pvbar_box; + Evas_Object *pvbar_scr; + int pvbar_dir; + Ecore_Timer *tooltip_timer; + Ecore_Timer *pvbar_timer; CTimeoutHandler cTimeoutHandler; + bool menu_show; Ecore_Timer *slideshow_timer; int slideshow_state; @@ -114,7 +132,8 @@ struct SPhotoViewerView { ~SPhotoViewerView() {} }; -void CPhotoViewerView::sm_CbPrevBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbPrevBtnClicked(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView* root = (CPhotoViewerView*)dt; @@ -123,7 +142,8 @@ void CPhotoViewerView::sm_CbPrevBtnClicked(void *dt, Evas_Object *obj, const cha } -void CPhotoViewerView::m_OnPrevBtnClicked(Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::m_OnPrevBtnClicked(Evas_Object *obj, + const char *emission, const char *source) { Eina_List *current_list, *prev_list; CMediaInfo *minfo; @@ -149,11 +169,25 @@ void CPhotoViewerView::m_OnPrevBtnClicked(Evas_Object *obj, const char *emission if (!m_DrawTopArea(minfo)) return; + m->pvbar_dir = PREVIEWBAR_TO_PREV; + if (!m->menu_show) { + if (m->pvbar_timer) { + ecore_timer_reset(m->pvbar_timer); + m_UpdatePreviewBar(); + } else { + m->pvbar_timer = ecore_timer_add(TIMEOUT_PREVIEWBAR, + sm_CbTimerPreviewBar, this); + elm_object_signal_emit(m->base, SIG_PREVIEWBAR_SHOW, ""); + } + } else + m_UpdatePreviewBar(); + m->vd->minfo = minfo; } -void CPhotoViewerView::sm_CbNextBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbNextBtnClicked(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView* root = (CPhotoViewerView*)dt; @@ -162,7 +196,8 @@ void CPhotoViewerView::sm_CbNextBtnClicked(void *dt, Evas_Object *obj, const cha } -void CPhotoViewerView::m_OnNextBtnClicked(Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::m_OnNextBtnClicked(Evas_Object *obj, + const char *emission, const char *source) { Eina_List *current_list, *next_list; CMediaInfo *minfo; @@ -188,12 +223,25 @@ void CPhotoViewerView::m_OnNextBtnClicked(Evas_Object *obj, const char *emission if (!m_DrawTopArea(minfo)) return; + m->pvbar_dir = PREVIEWBAR_TO_NEXT; + if (!m->menu_show) { + if (m->pvbar_timer) { + ecore_timer_reset(m->pvbar_timer); + m_UpdatePreviewBar(); + } else { + m->pvbar_timer = ecore_timer_add(TIMEOUT_PREVIEWBAR, + sm_CbTimerPreviewBar, this); + elm_object_signal_emit(m->base, SIG_PREVIEWBAR_SHOW, ""); + } + } else + m_UpdatePreviewBar(); + m->vd->minfo = minfo; } - -void CPhotoViewerView::sm_CbSlideshowBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbSlideshowBtnClicked(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView* root = (CPhotoViewerView*)dt; @@ -202,13 +250,16 @@ void CPhotoViewerView::sm_CbSlideshowBtnClicked(void *dt, Evas_Object *obj, cons } -void CPhotoViewerView::m_OnSlideshowBtnClicked(Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::m_OnSlideshowBtnClicked(Evas_Object *obj, + const char *emission, const char *source) { if (m->slideshow_state == STATE_PAUSE) { if (m->slideshow_timer) ecore_timer_reset(m->slideshow_timer); else { - m->slideshow_timer = ecore_timer_add(slideshow_timeout[m->slideshow_speed], sm_CbTimerSlideshow, this); + m->slideshow_timer = ecore_timer_add( + slideshow_timeout[m->slideshow_speed], + sm_CbTimerSlideshow, this); } m->slideshow_state = STATE_PLAY; } else { @@ -222,7 +273,8 @@ void CPhotoViewerView::m_OnSlideshowBtnClicked(Evas_Object *obj, const char *emi } -void CPhotoViewerView::sm_CbSettingBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbSettingBtnClicked(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView *root = (CPhotoViewerView*)dt; @@ -231,7 +283,8 @@ void CPhotoViewerView::sm_CbSettingBtnClicked(void *dt, Evas_Object *obj, const } -void CPhotoViewerView::m_OnSettingBtnClicked(Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::m_OnSettingBtnClicked(Evas_Object *obj, + const char *emission, const char *source) { if (m->pCtxPopup && m->pCtxPopup->FlagCreate()) return; @@ -253,7 +306,8 @@ void CPhotoViewerView::m_OnSettingBtnClicked(Evas_Object *obj, const char *emiss } -void CPhotoViewerView::sm_CbZoomBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbZoomBtnClicked(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView *root = (CPhotoViewerView*)dt; @@ -262,7 +316,8 @@ void CPhotoViewerView::sm_CbZoomBtnClicked(void *dt, Evas_Object *obj, const cha } -void CPhotoViewerView::m_OnZoomBtnClicked(Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::m_OnZoomBtnClicked(Evas_Object *obj, + const char *emission, const char *source) { if (m->pCtxPopup && m->pCtxPopup->FlagCreate()) return; @@ -283,7 +338,8 @@ void CPhotoViewerView::m_OnZoomBtnClicked(Evas_Object *obj, const char *emission } -void CPhotoViewerView::sm_CbRotateBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbRotateBtnClicked(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView *root = (CPhotoViewerView*)dt; @@ -292,7 +348,8 @@ void CPhotoViewerView::sm_CbRotateBtnClicked(void *dt, Evas_Object *obj, const c } -void CPhotoViewerView::m_OnRotateBtnClicked(Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::m_OnRotateBtnClicked(Evas_Object *obj, + const char *emission, const char *source) { Evas_Object *image; Evas_Object *internalimage; @@ -340,24 +397,48 @@ void CPhotoViewerView::m_OnRotateBtnClicked(Evas_Object *obj, const char *emissi evas_object_del(image); } -Eina_Bool CPhotoViewerView::sm_CbTimerTooltip(void *dt) { - CPhotoViewerView *m = (CPhotoViewerView *)dt; +Eina_Bool CPhotoViewerView::sm_CbTimerTooltip(void *cookie) +{ + CPhotoViewerView *root = (CPhotoViewerView *)cookie; Eina_Bool ret = ECORE_CALLBACK_CANCEL; - ret = m->m_OnTimerTooltip(); + if (root) + ret = root->m_OnTimerTooltip(); return ret; } -Eina_Bool CPhotoViewerView::m_OnTimerTooltip(void) { +Eina_Bool CPhotoViewerView::m_OnTimerTooltip(void) +{ m->tooltip_timer = NULL; elm_object_tooltip_hide(m->focusedbtn); return ECORE_CALLBACK_CANCEL; } -void CPhotoViewerView::sm_CbZoomCtxPopupSelected(void *cookie, CCtxPopup *instance, const char *text) +Eina_Bool CPhotoViewerView::sm_CbTimerPreviewBar(void *cookie) +{ + CPhotoViewerView *root = (CPhotoViewerView *)cookie; + + Eina_Bool ret = ECORE_CALLBACK_CANCEL; + + if (root) + ret = root->m_OnTimerPreviewBar(); + + return ret; +} + +Eina_Bool CPhotoViewerView::m_OnTimerPreviewBar(void) +{ + m->pvbar_timer = NULL; + elm_object_signal_emit(m->base, SIG_PREVIEWBAR_HIDE, ""); + + return ECORE_CALLBACK_CANCEL; +} + +void CPhotoViewerView::sm_CbZoomCtxPopupSelected(void *cookie, + CCtxPopup *instance, const char *text) { struct zoom_data *zd; @@ -388,7 +469,8 @@ void CPhotoViewerView::sm_CbZoomCtxPopupSelected(void *cookie, CCtxPopup *instan } } -void CPhotoViewerView::sm_CbSettingCtxPopupSelected(void *cookie, CCtxPopup *instance, const char *text) +void CPhotoViewerView::sm_CbSettingCtxPopupSelected(void *cookie, + CCtxPopup *instance, const char *text) { SPhotoViewerView *m = (SPhotoViewerView *)cookie; if (!m) @@ -478,7 +560,8 @@ bool CPhotoViewerView::m_DrawTopArea(CMediaInfo *minfo) snprintf(buf, sizeof(buf), "/%d", m->totalcount); elm_object_part_text_set(m->base, PART_COUNTTEXT, buf); - snprintf(buf, sizeof(buf), "%d", util_eina_list_get_index( m->vd->media_list, minfo) + 1); + m->current_idx = util_eina_list_get_index(m->vd->media_list, minfo); + snprintf(buf, sizeof(buf), "%d", m->current_idx + 1); elm_object_part_text_set(m->base, PART_CURRENTTEXT, buf); return true; @@ -494,7 +577,8 @@ Eina_Bool CPhotoViewerView::sm_CbTimerSlideshow(void *dt) -Evas_Object *CPhotoViewerView::m_AddTooltipBtn(Evas_Object *parent, const char *style_text, const char *tt_text) +Evas_Object *CPhotoViewerView::m_AddTooltipBtn(Evas_Object *parent, + const char *style_text, const char *tt_text) { Evas_Object *btn; if (!parent) @@ -514,6 +598,205 @@ Evas_Object *CPhotoViewerView::m_AddTooltipBtn(Evas_Object *parent, const char * return btn; } +bool CPhotoViewerView::m_DrawPreviewBar(void) +{ + Evas_Object *ly, *scr, *box; + int x, y, w, h; + + ly = elm_layout_add(m->base); + if (!ly) + return false; + + elm_layout_file_set(ly, EDJEFILE, GRP_PREVIEWBAR); + + scr = elm_scroller_add(ly); + if (!scr) + return false; + + elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + + box = elm_box_add(scr); + if (!box) + return false; + + evas_object_size_hint_weight_set(box, + EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(box, EINA_TRUE); + evas_object_color_set(box, 255, 255, 255, PREVIEWBAR_BOX_ALPHA); + + elm_object_part_content_set(ly, PART_PREVIEWBAR_SCR, scr); + elm_object_content_set(scr, box); + + elm_object_part_content_set(m->base, PART_PREVIEWBAR, ly); + + m->pvbar_scr = scr; + m->pvbar_box = box; + + if (!m_DrawPreviewBarItem()) { + evas_object_del(ly); + return false; + } + + if (!m_DrawPreviewBarBorder()) { + evas_object_del(ly); + return false; + } + + elm_scroller_region_get(scr, &x, &y, &w, &h); + elm_scroller_region_show(scr, x + SIZE_PREVIEWBAR_ITEM_W, y, w, h); + + return true; +} + +bool CPhotoViewerView::m_DrawPreviewBarItem(void) +{ + Evas_Object *ly, *img; + CMediaInfo *minfo; + int i, img_idx; + + img_idx = m->current_idx - PREVIEWBAR_CENTER_IDX; + if (img_idx < 0) + img_idx += m->totalcount; + + for (i = 0; i < MAX_PREVIEWBAR_IMG; i++) { + ly = elm_layout_add(m->pvbar_box); + if (!ly) + return false; + + elm_layout_file_set(ly, EDJEFILE, GRP_PREVIEWBAR_ITEM); + + img = elm_image_add(ly); + if (!img) + return false; + + elm_object_part_content_set(ly, PART_PREVIEWBAR_IMG, img); + + if (img_idx + i > m->totalcount - 1) + img_idx -= m->totalcount; + + minfo = (CMediaInfo *)eina_list_nth(m->vd->media_list, + img_idx + i); + if (!minfo) { + _ERR("Get mediainfo failed"); + return false; + } + + elm_image_file_set(img, minfo->ThumbnailPath(), NULL); + elm_image_aspect_fixed_set(img, EINA_FALSE); + + evas_object_size_hint_align_set(ly, 0.0, 0.5); + elm_box_pack_end(m->pvbar_box, ly); + + evas_object_show(ly); + } + + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + return true; +} + +bool CPhotoViewerView::m_DrawPreviewBarBorder(void) +{ + Evas *evas; + Evas_Object *img; + + evas = evas_object_evas_get(m->base); + if (!evas) + return false; + + img = evas_object_image_add(evas); + if (!img) + return false; + + evas_object_image_file_set(img, IMAGE_PREVIEWBAR_BORDER, NULL); + evas_object_image_filled_set(img, EINA_TRUE); + evas_object_image_border_set(img, BORDER_SIZE, BORDER_SIZE, + BORDER_SIZE, BORDER_SIZE); + evas_object_image_border_center_fill_set(img, EVAS_BORDER_FILL_NONE); + + evas_object_color_set(img, 255, 255, 255, 100); + + elm_object_part_content_set(m->base, PART_PREVIEWBAR_BORDER, img); + + return true; +} + +bool CPhotoViewerView::m_UpdatePreviewBar(void) +{ + Evas_Object *ly; + int new_item_idx; + int x, y, w, h; + + elm_scroller_region_get(m->pvbar_scr, &x, &y, &w, &h); + + if (m->pvbar_dir == PREVIEWBAR_TO_PREV) { + new_item_idx = m->current_idx - PREVIEWBAR_CENTER_IDX; + if (new_item_idx < 0) + new_item_idx += m->totalcount; + + ly = m_MovePreviewBar(x + SIZE_PREVIEWBAR_ITEM_W, + MAX_PREVIEWBAR_IMG - 1, new_item_idx); + if (!ly) + return false; + + elm_box_pack_start(m->pvbar_box, ly); + evas_object_show(ly); + } else if (m->pvbar_dir == PREVIEWBAR_TO_NEXT) { + new_item_idx = m->current_idx + PREVIEWBAR_CENTER_IDX; + if (new_item_idx > m->totalcount - 1) + new_item_idx -= m->totalcount; + + ly = m_MovePreviewBar(x - SIZE_PREVIEWBAR_ITEM_W, + 0, new_item_idx); + if (!ly) + return false; + + elm_box_pack_end(m->pvbar_box, ly); + evas_object_show(ly); + } + + elm_scroller_region_bring_in(m->pvbar_scr, + SIZE_PREVIEWBAR_ITEM_W, y, w, h); + + return true; +} + +Evas_Object *CPhotoViewerView::m_MovePreviewBar(int new_x, + int unpack_item_idx, int new_item_idx) +{ + Eina_List *pvbar_item; + Evas_Object *ly; + Evas_Object *img; + CMediaInfo *minfo; + int y, w, h; + + elm_scroller_region_get(m->pvbar_scr, NULL, &y, &w, &h); + elm_scroller_region_show(m->pvbar_scr, new_x, y, w, h); + + pvbar_item = elm_box_children_get(m->pvbar_box); + + ly = (Evas_Object *)eina_list_nth(pvbar_item, unpack_item_idx); + elm_box_unpack(m->pvbar_box, ly); + evas_object_hide(ly); + + img = elm_object_part_content_get(ly, PART_PREVIEWBAR_IMG); + if (!img) { + _ERR("Get image object failed"); + return NULL; + } + + minfo = (CMediaInfo *)eina_list_nth(m->vd->media_list, new_item_idx); + if (!minfo) { + _ERR("Get mediainfo failed"); + return NULL; + } + + elm_image_file_set(img, minfo->ThumbnailPath(), NULL); + elm_image_aspect_fixed_set(img, EINA_FALSE); + + return ly; +} bool CPhotoViewerView::m_DrawBottomArea(void) { @@ -569,10 +852,13 @@ bool CPhotoViewerView::m_DrawBottomArea(void) m->slideshow_state = STATE_PAUSE; m->slideshow_speed = SETTING_SPEED_NORMAL; + m->menu_show = true; + return true; } -void CPhotoViewerView::sm_CbShowViewFinish(void *dt, Evas_Object *obj, const char *emission, const char *source) +void CPhotoViewerView::sm_CbShowMenuViewFinish(void *dt, Evas_Object *obj, + const char *emission, const char *source) { CPhotoViewerView *root = (CPhotoViewerView*)dt; @@ -589,6 +875,13 @@ void CPhotoViewerView::m_ShowMenuView(void) evas_object_freeze_events_set(m->btn[i], EINA_FALSE); elm_object_focus_allow_set(m->btn[i], EINA_TRUE); } + + if (m->pvbar_timer) { + ecore_timer_del(m->pvbar_timer); + m->pvbar_timer = NULL; + } + + m->menu_show = true; } void CPhotoViewerView::m_HideMenuView(void) @@ -601,6 +894,14 @@ void CPhotoViewerView::m_HideMenuView(void) } } +void CPhotoViewerView::sm_CbShowPreviewBarFinish(void *dt, Evas_Object *obj, + const char *emission, const char *source) +{ + CPhotoViewerView *root = (CPhotoViewerView *)dt; + + if (root) + root->m_UpdatePreviewBar(); +} bool CPhotoViewerView::m_DrawItems(void) { @@ -613,6 +914,9 @@ bool CPhotoViewerView::m_DrawItems(void) if (!m_DrawTopArea(m->vd->minfo)) return false; + if (!m_DrawPreviewBar()) + return false; + if (!m_DrawBottomArea()) return false; @@ -705,7 +1009,10 @@ bool CPhotoViewerView::Create(void *data) if (!m_DrawItems()) goto error; - elm_object_signal_callback_add(m->base, SIG_SHOW_FINISH, "", sm_CbShowViewFinish, this); + elm_object_signal_callback_add(m->base, SIG_MENU_SHOW_FINISH, "", + sm_CbShowMenuViewFinish, this); + elm_object_signal_callback_add(m->base, SIG_PREVIEWBAR_SHOW_FINISH, "", + sm_CbShowPreviewBarFinish, this); /* temp hot fix */ m->focus_timer = ecore_timer_add(0.25, sm_CbFocus, this); @@ -734,6 +1041,9 @@ void CPhotoViewerView::Destroy() if (m->tooltip_timer) ecore_timer_del(m->tooltip_timer); + if (m->pvbar_timer) + ecore_timer_del(m->pvbar_timer); + if (m->slideshow_timer) ecore_timer_del(m->slideshow_timer); @@ -743,6 +1053,8 @@ void CPhotoViewerView::Destroy() eina_list_free(m->vd->media_list); free(m->vd); + elm_box_clear(m->pvbar_box); + evas_object_del(m->base); delete m; @@ -836,9 +1148,14 @@ void CPhotoViewerView::OnTimeout(void) m->pCtxPopup = NULL; } - elm_object_signal_emit(m->base, SIG_HIDE, ""); + elm_object_signal_emit(m->base, SIG_MENU_HIDE, ""); m_HideMenuView(); + + m->pvbar_timer = ecore_timer_add(TIMEOUT_PREVIEWBAR, + sm_CbTimerPreviewBar, this); + + m->menu_show = false; } @@ -861,14 +1178,14 @@ Eina_Bool CPhotoViewerView::OnEvent(int type, void *event_info) if (m->slideshow_state == STATE_PLAY) return EINA_FALSE; - elm_object_signal_emit(m->base, SIG_SHOW, ""); + elm_object_signal_emit(m->base, SIG_MENU_SHOW, ""); } else if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) { if (m->slideshow_state == STATE_PLAY) - OnMouseClicked(PHOTOVIEWER_BTN, m->btn[SLIDESHOW_BTN_IDX]); - - elm_object_signal_emit(m->base, SIG_SHOW, ""); + OnMouseClicked(PHOTOVIEWER_BTN, + m->btn[SLIDESHOW_BTN_IDX]); + elm_object_signal_emit(m->base, SIG_MENU_SHOW, ""); } else if (!strcmp(ev->keyname, KEY_MENU) || !strcmp(ev->keyname, KEY_MENU_REMOTE)) { m->pViewMgr->PushView(VIEW_CTXT_MENU, m->vd); @@ -878,15 +1195,17 @@ Eina_Bool CPhotoViewerView::OnEvent(int type, void *event_info) return EINA_FALSE; } else { if (m->slideshow_state == STATE_PLAY) - OnMouseClicked(PHOTOVIEWER_BTN, m->btn[SLIDESHOW_BTN_IDX]); + OnMouseClicked(PHOTOVIEWER_BTN, + m->btn[SLIDESHOW_BTN_IDX]); - elm_object_signal_emit(m->base, SIG_SHOW, ""); + elm_object_signal_emit(m->base, SIG_MENU_SHOW, ""); } return EINA_TRUE; } -void CPhotoViewerView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) +void CPhotoViewerView::OnKeyDown(int id, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) { switch (id) { case PHOTOVIEWER_BTN: @@ -918,7 +1237,8 @@ void CPhotoViewerView::OnMouseClicked(int id, Evas_Object *obj) } } -void CPhotoViewerView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) +void CPhotoViewerView::OnMouseMove(int id, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev) { switch (id) { case PHOTOVIEWER_BTN: