#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;