apply modified listener that manages id and type 14/35014/1
authorJehun Lim <jehun.lim@samsung.com>
Fri, 6 Feb 2015 02:27:05 +0000 (11:27 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Fri, 6 Feb 2015 02:44:29 +0000 (11:44 +0900)
Change-Id: I409fd74ba396d04426709faeb37d75298a95c064
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
15 files changed:
include/view/ctxtmenu-view/ctxtmenu_view.h
include/view/gallery-view/gallery_view.h
include/view/gallery-view/layout_all.h
include/view/gallery-view/layout_events.h
include/view/gallery-view/layout_folder.h
include/view/photo-viewer/photoviewer_view.h
include/view/photo-viewer/zoom_view.h
src/main.cpp
src/view/ctxtmenu-view/ctxtmenu_view.cpp
src/view/gallery-view/gallery_view.cpp
src/view/gallery-view/layout_all.cpp
src/view/gallery-view/layout_events.cpp
src/view/gallery-view/layout_folder.cpp
src/view/photo-viewer/photoviewer_view.cpp
src/view/photo-viewer/zoom_view.cpp

index 38296c0..524b093 100644 (file)
 #define __CTXT_MENU_VIEW_H__
 
 
-class CCtxtMenuView : public CBaseView, CListenerMgr, ITimeoutListener, IKeyDownListener {
+class CCtxtMenuView : public CBaseView, CListenerMgr, ITimeoutListener,
+       IKeyDownListener, IMouseDownListener,
+       IMouseMoveListener, IFocusedListener,
+       IUnfocusedListener, IRealizedListener, IUnrealizedListener {
 private:
        struct SCtxtMenuView *m;
 
@@ -29,14 +32,25 @@ protected:
        virtual void t_OnResume(void);
 
 private:
-       static char *sm_CbGridTextGet(void *data, Evas_Object *obj, const char *part);
-       static Evas_Object *sm_CbGridContentGet(void *data, Evas_Object *obj, const char *part);
-       static Eina_Bool sm_CbGridStateGet(void *data, Evas_Object *obj, const char *part);
+       static char *sm_CbGridTextGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Evas_Object *sm_CbGridContentGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Eina_Bool sm_CbGridStateGet(void *data,
+                       Evas_Object *obj, const char *part);
 
        static void _free_itemclass(Elm_Gengrid_Item_Class *ic);
        static Elm_Gengrid_Item_Class *_get_itemclass(int type);
        static char *_get_mediadata_date(struct mediadata *md);
 
+       static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source);
+       void m_OnGridActivated(Elm_Object_Item *it,
+               const char *emission, const char *source);
+
+       void m_SlideshowBtnSelected(void);
+       void m_PlayBtnSelected(void);
+
        bool m_DrawGengrid(void);
 
        bool m_LoadContentThumbnail(void);
@@ -49,7 +63,11 @@ private:
        bool m_DrawFuncBtn(void);
 
 public:
-       CCtxtMenuView(const char *szViewId) : CBaseView(szViewId), IKeyDownListener(this), m(0) {}
+       CCtxtMenuView(const char *szViewId) : CBaseView(szViewId),
+               IKeyDownListener(this), IMouseDownListener(this),
+               IMouseMoveListener(this), IFocusedListener(this),
+               IUnfocusedListener(this), IRealizedListener(this),
+               IUnrealizedListener(this), m(0) {}
        virtual ~CCtxtMenuView() {}
 
        virtual bool Create(void *data);
@@ -57,13 +75,20 @@ public:
 
        virtual Evas_Object* Base(void);
 
-       //!
        virtual void OnTimeout(void);
-       //!
        virtual Eina_Bool OnEvent(int type, void *event_info);
 
-       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+public:
+       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj,
+                               Evas_Event_Key_Down *ev);
+       virtual void OnMouseDown(int id, Evas *e, Evas_Object *obj,
+                               Evas_Event_Mouse_Down *ev);
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj,
+                               Evas_Event_Mouse_Move *ev);
+       virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
+       virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
+       virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
-
 #endif
index ae6e958..c14cc4b 100644 (file)
@@ -62,7 +62,9 @@ struct layout_data {
 };
 
 
-class CGalleryView : public CBaseView {
+class CGalleryView : public CBaseView, CListenerMgr,
+       IKeyDownListener, IMouseClickedListener,
+       IMouseMoveListener, IFocusedListener, IUnfocusedListener {
 private:
        struct SGalleryView *m;
 
@@ -73,12 +75,13 @@ protected:
        virtual void t_OnResume(void);
 
 private:
-       //static void sm_CbUsbConnected(usb_device_h usb_device, char *action, void *dt);
-       static void sm_CbMediaUpdate(media_content_error_e error, int pid,
-               media_content_db_update_item_type_e update_item,
-               media_content_db_update_type_e update_type,
-               media_content_type_e media_type,
-               char *uuid, char *path, char *mime_type, void *dt);
+       static void sm_CbSortDateDescClicked(void *cookie);
+       static void sm_CbSortDateAscClicked(void *cookie);
+       static void sm_CbSortAZClicked(void *cookie);
+       static void sm_CbSortZAClicked(void *cookie);
+       static void sm_CbSourceAllClicked(void *cookie);
+       static void sm_CbSourceTVClicked(void *cookie);
+       static void sm_CbSourceUSBClicked(void *cookie);
 
        static void sm_CbLayoutShown(void *cookie, CBaseLayout *pBaseLayout);
        static void sm_CbAllLayoutFocus(void *cookie);
@@ -86,22 +89,40 @@ private:
        static void sm_CbAllLayoutHide(void *cookie);
        static void sm_CbGetSignalFromLayout(void *cookie, int sig);
 
-       //void m_UsbConnected(char *action);
-       void m_MediaUpdate(void);
-
+private:
        void m_DrawNotifyPopup(const char *text);
        void m_DestroyNotifyPopup(void);
 
+       void m_DrawCtxpopup(const char **text_arr, int size_arr,
+                       const char *style, int selected_index,
+                       int position_x, int position_y);
+       void m_DestroyCtxpopup(void);
+
        void m_AddUpdownIcon(Evas_Object *btn, const char *icon_file);
+       void m_FocusUpdownArrow(void);
+       void m_UnfocusUpdownArrow(void);
 
-       Evas_Object *m_GetHoverselObject(const char **text_arr, int size_arr, const char *style);
+       Evas_Object *m_GetHoverselObject(const char **text_arr,
+                       int size_arr, const char *style);
 
        bool m_DrawTopArea(void);
        bool m_DrawLeftArea(void);
        bool m_DrawItems(void);
+       void m_DrawContentArea(int ltype);
+
+       void m_FocusLayout(void);
+       void m_SortLayout(int sort_type);
+       void m_SourceChange(int source_type);
 
 public:
-       CGalleryView(const char *szViewId) : CBaseView(szViewId), m(0) {}
+       CGalleryView(const char *szViewId) :
+               CBaseView(szViewId),
+               IKeyDownListener(this),
+               IMouseClickedListener(this),
+               IMouseMoveListener(this),
+               IFocusedListener(this),
+               IUnfocusedListener(this),
+               m(0) {}
        virtual ~CGalleryView() {}
 
        virtual bool Create(void *data);
@@ -109,13 +130,12 @@ public:
 
        virtual Evas_Object* Base(void);
 
-       void DrawContentArea(int ltype);
-
-       void DrawCtxpopup(const char **text_arr, int size_arr,
-               const char *style, int selected_index, int position_x, int position_y);
-       void DestroyCtxpopup(void);
-
-       void FocusLayout(void);
+public:
+       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       virtual void OnMouseClicked(int id, Evas_Object *obj);
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
+       virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 #endif
index 259a3ed..669a27f 100644 (file)
@@ -18,7 +18,9 @@
 #define __LAYOUT_ALL_H__
 
 
-class CAllLayout : public CBaseLayout {
+class CAllLayout : public CBaseLayout, CListenerMgr,
+       IKeyDownListener, IMouseMoveListener,
+       IRealizedListener, IUnrealizedListener, IFocusedListener {
 private:
        struct SAllLayout *m;
 
@@ -27,9 +29,12 @@ protected:
        virtual void t_OnHide(void);
 
 private:
-       static char *sm_CbGridTextGet(void *data, Evas_Object *ob, const char *part);
-       static Evas_Object *sm_CbGridContentGet(void *data, Evas_Object *obj, const char *part);
-       static Eina_Bool sm_CbGridStateGet(void *data, Evas_Object *obj, const char *part);
+       static char *sm_CbGridTextGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Evas_Object *sm_CbGridContentGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Eina_Bool sm_CbGridStateGet(void *data,
+                       Evas_Object *obj, const char *part);
 
        static int sm_CompareDesc(const void *data1, const void *data2);
        static int sm_CompareAsc(const void *data1, const void *data2);
@@ -39,13 +44,29 @@ private:
        void m_FreeItemclass(Elm_Gengrid_Item_Class *ic);
        Elm_Gengrid_Item_Class *m_GetItemclass(int type);
 
+       static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+                       const char *emission, const char *source);
+       void m_OnGridActivated(Elm_Object_Item *it,
+                       const char *emission, const char *source);
+
+       static void sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+                       const char *emission, const char *source);
+       void m_OnGridItemFocused(Elm_Object_Item *it,
+                       const char *emission, const char *source);
+
+       void m_SendResultToApp(const char *filepath);
+       void m_CreateCtxtMenu(void);
+
        Eina_List *m_SortList(Eina_List *list, int sort);
 
        Evas_Object *m_DrawGengrid(Evas_Object *layout);
        bool m_DrawGengridItems(void);
 
 public:
-       CAllLayout(const char *pLayoutId) : CBaseLayout(pLayoutId), m(0) {}
+       CAllLayout(const char *pLayoutId) : CBaseLayout(pLayoutId),
+               IKeyDownListener(this), IMouseMoveListener(this),
+               IRealizedListener(this), IUnrealizedListener(this),
+               IFocusedListener(this), m(0) {}
        virtual ~CAllLayout() {}
 
        bool Create(CLayoutMgr *mgr, void *data);
@@ -58,6 +79,13 @@ public:
        void Focus(void);
        void Sort(int sort);
        void Update(struct layout_data *ld);
+
+public:
+       void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 
index 7c68521..3c86585 100644 (file)
@@ -17,7 +17,9 @@
 #ifndef __LAYOUT_EVENTS_H__
 #define __LAYOUT_EVENTS_H__
 
-class CEventLayout : public CBaseLayout {
+class CEventLayout : public CBaseLayout, CListenerMgr,
+       IKeyDownListener, IMouseMoveListener,
+       IRealizedListener, IUnrealizedListener, IFocusedListener {
 private:
        struct SEventLayout *m;
 
@@ -26,13 +28,28 @@ protected:
        virtual void t_OnHide(void);
 
 private:
-       static char *sm_CbGridTextGet(void *data, Evas_Object *ob, const char *part);
-       static Evas_Object *sm_CbGridContentGet(void *data, Evas_Object *obj, const char *part);
-       static Eina_Bool sm_CbGridStateGet(void *data, Evas_Object *obj, const char *part);
+       static char *sm_CbGridTextGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Evas_Object *sm_CbGridContentGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Eina_Bool sm_CbGridStateGet(void *data,
+                       Evas_Object *obj, const char *part);
 
-       void m_FreeItemclass(Elm_Gengrid_Item_Class *ic_photo, Elm_Gengrid_Item_Class *ic_video, Elm_Gengrid_Item_Class *ic_event);
+       void m_FreeItemclass(Elm_Gengrid_Item_Class *ic_photo,
+                       Elm_Gengrid_Item_Class *ic_video,
+                       Elm_Gengrid_Item_Class *ic_event);
        Elm_Gengrid_Item_Class *m_GetItemclass(int type);
 
+       static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+                       const char *emission, const char *source);
+       void m_OnGridActivated(Elm_Object_Item *it,
+                       const char *emission, const char *source);
+
+       static void sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+                       const char *emission, const char *source);
+       void m_OnGridItemFocused(Elm_Object_Item *it,
+                       const char *emission, const char *source);
+
        int m_GetEventCount(Eina_List *event_list);
        int m_GetMediaCount(Eina_List *media_list, int type);
 
@@ -40,7 +57,10 @@ private:
        bool m_DrawGengridItems(void);
 
 public:
-       CEventLayout(const char *pLayoutId) : CBaseLayout(pLayoutId), m(0) {}
+       CEventLayout(const char *pLayoutId) : CBaseLayout(pLayoutId),
+               IKeyDownListener(this), IMouseMoveListener(this),
+               IRealizedListener(this), IUnrealizedListener(this),
+               IFocusedListener(this), m(0) {}
        virtual ~CEventLayout() {}
 
        bool Create(CLayoutMgr *mgr, void *data);
@@ -54,6 +74,13 @@ public:
        void Focus(void);
        void Sort(int sort);
        void Update(struct layout_data *ld);
+
+public:
+       void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 #endif
index 7959391..076b626 100644 (file)
@@ -17,7 +17,9 @@
 #ifndef __LAYOUT_FOLDER_H__
 #define __LAYOUT_FOLDER_H__
 
-class CFolderLayout : public CBaseLayout {
+class CFolderLayout : public CBaseLayout, CListenerMgr,
+       IKeyDownListener, IMouseMoveListener,
+       IRealizedListener, IUnrealizedListener, IFocusedListener {
 private:
        struct SFolderLayout *m;
 
@@ -26,20 +28,36 @@ protected:
        virtual void t_OnHide(void);
 
 private:
-       static char *sm_CbGridTextGet(void *data, Evas_Object *ob, const char *part);
-       static Evas_Object *sm_CbGridContentGet(void *data, Evas_Object *obj, const char *part);
-       static Eina_Bool sm_CbGridStateGet(void *data, Evas_Object *obj, const char *part);
+       static char *sm_CbGridTextGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Evas_Object *sm_CbGridContentGet(void *data,
+                       Evas_Object *obj, const char *part);
+       static Eina_Bool sm_CbGridStateGet(void *data,
+                       Evas_Object *obj, const char *part);
 
        void m_FreeItemclass(Elm_Gengrid_Item_Class *ic);
        Elm_Gengrid_Item_Class *m_GetItemclass(void);
 
+       static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+                       const char *emission, const char *source);
+       void m_OnGridActivated(Elm_Object_Item *it,
+                       const char *emission, const char *source);
+
+       static void sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+                       const char *emission, const char *source);
+       void m_OnGridItemFocused(Elm_Object_Item *it,
+                       const char *emission, const char *source);
+
        int m_GetMediaCount(Eina_List *list, int type);
 
        Evas_Object *m_DrawGengrid(Evas_Object *layout);
        bool m_DrawGengridItems(void);
 
 public:
-       CFolderLayout(const char *pLayoutId) : CBaseLayout(pLayoutId), m(0) {}
+       CFolderLayout(const char *pLayoutId) : CBaseLayout(pLayoutId),
+               IKeyDownListener(this), IMouseMoveListener(this),
+               IRealizedListener(this), IUnrealizedListener(this),
+               IFocusedListener(this), m(0) {}
        virtual ~CFolderLayout() {}
 
        bool Create(CLayoutMgr *mgr, void *data);
@@ -53,6 +71,13 @@ public:
        void Focus(void);
        void Sort(int sort);
        void Update(struct layout_data *ld);
+
+public:
+       void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 #endif
index 8aa8e32..397e31f 100644 (file)
@@ -18,7 +18,9 @@
 #define __PHOTOVIEWER_VIEW_H__
 
 
-class CPhotoViewerView : public CBaseView, ITimeoutListener {
+class CPhotoViewerView : public CBaseView, CListenerMgr, IKeyDownListener,
+       IMouseClickedListener, IMouseMoveListener,
+       IFocusedListener, ITimeoutListener {
 private:
        struct SPhotoViewerView *m;
 
@@ -29,44 +31,69 @@ protected:
        virtual void t_OnResume(void);
 
 private:
-       Evas_Object *m_AddTooltipBtn(Evas_Object *parent, const char *style_text, const char *tt_text);
+       Evas_Object *m_AddTooltipBtn(Evas_Object *parent,
+                       const char *style_text, const char *tt_text);
 
 private:
-       static void sm_CbPrevBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnPrevBtnClicked(Evas_Object *obj, const char *emission, const char *source);
-
-       static void sm_CbNextBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnNextBtnClicked(Evas_Object *obj, const char *emission, const char *source);
-
-       static void sm_CbSlideshowBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnSlideshowBtnClicked(Evas_Object *obj, const char *emission, const char *source);
-
-       static void sm_CbSettingBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnSettingBtnClicked(Evas_Object *obj, const char *emission, const char *source);
-
-       static void sm_CbZoomBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnZoomBtnClicked(Evas_Object *obj, const char *emission, const char *source);
-
-       static void sm_CbRotateBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnRotateBtnClicked(Evas_Object *obj, const char *emission, const char *source);
+       static void sm_CbPrevBtnClicked(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnPrevBtnClicked(Evas_Object *obj,
+                       const char *emission, const char *source);
+
+       static void sm_CbNextBtnClicked(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnNextBtnClicked(Evas_Object *obj,
+                       const char *emission, const char *source);
+
+       static void sm_CbSlideshowBtnClicked(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnSlideshowBtnClicked(Evas_Object *obj,
+                       const char *emission, const char *source);
+
+       static void sm_CbSettingBtnClicked(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnSettingBtnClicked(Evas_Object *obj,
+                       const char *emission, const char *source);
+
+       static void sm_CbZoomBtnClicked(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnZoomBtnClicked(Evas_Object *obj,
+                       const char *emission, const char *source);
+
+       static void sm_CbRotateBtnClicked(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnRotateBtnClicked(Evas_Object *obj,
+                       const char *emission, const char *source);
+
+       static Eina_Bool sm_CbTimerTooltip(void *dt);
+       Eina_Bool m_OnTimerTooltip(void);
 
        static Eina_Bool sm_CbFocus(void *dt);
        Eina_Bool OnFocus(void);
 
-       static void sm_CbShowViewFinish(void *dt, Evas_Object *obj, const char *emission, const char *source);
-       void m_OnShowViewFinish(Evas_Object *obj, const char *emission, const char *source);
+       static void sm_CbShowViewFinish(void *dt, Evas_Object *obj,
+                       const char *emission, const char *source);
+       void m_OnShowViewFinish(Evas_Object *obj,
+                       const char *emission, const char *source);
 
        static Eina_Bool sm_CbTimerSlideshow(void *dt);
 
 private:
-       void m_DrawCtxpopup(const char **text_arr, int size_arr, const char *style, int selected_index, int position_x, int position_y);
+       void m_DrawCtxpopup(const char **text_arr, int size_arr,
+                       const char *style, int selected_index,
+                       int position_x, int position_y);
+       void m_DestroyCtxpopup(void);
        bool m_DrawContentArea(struct mediadata *md);
        bool m_DrawTopArea(struct mediadata *md);
        bool m_DrawBottomArea(void);
        bool m_DrawItems(void);
+       void m_HandleZoomFunction(const char *btn_id);
+       void m_HandleSpeedFunction(const char *btn_id);
 
 public:
-       CPhotoViewerView(const char *szViewId) : CBaseView(szViewId), m(0) {}
+       CPhotoViewerView(const char *szViewId) : CBaseView(szViewId),
+               IKeyDownListener(this), IMouseClickedListener(this),
+               IMouseMoveListener(this), IFocusedListener(this), m(0) {}
        virtual ~CPhotoViewerView() {}
 
        virtual bool Create(void *data);
@@ -74,10 +101,14 @@ public:
 
        virtual Evas_Object* Base(void);
 
-       //!
        virtual void OnTimeout(void);
-       //!
        virtual Eina_Bool OnEvent(int type, void *event_info);
+
+public:
+       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       virtual void OnMouseClicked(int id, Evas_Object *obj);
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 
index 9de65f9..a864513 100644 (file)
@@ -23,10 +23,9 @@ struct zoom_data {
 };
 
 
-#include <InputHandler.h>
-
-
-class CPhotoZoomView : public CBaseView, CListenerMgr, IKeyDownListener, IKeyUpListener, ITimeoutListener {
+class CPhotoZoomView : public CBaseView, CListenerMgr, IKeyDownListener,
+       IKeyUpListener, IMouseClickedListener, IMouseMoveListener,
+       IMouseDownListener, IMouseUpListener, ITimeoutListener {
 private:
        struct SPhotoZoomView *m;
 
@@ -40,13 +39,16 @@ private:
        void m_UpdateArrow(void);
        void m_UpdateZoomNavi(void);
 
-       void t_GetZoomNaviRatio(void);
+       void m_GetZoomNaviRatio(void);
        bool m_MoveZoomNaviImg(void);
+       void m_MoveZoomNavi(Evas_Coord_Point coord);
        bool m_DrawArrow(void);
        bool m_DrawContent(void);
        void m_AddMouseEventCallback(void);
        bool m_DrawZoomNavi(void);
 
+       void m_ViewKeyDown(Evas_Event_Key_Down *ev);
+
        static void sm_CbTimeout(void *data);
        static Eina_Bool sm_CbEvent(void *data, int type, void *event_info);
 
@@ -57,7 +59,10 @@ protected:
        virtual void t_OnResume(void);
 
 public:
-       CPhotoZoomView(const char *szViewId) : CBaseView(szViewId), IKeyDownListener(this), IKeyUpListener(this), m(0) {}
+       CPhotoZoomView(const char *szViewId) : CBaseView(szViewId),
+               IKeyDownListener(this), IKeyUpListener(this),
+               IMouseClickedListener(this), IMouseMoveListener(this),
+               IMouseDownListener(this), IMouseUpListener(this), m(0) {}
        virtual ~CPhotoZoomView() {}
 
        virtual bool Create(void *data);
@@ -65,16 +70,16 @@ public:
 
        virtual Evas_Object* Base(void);
 
-       //!
-       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-       //!
-       virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
-
-       //!
        virtual void OnTimeout(void);
-       //!
        virtual Eina_Bool OnEvent(int type, void *event_info);
 
+public:
+       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev);
+       virtual void OnMouseClicked(int id, Evas_Object *obj);
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       virtual void OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev);
+       virtual void OnMouseUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Up *ev);
 };
 
 
index 1ed9418..8d7e3c6 100644 (file)
@@ -24,6 +24,7 @@
 #include "BaseView.h"
 #include "ViewMgr.h"
 #include "BaseLayout.h"
+#include "InputHandler.h"
 #include "timeout_handler.h"
 #include "gallery_view.h"
 #include "photoviewer_view.h"
index 1275000..7158b2e 100644 (file)
 #define MAX_FUNC_BTN 1
 #define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))
 
+enum EObjectType {
+       CTXT_MENU_VIEW = 0,
+       CTXT_MENU_BTN_SHOW,
+       CTXT_MENU_BTN_PLAY,
+       CTXT_MENU_GRID
+};
+
 struct SCtxtMenuView {
        Evas_Object *win;  // Not NULL
        Evas_Object *base; // Not NULL
@@ -67,205 +74,29 @@ struct SCtxtMenuView {
                for (int a = 0; a < MAX_FUNC_BTN; a++)
                        func_btn[a] = NULL;
                vd = NULL;
-
-               pHandlerGrid = new CHandlerGrid(this);
-               pHandlerSlideshow = new CHandlerBtnSlideshow(this);
-               pHandlerPlayer = new CHandlerBtnPlay(this);
-
-       }
-       ~SCtxtMenuView() {
-               delete pHandlerGrid;
-               delete pHandlerSlideshow;
-               delete pHandlerPlayer;
        }
-
-       class CHandlerGrid : public CListenerMgr, IMouseMoveListener, IRealizedListener, IUnrealizedListener {
-       private:
-               SCtxtMenuView *m;
-
-       private:
-               static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       CHandlerGrid *root = (CHandlerGrid*)cookie;
-                       if (root)
-                               root->OnGridActivated(it, emission, source);
-               }
-
-               void OnGridActivated(Elm_Object_Item *it, const char *emission, const char *source) {
-                       struct mediadata *md;
-                       int type;
-                       struct view_data *vd;
-
-                       if (!it)
-                               return;
-
-                       md = (struct mediadata*)elm_object_item_data_get(it);
-                       if (!md)
-                               return;
-
-                       type = mediadata_get_type(md);
-
-                       vd = (struct view_data *)calloc(1, sizeof(*vd));
-                       if (!vd)
-                               return;
-
-                       vd->media_list = util_create_media_list(m->vd->media_list, type);
-                       vd->md = md;
-
-                       if (type == MEDIA_VIDEO)
-                               video_player_play(vd);
-                       else if (type == MEDIA_IMAGE)
-                               CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
-                       else {
-                               _ERR("wrong media type");
-                               free(vd);
-                               return;
-                       }
-
-                       elm_gengrid_item_selected_set(it, EINA_FALSE);
-               }
-
-       public:
-               CHandlerGrid(SCtxtMenuView *ins) : IMouseMoveListener(this), IRealizedListener(this), IUnrealizedListener(this) { m = ins; }
-
-               virtual void OnMouseMove(int id,Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
-                       Elm_Object_Item *it;
-
-                       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x, ev->cur.canvas.y, NULL, NULL);
-                       if (!it)
-                               return;
-
-                       if (elm_object_item_focus_get(it))
-                               return;
-
-                       elm_object_item_focus_set(it, EINA_TRUE);
-               }
-               virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item) {
-                       elm_object_item_signal_callback_add(item, "item_clicked", "edc", sm_CbGridActivated, this);
-               }
-               virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item) {
-                       elm_object_item_signal_callback_del(item, "item_clicked", "edc", sm_CbGridActivated);
-               }
-       }  *pHandlerGrid;
-
-
-
-       class IHandlerBtn : public CListenerMgr, IMouseMoveListener, IMouseDownListener, IKeyDownListener, IFocusedListener, IUnfocusedListener {
-       public:
-               IHandlerBtn(Evas_Object *obj) : IMouseMoveListener(this), IMouseDownListener(this), IKeyDownListener(this), IFocusedListener(this), IUnfocusedListener(this) {}
-
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item) {
-                       elm_object_signal_emit(obj, SIG_FOCUSED, "");
-               }
-               virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item) {
-                       elm_object_signal_emit(obj, SIG_UNFOCUSED, "");
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
-                       if (!elm_object_focus_get(obj))
-                               elm_object_focus_set(obj, EINA_TRUE);
-               }
-       };
-
-       class CHandlerBtnSlideshow : public IHandlerBtn {
-       private:
-               struct SCtxtMenuView* m;
-
-       private:
-
-               void m_SlideshowBtnSelected(void)
-               {
-                       struct mediadata *md;
-                       struct view_data *vd;
-
-                       md = m->vd->md;
-                       if (!md)
-                               return;
-
-                       vd = (struct view_data *)calloc(1, sizeof(*vd));
-                       if (!vd)
-                               return;
-
-                       vd->media_list = util_create_media_list(m->vd->media_list, MEDIA_IMAGE);
-                       vd->md = md;
-
-                       CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
-               }
-
-       public:
-               CHandlerBtnSlideshow(SCtxtMenuView *ins) : IHandlerBtn(NULL) { m = ins; }
-
-               virtual void OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev) {
-                       m_SlideshowBtnSelected();
-               }
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
-                       if (!strcmp(ev->keyname, KEY_ENTER))
-                               m_SlideshowBtnSelected();
-               }
-       }  *pHandlerSlideshow;
-
-       class CHandlerBtnPlay : public IHandlerBtn {
-       private:
-               struct SCtxtMenuView* m;
-
-       private:
-               void m_PlayBtnSelected(void)
-               {
-                       struct mediadata *md;
-                       struct view_data *vd;
-
-                       md = m->vd->md;
-                       if (!md)
-                               return;
-
-                       vd = (struct view_data *)calloc(1, sizeof(*vd));
-                       if (!vd)
-                               return;
-
-                       vd->media_list = util_create_media_list(
-                               m->vd->media_list, MEDIA_VIDEO);
-                       vd->md = md;
-
-                       video_player_play(vd);
-               }
-
-       public:
-               CHandlerBtnPlay(SCtxtMenuView *ins) : IHandlerBtn(NULL) { m = ins; }
-
-               virtual void OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev) {
-                       m_PlayBtnSelected();
-               }
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
-                       if (!strcmp(ev->keyname, KEY_ENTER))
-                               m_PlayBtnSelected();
-               }
-       }*  pHandlerPlayer;
-
-
+       ~SCtxtMenuView() {}
 };
 
-
-
-
 struct _btn_info {
+       int btn_type;
        const char *btn_img;
        const char *btn_title;
-
-       SCtxtMenuView::IHandlerBtn *handler;
 };
 
 struct _btn_info browse_photo_btn[] = {
        {
+               CTXT_MENU_BTN_SHOW,
                IMAGE_BTN_SLIDESHOW,
-               N_("PLAY SHOW"),
-               NULL// &pHandlerSlideshow
+               N_("PLAY SHOW")
        },
 };
 
 struct _btn_info browse_video_btn[] = {
        {
+               CTXT_MENU_BTN_PLAY,
                IMAGE_BTN_PLAY,
-               N_("PLAY"),
-               NULL//&pHandlerPlayer
+               N_("PLAY")
        },
 };
 
@@ -357,7 +188,8 @@ char *CCtxtMenuView::sm_CbGridTextGet(void *data, Evas_Object *obj, const char *
        return NULL;
 }
 
-Evas_Object *CCtxtMenuView::sm_CbGridContentGet(void *data, Evas_Object *obj, const char *part)
+Evas_Object *CCtxtMenuView::sm_CbGridContentGet(void *data,
+               Evas_Object *obj, const char *part)
 {
        struct mediadata *md;
        const char *thumbpath;
@@ -396,7 +228,8 @@ Evas_Object *CCtxtMenuView::sm_CbGridContentGet(void *data, Evas_Object *obj, co
        return NULL;
 }
 
-Eina_Bool CCtxtMenuView::sm_CbGridStateGet(void *data, Evas_Object *obj, const char *part)
+Eina_Bool CCtxtMenuView::sm_CbGridStateGet(void *data,
+               Evas_Object *obj, const char *part)
 {
        return EINA_FALSE;
 }
@@ -456,6 +289,89 @@ char *CCtxtMenuView::_get_mediadata_date(struct mediadata *md)
        return strdup(buf);
 }
 
+void CCtxtMenuView::sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CCtxtMenuView *m = (CCtxtMenuView *)cookie;
+
+       m->m_OnGridActivated(it, emission, source);
+}
+
+void CCtxtMenuView::m_OnGridActivated(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       struct mediadata *md;
+       int type;
+       struct view_data *vd;
+
+       if (!it)
+               return;
+
+       md = (struct mediadata*)elm_object_item_data_get(it);
+       if (!md)
+               return;
+
+       type = mediadata_get_type(md);
+
+       vd = (struct view_data *)calloc(1, sizeof(*vd));
+       if (!vd)
+               return;
+
+       vd->media_list = util_create_media_list(m->vd->media_list, type);
+       vd->md = md;
+
+       if (type == MEDIA_VIDEO)
+               video_player_play(vd);
+       else if (type == MEDIA_IMAGE)
+               CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
+       else {
+               _ERR("wrong media type");
+               free(vd);
+               return;
+       }
+
+       elm_gengrid_item_selected_set(it, EINA_FALSE);
+}
+
+void CCtxtMenuView::m_SlideshowBtnSelected(void)
+{
+       struct mediadata *md;
+       struct view_data *vd;
+
+       md = m->vd->md;
+       if (!md)
+               return;
+
+       vd = (struct view_data *)calloc(1, sizeof(*vd));
+       if (!vd)
+               return;
+
+       vd->media_list = util_create_media_list(m->vd->media_list, MEDIA_IMAGE);
+       vd->md = md;
+
+       CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
+}
+
+void CCtxtMenuView::m_PlayBtnSelected(void)
+{
+       struct mediadata *md;
+       struct view_data *vd;
+
+       md = m->vd->md;
+       if (!md)
+               return;
+
+       vd = (struct view_data *)calloc(1, sizeof(*vd));
+       if (!vd)
+               return;
+
+       vd->media_list = util_create_media_list(
+               m->vd->media_list, MEDIA_VIDEO);
+       vd->md = md;
+
+       video_player_play(vd);
+}
+
 bool CCtxtMenuView::m_DrawGengrid(void)
 {
        Elm_Gengrid_Item_Class *ic_photo, *ic_video;
@@ -724,10 +640,8 @@ bool CCtxtMenuView::m_DrawRelatedContent(void)
                return false;
        }
 
-       m->pHandlerGrid->Connect(grid);
-       //((IMouseMoveListener*)m->pHandlerGrid)->Connect(grid);  //evas_object_event_callback_add(grid, EVAS_CALLBACK_MOUSE_MOVE, _grid_mouse_move, m);
-       //((IReleasedListener*)m->pHandlerGrid)->Connect(grid);   //evas_object_smart_callback_add(grid, SIG_REALIZED, _grid_realized, m);
-       //((IUnreleasedListener*)m->pHandlerGrid)->Connect(grid); // evas_object_smart_callback_add(grid, SIG_UNREALIZED, _grid_unrealized, m);
+       Connect(grid, CTXT_MENU_GRID,
+                       TYPE_MOUSE_MOVE | TYPE_REALIZED | TYPE_UNREALIZED);
 
        evas_object_show(grid);
 
@@ -757,11 +671,9 @@ struct _btn_info *CCtxtMenuView::m_GetBtnInfo(int *size)
 
                if (type == MEDIA_IMAGE) {
                        btn_info = browse_photo_btn;
-                       btn_info->handler = m->pHandlerSlideshow;
                        *size = ARRAY_SIZE(browse_photo_btn);
                } else if (type == MEDIA_VIDEO) {
                        btn_info = browse_video_btn;
-                       btn_info->handler = m->pHandlerPlayer;
                        *size = ARRAY_SIZE(browse_video_btn);
                }
        }
@@ -830,12 +742,8 @@ bool CCtxtMenuView::m_DrawFuncBtn(void)
                evas_object_show(ly);
                elm_object_focus_allow_set(ly, EINA_TRUE);
 
-               btn_info[i].handler->Connect(ly);
-               //((IFocusedListener*)btn_info[i].handler)->Connect(ly);   // evas_object_smart_callback_add(ly, "focused",  _func_btn_focused, m);
-               //((IUnfocusedListener*)btn_info[i].handler)->Connect(ly); // evas_object_smart_callback_add(ly, "unfocused", _func_btn_unfocused, m);
-               //((IKeyDownListener*)btn_info[i].handler)->Connect(ly);   // evas_object_event_callback_add(ly, EVAS_CALLBACK_KEY_DOWN,  btn_info[i].pressed_cb, m);
-               //((IMouseMoveListener*)btn_info[i].handler)->Connect(ly); // evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, btn_info[i].clicked_cb, m);
-               //((IMouseDownListener*)btn_info[i].handler)->Connect(ly); // evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_MOVE, _func_btn_mouse_move, m);
+               Connect(ly, btn_info[i].btn_type, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+                               | TYPE_MOUSE_MOVE | TYPE_FOCUSED| TYPE_UNFOCUSED);
 
                elm_object_focus_next_object_set(ly, ly, ELM_FOCUS_UP);
                elm_object_focus_next_object_set(ly, m->grid, ELM_FOCUS_DOWN);
@@ -906,7 +814,7 @@ bool CCtxtMenuView::Create(void* d)
                goto err;
        }
 
-       Connect(m->base);// evas_object_event_callback_add(m->base, EVAS_CALLBACK_KEY_DOWN, _base_key_pressed, m);
+       Connect(m->base, CTXT_MENU_VIEW, TYPE_KEY_DOWN);
 
        CBaseView::Create(NULL);
 
@@ -980,8 +888,118 @@ Eina_Bool CCtxtMenuView::OnEvent(int type, void *event_info)
 }
 
 
-void CCtxtMenuView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+void CCtxtMenuView::OnKeyDown(int id, Evas *e,
+               Evas_Object *obj, Evas_Event_Key_Down *ev)
 {
-       if (strcmp(ev->keyname, KEY_BACK) == 0)
-               CViewMgr::GetInstance()->PopView();
+       switch (id) {
+       case CTXT_MENU_VIEW:
+               if (strcmp(ev->keyname, KEY_BACK) == 0)
+                       CViewMgr::GetInstance()->PopView();
+
+               break;
+       case CTXT_MENU_BTN_SHOW:
+               if (!strcmp(ev->keyname, KEY_ENTER))
+                       m_SlideshowBtnSelected();
+
+               break;
+       case CTXT_MENU_BTN_PLAY:
+               if (!strcmp(ev->keyname, KEY_ENTER))
+                       m_PlayBtnSelected();
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CCtxtMenuView::OnMouseDown(int id, Evas *e,
+               Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+       switch (id) {
+       case CTXT_MENU_BTN_SHOW:
+               m_SlideshowBtnSelected();
+               break;
+       case CTXT_MENU_BTN_PLAY:
+               m_PlayBtnSelected();
+               break;
+       default:
+               break;
+       }
+}
+
+void CCtxtMenuView::OnMouseMove(int id, Evas *e,
+               Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case CTXT_MENU_BTN_SHOW:
+       case CTXT_MENU_BTN_PLAY:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+
+               break;
+       case CTXT_MENU_GRID:
+               Elm_Object_Item *it;
+
+               it = elm_gengrid_at_xy_item_get(obj,
+                               ev->cur.canvas.x, ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (elm_object_item_focus_get(it))
+                       return;
+
+               elm_object_item_focus_set(it, EINA_TRUE);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CCtxtMenuView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case CTXT_MENU_BTN_SHOW:
+       case CTXT_MENU_BTN_PLAY:
+               elm_object_signal_emit(obj, SIG_FOCUSED, "");
+               break;
+       default:
+               break;
+       }
+}
+
+void CCtxtMenuView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case CTXT_MENU_BTN_SHOW:
+       case CTXT_MENU_BTN_PLAY:
+               elm_object_signal_emit(obj, SIG_UNFOCUSED, "");
+               break;
+       default:
+               break;
+       }
+}
+
+void CCtxtMenuView::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case CTXT_MENU_GRID:
+               elm_object_item_signal_callback_add(item, "item_clicked",
+                               "edc", sm_CbGridActivated, this);
+               break;
+       default:
+               break;
+       }
+}
+
+void CCtxtMenuView::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case CTXT_MENU_GRID:
+               elm_object_item_signal_callback_del(item, "item_clicked",
+                               "edc", sm_CbGridActivated);
+               break;
+       default:
+               break;
+       }
 }
index 8cce118..3cc6b54 100644 (file)
@@ -17,6 +17,7 @@
 #include <Elementary.h>
 #include <Eina.h>
 #include <app.h>
+#include <InputHandler.h>
 #include "util.h"
 #include "menudef.h"
 #include "mediadata.h"
@@ -25,7 +26,6 @@
 #include "ViewMgr.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
-#include "InputHandler.h"
 #include "gallery_view.h"
 #include "layout_all.h"
 #include "layout_events.h"
 #define LOADING_ICON_Y 48
 #define MAX_TIME_LIMIT 10.0
 
+enum EObjectType {
+       GALLERY_MENU = 0,
+       GALLERY_SORTBTN,
+       GALLERY_SOURCEBTN,
+       GALLERY_CTXPOPUP
+};
+
 struct SGalleryView {
        Evas_Object *win;
        Evas_Object *base;
@@ -73,8 +80,6 @@ struct SGalleryView {
 
        CLayoutMgr *pLayoutMgr;
 
-       CGalleryView *parent;
-
        CAllLayout *pAllLayout;
        CEventLayout *pEventLayout;
        CFolderLayout *pFolderLayout;
@@ -101,360 +106,11 @@ struct SGalleryView {
                arglist = NULL;
 
                pLayoutMgr = NULL;
-               parent = NULL;
 
                ld = NULL;
-
-               pHandlerMenuBtn = new CHandlerMenuBtn(this);
-               pHandlerSortBtn = new CHandlerHoversel(this);
-               pHandlerSourceBtn = new CHandlerHoversel(this);
-               pHandlerCtxPopup = new CHandlerCtxPopup(this);
-       }
-
-       ~SGalleryView() {
-               delete pHandlerMenuBtn;
-               delete pHandlerSortBtn;
-               delete pHandlerSourceBtn;
-               delete pHandlerCtxPopup;
        }
 
-       class CHandlerMenuBtn : public CListenerMgr, IKeyDownListener, IMouseMoveListener, IFocusedListener {
-       private:
-               SGalleryView *m;
-
-       public:
-               CHandlerMenuBtn(SGalleryView *ins) : IKeyDownListener(this), IMouseMoveListener(this), IFocusedListener(this) { m = ins; }
-
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-               {
-                       if (strcmp(ev->keyname, KEY_RIGHT) == 0 ||
-                               strcmp(ev->keyname, KEY_ENTER) == 0) {
-                               m->parent->FocusLayout();
-
-                               elm_object_signal_emit(obj, "highlight", "");
-
-                               m->focused_btn = obj;
-                               m->focus_area = FOCUS_CONTENT_AREA;
-
-                       } else if (strcmp(ev->keyname, KEY_BACK) == 0) {
-                               elm_exit();
-                       }
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-               {
-                       if (!elm_object_focus_get(obj))
-                               elm_object_focus_set(obj, EINA_TRUE);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       int i = 0;
-
-                       m->focus_area = FOCUS_MENU_BTN;
-
-                       if (m->focused_btn == obj)
-                               return;
-
-                       if (m->focused_btn)
-                               elm_object_signal_emit(m->focused_btn, "unhighlight", "");
-
-                       for (i = E_LAYOUT_ALL; i < E_LAYOUT_MAX; i++) {
-                               if (m->btn[i] == obj)
-                                       break;
-                       }
-
-                       m->focused_btn = obj;
-
-                       m->parent->DrawContentArea(i);
-               }
-       } *pHandlerMenuBtn;
-
-       class CHandlerHoversel : public CListenerMgr, IKeyDownListener, IMouseClickedListener, IMouseMoveListener, IFocusedListener, IUnfocusedListener {
-       private:
-               SGalleryView *m;
-
-       private:
-               void m_FocusUpdownArrow(void)
-               {
-                       if (!m->hover_updown)
-                               return;
-
-                       if (m->sort_type == E_SORT_DATE_DESC) {
-                               /* date desc */
-                               elm_image_file_set(m->hover_updown, IMAGE_DOWN_ARR, NULL);
-                               evas_object_color_set(m->hover_updown, 255, 255, 255, 255);
-                               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
-
-                               evas_object_show(m->hover_updown);
-                               elm_object_part_content_set(m->sortbtn,
-                                       PART_ELM_SWALLOWICON, m->hover_updown);
-                       } else if (m->sort_type == E_SORT_DATE_ASC) {
-                               /* date asc */
-                               elm_image_file_set(m->hover_updown, IMAGE_UP_ARR, NULL);
-                               evas_object_color_set(m->hover_updown, 255, 255, 255, 255);
-                               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
-
-                               evas_object_show(m->hover_updown);
-                               elm_object_part_content_set(m->sortbtn,
-                                       PART_ELM_SWALLOWICON, m->hover_updown);
-                       } else {
-                               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
-                               evas_object_hide(m->hover_updown);
-                       }
-               }
-               void m_UnfocusUpdownArrow(void)
-               {
-                       if (!m->hover_updown)
-                               return;
-
-                       if (m->sort_type == E_SORT_DATE_DESC) {
-                               /* date desc */
-                               elm_image_file_set(m->hover_updown, IMAGE_DOWN_ARR, NULL);
-                               evas_object_color_set(m->hover_updown, 175, 175, 175, 255);
-                               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
-
-                               evas_object_show(m->hover_updown);
-                               elm_object_part_content_set(m->sortbtn,
-                                       PART_ELM_SWALLOWICON, m->hover_updown);
-
-                       } else if (m->sort_type == E_SORT_DATE_ASC) {
-                               /* date asc */
-                               elm_image_file_set(m->hover_updown, IMAGE_UP_ARR, NULL);
-                               evas_object_color_set(m->hover_updown, 175, 175, 175, 255);
-                               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
-
-                               evas_object_show(m->hover_updown);
-                               elm_object_part_content_set(m->sortbtn, PART_ELM_SWALLOWICON, m->hover_updown);
-                       } else {
-                               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
-                               evas_object_hide(m->hover_updown);
-                       }
-               }
-
-       public:
-               CHandlerHoversel(SGalleryView *ins) : IKeyDownListener(this), IMouseClickedListener(this), IMouseMoveListener(this), IFocusedListener(this), IUnfocusedListener(this) { m = ins; }
-
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-               {
-                       if (strcmp(ev->keyname, KEY_BACK) == 0)
-                               elm_object_focus_set(m->focused_btn, EINA_TRUE);
-               }
-               virtual void OnMouseClicked(int id, Evas_Object *obj)
-               {
-                       if (m->sortbtn == obj) {
-                               m->parent->DrawCtxpopup(sorttext, SORT_TEXT_SIZE,
-                                       STYLE_BTN_HOVERTEXT, m->sort_type,
-                                       POSITION_SORT_POPUP_X, POSITION_SORT_POPUP_Y);
-                       } else if (m->sourcebtn == obj) {
-                               m->parent->DrawCtxpopup(sourcetext, SOURCE_TEXT_SIZE,
-                                       STYLE_BTN_HOVERTEXT, m->source_type,
-                                       POSITION_SOURCE_POPUP_X, POSITION_SOURCE_POPUP_Y);
-                       } else {
-                               _ERR("No button info");
-                               return;
-                       }
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-               {
-                       if (!elm_object_focus_get(obj))
-                               elm_object_focus_set(obj, EINA_TRUE);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_signal_emit(m->focused_btn, "highlight", "");
-
-                       if (m->sortbtn == obj)
-                               m_FocusUpdownArrow();
-
-                       m->hover_btn = obj;
-                       m->focus_area = FOCUS_HOVER_BTN;
-               }
-               virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       if (m->sortbtn == obj)
-                               m_UnfocusUpdownArrow();
-               }
-       } *pHandlerSortBtn, *pHandlerSourceBtn;
-
-       class CHandlerCtxPopup : public CListenerMgr, IKeyDownListener, IMouseClickedListener, IMouseMoveListener, IFocusedListener, IUnfocusedListener {
-       private:
-               SGalleryView *m;
-
-       private:
-               static void sm_SortDateDescClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SortLayout(E_SORT_DATE_DESC);
-               }
-
-               static void sm_SortDateAscClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SortLayout(E_SORT_DATE_ASC);
-               }
-
-               static void sm_SortAZClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SortLayout(E_SORT_A_Z);
-               }
-
-               static void sm_SortZAClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SortLayout(E_SORT_Z_A);
-               }
-
-               static void sm_SourceAllClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SourceChange(E_SOURCE_ALL);
-               }
-
-               static void sm_SourceTVClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SourceChange(E_SOURCE_TV);
-               }
-
-               static void sm_SourceUSBClicked(void *cookie)
-               {
-                       CHandlerCtxPopup *root = (CHandlerCtxPopup *)cookie;
-
-                       if (root)
-                               root->m_SourceChange(E_SOURCE_USB);
-               }
-
-               void m_SortLayout(int sort_type)
-               {
-                       if (m->sort_type == sort_type)
-                               return;
-
-                       m->sort_type = sort_type;
-
-                       switch (m->current_layout) {
-                       case E_LAYOUT_ALL:
-                               m->pAllLayout->Sort(m->sort_type);
-                               break;
-                       case E_LAYOUT_EVENTS:
-                               m->pEventLayout->Sort(m->sort_type);
-                               break;
-                       case E_LAYOUT_FOLDER:
-                               m->pFolderLayout->Sort(m->sort_type);
-                               break;
-                       default:
-                               break;
-                       }
-               }
-
-               void m_SourceChange(int source_type)
-               {
-                       if (m->source_type == source_type)
-                               return;
-
-                       m->source_type = E_SOURCE_ALL;
-
-                       mediadata_destroy_mediafiles_list(m->media_list);
-
-                       m->media_list = mediadata_create_mediafiles_list(
-                               m->source_type, m->arglist->media_type);
-                       if (!m->media_list)
-                               return;
-
-                       m->parent->DrawContentArea(m->current_layout);
-               }
-
-       public:
-               CHandlerCtxPopup(SGalleryView *ins) : IKeyDownListener(this), IMouseClickedListener(this), IMouseMoveListener(this), IFocusedListener(this), IUnfocusedListener(this) { m = ins; }
-
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-               {
-                       if (strcmp(ev->keyname, KEY_BACK) == 0)
-                               m->parent->DestroyCtxpopup();
-               }
-               virtual void OnMouseClicked(int id, Evas_Object *obj)
-               {
-                       int i;
-                       const char *current_id;
-                       void(*func[])(void *) = {
-                               sm_SortDateDescClicked,
-                               sm_SortDateAscClicked,
-                               sm_SortAZClicked,
-                               sm_SortZAClicked,
-                               sm_SourceAllClicked,
-                               sm_SourceTVClicked,
-                               sm_SourceUSBClicked
-                       };
-
-                       current_id = (const char *)evas_object_data_get(obj, BTN_ID);
-                       if (!current_id)
-                               return;
-
-                       for (i = 0; i < (SORT_TEXT_SIZE + SOURCE_TEXT_SIZE); i++) {
-                               if (!strcmp(hover_btn_id[i], current_id)) {
-                                       func[i](this);
-                                       break;
-                               }
-                       }
-
-                       elm_object_text_set(m->hover_btn, elm_object_text_get(obj));
-
-                       m->parent->DestroyCtxpopup();
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-               {
-                       if (!elm_object_focus_get(obj))
-                               elm_object_focus_set(obj, EINA_TRUE);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       Evas_Object *ic;
-
-                       ic = (Evas_Object *)evas_object_data_get(obj, BTN_ICN);
-                       if (!ic)
-                               return;
-
-                       evas_object_color_set(ic, 255, 255, 255, 255);
-               }
-               virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       const char *current_id;
-                       Evas_Object *ic;
-
-                       current_id = (const char *)evas_object_data_get(obj, BTN_ID);
-                       if (!current_id)
-                               return;
-
-                       ic = (Evas_Object *)evas_object_data_get(obj, BTN_ICN);
-                       if (!ic)
-                               return;
-
-                       if (!strcmp(current_id, hover_btn_id[0])) {
-                               /* date desc */
-                               if (m->sort_type == E_SORT_DATE_DESC)
-                                       evas_object_color_set(ic, 147, 170, 0, 255);
-                               else
-                                       evas_object_color_set(ic, 89, 89, 89, 255);
-                       } else if (!strcmp(current_id, hover_btn_id[1])) {
-                               /* date asc */
-                               if (m->sort_type == E_SORT_DATE_ASC)
-                                       evas_object_color_set(ic, 147, 170, 0, 255);
-                               else
-                                       evas_object_color_set(ic, 89, 89, 89, 255);
-                       }
-               }
-       } *pHandlerCtxPopup;
+       ~SGalleryView() {}
 };
 
 #if 0
@@ -600,6 +256,153 @@ void CGalleryView::m_DrawNotifyPopup(const char *text)
        m->transit = transit;
 }
 
+
+void CGalleryView::m_FocusUpdownArrow(void)
+{
+       if (!m->hover_updown)
+               return;
+
+       if (m->sort_type == E_SORT_DATE_DESC) {
+               /* date desc */
+               elm_image_file_set(m->hover_updown, IMAGE_DOWN_ARR, NULL);
+               evas_object_color_set(m->hover_updown, 255, 255, 255, 255);
+               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
+
+               evas_object_show(m->hover_updown);
+               elm_object_part_content_set(m->sortbtn,
+                       PART_ELM_SWALLOWICON, m->hover_updown);
+       } else if (m->sort_type == E_SORT_DATE_ASC) {
+               /* date asc */
+               elm_image_file_set(m->hover_updown, IMAGE_UP_ARR, NULL);
+               evas_object_color_set(m->hover_updown, 255, 255, 255, 255);
+               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
+
+               evas_object_show(m->hover_updown);
+               elm_object_part_content_set(m->sortbtn,
+                       PART_ELM_SWALLOWICON, m->hover_updown);
+       } else {
+               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
+               evas_object_hide(m->hover_updown);
+       }
+}
+
+void CGalleryView::m_UnfocusUpdownArrow(void)
+{
+       if (!m->hover_updown)
+               return;
+
+       if (m->sort_type == E_SORT_DATE_DESC) {
+               /* date desc */
+               elm_image_file_set(m->hover_updown, IMAGE_DOWN_ARR, NULL);
+               evas_object_color_set(m->hover_updown, 175, 175, 175, 255);
+               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
+
+               evas_object_show(m->hover_updown);
+               elm_object_part_content_set(m->sortbtn,
+                       PART_ELM_SWALLOWICON, m->hover_updown);
+
+       } else if (m->sort_type == E_SORT_DATE_ASC) {
+               /* date asc */
+               elm_image_file_set(m->hover_updown, IMAGE_UP_ARR, NULL);
+               evas_object_color_set(m->hover_updown, 175, 175, 175, 255);
+               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
+
+               evas_object_show(m->hover_updown);
+               elm_object_part_content_set(m->sortbtn, PART_ELM_SWALLOWICON, m->hover_updown);
+       } else {
+               elm_object_part_content_unset(m->sortbtn, PART_ELM_SWALLOWICON);
+               evas_object_hide(m->hover_updown);
+       }
+}
+
+void CGalleryView::sm_CbSortDateDescClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SortLayout(E_SORT_DATE_DESC);
+}
+
+void CGalleryView::sm_CbSortDateAscClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SortLayout(E_SORT_DATE_ASC);
+}
+
+void CGalleryView::sm_CbSortAZClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SortLayout(E_SORT_A_Z);
+}
+
+void CGalleryView::sm_CbSortZAClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SortLayout(E_SORT_Z_A);
+}
+
+void CGalleryView::sm_CbSourceAllClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SourceChange(E_SOURCE_ALL);
+}
+
+void CGalleryView::sm_CbSourceTVClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SourceChange(E_SOURCE_TV);
+}
+
+void CGalleryView::sm_CbSourceUSBClicked(void *cookie)
+{
+       CGalleryView *m = (CGalleryView *)cookie;
+
+       m->m_SourceChange(E_SOURCE_USB);
+}
+
+void CGalleryView::m_SortLayout(int sort_type)
+{
+       if (m->sort_type == sort_type)
+               return;
+
+       m->sort_type = sort_type;
+
+       switch (m->current_layout) {
+       case E_LAYOUT_ALL:
+               m->pAllLayout->Sort(m->sort_type);
+               break;
+       case E_LAYOUT_EVENTS:
+               m->pEventLayout->Sort(m->sort_type);
+               break;
+       case E_LAYOUT_FOLDER:
+               m->pFolderLayout->Sort(m->sort_type);
+               break;
+       default:
+               break;
+       }
+}
+
+void CGalleryView::m_SourceChange(int source_type)
+{
+       if (m->source_type == source_type)
+               return;
+
+       m->source_type = source_type;
+
+       mediadata_destroy_mediafiles_list(m->media_list);
+
+       m->media_list = mediadata_create_mediafiles_list(
+               m->source_type, m->arglist->media_type);
+       if (!m->media_list)
+               return;
+
+       m_DrawContentArea(m->current_layout);
+}
+
 void CGalleryView::m_AddUpdownIcon(Evas_Object *btn, const char *icon_file)
 {
        Evas_Object *ic;
@@ -634,14 +437,20 @@ Evas_Object *CGalleryView::m_GetHoverselObject(const char **text_arr,
                if (!m->hover_updown)
                        return NULL;
 
-               m->pHandlerSortBtn->Connect(hoversel);
+               Connect(hoversel, GALLERY_SORTBTN,
+                               TYPE_KEY_DOWN | TYPE_CLICKED |
+                               TYPE_MOUSE_MOVE | TYPE_FOCUSED |
+                               TYPE_UNFOCUSED);
 
                /* Calling first time to show icon */
-               m->pHandlerSortBtn->OnUnfocused(0, hoversel, NULL);
+               OnUnfocused(GALLERY_SORTBTN, hoversel, NULL);
        } else {
                elm_object_text_set(hoversel, _(text_arr[m->source_type]));
 
-               m->pHandlerSourceBtn->Connect(hoversel);
+               Connect(hoversel, GALLERY_SOURCEBTN,
+                               TYPE_KEY_DOWN | TYPE_CLICKED |
+                               TYPE_MOUSE_MOVE | TYPE_FOCUSED |
+                               TYPE_UNFOCUSED);
        }
 
        evas_object_show(hoversel);
@@ -698,7 +507,8 @@ bool CGalleryView::m_DrawLeftArea(void)
 
                elm_box_pack_end(box, m->btn[i]);
 
-               m->pHandlerMenuBtn->Connect(m->btn[i]);
+               Connect(m->btn[i], GALLERY_MENU,
+                               TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
                evas_object_show(m->btn[i]);
 
@@ -737,7 +547,7 @@ bool CGalleryView::m_DrawItems(void)
        return true;
 }
 
-void CGalleryView::DrawContentArea(int ltype)
+void CGalleryView::m_DrawContentArea(int ltype)
 {
        Eina_List *arg;
 
@@ -781,7 +591,7 @@ void CGalleryView::DrawContentArea(int ltype)
        }
 }
 
-void CGalleryView::FocusLayout(void)
+void CGalleryView::m_FocusLayout(void)
 {
        switch (m->current_layout) {
        case E_LAYOUT_ALL:
@@ -798,7 +608,7 @@ void CGalleryView::FocusLayout(void)
        }
 }
 
-void CGalleryView::DestroyCtxpopup(void)
+void CGalleryView::m_DestroyCtxpopup(void)
 {
        if (!m->ctxpopup)
                return;
@@ -808,7 +618,7 @@ void CGalleryView::DestroyCtxpopup(void)
        m->ctxpopup = NULL;
 }
 
-void CGalleryView::DrawCtxpopup(const char **text_arr, int size_arr,
+void CGalleryView::m_DrawCtxpopup(const char **text_arr, int size_arr,
        const char *style, int selected_index, int position_x, int position_y)
 {
        Evas_Object *ctxpopup, *box, *btn = NULL;
@@ -844,7 +654,10 @@ void CGalleryView::DrawCtxpopup(const char **text_arr, int size_arr,
                elm_object_style_set(btn, style);
                elm_object_text_set(btn, _(text_arr[i]));
 
-               m->pHandlerCtxPopup->Connect(btn);
+               Connect(btn, GALLERY_CTXPOPUP,
+                               TYPE_KEY_DOWN | TYPE_CLICKED |
+                               TYPE_MOUSE_MOVE | TYPE_FOCUSED |
+                               TYPE_UNFOCUSED);
 
                if (text_arr == sourcetext)
                        evas_object_data_set(btn, BTN_ID,
@@ -859,7 +672,7 @@ void CGalleryView::DrawCtxpopup(const char **text_arr, int size_arr,
                                        m_AddUpdownIcon(btn, IMAGE_UP_ARR);
 
                                /* Calling first time to show icon */
-                               m->pHandlerCtxPopup->OnUnfocused(0, btn, NULL);
+                               OnUnfocused(GALLERY_SORTBTN, btn, NULL);
                        }
                }
 
@@ -989,8 +802,6 @@ bool CGalleryView::Create(void *data)
                goto error;
        }
 
-       m->parent = this;
-
        m->pAllLayout = new CAllLayout(LAYOUT_ALL);
        m->pAllLayout->Create(m->pLayoutMgr, m->ld);
        m->pAllLayout->SetHideCallback(sm_CbAllLayoutHide, m);
@@ -1106,7 +917,7 @@ void CGalleryView::t_OnPause(void)
        ASSERT(m);
 
        if (m->ctxpopup)
-               DestroyCtxpopup();
+               m_DestroyCtxpopup();
 }
 
 void CGalleryView::t_OnResume(void)
@@ -1121,7 +932,186 @@ void CGalleryView::t_OnResume(void)
                elm_object_focus_set(m->hover_btn, EINA_TRUE);
                break;
        case FOCUS_CONTENT_AREA:
-               FocusLayout();
+               m_FocusLayout();
+               break;
+       default:
+               break;
+       }
+}
+
+void CGalleryView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case GALLERY_MENU:
+               if (strcmp(ev->keyname, KEY_RIGHT) == 0 ||
+                       strcmp(ev->keyname, KEY_ENTER) == 0) {
+                       m_FocusLayout();
+
+                       elm_object_signal_emit(obj, "highlight", "");
+
+                       m->focused_btn = obj;
+                       m->focus_area = FOCUS_CONTENT_AREA;
+               } else if (strcmp(ev->keyname, KEY_BACK) == 0) {
+                       elm_exit();
+               }
+               break;
+       case GALLERY_SORTBTN:
+       case GALLERY_SOURCEBTN:
+               if (strcmp(ev->keyname, KEY_BACK) == 0)
+                       elm_object_focus_set(m->focused_btn, EINA_TRUE);
+               break;
+       case GALLERY_CTXPOPUP:
+               if (strcmp(ev->keyname, KEY_BACK) == 0)
+                       m_DestroyCtxpopup();
+               break;
+       default:
+               break;
+       }
+}
+
+void CGalleryView::OnMouseClicked(int id, Evas_Object *obj)
+{
+       switch (id) {
+       case GALLERY_SORTBTN:
+               m_DrawCtxpopup(sorttext, SORT_TEXT_SIZE,
+                       STYLE_BTN_HOVERTEXT, m->sort_type,
+                       POSITION_SORT_POPUP_X, POSITION_SORT_POPUP_Y);
+               break;
+       case GALLERY_SOURCEBTN:
+               m_DrawCtxpopup(sourcetext, SOURCE_TEXT_SIZE,
+                       STYLE_BTN_HOVERTEXT, m->source_type,
+                       POSITION_SOURCE_POPUP_X, POSITION_SOURCE_POPUP_Y);
+               break;
+       case GALLERY_CTXPOPUP:
+               {
+                       int i;
+                       const char *current_id;
+                       void(*func[])(void *) = {
+                               sm_CbSortDateDescClicked,
+                               sm_CbSortDateAscClicked,
+                               sm_CbSortAZClicked,
+                               sm_CbSortZAClicked,
+                               sm_CbSourceAllClicked,
+                               sm_CbSourceTVClicked,
+                               sm_CbSourceUSBClicked
+                       };
+
+                       current_id = (const char *)evas_object_data_get(obj, BTN_ID);
+                       if (!current_id)
+                               return;
+
+                       for (i = 0; i < (SORT_TEXT_SIZE + SOURCE_TEXT_SIZE); i++) {
+                               if (!strcmp(hover_btn_id[i], current_id)) {
+                                       func[i](this);
+                                       break;
+                               }
+                       }
+
+                       elm_object_text_set(m->hover_btn, elm_object_text_get(obj));
+
+                       m_DestroyCtxpopup();
+
+                       break;
+               }
+       default:
+               break;
+       }
+}
+
+void CGalleryView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case GALLERY_MENU:
+       case GALLERY_SORTBTN:
+       case GALLERY_SOURCEBTN:
+       case GALLERY_CTXPOPUP:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+               break;
+       default:
+               break;
+       }
+}
+
+void CGalleryView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case GALLERY_MENU:
+               int i;
+
+               m->focus_area = FOCUS_MENU_BTN;
+
+               if (m->focused_btn == obj)
+                       return;
+
+               if (m->focused_btn)
+                       elm_object_signal_emit(m->focused_btn, "unhighlight", "");
+
+               for (i = E_LAYOUT_ALL; i < E_LAYOUT_MAX; i++) {
+                       if (m->btn[i] == obj)
+                               break;
+               }
+
+               m->focused_btn = obj;
+
+               m_DrawContentArea(i);
+
+               break;
+       case GALLERY_SORTBTN:
+       case GALLERY_SOURCEBTN:
+               elm_object_signal_emit(m->focused_btn, "highlight", "");
+
+               if (m->sortbtn == obj)
+                       m_FocusUpdownArrow();
+
+               m->hover_btn = obj;
+               m->focus_area = FOCUS_HOVER_BTN;
+
+               break;
+       case GALLERY_CTXPOPUP:
+               Evas_Object *ic;
+
+               ic = (Evas_Object *)evas_object_data_get(obj, BTN_ICN);
+               if (!ic)
+                       return;
+
+               evas_object_color_set(ic, 255, 255, 255, 255);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CGalleryView::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case GALLERY_CTXPOPUP:
+               const char *current_id;
+               Evas_Object *ic;
+
+               current_id = (const char *)evas_object_data_get(obj, BTN_ID);
+               if (!current_id)
+                       return;
+
+               ic = (Evas_Object *)evas_object_data_get(obj, BTN_ICN);
+               if (!ic)
+                       return;
+
+               if (!strcmp(current_id, hover_btn_id[0])) {
+                       /* date desc */
+                       if (m->sort_type == E_SORT_DATE_DESC)
+                               evas_object_color_set(ic, 147, 170, 0, 255);
+                       else
+                               evas_object_color_set(ic, 89, 89, 89, 255);
+               } else if (!strcmp(current_id, hover_btn_id[1])) {
+                       /* date asc */
+                       if (m->sort_type == E_SORT_DATE_ASC)
+                               evas_object_color_set(ic, 147, 170, 0, 255);
+                       else
+                               evas_object_color_set(ic, 89, 89, 89, 255);
+               }
+
                break;
        default:
                break;
