#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,
SETTING_SPEED_FAST
};
+enum PreviewBarDir {
+ PREVIEWBAR_TO_NEXT = 0,
+ PREVIEWBAR_TO_PREV
+};
+
enum EObjectType {
PHOTOVIEWER_BTN = 0,
PHOTOVIEWER_CTXPOPUP
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;
~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;
}
-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;
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;
}
-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;
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;
}
-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 {
}
-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;
}
-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;
}
-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;
}
-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;
}
-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;
}
-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;
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;
}
}
-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)
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;
-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)
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)
{
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;
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)
}
}
+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)
{
if (!m_DrawTopArea(m->vd->minfo))
return false;
+ if (!m_DrawPreviewBar())
+ return false;
+
if (!m_DrawBottomArea())
return false;
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);
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);
eina_list_free(m->vd->media_list);
free(m->vd);
+ elm_box_clear(m->pvbar_box);
+
evas_object_del(m->base);
delete m;
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;
}
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);
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:
}
}
-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: