select first view as gallery view or photoviewer view according to the parameter 66/35766/2
authorJehun Lim <jehun.lim@samsung.com>
Tue, 24 Feb 2015 10:28:59 +0000 (19:28 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Wed, 25 Feb 2015 02:23:41 +0000 (11:23 +0900)
Change-Id: I8a4c3537d3b60d2acf4d5250416a051fc1159721
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/data/mediadata.h
include/util/util.h
src/data/mediadata.cpp
src/main.cpp
src/util/util.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/photo-viewer/photoviewer_view.cpp

index e59d0f4..557a909 100644 (file)
@@ -19,7 +19,9 @@
 
 class CMediadata {
 private:
+       static CMediadata *instance;
        struct SMediadata *m;
+       static int g_ref_count;
 
 private:
        static bool sm_CbEachMediaInfo(media_info_h media_h, void *dt);
@@ -45,12 +47,17 @@ public:
        CMediadata() : m(0) {};
        ~CMediadata() {};
 
-       bool Create(void);
-       void Destroy(void);
+       static bool Initialize(void);
+       static void Finalize(void);
+
+       static CMediadata *GetInstance(void);
 
        bool CreateMediaList(int source_type, int media);
        void DestroyMediaList(void);
 
+       CMediaInfo *FindMediaInfo(Eina_List *media_list, const char *path);
+       Eina_List *CreateListforType(Eina_List *media_list, int type);
+
        Eina_List *MediaList(void);
        Eina_List *EventList(void);
        Eina_List *FolderList(void);
index f750437..9cfadde 100644 (file)
@@ -29,6 +29,5 @@ bool util_is_image_valid(Evas_Object *win, char *filepath);
 int util_get_media_count(Eina_List *list, int type);
 int util_eina_list_get_index(Eina_List *list, void *data);
 char *util_get_time_string(int ms);
-Eina_List *util_create_media_list(Eina_List *media_list, int type);
 
 #endif
index 7d36678..b29388d 100644 (file)
@@ -40,9 +40,11 @@ struct SMediadata {
        Eina_List *medialist;
        int media;
        int source_type;
-};
 
-static int g_ref_count;
+       SMediadata() {
+               memset(this, 0, sizeof(SMediadata));
+       }
+};
 
 enum {
        E_FILTER_TYPE_FOLDER = 0,
@@ -54,6 +56,9 @@ enum {
        E_TYPE_FOLDER_MEDIA
 };
 
+CMediadata *CMediadata::instance = NULL;
+int CMediadata::g_ref_count = 0;
+
 void CMediadata::m_DeleteFolderList(void)
 {
        CFolderInfo *finfo;
@@ -595,21 +600,24 @@ error:
        return false;
 }
 
-bool CMediadata::Create(void)
+bool CMediadata::Initialize(void)
 {
-       if (m)
-               return false;
-
        int ret;
 
-       m = new SMediadata();
-       if (!m) {
-               _ERR("m Create Failed");
+       if (g_ref_count > 0) {
+               g_ref_count++;
                return false;
        }
 
-       if (g_ref_count > 0) {
-               g_ref_count++;
+       instance = new CMediadata;
+       if (!instance)
+               return false;
+
+       instance->m = new SMediadata;
+       if (!instance->m) {
+               _ERR("Mediadata init failed");
+               delete instance;
+               instance = NULL;
                return false;
        }
 
@@ -624,9 +632,9 @@ bool CMediadata::Create(void)
        return true;
 }
 
-void CMediadata::Destroy(void)
+void CMediadata::Finalize(void)
 {
-       if (!m)
+       if (!instance || !instance->m)
                return;
 
        int ret;
@@ -637,17 +645,25 @@ void CMediadata::Destroy(void)
        g_ref_count--;
 
        if (g_ref_count == 0) {
-               m_DeleteFolderList();
-               m_DeleteEventList();
-               m_DeleteMediaList(E_TYPE_MEDIA);
-               m_DeleteMediaList(E_TYPE_FOLDER_MEDIA);
+               instance->m_DeleteFolderList();
+               instance->m_DeleteEventList();
+               instance->m_DeleteMediaList(E_TYPE_MEDIA);
+               instance->m_DeleteMediaList(E_TYPE_FOLDER_MEDIA);
 
                ret = media_content_disconnect();
                if (ret != MEDIA_CONTENT_ERROR_NONE)
                        _ERR("Media Content Connect Failed");
        }
 
-       delete m;
+       delete instance->m;
+
+       delete instance;
+       instance = NULL;
+}
+
+CMediadata *CMediadata::GetInstance()
+{
+       return instance;
 }
 
 bool CMediadata::CreateMediaList(int source_type, int media)
@@ -675,6 +691,46 @@ bool CMediadata::CreateMediaList(int source_type, int media)
        return true;
 }
 
+CMediaInfo *CMediadata::FindMediaInfo(Eina_List *media_list, const char *path)
+{
+       Eina_List *l;
+       CMediaInfo *minfo;
+       void *obj;
+
+       if (!media_list || !path)
+               return NULL;
+
+       minfo = NULL;
+       EINA_LIST_FOREACH(media_list, l, obj) {
+               minfo = (CMediaInfo *)obj;
+
+               if (!strcmp(minfo->Path(), path))
+                       return minfo;
+       }
+
+       return NULL;
+}
+
+Eina_List *CMediadata::CreateListforType(Eina_List *media_list, int type)
+{
+       Eina_List *l, *new_list;
+       CMediaInfo *minfo;
+       void *obj;
+
+       if (!media_list)
+               return NULL;
+
+       new_list = NULL;
+       EINA_LIST_FOREACH(media_list, l, obj) {
+               minfo = (CMediaInfo *)obj;
+
+               if (type == minfo->Type())
+                       new_list = eina_list_append(new_list, minfo);
+       }
+
+       return new_list;
+}
+
 Eina_List *CMediadata::MediaList(void)
 {
        if (!m)
index 3ca2a46..9e5bace 100644 (file)
@@ -22,6 +22,7 @@
 #include "menudef.h"
 #include "util.h"
 #include "i18n.h"
+#include "AppCommon.h"
 #include "BaseApp.h"
 #include "BaseView.h"
 #include "ViewMgr.h"
 #define MIME_IMAGE "image/*"
 #define MIME_VIDEO "video/*"
 
-class CApp : public CBaseApp {
-private:
+enum eViewType {
+       VIEW_ALL = 0,
+       VIEW_EVENT,
+       VIEW_FOLDER,
+       VIEW_PHOTO
+};
+
+struct SAppData {
+       const char *name;
+       Evas_Object *win;
+       Evas_Object *lbl;
 
-       struct _appdata {
-               const char *name;
-               Evas_Object *win;
-               Evas_Object *lbl;
+       bool is_app_control;
+       app_control_h app_control;
 
-               bool is_app_control;
+       int view;
+       int source;
+       int sort;
+       int media_type;
+       char *id;
+
+       SAppData() {
+               memset(this, 0, sizeof(SAppData));
+       }
+};
 
-               struct arg_list *arglist;
-       } ad;
+class CGalleryApp : public CBaseApp {
+private:
+       SAppData *m;
 
        CGalleryView *pGalleryView;
        CPhotoViewerView *pPhotoViewerView;
        CPhotoZoomView *pPhotoZoomView;
        CCtxtMenuView *pCtxtMenuView;
 
+       CViewMgr *pViewMgr;
+       CMediadata *pMediadata;
+
 private:
+       static void sm_CbPushView(void *cookie,
+                       CBaseView *pHideView, CBaseView *pShowView);
+       static void sm_CbPopview(void *cookie,
+                       const char *szDestroyViewId, CBaseView *pShowView);
 
-       static void sm_CbPushView(void *cookie, CBaseView *pHideView, CBaseView *pShowView)
-       {
-               const char *viewId = pShowView->ViewId();
+       void m_GetData(void);
 
-               if (strcmp(viewId, VIEW_CTXT_MENU) && pHideView) {
-                       if (pHideView->FlagCreate())
-                               pHideView->Hide();
-               }
+       bool m_DestroyView(void);
+
+       bool m_CreateGalleryView(void);
+       bool m_CreatePhotoViewerView(void);
+
+       Evas_Object *m_AddWin(const char *name);
+
+public:
+       CGalleryApp(void);
+       virtual ~CGalleryApp(void);
+
+       virtual bool OnCreate(void);
+       virtual void OnTerminate(void);
+       virtual void OnPause(void);
+       virtual void OnResume(void);
+       virtual void OnAppControl(app_control_h app_control);
+
+       virtual int Run(int argc, char **argv);
+};
+
+CGalleryApp::CGalleryApp(void)
+{
+       m = new SAppData;
+}
+
+CGalleryApp::~CGalleryApp(void)
+{
+       delete m;
+       m = NULL;
+}
+
+void CGalleryApp::sm_CbPushView(void *cookie,
+               CBaseView *pHideView, CBaseView *pShowView)
+{
+       const char *viewId = pShowView->ViewId();
+
+       if (strcmp(viewId, VIEW_CTXT_MENU) && pHideView) {
+               if (pHideView->FlagCreate())
+                       pHideView->Hide();
+       }
+}
+
+void CGalleryApp::m_GetData(void)
+{
+       char *view;
+       char *source;
+       char *sort;
+       char *id;
+       char *operation;
+       char *mime;
+       int r;
+
+       m->view = VIEW_ALL;
+       m->source = E_SOURCE_ALL;
+       m->sort = E_SORT_DATE_DESC;
+       m->media_type = E_MEDIA_IMAGE_VIDEO;
+
+       view = NULL;
+       r = app_control_get_extra_data(m->app_control, PARAM_VIEW, &view);
+       if (r == APP_CONTROL_ERROR_NONE && view) {
+               if (!strcmp(view, "photo"))
+                       m->view = VIEW_PHOTO;
+               else if (!strcmp(view, "folder"))
+                       m->view = VIEW_FOLDER;
+               else if (!strcmp(view, "events"))
+                       m->view = VIEW_EVENT;
+               else
+                       m->view = VIEW_ALL;
+
+               free(view);
        }
 
-protected:
+       source = NULL;
+       r = app_control_get_extra_data(m->app_control, PARAM_SOURCE, &source);
+       if (r == APP_CONTROL_ERROR_NONE && source) {
+               if (!strcmp(source, "usb"))
+                       m->source = E_SOURCE_USB;
+               else
+                       m->source = E_SOURCE_ALL;
 
-       void t_RemoveArglist(void)
-       {
-               if (ad.arglist) {
-                       free(ad.arglist->id);
-                       app_control_destroy(ad.arglist->app_control);
-                       free(ad.arglist);
-                       ad.arglist = NULL;
-               }
+               free(source);
        }
 
-       Evas_Object *t_AddWin(const char *name)
-       {
-               Evas_Object *win;
+       sort = NULL;
+       r = app_control_get_extra_data(m->app_control, PARAM_SORT, &sort);
+       if (r == APP_CONTROL_ERROR_NONE && sort) {
+               if (!strcmp(sort, "z_a"))
+                       m->sort = E_SORT_Z_A;
+               else if (!strcmp(sort, "a_z"))
+                       m->sort = E_SORT_A_Z;
+               else if (!strcmp(sort, "date_asc"))
+                       m->sort = E_SORT_DATE_ASC;
+               else
+                       m->sort = E_SORT_DATE_DESC;
+
+               free(sort);
+       }
 
-               win = elm_win_util_standard_add(name, NULL);
-               if (!win) {
-                       _ERR("elm_win_add failed");
-                       return NULL;
-               }
+       id = NULL;
+       r = app_control_get_extra_data(m->app_control, PARAM_ID, &id);
+       if (r != APP_CONTROL_ERROR_NONE || !id)
+               app_control_get_extra_data(m->app_control, PARAM_URI, &id);
+
+       m->id = id;
 
-               elm_win_title_set(win, GALLERY_WIN_TITLE);
+       operation = NULL;
+       mime = NULL;
+       app_control_get_operation(m->app_control, &operation);
+       if (operation && !strcasecmp(operation, APP_CONTROL_OPERATION_PICK)) {
+               app_control_get_mime(m->app_control, &mime);
 
-               evas_object_show(win);
+               if (mime) {
+                       if (!strcmp(mime, MIME_IMAGE))
+                               m->media_type = E_MEDIA_IMAGE;
+                       else if (!strcmp(mime, MIME_VIDEO))
+                               m->media_type = E_MEDIA_VIDEO;
 
-               return win;
+                       free(mime);
+               }
+               free(operation);
        }
+}
 
-public:
+Evas_Object *CGalleryApp::m_AddWin(const char *name)
+{
+       Evas_Object *win;
 
-       virtual bool OnCreate(void)
-       {
-               elm_theme_overlay_add(NULL, THEMEFILE);
-               elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK);
+       win = elm_win_util_standard_add(name, NULL);
+       if (!win) {
+               _ERR("elm_win_add failed");
+               return NULL;
+       }
 
-               ad.win = t_AddWin(ad.name);
-               if (!ad.win)
-                       return false;
+       elm_win_title_set(win, GALLERY_WIN_TITLE);
 
-               elm_win_focus_highlight_enabled_set(ad.win, EINA_TRUE);
-               elm_win_focus_highlight_style_set(ad.win, STYLE_INVISIBLE);
+       evas_object_show(win);
 
-               elm_need_ethumb();
+       return win;
+}
 
-               return true;
+bool CGalleryApp::m_DestroyView(void)
+{
+       while (!pViewMgr->CheckEmpty()) {
+               if (!pViewMgr->PopView())
+                       return false;
        }
 
-       virtual void OnTerminate(void)
-       {
-               CSortMgr::Finalize();
-               CViewMgr::Finalize();
+       return true;
+}
+
+bool CGalleryApp::m_CreateGalleryView(void)
+{
+       ASSERT(m);
+
+       struct arg_list *arg;
+
+       arg = (struct arg_list *)calloc(1, sizeof(*arg));
+       if (!arg) {
+               _ERR("arglist create failed");
+               return false;
+       }
 
-               delete pGalleryView;
-               delete pPhotoViewerView;
-               delete pPhotoZoomView;
-               delete pCtxtMenuView;
+       if (app_control_clone(&arg->app_control, m->app_control)
+                               != APP_CONTROL_ERROR_NONE) {
+               _ERR("app_control clone error");
+               return false;
+       }
 
-               t_RemoveArglist();
+       arg->view = m->view;
+       arg->source = m->source;
+       arg->sort = m->sort;
+       arg->media_type = m->media_type;
+       arg->id = m->id;
 
-               if (ad.win)
-                       evas_object_del(ad.win);
+       if (!pViewMgr->PushView(VIEW_GALLERY, arg)) {
+               _ERR("Gallery view push failed");
+               return false;
        }
 
-       virtual void OnPause(void)
-       {
-               _INFO("Gallery app is paused");
+       return true;
+}
+
+bool CGalleryApp::m_CreatePhotoViewerView(void)
+{
+       ASSERT(m);
+
+       struct view_data *vd;
 
-               CViewMgr::GetInstance()->Pause();
+       vd = (struct view_data *)calloc(1, sizeof(*vd));
+       if (!vd) {
+               _ERR("view data create failed");
+               return false;
        }
 
-       virtual void OnResume(void)
-       {
-               _INFO("Gallery app is Resumed");
+       pMediadata->DestroyMediaList();
+       pMediadata->CreateMediaList(m->source, m->media_type);
 
-               CViewMgr::GetInstance()->Resume();
+       vd->minfo = pMediadata->FindMediaInfo(pMediadata->MediaList(), m->id);
+       vd->media_list = pMediadata->CreateListforType(
+                               pMediadata->MediaList(), vd->minfo->Type());
+
+       if (!pViewMgr->PushView(VIEW_PHOTO_VIEWER, vd)) {
+               _ERR("Photoviewer view push failed");
+               return false;
        }
 
-       virtual void OnAppControl(app_control_h app_control)
-       {
-               char *val;
-               char *id = NULL;
-               char *view = NULL;
-               char *operation = NULL;
-               char *mime = NULL;
-               int r;
-               int view_val = 0, source = 0, sort = 0;
-               int media_type = E_MEDIA_IMAGE_VIDEO;
-               CViewMgr *vmgr;
-
-               if (ad.is_app_control) {
-                       elm_win_activate(ad.win);
-                       CViewMgr::Finalize();
-               }
+       return true;
+}
 
-               if (ad.arglist && ad.arglist->app_control) {
-                       app_control_destroy(ad.arglist->app_control);
-                       ad.arglist->app_control = NULL;
-               }
+bool CGalleryApp::OnCreate(void)
+{
+       ASSERT(m);
 
-               r = app_control_get_extra_data(app_control, PARAM_VIEW, &view);
-               if (r == APP_CONTROL_ERROR_NONE && view) {
-                       if (!strcmp(view, "folder"))
-                               view_val = 2;
-                       else if (!strcmp(view, "events"))
-                               view_val = 1;
-                       else
-                               view_val = 0;
+       elm_theme_overlay_add(NULL, THEMEFILE);
+       elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK);
 
-                       free(view);
-               }
+       m->win = m_AddWin(m->name);
+       if (!m->win)
+               return false;
 
-               r = app_control_get_extra_data(app_control, PARAM_SOURCE, &val);
-               if (r == APP_CONTROL_ERROR_NONE && val) {
-                       if (!strcmp(val, "usb"))
-                               source = 1;
-                       else
-                               source = 0;
+       elm_win_focus_highlight_enabled_set(m->win, EINA_TRUE);
+       elm_win_focus_highlight_style_set(m->win, STYLE_INVISIBLE);
 
-                       free(val);
-               }
+       elm_need_ethumb();
 
-               r = app_control_get_extra_data(app_control, PARAM_SORT, &val);
-               if (r == APP_CONTROL_ERROR_NONE && val) {
-                       if (!strcmp(val, "z_a"))
-                               sort = 3;
-                       else if (!strcmp(val, "a_z"))
-                               sort = 2;
-                       else if (!strcmp(val, "date_asc"))
-                               sort = 1;
-                       else
-                               sort = 0;
-
-                       free(val);
-               }
+       CViewMgr::Initialize(m->win, NULL);
+       pViewMgr = CViewMgr::GetInstance();
+       if (!pViewMgr) {
+               _ERR("ViewMgr initialization failed");
+               return false;
+       }
 
-               r = app_control_get_extra_data(app_control, PARAM_ID, &id);
-               if (r != APP_CONTROL_ERROR_NONE || !id)
-                       app_control_get_extra_data(app_control, PARAM_URI, &id);
+       pGalleryView = new CGalleryView(VIEW_GALLERY);
+       pPhotoViewerView = new CPhotoViewerView(VIEW_PHOTO_VIEWER);
+       pPhotoZoomView = new CPhotoZoomView(VIEW_PHOTO_ZOOM);
+       pCtxtMenuView = new CCtxtMenuView(VIEW_CTXT_MENU);
+
+       pViewMgr->AddView(pGalleryView);
+       pViewMgr->AddView(pPhotoViewerView);
+       pViewMgr->AddView(pPhotoZoomView);
+       pViewMgr->AddView(pCtxtMenuView);
+
+       CViewMgr::SCallback cb;
+       cb.cookie = this;
+       cb.cbPushView = sm_CbPushView;
+       cb.cbPopView = NULL;
+       pViewMgr->AddCallback(&cb);
+
+       CSortMgr::Initialize();
+
+       CMediadata::Initialize();
+       pMediadata = CMediadata::GetInstance();
+       if (!pMediadata) {
+               _ERR("Mediadata initialization failed");
+               return false;
+       }
 
-               app_control_get_operation(app_control, &operation);
+       return true;
+}
 
-               if (operation && !strcasecmp(
-                               operation, APP_CONTROL_OPERATION_PICK)) {
-                       app_control_get_mime(app_control, &mime);
+void CGalleryApp::OnTerminate(void)
+{
+       ASSERT(m);
 
-                       if (mime) {
-                               if (!strcmp(mime, MIME_IMAGE))
-                                       media_type = E_MEDIA_IMAGE;
-                               else if (!strcmp(mime, MIME_VIDEO))
-                                       media_type = E_MEDIA_VIDEO;
-                               free(mime);
-                       }
-                       free(operation);
-               }
+       CSortMgr::Finalize();
+       CViewMgr::Finalize();
 
-               ad.arglist = (struct arg_list *)calloc(
-                                       1, sizeof(struct arg_list));
-               if (!ad.arglist) {
-                       _ERR("arglist create failed");
-                       elm_exit();
-               }
+       delete pGalleryView;
+       delete pPhotoViewerView;
+       delete pPhotoZoomView;
+       delete pCtxtMenuView;
 
-               if (app_control_clone(&ad.arglist->app_control, app_control)
-                                       != APP_CONTROL_ERROR_NONE) {
-                       _ERR("app_control clone error");
-                       elm_exit();
-               }
+       if (m->win)
+               evas_object_del(m->win);
+}
 
-               ad.arglist->view = view_val;
-               ad.arglist->id = id;
-               ad.arglist->source= source;
-               ad.arglist->sort = sort;
-               ad.arglist->media_type = media_type;
+void CGalleryApp::OnPause(void)
+{
+       ASSERT(m);
 
-               CViewMgr::Initialize(ad.win, NULL);
-               vmgr = CViewMgr::GetInstance();
-               if (!vmgr) {
-                       _ERR("ViewMgr initialization failed");
-                       elm_exit();
-               }
+       _INFO("Gallery app is paused");
+
+       pViewMgr->Pause();
+}
+
+void CGalleryApp::OnResume(void)
+{
+       ASSERT(m);
+
+       _INFO("Gallery app is Resumed");
+
+       pViewMgr->Resume();
+}
 
-               CSortMgr::Initialize();
+void CGalleryApp::OnAppControl(app_control_h app_control)
+{
+       ASSERT(m);
 
-               pGalleryView = new CGalleryView(VIEW_GALLERY);
-               pPhotoViewerView = new CPhotoViewerView(VIEW_PHOTO_VIEWER);
-               pPhotoZoomView = new CPhotoZoomView(VIEW_PHOTO_ZOOM);
-               pCtxtMenuView = new CCtxtMenuView(VIEW_CTXT_MENU);
+       int r;
 
-               vmgr->AddView(pGalleryView);
-               vmgr->AddView(pPhotoViewerView);
-               vmgr->AddView(pPhotoZoomView);
-               vmgr->AddView(pCtxtMenuView);
+       if (m->is_app_control)
+               elm_win_activate(m->win);
 
-               CViewMgr::SCallback cb;
-               cb.cookie = this;
-               cb.cbPushView = sm_CbPushView;
-               cb.cbPopView = NULL;
-               vmgr->AddCallback(&cb);
+       if (m->app_control) {
+               app_control_destroy(m->app_control);
+               m->app_control = NULL;
+       }
 
-               if (!vmgr->PushView(VIEW_GALLERY, ad.arglist)) {
-                       _ERR("ViewMgr push failed");
+       if (app_control_clone(&m->app_control, app_control)
+                               != APP_CONTROL_ERROR_NONE) {
+               _ERR("app_control clone error");
+               elm_exit();
+       }
+
+       m_GetData();
+
+       r = true;
+       if (m->id) {
+               if (!m_DestroyView()) {
+                       _ERR("Destroy view failed");
                        elm_exit();
                }
 
-               ad.is_app_control = 1;
+               if (m->view == VIEW_ALL)
+                       r = m_CreatePhotoViewerView();
+               else
+                       r = m_CreateGalleryView();
+       } else {
+               if (pViewMgr->CheckEmpty())
+                       r = m_CreateGalleryView();
+       }
 
-               return;
+       if (!r) {
+               _ERR("Create view failed");
+               elm_exit();
        }
 
-public:
+       m->is_app_control = 1;
+}
 
-       virtual int Run(int argc, char **argv) {
-               memset(&ad, 0x00, sizeof(_appdata));
-               ad.name = PACKAGE;
+int CGalleryApp::Run(int argc, char **argv)
+{
+       ASSERT(m);
 
-               return CBaseApp::Run(argc, argv);
-       }
-};
+       m->name = PACKAGE;
+
+       return CBaseApp::Run(argc, argv);
+}
 
 int main(int argc, char **argv)
 {
-       CApp app;
+       CGalleryApp app;
        app.Run(argc, argv);
 
        return 0;
index a64439d..8e86a5d 100644 (file)
@@ -178,23 +178,3 @@ char *util_get_time_string(int ms)
 
        return strdup(buf);
 }
-
-Eina_List *util_create_media_list(Eina_List *media_list, int type)
-{
-       Eina_List *l, *new_list;
-       CMediaInfo *minfo;
-       void *obj;
-
-       if (!media_list)
-               return NULL;
-
-       new_list = NULL;
-       EINA_LIST_FOREACH(media_list, l, obj) {
-               minfo = (CMediaInfo *)obj;
-
-               if (type == minfo->Type())
-                       new_list = eina_list_append(new_list, minfo);
-       }
-
-       return new_list;
-}
index c284bd5..1648fde 100644 (file)
@@ -70,6 +70,8 @@ struct SCtxtMenuView {
 
        struct view_data *vd;
 
+       CMediadata *pMediadata;
+
        SCtxtMenuView() {
                win = NULL;
                base = NULL;
@@ -309,7 +311,8 @@ void CCtxtMenuView::m_OnGridActivated(Elm_Object_Item *it,
        if (!vd)
                return;
 
-       vd->media_list = util_create_media_list(m->vd->media_list, type);
+       vd->media_list = m->pMediadata->CreateListforType(
+                               m->vd->media_list, type);
        vd->minfo = minfo;
 
        if (type == MEDIA_VIDEO)
@@ -338,7 +341,8 @@ void CCtxtMenuView::m_SlideshowBtnSelected(void)
        if (!vd)
                return;
 
-       vd->media_list = util_create_media_list(m->vd->media_list, MEDIA_IMAGE);
+       vd->media_list = m->pMediadata->CreateListforType(
+                               m->vd->media_list, MEDIA_IMAGE);
        vd->minfo = minfo;
 
        CViewMgr::GetInstance()->PushView(VIEW_PHOTO_VIEWER, vd);
@@ -357,8 +361,8 @@ void CCtxtMenuView::m_PlayBtnSelected(void)
        if (!vd)
                return;
 
-       vd->media_list = util_create_media_list(
-               m->vd->media_list, MEDIA_VIDEO);
+       vd->media_list = m->pMediadata->CreateListforType(
+                               m->vd->media_list, MEDIA_VIDEO);
        vd->minfo = minfo;
 
        video_player_play(vd);
@@ -803,6 +807,10 @@ bool CCtxtMenuView::Create(void* d)
 
        elm_layout_file_set(m->base, EDJEFILE, GRP_CTXT_MENU);
 
+       m->pMediadata = CMediadata::GetInstance();
+       if (!m->pMediadata)
+               goto err;
+
        m->win = win;
        m->vd = data;
 
index f93c61d..77c3c22 100644 (file)
@@ -89,6 +89,7 @@ struct SGalleryView {
        CEventLayout *pEventLayout;
        CFolderLayout *pFolderLayout;
 
+       CViewMgr *pViewMgr;
        CMediadata *pMediadata;
 
        CCtxPopup *pCtxPopup;
@@ -647,14 +648,16 @@ bool CGalleryView::Create(void *data)
 
        m->pLayoutMgr->RegisterCallback(CLayoutMgr::CONDITION_LAYOUT_SHOW_NOTIFY, sm_CbLayoutShown, m);
 
-       m->pMediadata = new CMediadata;
-       if (!m->pMediadata->Create())
+       if (!elm_layout_file_set(m->base, EDJEFILE, GRP_GALLERY_VIEW))
                goto error;
 
-       if (!elm_layout_file_set(m->base, EDJEFILE, GRP_GALLERY_VIEW)) {
-               m->pMediadata->Destroy();
+       m->pViewMgr = CViewMgr::GetInstance();
+       if (!m->pViewMgr)
+               goto error;
+
+       m->pMediadata = CMediadata::GetInstance();
+       if (!m->pMediadata)
                goto error;
-       }
 
        m->win = win;
        m->arglist = (struct arg_list *)data;
@@ -670,10 +673,8 @@ bool CGalleryView::Create(void *data)
        if (!CUsbConnectionListener::Create())
                goto error;
 
-       if (!m_DrawItems()) {
-               m->pMediadata->Destroy();
+       if (!m_DrawItems())
                goto error;
-       }
 
        CBaseView::Create(NULL);
 
@@ -699,16 +700,21 @@ void CGalleryView::Destroy(void)
 
        m->pMediadata->DestroyMediaList();
 
-       m->pMediadata->Destroy();
-
        m->pLayoutMgr->RemoveLayout(m->pAllLayout);
        m->pLayoutMgr->RemoveLayout(m->pEventLayout);
        m->pLayoutMgr->RemoveLayout(m->pFolderLayout);
 
+       if (m->arglist) {
+               free(m->arglist->id);
+               app_control_destroy(m->arglist->app_control);
+               free(m->arglist);
+               m->arglist = NULL;
+       }
+
        if (m->ld) {
-               if (m->ld->path)
-                       free(m->ld->path);
+               free(m->ld->path);
                free(m->ld);
+               m->ld = NULL;
        }
 
        evas_object_del(m->base);
@@ -785,7 +791,9 @@ void CGalleryView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_D
                        m->focused_btn = obj;
                        m->focus_area = FOCUS_CONTENT_AREA;
                } else if (strcmp(ev->keyname, KEY_BACK) == 0) {
-                       elm_exit();
+                       m->pViewMgr->PopView();
+                       if (CViewMgr::GetInstance()->CheckEmpty())
+                               elm_exit();
                }
                break;
        case GALLERY_SORTBTN:
@@ -901,8 +909,6 @@ void CGalleryView::OnConnect(void)
 
 void CGalleryView::OnUpdated(const SEntity *entity)
 {
-       CViewMgr *vmgr;
-
        if (m->source_type == E_SOURCE_TV)
                return;
 
@@ -918,15 +924,11 @@ void CGalleryView::OnUpdated(const SEntity *entity)
                        return;
        }
 
-       vmgr = CViewMgr::GetInstance();
-       if (!vmgr)
-               return;
-
-       if (vmgr->CheckTop(VIEW_PHOTO_VIEWER))
-               vmgr->PopView();
-       else if (vmgr->CheckTop(VIEW_PHOTO_ZOOM)) {
-               vmgr->PopView();
-               vmgr->PopView();
+       if (m->pViewMgr->CheckTop(VIEW_PHOTO_VIEWER))
+               m->pViewMgr->PopView();
+       else if (m->pViewMgr->CheckTop(VIEW_PHOTO_ZOOM)) {
+               m->pViewMgr->PopView();
+               m->pViewMgr->PopView();
        }
 
        if (m->pCtxPopup) {
index 87f772c..0646e4f 100644 (file)
@@ -251,6 +251,7 @@ void CAllLayout::sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
 void CAllLayout::m_OnGridActivated(Elm_Object_Item *it,
                const char *emission, const char *source)
 {
+       CMediadata *pMediadata;
        CMediaInfo *minfo;
        struct view_data *vd;
        int type;
@@ -272,7 +273,11 @@ void CAllLayout::m_OnGridActivated(Elm_Object_Item *it,
                if (!vd)
                        return;
 
-               vd->media_list = util_create_media_list(m->media_list, type);
+               pMediadata = CMediadata::GetInstance();
+               if (!pMediadata)
+                       return;
+
+               vd->media_list = pMediadata->CreateListforType(m->media_list, type);
                vd->minfo = minfo;
 
                if (type == MEDIA_VIDEO)
index 27d74a5..850167b 100644 (file)
@@ -252,6 +252,7 @@ void CEventLayout::sm_CbGridActivated(void *cookie, Elm_Object_Item *it,
 void CEventLayout::m_OnGridActivated(Elm_Object_Item *it,
                const char *emission, const char *source)
 {
+       CMediadata *pMediadata;
        CMediaInfo *minfo;
        CEventInfo *einfo;
        int type;
@@ -276,7 +277,11 @@ void CEventLayout::m_OnGridActivated(Elm_Object_Item *it,
                if (!vd)
                        return;
 
-               vd->media_list = util_create_media_list(m->media_list, type);
+               pMediadata = CMediadata::GetInstance();
+               if (!pMediadata)
+                       return;
+
+               vd->media_list = pMediadata->CreateListforType(m->media_list, type);
                vd->minfo = minfo;
 
                if (type == MEDIA_VIDEO)
index 9f46084..d490117 100644 (file)
@@ -86,6 +86,8 @@ struct SPhotoViewerView {
 
        Ecore_Timer *focus_timer;
 
+       CViewMgr *pViewMgr;
+
        SPhotoViewerView() {
                win = NULL;
                base = NULL;
@@ -209,8 +211,7 @@ void CPhotoViewerView::m_OnSlideshowBtnClicked(Evas_Object *obj, const char *emi
                        m->slideshow_timer = ecore_timer_add(slideshow_timeout[m->slideshow_speed], sm_CbTimerSlideshow, this);
                }
                m->slideshow_state = STATE_PLAY;
-       }
-       else {
+       } else {
 
                if (m->slideshow_timer) {
                        ecore_timer_del(m->slideshow_timer);
@@ -675,6 +676,11 @@ bool CPhotoViewerView::Create(void *data)
                m = NULL;
                return false;
        }
+
+       m->pViewMgr = CViewMgr::GetInstance();
+       if (!m->pViewMgr)
+               goto error;
+
        if (!elm_layout_file_set(m->base, EDJEFILE, GRP_PHOTO_VIEWER))
                goto error;
 
@@ -836,33 +842,27 @@ Eina_Bool CPhotoViewerView::OnEvent(int type, void *event_info)
                if (!strcmp(ev->keyname, KEY_LEFT)) {
                        sm_CbPrevBtnClicked(this, NULL, NULL, NULL);
                        return EINA_FALSE;
-               }
-               else if (!strcmp(ev->keyname, KEY_RIGHT)) {
+               } else if (!strcmp(ev->keyname, KEY_RIGHT)) {
                        sm_CbNextBtnClicked(this, NULL, NULL, NULL);
                        return EINA_FALSE;
-               }
-               else if (!strcmp(ev->keyname, KEY_ENTER)) {
+               } else if (!strcmp(ev->keyname, KEY_ENTER)) {
                        if (m->slideshow_state == STATE_PLAY)
                                return EINA_FALSE;
 
                        elm_object_signal_emit(m->base, SIG_SHOW, "");
-               }
-               else if (!strcmp(ev->keyname, KEY_BACK)) {
+               } else if (!strcmp(ev->keyname, KEY_BACK)) {
                        if (m->slideshow_state == STATE_PLAY)
                                OnMouseClicked(PHOTOVIEWER_BTN, m->btn[SLIDESHOW_BTN_IDX]);
 
                        elm_object_signal_emit(m->base, SIG_SHOW, "");
 
-               }
-               else if (!strcmp(ev->keyname, KEY_MENU)) {
-                       CViewMgr::GetInstance()->PushView(VIEW_CTXT_MENU, m->vd);
+               } else if (!strcmp(ev->keyname, KEY_MENU)) {
+                       m->pViewMgr->PushView(VIEW_CTXT_MENU, m->vd);
                        t_OnPause();
                        return EINA_FALSE;
-               }
-               else
+               } else
                        return EINA_FALSE;
-       }
-       else {
+       } else {
                if (m->slideshow_state == STATE_PLAY)
                        OnMouseClicked(PHOTOVIEWER_BTN, m->btn[SLIDESHOW_BTN_IDX]);
 
@@ -876,10 +876,12 @@ void CPhotoViewerView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_K
 {
        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);
+               if (!strcmp(ev->keyname, KEY_BACK)) {
+                       m->pViewMgr->PopView();
+                       if (CViewMgr::GetInstance()->CheckEmpty())
+                               elm_exit();
+               } else if (!strcmp(ev->keyname, KEY_MENU)) {
+                       m->pViewMgr->PushView(VIEW_CTXT_MENU, m->vd);
                        t_OnPause();
                }