index 88e042b..ecd6a73 100644 (file)
 #include "menudef.h"
 #include "BaseView.h"
 #include "ViewMgr.h"
+#include "InputHandler.h"
 #include "LayoutMgr.h"
 #include "BaseLayout.h"
-#include "gallery_view.h"
 #include "video_player.h"
 #include "gallery_view.h"
 #include "layout_all.h"
 #include "layout_events.h"
 #include "layout_folder.h"
 #include "AppCommon.h"
-#include "InputHandler.h"
+
+#define ALL_GRID 0
 
 struct SHideCallbackPair {
        void(*cb)(void *cookie);
@@ -76,202 +77,9 @@ struct SAllLayout {
 
                HideCb = NULL;
                Sigcb = NULL;
-
-               pHandlerGrid = new CHandlerGrid(this);
-       }
-
-       ~SAllLayout() {
-               delete pHandlerGrid;
        }
 
-       class CHandlerGrid : public CListenerMgr, IKeyDownListener, IMouseMoveListener, IRealizedListener, IUnrealizedListener, IFocusedListener {
-       private:
-               SAllLayout *m;
-
-       private:
-               void m_SendResultToApp(const char *filepath)
-               {
-                       service_h reply = NULL;
-                       service_h service;
-                       int service_ret = -1;
-
-                       if (!filepath)
-                               return;
-
-                       if (service_create(&reply) != SERVICE_ERROR_NONE) {
-                               _ERR("service_create failed");
-                               return;
-                       }
-
-                       service = m->arglist->service;
-
-                       service_add_extra_data(reply, SERVICE_DATA_SELECTED, filepath);
-                       if (!reply)
-                               return;
-
-                       service_ret = service_reply_to_launch_request(reply, service,
-                               SERVICE_RESULT_SUCCEEDED);
-                       if (service_ret != SERVICE_ERROR_NONE) {
-                               _ERR("service_reply_to_launch_request failed");
-                               service_reply_to_launch_request(reply, service,
-                                       SERVICE_RESULT_CANCELED);
-                       }
-
-                       service_destroy(reply);
-                       elm_exit();
-               }
-               void m_CreateCtxtMenu(void)
-               {
-                       struct mediadata *md;
-                       struct view_data *vd;
-                       Elm_Object_Item *it;
-
-                       it = m->current_item;
-
-                       md = (struct mediadata *)elm_object_item_data_get(it);
-                       if (!md)
-                               return;
-
-                       vd = (struct view_data *)calloc(1, sizeof(*vd));
-                       if (!vd)
-                               return;
-
-                       vd->media_list = m->media_list;
-                       vd->md = md;
-
-                       CViewMgr::GetInstance()->PushView(VIEW_CTXT_MENU, vd);
-               }
-               static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       CHandlerGrid *root = (CHandlerGrid *)cookie;
-                       if (root)
-                               root->OnGridActivated(it, emission, source);
-               }
-               static void sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       CHandlerGrid *root = (CHandlerGrid *)cookie;
-                       if (root)
-                               root->OnGridItemFocused(it, emission, source);
-               }
-               void OnGridItemFocused(Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       if (!it)
-                               return;
-
-                       m->current_item = (Elm_Object_Item *)it;
-               }
-
-       public:
-               CHandlerGrid(SAllLayout *ins) : IKeyDownListener(this), IMouseMoveListener(this), IRealizedListener(this), IUnrealizedListener(this), IFocusedListener(this) { m = ins; }
-
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-               {
-                       CEventLayout *pEventLayout;
-                       CFolderLayout *pFolderLayout;
-
-                       if (strcmp(ev->keyname, KEY_BACK) == 0) {
-                               switch (m->ld->prev_layout) {
-                               case E_LAYOUT_NONE:
-                                       m->Sigcb->cb(m->Sigcb->cookie, E_RETURN);
-                                       break;
-                               case E_LAYOUT_EVENTS:
-                                       m->ld->modified = EINA_FALSE;
-                                       m->pLayoutMgr->Show(layout_type[E_LAYOUT_EVENTS]);
-
-                                       pEventLayout = (CEventLayout *)m->pLayoutMgr->Layout();
-                                       pEventLayout->Focus();
-
-                                       break;
-                               case E_LAYOUT_FOLDER:
-                                       m->ld->modified = EINA_FALSE;
-                                       m->pLayoutMgr->Show(layout_type[E_LAYOUT_FOLDER]);
-
-                                       pFolderLayout = (CFolderLayout *)m->pLayoutMgr->Layout();
-                                       pFolderLayout->Focus();
-
-                                       break;
-                               default:
-                                       break;
-                               }
-                       } else if (strcmp(ev->keyname, KEY_MENU) == 0)
-                               m_CreateCtxtMenu();
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-               {
-                       Elm_Object_Item *it;
-
-                       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
-                                       ev->cur.canvas.y, NULL, NULL);
-                       if (!it)
-                               return;
-
-                       if (elm_object_item_focus_get(it))
-                               return;
-
-                       elm_object_item_focus_set(it, EINA_TRUE);
-               }
-               virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_item_signal_callback_add(item, "item_clicked",
-                               "edc", sm_CbGridActivated, this);
-                       elm_object_item_signal_callback_add(item, "item_focused",
-                               "edc", sm_CbGridItemFocused, this);
-               }
-               virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_item_signal_callback_del(item, "item_clicked",
-                               "edc", sm_CbGridActivated);
-                       elm_object_item_signal_callback_del(item, "item_focused",
-                               "edc", sm_CbGridItemFocused);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       m->current_item = item;
-
-                       m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
-               }
-               void OnGridActivated(Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       struct mediadata *md;
-                       struct view_data *vd;
-                       int type;
-
-                       if (!it)
-                               return;
-
-                       md = (struct mediadata *)elm_object_item_data_get(it);
-                       if (!md)
-                               return;
-
-                       type = mediadata_get_type(md);
-
-                       /* operation is pick */
-                       if (m->arglist->media_type != E_MEDIA_IMAGE_VIDEO)
-                               m_SendResultToApp(mediadata_get_filepath(md));
-                       else {
-                               vd = (struct view_data *)calloc(1, sizeof(*vd));
-                               if (!vd)
-                                       return;
-
-                               vd->media_list = util_create_media_list(m->media_list, type);
-                               vd->md = md;
-
-                               if (type == MEDIA_VIDEO)
-                                       video_player_play(vd);
-                               else if (type == MEDIA_IMAGE)
-                                       CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
-                               else {
-                                       _ERR("wrong media type");
-                                       free(vd);
-                                       return;
-                               }
-                       }
-
-                       m->current_item = it;
-
-                       elm_gengrid_item_selected_set(it, EINA_FALSE);
-               }
-       } *pHandlerGrid;
+       ~SAllLayout() {}
 };
 
 char *CAllLayout::sm_CbGridTextGet(void *data, Evas_Object *obj, const char *part)
@@ -376,6 +184,128 @@ Elm_Gengrid_Item_Class *CAllLayout::m_GetItemclass(int type)
        return ic;
 }
 
+void CAllLayout::m_SendResultToApp(const char *filepath)
+{
+       service_h reply = NULL;
+       service_h service;
+       int service_ret = -1;
+
+       if (!filepath)
+               return;
+
+       if (service_create(&reply) != SERVICE_ERROR_NONE) {
+               _ERR("service_create failed");
+               return;
+       }
+
+       service = m->arglist->service;
+
+       service_add_extra_data(reply, SERVICE_DATA_SELECTED, filepath);
+       if (!reply)
+               return;
+
+       service_ret = service_reply_to_launch_request(reply, service,
+               SERVICE_RESULT_SUCCEEDED);
+       if (service_ret != SERVICE_ERROR_NONE) {
+               _ERR("service_reply_to_launch_request failed");
+               service_reply_to_launch_request(reply, service,
+                       SERVICE_RESULT_CANCELED);
+       }
+
+       service_destroy(reply);
+       elm_exit();
+}
+
+void CAllLayout::m_CreateCtxtMenu(void)
+{
+       struct mediadata *md;
+       struct view_data *vd;
+       Elm_Object_Item *it;
+
+       it = m->current_item;
+
+       md = (struct mediadata *)elm_object_item_data_get(it);
+       if (!md)
+               return;
+
+       vd = (struct view_data *)calloc(1, sizeof(*vd));
+       if (!vd)
+               return;
+
+       vd->media_list = m->media_list;
+       vd->md = md;
+
+       CViewMgr::GetInstance()->PushView(VIEW_CTXT_MENU, vd);
+}
+
+void CAllLayout::sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CAllLayout *m = (CAllLayout *)cookie;
+
+       m->m_OnGridActivated(it, emission, source);
+}
+
+void CAllLayout::m_OnGridActivated(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       struct mediadata *md;
+       struct view_data *vd;
+       int type;
+
+       if (!it)
+               return;
+
+       md = (struct mediadata *)elm_object_item_data_get(it);
+       if (!md)
+               return;
+
+       type = mediadata_get_type(md);
+
+       /* operation is pick */
+       if (m->arglist->media_type != E_MEDIA_IMAGE_VIDEO)
+               m_SendResultToApp(mediadata_get_filepath(md));
+       else {
+               vd = (struct view_data *)calloc(1, sizeof(*vd));
+               if (!vd)
+                       return;
+
+               vd->media_list = util_create_media_list(m->media_list, type);
+               vd->md = md;
+
+               if (type == MEDIA_VIDEO)
+                       video_player_play(vd);
+               else if (type == MEDIA_IMAGE)
+                       CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
+               else {
+                       _ERR("wrong media type");
+                       free(vd);
+                       return;
+               }
+       }
+
+       m->current_item = it;
+
+       elm_gengrid_item_selected_set(it, EINA_FALSE);
+}
+
+void CAllLayout::sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CAllLayout *m = (CAllLayout *)cookie;
+
+       m->m_OnGridItemFocused(it, emission, source);
+}
+
+void CAllLayout::m_OnGridItemFocused(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       if (!it)
+               return;
+
+       m->current_item = (Elm_Object_Item *)it;
+}
+
 Evas_Object *CAllLayout::m_DrawGengrid(Evas_Object *layout)
 {
        Evas_Object *grid;
@@ -398,7 +328,8 @@ Evas_Object *CAllLayout::m_DrawGengrid(Evas_Object *layout)
                        elm_config_scale_get() * GENGRID_ITEM_SIZE_W,
                        elm_config_scale_get() * GENGRID_ITEM_SIZE_H);
 
-       m->pHandlerGrid->Connect(grid);
+       Connect(grid, ALL_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE |
+                       TYPE_REALIZED | TYPE_UNREALIZED | TYPE_FOCUSED);
 
        return grid;
 }
@@ -567,7 +498,7 @@ void CAllLayout::DirectLaunch(const char *id)
                elm_object_focus_set(m->grid, EINA_TRUE);
                elm_object_item_focus_set(it, EINA_TRUE);
                m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
-               m->pHandlerGrid->OnGridActivated(it, NULL, NULL);
+               m_OnGridActivated(it, NULL, NULL);
        }
 
 }
@@ -706,6 +637,8 @@ bool CAllLayout::Create(CLayoutMgr *lmgr, void *data)
 
        elm_object_part_content_set(layout, PART_CONTENTAREA, m->grid);
 
+       m->current_item = elm_gengrid_first_item_get(m->grid);
+
        if (ld->path) {
                buf = ld->path;
                elm_object_part_text_set(layout,
@@ -764,3 +697,105 @@ void CAllLayout::Destroy(void)
        free(m);
        m = NULL;
 }
+
+void CAllLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) 
+{
+       switch (id) {
+       case ALL_GRID:
+               CEventLayout *pEventLayout;
+               CFolderLayout *pFolderLayout;
+
+               if (strcmp(ev->keyname, KEY_BACK) == 0) {
+                       switch (m->ld->prev_layout) {
+                       case E_LAYOUT_NONE:
+                               m->Sigcb->cb(m->Sigcb->cookie, E_RETURN);
+                               break;
+                       case E_LAYOUT_EVENTS:
+                               m->ld->modified = EINA_FALSE;
+                               m->pLayoutMgr->Show(layout_type[E_LAYOUT_EVENTS]);
+
+                               pEventLayout = (CEventLayout *)m->pLayoutMgr->Layout();
+                               pEventLayout->Focus();
+
+                               break;
+                       case E_LAYOUT_FOLDER:
+                               m->ld->modified = EINA_FALSE;
+                               m->pLayoutMgr->Show(layout_type[E_LAYOUT_FOLDER]);
+
+                               pFolderLayout = (CFolderLayout *)m->pLayoutMgr->Layout();
+                               pFolderLayout->Focus();
+
+                               break;
+                       default:
+                               break;
+                       }
+               } else if (strcmp(ev->keyname, KEY_MENU) == 0)
+                       m_CreateCtxtMenu();
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CAllLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) 
+{
+       switch (id) {
+       case ALL_GRID:
+               Elm_Object_Item *it;
+
+               it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                               ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (elm_object_item_focus_get(it))
+                       return;
+
+               elm_object_item_focus_set(it, EINA_TRUE);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CAllLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case ALL_GRID:
+               elm_object_item_signal_callback_add(item, "item_clicked",
+                       "edc", sm_CbGridActivated, this);
+               elm_object_item_signal_callback_add(item, "item_focused",
+                       "edc", sm_CbGridItemFocused, this);
+               break;
+       default:
+               break;
+       }
+}
+
+void CAllLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case ALL_GRID:
+               elm_object_item_signal_callback_del(item, "item_clicked",
+                       "edc", sm_CbGridActivated);
+               elm_object_item_signal_callback_del(item, "item_focused",
+                       "edc", sm_CbGridItemFocused);
+               break;
+       default:
+               break;
+       }
+}
+
+void CAllLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case ALL_GRID:
+               m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
+               break;
+       default:
+               break;
+       }
+}
+
index 0cf4d0b..15cb51d 100644 (file)
@@ -25,6 +25,7 @@
 #include "menudef.h"
 #include "BaseView.h"
 #include "ViewMgr.h"
+#include "InputHandler.h"
 #include "video_player.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
@@ -32,7 +33,8 @@
 #include "layout_all.h"
 #include "layout_events.h"
 #include "AppCommon.h"
-#include "InputHandler.h"
+
+#define EVENT_GRID 0
 
 struct SFocusCallbackPair {
        void (*cb)(void *cookie);
@@ -89,124 +91,9 @@ struct SEventLayout {
                FocusCb = NULL;
                SortCb = NULL;
                Sigcb = NULL;
-
-               pHandlerGrid = new CHandlerGrid(this);
-       }
-
-       ~SEventLayout() {
-               delete pHandlerGrid;
        }
 
-       class CHandlerGrid : public CListenerMgr, IKeyDownListener, IMouseMoveListener, IRealizedListener, IUnrealizedListener, IFocusedListener {
-       private:
-               SEventLayout *m;
-
-       private:
-               static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       CHandlerGrid *root = (CHandlerGrid *)cookie;
-                       if (root)
-                               root->OnGridActivated(it, emission, source);
-               }
-
-       public:
-               CHandlerGrid(SEventLayout *ins) : IKeyDownListener(this), IMouseMoveListener(this), IRealizedListener(this), IUnrealizedListener(this), IFocusedListener(this) { m = ins; }
-
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-               {
-                       if (strcmp(ev->keyname, KEY_BACK) == 0)
-                               m->Sigcb->cb(m->Sigcb->cookie, E_RETURN);
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-               {
-                       Elm_Object_Item *it;
-
-                       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
-                               ev->cur.canvas.y, NULL, NULL);
-                       if (!it)
-                               return;
-
-                       if (elm_object_item_focus_get(it))
-                               return;
-
-                       elm_object_item_focus_set(it, EINA_TRUE);
-               }
-               virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_item_signal_callback_add(item, "item_clicked",
-                               "edc", sm_CbGridActivated, this);
-               }
-               virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_item_signal_callback_del(item, "item_clicked",
-                               "edc", sm_CbGridActivated);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       m->current_item = item;
-
-                       m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
-               }
-               void OnGridActivated(Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       struct mediadata *md;
-                       struct eventdata *ed;
-                       int type;
-                       struct view_data *vd;
-                       char buf[256];
-
-                       if (!it)
-                               return;
-
-                       ed = (struct eventdata *)elm_object_item_data_get(it);
-                       if (!ed)
-                               return;
-
-                       if (eventdata_get_type(ed) == E_TYPE_EVENT_NO_INFO) {
-                               md = eventdata_get_mediadata(ed);
-                               if (!md)
-                                       return;
-
-                               type = mediadata_get_type(md);
-
-                               vd = (struct view_data *)calloc(1, sizeof(*vd));
-                               if (!vd)
-                                       return;
-
-                               vd->media_list = util_create_media_list(m->media_list, type);
-                               vd->md = md;
-
-                               if (type == MEDIA_VIDEO)
-                                       video_player_play(vd);
-                               else if (type == MEDIA_IMAGE)
-                                       CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
-                               else {
-                                       _ERR("wrong media type");
-                                       free(vd);
-                                       return;
-                               }
-                       } else {
-                               /* TODO: Launch next view as per GUI specs */
-                               snprintf(buf, sizeof(buf), "< %s", eventdata_get_eventname(ed));
-
-                               m->ld->media_list = eventdata_get_listinfo(ed);
-                               m->ld->arglist = m->arglist;
-                               m->ld->path = strdup(buf);
-                               m->ld->sort = m->sort;
-                               m->ld->prev_layout = E_LAYOUT_EVENTS;
-                               m->ld->modified = EINA_TRUE;
-
-                               m->pLayoutMgr->Show(layout_type[E_LAYOUT_ALL]);
-                               m->layout_2ndview = EINA_TRUE;
-
-                               m->FocusCb->cb(m->FocusCb->cookie);
-
-                               m->current_item = it;
-                       }
-
-                       elm_gengrid_item_selected_set(it, EINA_FALSE);
-               }
-       } *pHandlerGrid;
+       ~SEventLayout() {}
 };
 
 char *CEventLayout::sm_CbGridTextGet(void *data, Evas_Object *obj, const char *part)
@@ -341,6 +228,92 @@ Elm_Gengrid_Item_Class *CEventLayout::m_GetItemclass(int type)
        return ic;
 }
 
+void CEventLayout::sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CEventLayout *m = (CEventLayout *)cookie;
+
+       m->m_OnGridActivated(it, emission, source);
+}
+
+void CEventLayout::m_OnGridActivated(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       struct mediadata *md;
+       struct eventdata *ed;
+       int type;
+       struct view_data *vd;
+       char buf[256];
+
+       if (!it)
+               return;
+
+       ed = (struct eventdata *)elm_object_item_data_get(it);
+       if (!ed)
+               return;
+
+       if (eventdata_get_type(ed) == E_TYPE_EVENT_NO_INFO) {
+               md = eventdata_get_mediadata(ed);
+               if (!md)
+                       return;
+
+               type = mediadata_get_type(md);
+
+               vd = (struct view_data *)calloc(1, sizeof(*vd));
+               if (!vd)
+                       return;
+
+               vd->media_list = util_create_media_list(m->media_list, type);
+               vd->md = md;
+
+               if (type == MEDIA_VIDEO)
+                       video_player_play(vd);
+               else if (type == MEDIA_IMAGE)
+                       CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
+               else {
+                       _ERR("wrong media type");
+                       free(vd);
+                       return;
+               }
+       } else {
+               /* TODO: Launch next view as per GUI specs */
+               snprintf(buf, sizeof(buf), "< %s", eventdata_get_eventname(ed));
+
+               m->ld->media_list = eventdata_get_listinfo(ed);
+               m->ld->arglist = m->arglist;
+               m->ld->path = strdup(buf);
+               m->ld->sort = m->sort;
+               m->ld->prev_layout = E_LAYOUT_EVENTS;
+               m->ld->modified = EINA_TRUE;
+
+               m->pLayoutMgr->Show(layout_type[E_LAYOUT_ALL]);
+               m->layout_2ndview = EINA_TRUE;
+
+               m->FocusCb->cb(m->FocusCb->cookie);
+
+               m->current_item = it;
+       }
+
+       elm_gengrid_item_selected_set(it, EINA_FALSE);
+}
+
+void CEventLayout::sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CEventLayout *m = (CEventLayout *)cookie;
+
+       m->m_OnGridItemFocused(it, emission, source);
+}
+
+void CEventLayout::m_OnGridItemFocused(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       if (!it)
+               return;
+
+       m->current_item = (Elm_Object_Item *)it;
+}
+
 int CEventLayout::m_GetEventCount(Eina_List *event_list)
 {
        Eina_List *l;
@@ -405,7 +378,8 @@ Evas_Object *CEventLayout::m_DrawGengrid(Evas_Object *layout)
                elm_config_scale_get() * GENGRID_ITEM_SIZE_W,
                elm_config_scale_get() * GENGRID_ITEM_SIZE_H);
 
-       m->pHandlerGrid->Connect(grid);
+       Connect(grid, EVENT_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE
+                       | TYPE_REALIZED | TYPE_UNREALIZED | TYPE_FOCUSED);
 
        return grid;
 }
@@ -523,7 +497,7 @@ void CEventLayout::DirectLaunch(const char *id)
                elm_gengrid_item_bring_in(it, ELM_GENGRID_ITEM_SCROLLTO_MIDDLE);
                elm_object_focus_set(m->grid, EINA_TRUE);
                elm_object_item_focus_set(it, EINA_TRUE);
-               m->pHandlerGrid->OnGridActivated(it, NULL, NULL);
+               m_OnGridActivated(it, NULL, NULL);
        }
 }
 
@@ -672,6 +646,8 @@ bool CEventLayout::Create(CLayoutMgr *lmgr, void *data)
 
        elm_object_part_content_set(layout, PART_CONTENTAREA, m->grid);
 
+       m->current_item = elm_gengrid_first_item_get(m->grid);
+
        CBaseLayout::Create(layout);
 
        return true;
@@ -725,3 +701,76 @@ void CEventLayout::t_OnHide(void)
 
        elm_object_part_content_unset(m->base, PART_CONTENTAREA);
 }
+
+void CEventLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) 
+{
+       switch (id) {
+       case EVENT_GRID:
+               if (strcmp(ev->keyname, KEY_BACK) == 0)
+                       m->Sigcb->cb(m->Sigcb->cookie, E_RETURN);
+               break;
+       default:
+               break;
+       }
+}
+
+void CEventLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) 
+{
+       switch (id) {
+       case EVENT_GRID:
+               Elm_Object_Item *it;
+
+               it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                       ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (elm_object_item_focus_get(it))
+                       return;
+
+               elm_object_item_focus_set(it, EINA_TRUE);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CEventLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case EVENT_GRID:
+               elm_object_item_signal_callback_add(item, "item_clicked",
+                       "edc", sm_CbGridActivated, this);
+               elm_object_item_signal_callback_add(item, "item_focused",
+                       "edc", sm_CbGridItemFocused, this);
+               break;
+       default:
+               break;
+       }
+}
+
+void CEventLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case EVENT_GRID:
+               elm_object_item_signal_callback_del(item, "item_clicked",
+                       "edc", sm_CbGridActivated);
+               elm_object_item_signal_callback_del(item, "item_focused",
+                       "edc", sm_CbGridItemFocused);
+               break;
+       default:
+               break;
+       }
+}
+
+void CEventLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case EVENT_GRID:
+               m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
+               break;
+       default:
+               break;
+       }
+}
index 0b45890..854d222 100644 (file)
 #include "ViewMgr.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
+#include "InputHandler.h"
 #include "layout_all.h"
 #include "layout_folder.h"
 #include "gallery_view.h"
 #include "AppCommon.h"
-#include "InputHandler.h"
+
+#define FOLDER_GRID 0
 
 struct SFocusCallbackPair {
        void (*cb)(void *cookie);
@@ -84,93 +86,9 @@ struct SFolderLayout{
                FocusCb = NULL;
                SortCb = NULL;
                Sigcb = NULL;
-
-               pHandlerGrid = new CHandlerGrid(this);
        }
 
-       ~SFolderLayout() {
-               delete pHandlerGrid;
-       }
-
-       class CHandlerGrid : public CListenerMgr, IKeyDownListener, IMouseMoveListener, IRealizedListener, IUnrealizedListener, IFocusedListener {
-       private:
-               SFolderLayout *m;
-
-       private:
-               static void sm_CbGridActivated(void *cookie, Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       CHandlerGrid *root = (CHandlerGrid *)cookie;
-                       if (root)
-                               root->OnGridActivated(it, emission, source);
-               }
-               void OnGridActivated(Elm_Object_Item *it, const char *emission, const char *source)
-               {
-                       struct folderdata *fd;
-                       char buf[256];
-
-                       fd = (struct folderdata *)elm_object_item_data_get(it);
-                       if (!fd)
-                               return;
-
-                       snprintf(buf, sizeof(buf), "< %s", folderdata_get_name(fd));
-
-                       m->ld->media_list = folderdata_get_listinfo(fd);
-                       m->ld->arglist = m->arglist;
-                       m->ld->path = strdup(buf);
-                       m->ld->sort = m->sort;
-                       m->ld->prev_layout = E_LAYOUT_FOLDER;
-                       m->ld->modified = EINA_TRUE;
-
-                       m->pLayoutMgr->Show(layout_type[E_LAYOUT_ALL]);
-                       m->layout_2ndview = EINA_TRUE;
-
-                       m->FocusCb->cb(m->FocusCb->cookie);
-
-                       m->current_item = it;
-
-                       elm_gengrid_item_selected_set(it, EINA_FALSE);
-               }
-
-       public:
-               CHandlerGrid(SFolderLayout *ins) : IKeyDownListener(this), IMouseMoveListener(this), IRealizedListener(this), IUnrealizedListener(this), IFocusedListener(this) { m = ins; }
-
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-               {
-                       if (strcmp(ev->keyname, KEY_BACK) == 0)
-                               m->Sigcb->cb(m->Sigcb->cookie, E_RETURN);
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
-               {
-                       Elm_Object_Item *it;
-
-                       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
-                               ev->cur.canvas.y, NULL, NULL);
-                       if (!it)
-                               return;
-
-                       if (elm_object_item_focus_get(it))
-                               return;
-
-                       elm_object_item_focus_set(it, EINA_TRUE);
-               }
-               virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_item_signal_callback_add(item, "item_clicked",
-                               "edc", sm_CbGridActivated, this);
-               }
-               virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       elm_object_item_signal_callback_del(item, "item_clicked",
-                               "edc", sm_CbGridActivated);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
-               {
-                       m->current_item = item;
-
-                       m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
-
-               }
-       } *pHandlerGrid;
+       ~SFolderLayout() {}
 };
 
 char *CFolderLayout::sm_CbGridTextGet(void *data, Evas_Object *obj, const char *part)
@@ -238,6 +156,60 @@ Elm_Gengrid_Item_Class *CFolderLayout::m_GetItemclass(void)
        return ic;
 }
 
+void CFolderLayout::sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CFolderLayout *m = (CFolderLayout *)cookie;
+
+       m->m_OnGridActivated(it, emission, source);
+}
+
+void CFolderLayout::m_OnGridActivated(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       struct folderdata *fd;
+       char buf[256];
+
+       fd = (struct folderdata *)elm_object_item_data_get(it);
+       if (!fd)
+               return;
+
+       snprintf(buf, sizeof(buf), "< %s", folderdata_get_name(fd));
+
+       m->ld->media_list = folderdata_get_listinfo(fd);
+       m->ld->arglist = m->arglist;
+       m->ld->path = strdup(buf);
+       m->ld->sort = m->sort;
+       m->ld->prev_layout = E_LAYOUT_FOLDER;
+       m->ld->modified = EINA_TRUE;
+
+       m->pLayoutMgr->Show(layout_type[E_LAYOUT_ALL]);
+       m->layout_2ndview = EINA_TRUE;
+
+       m->FocusCb->cb(m->FocusCb->cookie);
+
+       m->current_item = it;
+
+       elm_gengrid_item_selected_set(it, EINA_FALSE);
+}
+
+void CFolderLayout::sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CFolderLayout *m = (CFolderLayout *)cookie;
+
+       m->m_OnGridItemFocused(it, emission, source);
+}
+
+void CFolderLayout::m_OnGridItemFocused(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       if (!it)
+               return;
+
+       m->current_item = (Elm_Object_Item *)it;
+}
+
 int CFolderLayout::m_GetMediaCount(Eina_List *list, int type)
 {
        Eina_List *media_list;
@@ -284,7 +256,9 @@ Evas_Object *CFolderLayout::m_DrawGengrid(Evas_Object *layout)
                elm_config_scale_get() * GENGRID_ITEM_SIZE_W,
                elm_config_scale_get() * GENGRID_ITEM_SIZE_H);
 
-       m->pHandlerGrid->Connect(grid);
+       Connect(grid, FOLDER_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE |
+                       TYPE_REALIZED | TYPE_UNREALIZED | TYPE_FOCUSED);
+
        return grid;
 }
 
@@ -573,6 +547,8 @@ bool CFolderLayout::Create(CLayoutMgr *lmgr, void *data)
 
        elm_object_part_content_set(layout, PART_CONTENTAREA, m->grid);
 
+       m->current_item = elm_gengrid_first_item_get(m->grid);
+
        CBaseLayout::Create(layout);
 
        return true;
@@ -624,3 +600,76 @@ void CFolderLayout::t_OnHide(void)
 
        elm_object_part_content_unset(m->base, PART_CONTENTAREA);
 }
+
+void CFolderLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case FOLDER_GRID:
+               if (strcmp(ev->keyname, KEY_BACK) == 0)
+                       m->Sigcb->cb(m->Sigcb->cookie, E_RETURN);
+               break;
+       default:
+               break;
+       }
+}
+
+void CFolderLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case FOLDER_GRID:
+               Elm_Object_Item *it;
+
+               it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                       ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (elm_object_item_focus_get(it))
+                       return;
+
+               elm_object_item_focus_set(it, EINA_TRUE);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CFolderLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case FOLDER_GRID:
+               elm_object_item_signal_callback_add(item, "item_clicked",
+                       "edc", sm_CbGridActivated, this);
+               elm_object_item_signal_callback_add(item, "item_focused",
+                       "edc", sm_CbGridItemFocused, this);
+               break;
+       default:
+               break;
+       }
+}
+
+void CFolderLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case FOLDER_GRID:
+               elm_object_item_signal_callback_del(item, "item_clicked",
+                       "edc", sm_CbGridActivated);
+               elm_object_item_signal_callback_del(item, "item_focused",
+                       "edc", sm_CbGridItemFocused);
+               break;
+       default:
+               break;
+       }
+}
+
+void CFolderLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case FOLDER_GRID:
+               m->Sigcb->cb(m->Sigcb->cookie, E_HIGHLIGHT);
+               break;
+       default:
+               break;
+       }
+}
index 5a90c51..63bf10c 100644 (file)
@@ -25,6 +25,7 @@
 #include "AppCommon.h"
 #include "BaseView.h"
 #include "ViewMgr.h"
+#include "InputHandler.h"
 #include "photoviewer_view.h"
 #include "zoom_view.h"
 
@@ -55,6 +56,10 @@ enum _cur_ctxpopup {
        CTXPOPUP_SPEED,
 };
 
+enum EObjectType {
+       PHOTOVIEWER_BTN = 0,
+       PHOTOVIEWER_CTXPOPUP
+};
 
 struct SPhotoViewerView {
        Evas_Object *win;
@@ -101,196 +106,11 @@ struct SPhotoViewerView {
 
                ctxpopup = NULL;
                cur_ctxpopup = 0;
-
-               //pHandlerCtxPopup = new CHandlerCtxPopup(this);
-               int a;
-               for (a = 0; a < MAX_PHOTO_ICONS; a++) {
-                       btn[a] = NULL;
-                       pHandlerBtn[a] = new CHandlerBtn(this);
-               }
-
-               pHandlerCtxPopup = new CHandlerCtxPopup(this);
        }
 
-       ~SPhotoViewerView() {
-               int a;
-               for (a = 0; a < MAX_PHOTO_ICONS; a++) {
-                       delete pHandlerBtn[a];
-               }
-               delete pHandlerCtxPopup;
-       }
-       
-       //evas_object_smart_callback_add(m->btn[i], SIG_CLICKED, _btn_clicked_common, m);
-       //evas_object_smart_callback_add(m->btn[i], SIG_FOCUSED, _photo_btn_focused, m);
-       //evas_object_event_callback_add(m->btn[i], EVAS_CALLBACK_KEY_DOWN, _photo_btn_key_pressed, m);
-       class CHandlerBtn : public CListenerMgr, IMouseMoveListener, IKeyDownListener, IFocusedListener, IMouseClickedListener {
-       private:
-               SPhotoViewerView *m;
-
-       private:
-               static Eina_Bool sm_CbTimerTooltip(void *dt) {
-                       CHandlerBtn *root = (CHandlerBtn*)dt;
-
-                       Eina_Bool ret = ECORE_CALLBACK_CANCEL;
-
-                       if (root)
-                               ret = root->OnTimerTooltip();
-
-                       return ret;
-               }
-               Eina_Bool OnTimerTooltip(void)  {
-                       m->tooltip_timer = NULL;
-                       elm_object_tooltip_hide(m->focusedbtn);
-                       return ECORE_CALLBACK_CANCEL;
-               }
-
-       public:
-               CHandlerBtn(SPhotoViewerView *ins) : IMouseMoveListener(this), IKeyDownListener(this), IFocusedListener(this), IMouseClickedListener(this) { m = ins; }
-
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
-                       if (!elm_object_focus_get(obj))
-                               elm_object_focus_set(obj, EINA_TRUE);
-               }
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
-                       if (!strcmp(ev->keyname, KEY_BACK))
-                               CViewMgr::GetInstance()->PopView();
-                       else if (!strcmp(ev->keyname, KEY_MENU))
-                               CViewMgr::GetInstance()->PushView(VIEW_CTXT_MENU, m->vd);
-               }
-               virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item) {
-                       if (m->focusedbtn != obj) {
-
-                               if (m->focusedbtn)
-                                       elm_object_tooltip_hide(m->focusedbtn);
-
-                               elm_object_tooltip_show(obj);
-
-                               m->focusedbtn = obj;
-                       }
-
-                       if (m->tooltip_timer)
-                               ecore_timer_reset(m->tooltip_timer);
-                       else {
-                               m->tooltip_timer = ecore_timer_add(TIMEOUT_TOOLTIP, sm_CbTimerTooltip, this);
-                       }
-               }
-               virtual void OnMouseClicked(int id, Evas_Object *obj) {
-                       elm_object_signal_emit(obj, "mouse,anim,start", "");
-               }
-       }  *pHandlerBtn[MAX_PHOTO_ICONS];
-
-       class CHandlerCtxPopup : public CListenerMgr, IMouseMoveListener, IMouseClickedListener, IKeyDownListener {
-       private:
-               SPhotoViewerView *m;
-
-       public:
-               void HandleZoomFunction(struct SPhotoViewerView *vdata, const char *btn_id)
-               {
-                       int i;
-                       struct zoom_data *zd;
-                       int zoom_level;
-
-                       if (!vdata || !btn_id)
-                               return;
-
-                       zoom_level = 0;
-
-                       for (i = 0; i < MAX_ZOOM_BTNS; i++) {
-                               if (!strcmp(btn_id, zoom_text[i])) {
-                                       zoom_level = i;
-                                       break;
-                               }
-                       }
-
-                       DestroyCtxpopup();
-
-                       switch (zoom_level) {
-
-                       case E_ZOOM_X2:
-                       case E_ZOOM_X4:
-                               zd = (struct zoom_data *)calloc(1, sizeof(*zd));
-                               if (!zd)
-                                       return;
-                               zd->md = vdata->vd->md;
-                               zd->zoom_level = zoom_level;
-                               if (!CViewMgr::GetInstance()->PushView(VIEW_PHOTO_ZOOM, zd))
-                                       _ERR("VIEW_PHOTO_ZOOM view create failed");
-                               break;
-
-                       case E_ZOOM_ORIGINAL:
-                       default:
-                               break;
-                       }
-               }
-
-               void HandleSpeedFunction(struct SPhotoViewerView *vdata, const char *btn_id)
-               {
-                       int i;
-
-                       if (!vdata || !btn_id)
-                               return;
-
-                       for (i = 0; i < MAX_SPEED_BTNS; i++) {
-                               if (!strcmp(btn_id, speed_text[i])) {
-                                       vdata->slideshow_speed = i;
-                                       break;
-                               }
-                       }
-
-                       if (vdata->slideshow_timer) {
-                               ecore_timer_interval_set(vdata->slideshow_timer,
-                                       slideshow_timeout[vdata->slideshow_speed]);
-                               ecore_timer_reset(vdata->slideshow_timer);
-                       }
-
-                       DestroyCtxpopup();
-               }
-               void DestroyCtxpopup(void)
-               {
-                       if (!m->ctxpopup)
-                               return;
-
-                       evas_object_hide(m->ctxpopup);
-                       evas_object_del(m->ctxpopup);
-
-                       m->ctxpopup = NULL;
-                       m->cur_ctxpopup = CTXPOPUP_NONE;
-
-                       elm_object_focus_set(m->focusedbtn, EINA_TRUE);
-               }
-
-       public:
-               CHandlerCtxPopup(SPhotoViewerView *ins) : IMouseMoveListener(this), IMouseClickedListener(this), IKeyDownListener(this) { m = ins; }
-
-               virtual void OnMouseClicked(int id, Evas_Object *obj) {
-                       const char *btn_id;
-
-                       btn_id = (const char *)evas_object_data_get(obj, BTN_ID);
-
-                       switch (m->cur_ctxpopup) {
-                       case CTXPOPUP_ZOOM:
-                               HandleZoomFunction(m, btn_id);
-                               break;
-                       case CTXPOPUP_SPEED:
-                               HandleSpeedFunction(m, btn_id);
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) {
-                       if (!strcmp(ev->keyname, KEY_BACK))
-                               DestroyCtxpopup();
-               }
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
-                       if (!elm_object_focus_get(obj))
-                               elm_object_focus_set(obj, EINA_TRUE);
-               }
-       }  *pHandlerCtxPopup;
-
+       ~SPhotoViewerView() {}
 };
 
-
 void CPhotoViewerView::sm_CbPrevBtnClicked(void *dt, Evas_Object *obj, const char *emission, const char *source)
 {
        CPhotoViewerView* root = (CPhotoViewerView*)dt;
@@ -496,6 +316,99 @@ 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 ret = ECORE_CALLBACK_CANCEL;
+
+       ret = m->m_OnTimerTooltip();
+
+       return ret;
+}
+
+Eina_Bool CPhotoViewerView::m_OnTimerTooltip(void)  {
+       m->tooltip_timer = NULL;
+       elm_object_tooltip_hide(m->focusedbtn);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void CPhotoViewerView::m_HandleZoomFunction(const char *btn_id)
+{
+       int i;
+       struct zoom_data *zd;
+       int zoom_level;
+
+       if (!btn_id)
+               return;
+
+       zoom_level = 0;
+
+       for (i = 0; i < MAX_ZOOM_BTNS; i++) {
+               if (!strcmp(btn_id, zoom_text[i])) {
+                       zoom_level = i;
+                       break;
+               }
+       }
+
+       m_DestroyCtxpopup();
+
+       switch (zoom_level) {
+
+       case E_ZOOM_X2:
+       case E_ZOOM_X4:
+               zd = (struct zoom_data *)calloc(1, sizeof(*zd));
+               if (!zd)
+                       return;
+               zd->md = m->vd->md;
+               zd->zoom_level = zoom_level;
+               if (!CViewMgr::GetInstance()->PushView(VIEW_PHOTO_ZOOM, zd))
+                       _ERR("VIEW_PHOTO_ZOOM view create failed");
+               break;
+
+       case E_ZOOM_ORIGINAL:
+       default:
+               break;
+       }
+}
+
+void CPhotoViewerView::m_HandleSpeedFunction(const char *btn_id)
+{
+       int i;
+
+       if (!btn_id)
+               return;
+
+       for (i = 0; i < MAX_SPEED_BTNS; i++) {
+               if (!strcmp(btn_id, speed_text[i])) {
+                       m->slideshow_speed = i;
+                       break;
+               }
+       }
+
+       if (m->slideshow_timer) {
+               ecore_timer_interval_set(m->slideshow_timer,
+                       slideshow_timeout[m->slideshow_speed]);
+               ecore_timer_reset(m->slideshow_timer);
+       }
+
+       m_DestroyCtxpopup();
+}
+
+void CPhotoViewerView::m_DestroyCtxpopup(void)
+{
+       if (!m->ctxpopup)
+               return;
+
+       evas_object_hide(m->ctxpopup);
+       evas_object_del(m->ctxpopup);
+
+       m->ctxpopup = NULL;
+       m->cur_ctxpopup = CTXPOPUP_NONE;
+
+       elm_object_focus_set(m->focusedbtn, EINA_TRUE);
+}
+
 void CPhotoViewerView::m_DrawCtxpopup(const char **text_arr, int size_arr, const char *style, int selected_index, int position_x, int position_y)
 {
        Evas_Object *ctxpopup, *box, *btn;
@@ -537,10 +450,8 @@ void CPhotoViewerView::m_DrawCtxpopup(const char **text_arr, int size_arr, const
                if (i == size_arr - 1) {
                        elm_object_signal_emit(btn, "elm,action,hideline", "elm");
                }
-               m->pHandlerCtxPopup->Connect(btn);
-               //((IMouseClickedListener*)m->pHandlerCtxPopup)->Connect(btn); // evas_object_smart_callback_add(btn, SIG_CLICKED, _ctxpopup_btn_clicked, m);
-               //((IMouseMoveListener*)m->pHandlerCtxPopup)->Connect(btn);  // evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_MOVE, _photo_btn_mousemove, m);
-               //((IKeyDownListener*)m->pHandlerCtxPopup)->Connect(btn);      // evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN, _ctxpopup_btn_key_pressed, m);
+               Connect(btn, PHOTOVIEWER_CTXPOPUP,
+                               TYPE_KEY_DOWN | TYPE_CLICKED | TYPE_MOUSE_MOVE);
        }
        evas_object_show(box);
 
@@ -709,11 +620,10 @@ bool CPhotoViewerView::m_DrawBottomArea(void)
                                buf, m->btn[i]);
 
                elm_object_signal_callback_add(m->btn[i], "btn,anim,finish", _source_name[i], _edje_callback_function[i], this);
-               m->pHandlerBtn[i]->Connect(m->btn[i]);
-               //((IMouseClickedListener*)m->pHandlerBtn[i])->Connect(m->btn[i]); // evas_object_smart_callback_add(m->btn[i], SIG_CLICKED, _btn_clicked_common, m);
-               //((IFocusedListener*)m->pHandlerBtn[i])->Connect(m->btn[i]);      // evas_object_smart_callback_add(m->btn[i], SIG_FOCUSED, _photo_btn_focused, m);
-               //((IKeyDownListener*)m->pHandlerBtn[i])->Connect(m->btn[i]);      // evas_object_event_callback_add(m->btn[i], EVAS_CALLBACK_KEY_DOWN, _photo_btn_key_pressed, m);
-               //((IMouseMoveListener*)m->pHandlerBtn[i])->Connect(m->btn[i]); // evas_object_event_callback_add(m->btn[i], EVAS_CALLBACK_MOUSE_MOVE, _photo_btn_mousemove, m);
+
+               Connect(m->btn[i], PHOTOVIEWER_BTN,
+                               TYPE_KEY_DOWN | TYPE_CLICKED |
+                               TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
                elm_object_focus_next_object_set(m->btn[i], m->btn[i], ELM_FOCUS_UP);
                elm_object_focus_next_object_set(m->btn[i], m->btn[i], ELM_FOCUS_DOWN);
@@ -911,7 +821,7 @@ void CPhotoViewerView::OnTimeout(void)
 {
        int i;
 
-       m->pHandlerCtxPopup->DestroyCtxpopup();
+       m_DestroyCtxpopup();
 
        elm_object_signal_emit(m->base, SIG_HIDE, "");
 
@@ -944,7 +854,7 @@ Eina_Bool CPhotoViewerView::OnEvent(int type, void *event_info)
                }
                else if (!strcmp(ev->keyname, KEY_BACK)) {
                        if (m->slideshow_state == STATE_PLAY)
-                               m->pHandlerBtn[SLIDESHOW_BTN_IDX]->OnMouseClicked(0, m->btn[SLIDESHOW_BTN_IDX]); //_btn_clicked_common(m, m->btn[SLIDESHOW_BTN_IDX], NULL);
+                               OnMouseClicked(PHOTOVIEWER_BTN, m->btn[SLIDESHOW_BTN_IDX]);
 
                        elm_object_signal_emit(m->base, SIG_SHOW, "");
 
@@ -958,10 +868,101 @@ Eina_Bool CPhotoViewerView::OnEvent(int type, void *event_info)
        }
        else {
                if (m->slideshow_state == STATE_PLAY)
-                       m->pHandlerBtn[SLIDESHOW_BTN_IDX]->OnMouseClicked(0, m->btn[SLIDESHOW_BTN_IDX]); //_btn_clicked_common(m, m->btn[SLIDESHOW_BTN_IDX], NULL);
+                       OnMouseClicked(PHOTOVIEWER_BTN, m->btn[SLIDESHOW_BTN_IDX]);
 
                elm_object_signal_emit(m->base, SIG_SHOW, "");
        }
 
        return EINA_TRUE;
 }
+
+void CPhotoViewerView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case PHOTOVIEWER_BTN:
+               if (!strcmp(ev->keyname, KEY_BACK))
+                       CViewMgr::GetInstance()->PopView();
+               else if (!strcmp(ev->keyname, KEY_MENU))
+                       CViewMgr::GetInstance()->PushView(VIEW_CTXT_MENU, m->vd);
+
+               break;
+       case PHOTOVIEWER_CTXPOPUP:
+               if (!strcmp(ev->keyname, KEY_BACK))
+                       m_DestroyCtxpopup();
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CPhotoViewerView::OnMouseClicked(int id, Evas_Object *obj)
+{
+       switch (id) {
+       case PHOTOVIEWER_BTN:
+               elm_object_signal_emit(obj, "mouse,anim,start", "");
+               break;
+       case PHOTOVIEWER_CTXPOPUP:
+               const char *btn_id;
+
+               btn_id = (const char *)evas_object_data_get(obj, BTN_ID);
+
+               switch (m->cur_ctxpopup) {
+               case CTXPOPUP_ZOOM:
+                       m_HandleZoomFunction(btn_id);
+                       break;
+               case CTXPOPUP_SPEED:
+                       m_HandleSpeedFunction(btn_id);
+                       break;
+               default:
+                       break;
+               }
+
+               break;
+               if (m->cur_ctxpopup == CTXPOPUP_ZOOM)
+       default:
+               break;
+       }
+}
+
+void CPhotoViewerView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case PHOTOVIEWER_BTN:
+       case PHOTOVIEWER_CTXPOPUP:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+               break;
+       default:
+               break;
+       }
+}
+
+void CPhotoViewerView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case PHOTOVIEWER_BTN:
+               if (m->focusedbtn != obj) {
+
+                       if (m->focusedbtn)
+                               elm_object_tooltip_hide(m->focusedbtn);
+
+                       elm_object_tooltip_show(obj);
+
+                       m->focusedbtn = obj;
+               }
+
+               if (m->tooltip_timer)
+                       ecore_timer_reset(m->tooltip_timer);
+               else {
+                       m->tooltip_timer = ecore_timer_add(TIMEOUT_TOOLTIP,
+                                               sm_CbTimerTooltip, this);
+               }
+
+               break;
+       default:
+               break;
+       }
+}
+
+
index 66e3c4f..89bcdd6 100644 (file)
@@ -22,6 +22,7 @@
 #include "timeout_handler.h"
 #include "mediadata.h"
 #include "AppCommon.h"
+#include "InputHandler.h"
 #include "BaseView.h"
 #include "ViewMgr.h"
 #include "zoom_view.h"
 #define IMAGE_ZOOM_NAVI_IMG_BORDER IMAGEDIR"/zoom_navigator_border.png"
 
 
+enum EObjectType {
+       ZOOM_VIEW = 0,
+       ZOOM_ARROW,
+       ZOOM_NAVI,
+       ZOOM_NAVI_RECT
+};
+
 struct SPhotoZoomView {
        Evas_Object *eoWin;
        Evas_Object *eoBase;
@@ -70,90 +78,6 @@ struct SPhotoZoomView {
                Evas_Object *eoDown;
        }   arrow;
 
-       class CHandlerArrow : public CListenerMgr, IMouseClickedListener {
-       private:
-               SPhotoZoomView *m;
-
-       public:
-               CHandlerArrow(SPhotoZoomView *ins) : IMouseClickedListener(this) { m = ins; }
-
-               virtual void OnMouseClicked(int id, Evas_Object *obj) {
-                       int x, y, w, h;
-                       elm_photocam_image_region_get(m->eoPhotocam, &x, &y, &w, &h);
-
-                       if (m->arrow.eoLeft == obj) {
-                               elm_photocam_image_region_show(m->eoPhotocam, x - PHOTOCAM_MOVE_SIZE, y, w, h);
-                       }
-                       else if (m->arrow.eoRight == obj) {
-                               elm_photocam_image_region_show(m->eoPhotocam, x + PHOTOCAM_MOVE_SIZE, y, w, h);
-                       }
-                       else if (m->arrow.eoUp == obj) {
-                               elm_photocam_image_region_show(m->eoPhotocam, x, y - PHOTOCAM_MOVE_SIZE, w, h);
-                       }
-                       else if (m->arrow.eoDown == obj) {
-                               elm_photocam_image_region_show(m->eoPhotocam, x, y + PHOTOCAM_MOVE_SIZE, w, h);
-                       }
-               }
-       }  *pHandlerArrow;
-
-       class CHandlerZoomNavi : public CListenerMgr, IMouseMoveListener, IMouseUpListener, IMouseDownListener {
-       private:
-               SPhotoZoomView *m;
-
-       protected:
-               void t_MoveZoomNavi(Evas_Coord_Point coord)
-               {
-                       int x, y, w, h, w2, h2;
-                       int xr, yr, xp, yp, wp, hp;
-                       int width, height;
-
-                       evas_object_geometry_get(m->eoPhotocamNavi, &x, &y, &w, &h);
-                       evas_object_geometry_get(m->eoRect, NULL, NULL, &w2, &h2);
-
-                       elm_photocam_image_region_get(m->eoPhotocam, NULL, NULL, &wp, &hp);
-                       elm_photocam_image_size_get(m->eoPhotocam, &width, &height);
-
-                       xr = coord.x - (w2 / 2);
-                       yr = coord.y - (h2 / 2);
-
-                       if (xr < x)
-                               xp = 0;
-                       else if (xr > x + w - w2)
-                               xp = width - wp;
-                       else
-                               xp = (xr - x) / m->ratio;
-
-                       if (yr < y)
-                               yp = 0;
-                       else if (yr > y + h - h2)
-                               yp = height - h2;
-                       else
-                               yp = (yr - y) / m->ratio;
-
-                       elm_photocam_image_region_show(m->eoPhotocam, xp, yp, wp, hp);
-               }
-
-       public:
-               CHandlerZoomNavi(SPhotoZoomView *ins) : IMouseMoveListener(this),
-                       IMouseUpListener(this), IMouseDownListener(this) { m = ins; }
-
-               virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) {
-                       if (!m->drag)
-                               return;
-
-                       t_MoveZoomNavi(ev->cur.canvas);
-               }
-               virtual void OnMouseUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Up *ev) {
-                       m->drag = EINA_FALSE;
-               }
-               virtual void OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev) {
-                       t_MoveZoomNavi(ev->canvas);
-
-                       m->drag = EINA_TRUE;
-               }
-       } *pHandlerZoomNavi, *pHandlerRect;
-
-
        SPhotoZoomView() {
                eoWin = NULL;
                eoBase = NULL;
@@ -172,17 +96,8 @@ struct SPhotoZoomView {
 
                data = NULL;
                timer = NULL;
-
-               pHandlerArrow = new CHandlerArrow(this);
-               pHandlerZoomNavi = new CHandlerZoomNavi(this);
-               pHandlerRect = new CHandlerZoomNavi(this);
-       }
-       ~SPhotoZoomView() {
-               delete pHandlerArrow;
-               delete pHandlerZoomNavi;
-               delete pHandlerRect;
        }
-
+       ~SPhotoZoomView() {}
 };
 
 
@@ -217,7 +132,7 @@ Eina_Bool CPhotoZoomView::m_OnTimer(void)
        if (!m_MoveZoomNaviImg())
                return ECORE_CALLBACK_CANCEL;
 
-       t_GetZoomNaviRatio();
+       m_GetZoomNaviRatio();
        m_UpdateArrow();
        m_UpdateZoomNavi();
 
@@ -290,7 +205,7 @@ void CPhotoZoomView::m_UpdateZoomNavi(void)
        evas_object_move(m->eoRect, x_new, y_new);
 }
 
-void CPhotoZoomView::t_GetZoomNaviRatio(void)
+void CPhotoZoomView::m_GetZoomNaviRatio(void)
 {
        int width, width_navi;
 
@@ -327,6 +242,38 @@ bool CPhotoZoomView::m_MoveZoomNaviImg(void)
        return true;
 }
 
+void CPhotoZoomView::m_MoveZoomNavi(Evas_Coord_Point coord)
+{
+       int x, y, w, h, w2, h2;
+       int xr, yr, xp, yp, wp, hp;
+       int width, height;
+
+       evas_object_geometry_get(m->eoPhotocamNavi, &x, &y, &w, &h);
+       evas_object_geometry_get(m->eoRect, NULL, NULL, &w2, &h2);
+
+       elm_photocam_image_region_get(m->eoPhotocam, NULL, NULL, &wp, &hp);
+       elm_photocam_image_size_get(m->eoPhotocam, &width, &height);
+
+       xr = coord.x - (w2 / 2);
+       yr = coord.y - (h2 / 2);
+
+       if (xr < x)
+               xp = 0;
+       else if (xr > x + w - w2)
+               xp = width - wp;
+       else
+               xp = (xr - x) / m->ratio;
+
+       if (yr < y)
+               yp = 0;
+       else if (yr > y + h - h2)
+               yp = height - h2;
+       else
+               yp = (yr - y) / m->ratio;
+
+       elm_photocam_image_region_show(m->eoPhotocam, xp, yp, wp, hp);
+}
+
 bool CPhotoZoomView::m_DrawArrow(void)
 {
        m->arrow.eoUp = elm_image_add(m->eoBase);
@@ -334,7 +281,7 @@ bool CPhotoZoomView::m_DrawArrow(void)
                return false;
 
        elm_image_file_set(m->arrow.eoUp, IMAGE_UPARROW, NULL);
-       m->pHandlerArrow->Connect(m->arrow.eoUp); //evas_object_smart_callback_add(m->arrow.eoUp, SIG_CLICKED, _uparrow_clicked, m);
+       Connect(m->arrow.eoUp, ZOOM_ARROW, TYPE_CLICKED);
        elm_object_part_content_set(m->eoBase, PART_UPARROW, m->arrow.eoUp);
 
        m->arrow.eoDown = elm_image_add(m->eoBase);
@@ -342,7 +289,7 @@ bool CPhotoZoomView::m_DrawArrow(void)
                return false;
 
        elm_image_file_set(m->arrow.eoDown, IMAGE_DOWNARROW, NULL);
-       m->pHandlerArrow->Connect(m->arrow.eoDown); // evas_object_smart_callback_add(m->arrow.eoDown, SIG_CLICKED, _downarrow_clicked, m);
+       Connect(m->arrow.eoDown, ZOOM_ARROW, TYPE_CLICKED);
        elm_object_part_content_set(m->eoBase, PART_DOWNARROW, m->arrow.eoDown);
 
        m->arrow.eoLeft = elm_image_add(m->eoBase);
@@ -350,7 +297,7 @@ bool CPhotoZoomView::m_DrawArrow(void)
                return false;
 
        elm_image_file_set(m->arrow.eoLeft, IMAGE_LEFTARROW, NULL);
-       m->pHandlerArrow->Connect(m->arrow.eoLeft); // evas_object_smart_callback_add(m->arrow.eoLeft, SIG_CLICKED, _leftarrow_clicked, m);
+       Connect(m->arrow.eoLeft, ZOOM_ARROW, TYPE_CLICKED);
        elm_object_part_content_set(m->eoBase, PART_LEFTARROW, m->arrow.eoLeft);
 
        m->arrow.eoRight = elm_image_add(m->eoBase);
@@ -358,7 +305,7 @@ bool CPhotoZoomView::m_DrawArrow(void)
                return false;
 
        elm_image_file_set(m->arrow.eoRight, IMAGE_RIGHTARROW, NULL);
-       m->pHandlerArrow->Connect(m->arrow.eoRight); // evas_object_smart_callback_add(m->arrow.eoRight, SIG_CLICKED, _rightarrow_clicked, m);
+       Connect(m->arrow.eoRight, ZOOM_ARROW, TYPE_CLICKED);
        elm_object_part_content_set(m->eoBase, PART_RIGHTARROW, m->arrow.eoRight);
 
        return true;
@@ -397,16 +344,8 @@ bool CPhotoZoomView::m_DrawContent(void)
 
 void CPhotoZoomView::m_AddMouseEventCallback(void)
 {
-       m->pHandlerZoomNavi->Connect(m->eoPhotocamNavi);
-       //((IMouseMoveListener*)m->pHandlerZoomNavi)->Connect(m->eoPhotocamNavi); // evas_object_event_callback_add(m->eoPhotocamNavi, EVAS_CALLBACK_MOUSE_DOWN, _zoom_navi_mouse_down, m);
-       //((IMouseUpListener*)m->pHandlerZoomNavi)->Connect(m->eoPhotocamNavi);   // evas_object_event_callback_add(m->eoPhotocamNavi, EVAS_CALLBACK_MOUSE_UP, _zoom_navi_mouse_up, m);
-       //((IMouseDownListener*)m->pHandlerZoomNavi)->Connect(m->eoPhotocamNavi); // evas_object_event_callback_add(m->eoPhotocamNavi, EVAS_CALLBACK_MOUSE_MOVE, _zoom_navi_mouse_move, m);
-
-       m->pHandlerRect->Connect(m->eoRect);
-       //((IMouseMoveListener*)m->pHandlerRect)->Connect(m->eoRect); // evas_object_event_callback_add(m->eoRect, EVAS_CALLBACK_MOUSE_DOWN, _zoom_navi_mouse_down, m);
-       //((IMouseUpListener*)m->pHandlerRect)->Connect(m->eoRect);   // evas_object_event_callback_add(m->eoRect, EVAS_CALLBACK_MOUSE_UP, _zoom_navi_mouse_up, m);
-       //((IMouseDownListener*)m->pHandlerRect)->Connect(m->eoRect); // evas_object_event_callback_add(m->eoRect, EVAS_CALLBACK_MOUSE_MOVE, _zoom_navi_mouse_move, m);
-
+       Connect(m->eoPhotocamNavi, ZOOM_NAVI, TYPE_MOUSE_DOWN | TYPE_MOUSE_UP | TYPE_MOUSE_MOVE);
+       Connect(m->eoRect, ZOOM_NAVI_RECT, TYPE_MOUSE_DOWN | TYPE_MOUSE_UP | TYPE_MOUSE_MOVE);
 }
 
 bool CPhotoZoomView::m_DrawZoomNavi(void)
@@ -547,7 +486,7 @@ bool CPhotoZoomView::Create(void *data)
        if (!m->cTimeout.Create(TIMEOUT_PHOTOZOOM, this))
                goto error;
 
-       CListenerMgr::Connect(m->eoBase);  //evas_object_event_callback_add(m->eoBase, EVAS_CALLBACK_KEY_DOWN, _base_key_pressed, m);
+       Connect(m->eoBase, ZOOM_VIEW, TYPE_KEY_DOWN | TYPE_KEY_UP);
 
        CBaseView::Create(NULL);
 
@@ -588,7 +527,7 @@ Evas_Object* CPhotoZoomView::Base(void)
 }
 
 
-void CPhotoZoomView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+void CPhotoZoomView::m_ViewKeyDown(Evas_Event_Key_Down *ev)
 {
        int height, width;
 
@@ -641,18 +580,109 @@ void CPhotoZoomView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key
        m->prev_event = EVAS_CALLBACK_KEY_DOWN;
 }
 
+void CPhotoZoomView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case ZOOM_VIEW:
+               m_ViewKeyDown(ev);
+               break;
+       default:
+               break;
+       }
+}
+
 
 void CPhotoZoomView::OnKeyUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Up *ev)
 {
-       if (m->updated)
-               return;
+       switch (id) {
+       case ZOOM_VIEW:
+               if (m->updated)
+                       return;
 
-       m_UpdateArrow();
-       m_UpdateZoomNavi();
+               m_UpdateArrow();
+               m_UpdateZoomNavi();
+
+               m->prev_event = EVAS_CALLBACK_KEY_UP;
 
-       m->prev_event = EVAS_CALLBACK_KEY_UP;
+               break;
+       default:
+               break;
+       }
 }
 
+void CPhotoZoomView::OnMouseClicked(int id, Evas_Object *obj)
+{
+       switch (id) {
+       case ZOOM_ARROW:
+               int x, y, w, h;
+
+               elm_photocam_image_region_get(m->eoPhotocam, &x, &y, &w, &h);
+
+               if (m->arrow.eoLeft == obj) {
+                       elm_photocam_image_region_show(m->eoPhotocam,
+                                       x - PHOTOCAM_MOVE_SIZE, y, w, h);
+               }
+               else if (m->arrow.eoRight == obj) {
+                       elm_photocam_image_region_show(m->eoPhotocam,
+                                       x + PHOTOCAM_MOVE_SIZE, y, w, h);
+               }
+               else if (m->arrow.eoUp == obj) {
+                       elm_photocam_image_region_show(m->eoPhotocam,
+                                       x, y - PHOTOCAM_MOVE_SIZE, w, h);
+               }
+               else if (m->arrow.eoDown == obj) {
+                       elm_photocam_image_region_show(m->eoPhotocam,
+                                       x, y + PHOTOCAM_MOVE_SIZE, w, h);
+               }
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CPhotoZoomView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case ZOOM_NAVI:
+       case ZOOM_NAVI_RECT:
+               if (!m->drag)
+                       return;
+
+               m_MoveZoomNavi(ev->cur.canvas);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CPhotoZoomView::OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+       switch (id) {
+       case ZOOM_NAVI:
+       case ZOOM_NAVI_RECT:
+               m_MoveZoomNavi(ev->canvas);
+
+               m->drag = EINA_TRUE;
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CPhotoZoomView::OnMouseUp(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Up *ev)
+{
+       switch (id) {
+       case ZOOM_NAVI:
+       case ZOOM_NAVI_RECT:
+               m->drag = EINA_FALSE;
+               break;
+       default:
+               break;
+       }
+}
 
 void CPhotoZoomView::OnTimeout(void)
 {