summaryrefslogtreecommitdiff
path: root/main/src/view/ivug-main-view.c
diff options
context:
space:
mode:
authorKim Kibum <kb0929.kim@samsung.com>2012-06-08 14:54:16 +0900
committerKim Kibum <kb0929.kim@samsung.com>2012-06-08 14:54:16 +0900
commit8b42d4bb33943903b7160bb963bf7e7c6824e9ef (patch)
tree021a596daee9f7e379b8914aad343a2342528e47 /main/src/view/ivug-main-view.c
parent7164c202e81bc53033dce636367d92b93265b915 (diff)
downloadug-image-viewer-efl-8b42d4bb33943903b7160bb963bf7e7c6824e9ef.tar.gz
ug-image-viewer-efl-8b42d4bb33943903b7160bb963bf7e7c6824e9ef.tar.bz2
ug-image-viewer-efl-8b42d4bb33943903b7160bb963bf7e7c6824e9ef.zip
apply FSL(Flora Software License)
Diffstat (limited to 'main/src/view/ivug-main-view.c')
-rwxr-xr-xmain/src/view/ivug-main-view.c1837
1 files changed, 1837 insertions, 0 deletions
diff --git a/main/src/view/ivug-main-view.c b/main/src/view/ivug-main-view.c
new file mode 100755
index 0000000..75af879
--- /dev/null
+++ b/main/src/view/ivug-main-view.c
@@ -0,0 +1,1837 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <ui-gadget-module.h> // ug_destroy_me, ug_send_result
+#include <media-svc.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <utilX.h> // Key event
+
+#include "ivug-common.h"
+#include "ivug-parameter.h"
+
+#include "ivug-main-view.h"
+#include "ivug-util.h"
+#include "ivug-data.h"
+#include "ivug-ext-ug.h"
+#include "ivug-popup.h"
+#include "ivug-slider-item.h"
+#include "ivug-slider.h"
+#include "ivug-main.h"
+
+#include "ivug-setas-view.h"
+#include "ivug-details-view.h"
+
+#include "ivug-data.h"
+
+#define ELM_INTERNAL_API_ARGESFSDFEFC
+
+#include <elm_widget.h> // elm_selection_set
+#include <appsvc.h> // app service
+
+#undef HIDE_INDICATOR // For testing.
+
+#define CONTROL_ICON_DIRECTORY_PATH IMAGE_PATH"/01_Control icon"
+
+#define ICON_PATH_DELETE CONTROL_ICON_DIRECTORY_PATH"/T01_controlbar_icon_delete.png"
+#define ICON_PATH_SLIDESHOW CONTROL_ICON_DIRECTORY_PATH"/T01_controlbar_icon_slideshow.png"
+#define ICON_PATH_INFO CONTROL_ICON_DIRECTORY_PATH"/T01_controlbar_icon_info.png"
+
+#define ICON_PATH_OPTIONTRAY IMAGE_PATH"/T01_btn_optiontray.png"
+
+// EDJE
+#define IVUG_MAIN_EDJ EDJ_PATH"/ivug-main.edj"
+
+#define IVUG_RESPONSE_OK (1)
+
+#undef TEST_MOUSE_EVENT
+
+void
+_ivug_main_view_show_menu_bar(Ivug_MainView *pMainView);
+
+void
+_ivug_main_view_hide_menu_bar(Ivug_MainView *pMainView);
+
+static void
+_ivug_main_view_back_cb(void *data, Evas_Object *obj, void *event_info);
+
+Evas_Object *_create_tool_bar(Evas_Object *parent);
+
+static void
+_ivug_main_view_navibar_detail_cb(void *data, Evas_Object *obj, void *event_info);
+
+static void
+_ivug_main_view_navibar_detail_close_cb(void *data, Evas_Object *obj, void *event_info);
+
+static enum CTRL_BAR_TYPE
+_get_ctrl_bar_type(ivug_mode mode, Media_Type slide_type);
+static enum NAVI_BAR_TYPE
+_get_tool_bar_type(ivug_mode mode, Media_Type slide_type );
+
+#define IVUG_MAIN_DESTROY_ME(a) _ivug_main_view_destroy_me(a, __func__, __LINE__);
+
+static void
+_ivug_main_view_destroy_me(Ivug_MainView *pMainView, const char *fname, int nLine)
+{
+ ivug_ret_if(!pMainView);
+
+ MSG_MAIN_WARN("Main view request ug_destroy_me at [%s:%d]", fname, nLine);
+
+ int x = 0;
+ int y = 0;
+ int w = 0;
+ int h = 0;
+
+ MSG_MAIN_WARN("Apply event blocker");
+ pMainView->event_blocker = evas_object_rectangle_add(evas_object_evas_get(pMainView->layout));
+ evas_object_geometry_get(pMainView->layout, &x, &y, &w, &h);
+ evas_object_move(pMainView->event_blocker, x, y);
+ evas_object_resize(pMainView->event_blocker, w, h);
+ evas_object_color_set(pMainView->event_blocker, 0, 0, 0, 0);
+ evas_object_show(pMainView->event_blocker);
+
+ ug_destroy_me(pMainView->ugHandle);
+}
+
+static void
+_selection_info_deleted(void * data, Evas * e, Evas_Object * obj, void * event_info)
+{
+ ivug_retm_if(!data, "data is NULL");
+ MSG_MAIN_WARN("selection info deleted");
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ pMainView->selectioninfo = NULL;
+
+ return;
+}
+
+static inline void
+_main_view_create_selection_info(Ivug_MainView *pMainView, const char *string)
+{
+ IV_ASSERT(pMainView != NULL);
+ if(pMainView->selectioninfo)
+ {
+ evas_object_event_callback_del(pMainView->selectioninfo, EVAS_CALLBACK_DEL,
+ _selection_info_deleted);
+ evas_object_del(pMainView->selectioninfo);
+ pMainView->selectioninfo = NULL;
+ }
+ pMainView->selectioninfo = ivug_popup_selectioninfo(pMainView->layout, string);
+ ivug_retm_if(pMainView->selectioninfo == NULL, "selectioninfo is NULL");
+ evas_object_event_callback_add(pMainView->selectioninfo, EVAS_CALLBACK_DEL,
+ _selection_info_deleted, pMainView);
+}
+
+
+//copy popup
+static void
+_ivug_main_copy_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ int response_id = (int)event_info;
+ IV_ASSERT(data != NULL);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ MSG_MAIN_HIGH("Copy popup response : %d", response_id);
+
+ if (pMainView->copy_popup)
+ {
+ evas_object_del(pMainView->copy_popup);
+ pMainView->copy_popup = NULL;
+ }
+ else
+ {
+ MSG_MAIN_WARN("copy popup is NULL");
+ }
+}
+
+static void
+_ivug_main_copy_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ivug_ret_if(!data);
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ //get current file path.
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+
+ if (mdata == NULL)
+ {
+ MSG_MAIN_ERROR("slider data is NULL");
+ return;
+ }
+
+ char *path = NULL;
+ int len = 0;
+ // This Will add to the article
+ char buf[IVUG_MAX_FILE_PATH_LEN] = {0,};
+
+ path = mdata->filepath;
+ len = strlen(mdata->filepath)+strlen("file://")+1;
+ snprintf(buf, IVUG_MAX_FILE_PATH_LEN, "file://%s", mdata->filepath);
+
+ if (len < IVUG_MAX_FILE_PATH_LEN)
+ {
+ MSG_MAIN_HIGH("file path = %s, file url =%s", path, buf);
+ if ( pMainView->parent)
+ {
+ elm_cnp_selection_set(pMainView->layout, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_IMAGE, buf, sizeof(buf));
+ }
+ }
+ else
+ {
+ MSG_MAIN_ERROR("slider file path is too long");
+ }
+
+ evas_object_del(pMainView->copy_popup);
+ pMainView->copy_popup = NULL;
+}
+
+Evas_Object*
+_ivug_main_create_copy_popup_create(Ivug_MainView *pMainView, int x, int y)
+{
+ ivug_retv_if(!pMainView, NULL);
+
+ Evas_Object* ctx_popup = NULL;
+ ctx_popup = elm_ctxpopup_add(pMainView->layout);
+ elm_ctxpopup_item_append(ctx_popup, IDS_COPY, NULL, _ivug_main_copy_popup_selected_cb, pMainView);
+ evas_object_smart_callback_add( ctx_popup, "hide", _ivug_main_copy_popup_response_cb, pMainView);
+
+ //evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, ctxpopup);
+ evas_object_move(ctx_popup, x, y);
+
+ evas_object_show(ctx_popup);
+
+ return ctx_popup;
+}
+
+static void
+_ivug_main_view_navibar_detail_close_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ IV_ASSERT(data != NULL);
+
+ MSG_MAIN_HIGH("ENTER : Btn detail close clicked. obj=0x%08x data=0x%08x", obj, data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ IV_ASSERT( pMainView->navi_bar != NULL);
+
+ evas_object_smart_callback_del(obj, "clicked", _ivug_main_view_navibar_detail_close_cb);
+
+ elm_object_item_part_content_unset(pMainView->navi_it, "elm.swallow.detail");
+
+ MSG_MAIN_HIGH("Delete detail view");
+ ivug_details_view_destroy(pMainView->pDetailsView); // Delete detail view.
+ pMainView->pDetailsView = NULL;
+
+// Enable detail view button callback
+ evas_object_smart_callback_add(pMainView->btn_detail, "clicked", _ivug_main_view_navibar_detail_cb, pMainView->btn_detail_data);
+ elm_object_disabled_set(pMainView->btn_detail, EINA_FALSE);
+
+ Evas_Object *btn_close = elm_object_item_part_content_unset(pMainView->navi_it, "title_right_btn");
+ evas_object_del(btn_close);
+
+ MSG_MAIN_HIGH("LEAVE : Btn detail close clicked. obj=0x%08x data=0x%08x", obj, data);
+}
+
+static void _update_title(Ivug_MainView *pMainView)
+{
+ static char title[256];
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+
+ if (mdata == NULL)
+ {
+ MSG_MAIN_ERROR("slider data is NULL");
+ return;
+ }
+
+ if ( pMainView->mode == IVUG_MODE_NORMAL)
+ {
+ snprintf(title, sizeof(title), "%d/%d",
+ ivug_slider_get_current_slide_count(pMainView->slider),
+ ivug_slider_get_total_slide_count(pMainView->slider)); //get title.
+ }
+ else if(mdata->filepath != NULL)
+ {
+ const char* filename = ivug_get_filename(mdata->filepath);
+ if(filename)
+ {
+ snprintf(title, sizeof(title), "%s", filename);
+ }
+ }
+
+ IV_ASSERT(pMainView->navi_bar != NULL);
+
+ MSG_MAIN_HIGH("Update title : %s", title);
+
+ elm_object_item_text_set(pMainView->navi_it, title);
+
+}
+
+static void
+_ivug_main_view_navibar_detail_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("ENTER : Btn detail view clicked. obj=0x%08x data=0x%08x", obj, data);
+ ivug_ret_if(!obj||!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ if(pMainView->pDetailsView)
+ {
+ MSG_MAIN_ERROR("details view already created");
+ return;
+ }
+
+ pMainView->btn_detail_data = evas_object_smart_callback_del(obj, "clicked", _ivug_main_view_navibar_detail_cb);
+ pMainView->btn_detail = obj;
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+
+ if (mdata == NULL)
+ {
+ MSG_MAIN_ERROR("slider data is NULL");
+ return;
+ }
+
+ pMainView->pDetailsView = ivug_details_view_screen_create(pMainView->navi_bar, mdata, pMainView->view_by);
+
+ if(!pMainView->pDetailsView)
+ {
+ MSG_MAIN_ERROR("create details view failed");
+ return;
+ }
+
+ elm_object_item_part_content_set(pMainView->navi_it, "elm.swallow.detail", ivug_details_view_object_get(pMainView->pDetailsView));
+
+// Transition effect does not comming ocassionally when instant mode is used.
+// evas_object_smart_callback_add(pMainView->navi_bar, "transition,finished", _ivug_main_view_details_transit_finished_cb, pMainView);
+ PERF_CHECK_BEGIN(LVL1 "Update title");
+
+ _update_title(pMainView);
+
+ PERF_CHECK_END(LVL1 "Update title");
+
+ _ctrl_bar_type ctrlbar_type;
+ ctrlbar_type = _get_ctrl_bar_type(pMainView->mode, mdata->slide_type);
+ if(ctrlbar_type == CTRL_BAR_TYPE_FILE || ctrlbar_type == CTRL_BAR_TYPE_CAMERA_IMAGE
+ || ctrlbar_type == CTRL_BAR_TYPE_CAMERA_VIDEO)
+ {
+ MSG_MAIN_HIGH("Disable details button ");
+
+ /* Disable details button in controlbar */
+ if(pMainView->ctrl_bar_item[1])
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[1], EINA_TRUE);
+ }
+ else if(ctrlbar_type == CTRL_BAR_TYPE_IMAGE || ctrlbar_type == CTRL_BAR_TYPE_VIDEO)
+ {
+ /* Disable details button in controlbar */
+ if(pMainView->ctrl_bar_item[2])
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[2], EINA_TRUE);
+ }
+
+ MSG_MAIN_HIGH("LEAVE : Btn detail view clicked. obj=0x%08x data=0x%08x", obj, data);
+}
+
+#define ZOOM_LEVEL_STEP (0.7)
+#define ZOOM_LEVEL_MAX (3)
+
+static void _show_zoom_icon(void *data)
+{
+ ivug_ret_if(!data);
+
+ MSG_MAIN_ERROR("_show_zoom_icon");
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ if(!sitem)
+ {
+ MSG_MAIN_ERROR("sitem is NULL");
+ return;
+ }
+
+ if(sitem->zoom_level == 0)
+ {
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_out,disable","elm");
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_in,enable","elm");
+ }
+ else if(sitem->zoom_level == ZOOM_LEVEL_MAX)
+ {
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_in,disable","elm");
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_out,enable","elm");
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_out,enable","elm");
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_in,enable","elm");
+ }
+}
+
+static void
+_ivug_main_view_zoom_out_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ ivug_ret_if(!obj);
+ ivug_ret_if(!data);
+
+ MSG_MAIN_ERROR("_ivug_main_view_zoom_out_cb");
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ if(!sitem)
+ {
+ MSG_MAIN_ERROR("sitem is NULL");
+ return;
+ }
+
+ if(sitem->zoom_level == 0)
+ {
+ MSG_MAIN_ERROR("zoom_level is 0");
+ return;
+ }
+
+ double zoom = 0.0;
+ Evas_Coord ix = 0, iy= 0, iw= 0, ih= 0;
+
+ evas_object_geometry_get(sitem->photocam, &ix, &iy, &iw, &ih);
+
+ zoom = ivug_slider_item_zoom_get(sitem);
+ zoom /= ZOOM_LEVEL_STEP;
+ ivug_slider_item_zoom_set(sitem, zoom, iw/2, ih/2);
+
+ ivug_slider_item_hold_set(sitem, EINA_FALSE);
+
+ sitem->zoom_level--;
+
+ _show_zoom_icon(data);
+}
+
+static void
+_ivug_main_view_zoom_in_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ ivug_ret_if(!obj);
+ ivug_ret_if(!data);
+
+ MSG_MAIN_ERROR("_ivug_main_view_zoom_in_cb");
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ if(!sitem)
+ {
+ MSG_MAIN_ERROR("sitem is NULL");
+ return;
+ }
+
+ if(sitem->zoom_level > ZOOM_LEVEL_MAX)
+ {
+ MSG_MAIN_ERROR("zoom_level is %d", sitem->zoom_level);
+ return;
+ }
+
+ double zoom = 0.0;
+ Evas_Coord ix = 0, iy= 0, iw= 0, ih= 0;
+
+ evas_object_geometry_get(sitem->photocam, &ix, &iy, &iw, &ih);
+
+ zoom = ivug_slider_item_zoom_get(sitem);
+ zoom *= ZOOM_LEVEL_STEP;
+ ivug_slider_item_zoom_set(sitem, zoom, iw/2, ih/2);
+
+ ivug_slider_item_hold_set(sitem, EINA_FALSE);
+
+ sitem->zoom_level++;
+
+ _show_zoom_icon(data);
+}
+
+static void
+_ivug_main_view_update_details_item(Ivug_MainView *pMainView)
+{
+ ivug_retm_if(!pMainView, "pMainView is NULL");
+ ivug_retm_if(!pMainView->slider, "pMainView->slider is NULL");
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ if(!sitem)
+ {
+ MSG_MAIN_ERROR("sitem is NULL");
+ return;
+ }
+
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+ if(!mdata)
+ {
+ MSG_MAIN_ERROR("mdata is NULL");
+ return;
+ }
+
+ _ctrl_bar_type ctrlBarType;
+ ctrlBarType = _get_ctrl_bar_type(pMainView->mode, mdata->slide_type);
+ if(ctrlBarType == CTRL_BAR_TYPE_FILE || ctrlBarType == CTRL_BAR_TYPE_CAMERA_IMAGE ||
+ ctrlBarType == CTRL_BAR_TYPE_CAMERA_VIDEO)
+ {
+ /* Enable details button in control bar*/
+ if(pMainView->ctrl_bar_item[1])
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[1], EINA_FALSE);
+ }
+ else if(ctrlBarType == CTRL_BAR_TYPE_IMAGE || ctrlBarType == CTRL_BAR_TYPE_VIDEO)
+ {
+ /* Enable details button in control bar*/
+ if(pMainView->ctrl_bar_item[2])
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[2], EINA_FALSE);
+ }
+}
+
+static void
+_ivug_main_view_delete_photo_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ IVUG_FUNC_ENTER();
+ ivug_ret_if(!obj||!data||!event_info);
+
+ int response_id = (int)event_info;
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+ if ( response_id == POPUP_RESPONSE_OK )
+ {
+ MSG_MAIN_HIGH("Removing current slide.");
+
+ if(pMainView->pDetailsView)
+ {
+ MSG_MAIN_HIGH("Exit details view");
+ _ivug_main_view_navibar_detail_close_cb(pMainView, NULL, NULL);
+
+ _ivug_main_view_update_details_item(pMainView);
+ }
+
+ ivug_slider_delete_current_slide(pMainView->slider);
+ }
+
+ evas_object_del(obj); //delete popup
+
+}
+
+static void
+_ivug_main_view_ctrlbar_delete_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ IVUG_FUNC_ENTER();
+ ivug_ret_if(!obj||!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ ivug_popup_question(pMainView->layout, NULL,
+ IDS_DELETE_MSG, _ivug_main_view_delete_photo_cb, pMainView);
+
+ IVUG_FUNC_LEAVE();
+ return;
+}
+
+static void
+_ivug_main_view_ctrlbar_slide_show_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Start slide show");
+
+ IV_ASSERT(data != NULL);
+ ivug_ret_if(!event_info);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ Elm_Object_Item *ctrl_bar_item = (Elm_Object_Item *)event_info;
+
+ if(elm_object_item_disabled_get(ctrl_bar_item) == EINA_TRUE)
+ {
+ MSG_MAIN_WARN("Slide show already started");
+ return;
+ }
+
+ elm_object_item_disabled_set(ctrl_bar_item, EINA_TRUE);
+
+ if(pMainView->pDetailsView) {
+ MSG_MAIN_HIGH("Exit details view");
+ _ivug_main_view_navibar_detail_close_cb(pMainView, NULL, NULL);
+ }
+
+ ivug_prohibit_lcd_off();
+
+ _ivug_main_view_hide_menu_bar(pMainView);
+
+ ivug_slider_start_slide_show(pMainView->slider, EINA_TRUE);
+
+}
+
+
+static void
+_ivug_main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ivug_ret_if(!obj||!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+ ivug_retm_if(!pMainView->navi_bar, "%s", "navigation value is NULL");
+
+ MSG_MAIN_WARN("Back key pressed");
+
+ if( pMainView->pDetailsView == NULL) // Detail view is not showed,.
+ {
+ evas_object_smart_callback_del(pMainView->back_btn, "clicked", _ivug_main_view_back_cb);
+ IVUG_MAIN_DESTROY_ME(pMainView);
+ return;
+ }
+
+ /* Back from details view */
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ ivug_retm_if(!sitem, "sitem is NULL");
+
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+ ivug_retm_if(!mdata, "mdata is NULL");
+
+ _ctrl_bar_type ctrlBarType;
+ ctrlBarType = _get_ctrl_bar_type(pMainView->mode, mdata->slide_type);
+ if(ctrlBarType == CTRL_BAR_TYPE_FILE ||
+ ctrlBarType == CTRL_BAR_TYPE_CAMERA_IMAGE ||
+ ctrlBarType == CTRL_BAR_TYPE_CAMERA_VIDEO)
+ {
+ // In case that called by my file, camera, UG doest not removed.
+ _ivug_main_view_navibar_detail_close_cb(pMainView, NULL, NULL);
+
+ MSG_MAIN_HIGH("Enable details button");
+ if(pMainView->ctrl_bar_item[1])
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[1], EINA_FALSE);
+
+ return;
+ }
+ else if(ctrlBarType == CTRL_BAR_TYPE_IMAGE || ctrlBarType == CTRL_BAR_TYPE_VIDEO)
+ {
+ // In case that called by my file, camera, UG doest not removed.
+ _ivug_main_view_navibar_detail_close_cb(pMainView, NULL, NULL);
+
+ MSG_MAIN_HIGH("Enable details button");
+ if(pMainView->ctrl_bar_item[2])
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[2], EINA_FALSE);
+ }
+ else // otherwise, from gallery, ug will be terminated
+ {
+ evas_object_smart_callback_del(pMainView->back_btn, "clicked", _ivug_main_view_back_cb);
+ IVUG_MAIN_DESTROY_ME(pMainView);
+ return;
+ }
+}
+
+
+
+static void
+_send_result(struct ui_gadget *ug, bool selected)
+{
+//result bundle key
+#define IVUG_RESULT_BUNDLE_KEY_SELECTION_RESULT "Result"
+
+//result bundle value
+#define IVUG_RESULT_BUNDLE_VALUE_OK "Ok"
+#define IVUG_RESULT_BUNDLE_VALUE_CANCEL "Cancel"
+
+ ivug_ret_if(!ug);
+
+ bundle *b;
+ b = bundle_create();
+
+ if (selected)
+ {
+ bundle_add(b, IVUG_RESULT_BUNDLE_KEY_SELECTION_RESULT, IVUG_RESULT_BUNDLE_VALUE_OK);
+ }
+ else
+ {
+ bundle_add(b, IVUG_RESULT_BUNDLE_KEY_SELECTION_RESULT, IVUG_RESULT_BUNDLE_VALUE_CANCEL);
+ }
+
+ ug_send_result(ug, b);
+
+ bundle_free(b);
+}
+
+
+//select button
+void
+_ivug_main_view_select_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Select OK");
+ ivug_ret_if(!obj||!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ //send result.
+ _send_result(pMainView->ugHandle, true);
+
+ IVUG_MAIN_DESTROY_ME(pMainView);
+}
+
+void
+_ivug_main_view_select_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Select Cancel");
+
+ ivug_ret_if(!obj||!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ //send result.
+ _send_result(pMainView->ugHandle, false);
+
+ IVUG_MAIN_DESTROY_ME(pMainView);
+}
+
+
+static bool _is_mmc_inserted(void)
+{
+ int noti_message;
+ int ret = -1;
+
+ ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &noti_message);
+
+ if ( ret != 0 ) // falied
+ {
+ MSG_NOTI_ERROR("Get %s is failed", VCONFKEY_SYSMAN_MMC_STATUS);
+ return false;
+ }
+
+ if(noti_message==VCONFKEY_SYSMAN_MMC_MOUNTED)
+ {
+ return true;
+ }
+
+ return false;
+
+}
+
+static Eina_Bool _key_down_cb(void *user_data, int type, void *event)
+{
+ if (!user_data) {
+ MSG_IMAGEVIEW_ERROR("user data is NULL");
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ Ecore_Event_Key *key_event = (Ecore_Event_Key *) event;
+
+ Ivug_MainView *main_view = (Ivug_MainView *)user_data;
+
+ MSG_IMAGEVIEW_HIGH("Key down : %s", key_event->keyname);
+
+ if (!strcmp(key_event->keyname, KEY_END))
+ {
+ MSG_IMAGEVIEW_HIGH("Bakc(End) key");
+ }
+ else if (!strcmp(key_event->keyname, KEY_SELECT))
+ {
+ MSG_IMAGEVIEW_HIGH("Home key");
+ }
+ else if (!strcmp(key_event->keyname, KEY_POWER))
+ {
+ MSG_IMAGEVIEW_HIGH("Power key");
+ ivug_slider_stop_slide_show(main_view->slider);
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool _on_exit_timer_expired(void *data)
+{
+ ivug_retv_if(!data, ECORE_CALLBACK_CANCEL);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ pMainView->exit_timer = NULL;
+
+ IVUG_MAIN_DESTROY_ME(pMainView);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void _on_mmc_state_changed(keynode_t* node, void *data)
+{
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ if(_is_mmc_inserted() == false )
+ {
+ MSG_IMAGEVIEW_WARN("MMC Removed!. Request destroy UG=0x%08x", gGetUGHandle());
+
+ if ( pMainView->ext_ug )
+ {
+ MSG_IMAGEVIEW_HIGH("Extern UG is running");
+ }
+
+ ivug_show_popup(pMainView->layout, IDS_ERROR, IDS_SD_CARD_REMOVED, NULL, NULL);
+ pMainView->exit_timer = ecore_timer_add(0.2, _on_exit_timer_expired, data);
+ }
+}
+
+static enum NAVI_BAR_TYPE
+_get_tool_bar_type(ivug_mode mode, Media_Type slide_type )
+{
+ enum NAVI_BAR_TYPE tool_bar_type = NAVI_BAR_TYPE_NONE;
+
+ //calc navi bar style , temporary code.
+ static const char *szType[] = {
+ "[ INVALID ]",
+ "[ ]",
+ "[Set, Info]",
+ "[Ok, Cancel]",
+ };
+
+
+ switch (mode)
+ {
+ case IVUG_MODE_NORMAL:
+ tool_bar_type = NAVI_BAR_TYPE_EMPTY;
+ if (slide_type == SLIDE_TYPE_IMAGE)
+ {
+ tool_bar_type = NAVI_BAR_TYPE_IMAGE;
+ }
+ else if (slide_type == SLIDE_TYPE_VIDEO)
+ {
+ tool_bar_type = NAVI_BAR_TYPE_VIDEO;
+ }
+ else
+ {
+ tool_bar_type = NAVI_BAR_TYPE_EMPTY;
+ }
+ break;
+ case IVUG_MODE_SINGLE:
+ case IVUG_MODE_FILE:
+ tool_bar_type = NAVI_BAR_TYPE_EMPTY;
+
+ break;
+ case IVUG_MODE_DISPLAY:
+ tool_bar_type = NAVI_BAR_TYPE_SELECT;
+
+ break;
+ case IVUG_MODE_CAMERA:
+ tool_bar_type = NAVI_BAR_TYPE_EMPTY;
+ break;
+ default:
+ MSG_MAIN_ERROR("Unhandled mode : %d", mode);
+ tool_bar_type = NAVI_BAR_TYPE_EMPTY;
+
+ break;
+ }
+
+ MSG_MAIN_MED("Mode=%d Slide=%d ToolBar=%s", mode, slide_type, szType[tool_bar_type]);
+
+ return tool_bar_type;
+}
+
+
+static enum CTRL_BAR_TYPE
+_get_ctrl_bar_type(ivug_mode mode, Media_Type slide_type)
+{
+ // this is temporary code.
+ enum CTRL_BAR_TYPE type = CTRL_BAR_TYPE_FILE;
+
+ static const char *szType[] = {
+ "[ Invalid ]",
+ "[ None ]",
+ "[Delete,Info]",
+ "[Delete,Info]",
+ "[Delete,Info]",
+ "[Delete,Slide show]",
+ "[Delete,Slide show]",
+ };
+
+ switch (mode)
+ {
+ case IVUG_MODE_NORMAL:
+ if (slide_type == SLIDE_TYPE_IMAGE)
+ {
+ type = CTRL_BAR_TYPE_IMAGE;
+ }
+ else if (slide_type == SLIDE_TYPE_VIDEO)
+ {
+ type = CTRL_BAR_TYPE_VIDEO;
+ }
+ else if (slide_type == SLIDE_TYPE_UNKNOWN)
+ {
+ type = CTRL_BAR_TYPE_IMAGE; // TODO : Need to check. when web image is invalid????
+ }
+ else
+ {
+ MSG_MAIN_ERROR("Unhandled slide type : %d", slide_type);
+ type = CTRL_BAR_TYPE_FILE;
+ }
+ break;
+ case IVUG_MODE_SINGLE:
+ case IVUG_MODE_FILE:
+ type = CTRL_BAR_TYPE_FILE;
+ break;
+ case IVUG_MODE_CAMERA:
+ if (slide_type == SLIDE_TYPE_IMAGE)
+ {
+ type = CTRL_BAR_TYPE_CAMERA_IMAGE;
+ }
+ else if (slide_type == SLIDE_TYPE_VIDEO)
+ {
+ type = CTRL_BAR_TYPE_CAMERA_VIDEO;
+ }
+ else
+ {
+ MSG_MAIN_ERROR("Unhandled slide type : %d", slide_type);
+ type = CTRL_BAR_TYPE_FILE;
+ }
+ break;
+ case IVUG_MODE_DISPLAY:
+ type = CTRL_BAR_TYPE_EMPTY;
+ break;
+ default:
+ MSG_MAIN_ERROR("Unhandled mode : %d", mode);
+ type = CTRL_BAR_TYPE_FILE;
+ }
+
+ MSG_MAIN_MED("Mode=%d Slide=%d CtrlBar=%s", mode, slide_type, szType[type]);
+
+ return type;
+
+}
+
+Evas_Object *_create_ctrl_bar(Evas_Object *parent, Elm_Theme *th)
+{
+ Evas_Object *toolbar = elm_toolbar_add(parent);
+
+//create control bar
+ if (toolbar == NULL)
+ {
+ MSG_MAIN_ERROR("controlbar create failed");
+ return NULL;
+ }
+
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+
+#ifdef USE_CUSTOM_STYLE
+ elm_object_theme_set(toolbar, th);
+
+ char *ctrlStyle = NULL;
+
+ ctrlStyle = "ivug-toolbar/default";
+
+ Eina_Bool bstyle = elm_object_style_set(toolbar, ctrlStyle);
+ MSG_MAIN_HIGH("toolbar elm_object_style_set result = %d", bstyle);
+#endif
+
+ MSG_MAIN_HIGH("Create ctrl_bar. Obj=0x%08x", toolbar);
+
+ return toolbar;
+
+}
+
+void
+_update_tool_bar(Ivug_MainView *pMainView, enum NAVI_BAR_TYPE barType)
+{
+
+/*
+ |-------------------|
+ |naviframe(tool_bar)|
+ |-------------------|
+ | |
+ | |
+ | |
+ | |
+ |-------------------|
+ | ctrl_bar |
+ |-------------------|
+*/
+
+ MSG_MAIN_HIGH("Update tool_bar. Type=%d", barType);
+//remove old control bar item.
+ int i = 0;
+
+ for ( i = 0 ; i < MAX_NAVI_ITEM_CNT ; i ++)
+ {
+ if (pMainView->tool_bar_item[i])
+ {
+ evas_object_del(pMainView->tool_bar_item[i]);
+ pMainView->tool_bar_item[i] = NULL;
+ }
+ }
+
+ if ( barType != NAVI_BAR_TYPE_SELECT )
+ {
+ /* other type don't need toolbar */
+ return;
+ }
+
+ pMainView->tool_bar_item[0] = ivug_button_add(pMainView->navi_bar, "naviframe/title/default" , IDS_OK,
+ NULL, _ivug_main_view_select_ok_cb, pMainView );
+
+ pMainView->tool_bar_item[1] = ivug_button_add(pMainView->navi_bar, "naviframe/title/default" , IDS_CANCEL,
+ NULL, _ivug_main_view_select_cancel_cb, pMainView );
+
+ elm_object_item_part_content_set(pMainView->navi_it, "title_left_btn", pMainView->tool_bar_item[0]);
+ elm_object_item_part_content_set(pMainView->navi_it, "title_right_btn", pMainView->tool_bar_item[1]);
+
+ pMainView->option_show = EINA_TRUE;
+}
+
+
+
+void
+_update_ctrl_bar(Ivug_MainView *pMainView, enum CTRL_BAR_TYPE barType)
+{
+ MSG_MAIN_HIGH("Update ctrl_bar. barType=%d", barType);
+
+//remove old control bar item.
+ Evas_Object* ctrl_bar = pMainView->ctrl_bar;
+
+ int i = 0;
+
+ for ( i = 0 ; i < MAX_CTRL_ITEM_CNT ; i ++)
+ {
+ if (pMainView->ctrl_bar_item[i])
+ {
+ elm_object_item_del(pMainView->ctrl_bar_item[i]);
+ pMainView->ctrl_bar_item[i] = NULL;
+ }
+ }
+
+/*
+ IVUG_MODE_NORMAL =>
+ Depends on content
+ Image [Delete, Slide show, Detail] -> CTRL_BAR_TYPE_IMAGE
+ Video [Delete, Slide show, Detail] -> CTRL_BAR_TYPE_VIDEO
+
+ IVUG_MODE_SINGLE, IVUG_MODE_FILE, => CTRL_BAR_TYPE_FILE [Delete,Info]
+ IVUG_MODE_DISPLAY => CTRL_BAR_TYPE_EMPTY
+
+ if ((mode == IVUG_MODE_FILE) || (mode == IVUG_MODE_SINGLE))
+ barType == CTRL_BAR_TYPE_FILE
+
+*/
+ switch(barType)
+ {
+ case CTRL_BAR_TYPE_FILE:
+ pMainView->ctrl_bar_item[0] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_DELETE, NULL, _ivug_main_view_ctrlbar_delete_cb, pMainView);
+ pMainView->ctrl_bar_item[1] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_INFO, NULL, _ivug_main_view_navibar_detail_cb, pMainView);
+ break;
+
+ case CTRL_BAR_TYPE_CAMERA_IMAGE:
+ pMainView->ctrl_bar_item[0] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_DELETE, NULL, _ivug_main_view_ctrlbar_delete_cb, pMainView);
+ pMainView->ctrl_bar_item[1] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_INFO, NULL, _ivug_main_view_navibar_detail_cb, pMainView);
+ break;
+
+ case CTRL_BAR_TYPE_CAMERA_VIDEO:
+ pMainView->ctrl_bar_item[0] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_DELETE, NULL, _ivug_main_view_ctrlbar_delete_cb, pMainView);
+ pMainView->ctrl_bar_item[1] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_INFO, NULL, _ivug_main_view_navibar_detail_cb, pMainView);
+ break;
+
+ case CTRL_BAR_TYPE_IMAGE:
+ pMainView->ctrl_bar_item[0] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_DELETE, NULL, _ivug_main_view_ctrlbar_delete_cb, pMainView);
+ pMainView->ctrl_bar_item[1] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_SLIDESHOW, NULL, _ivug_main_view_ctrlbar_slide_show_cb, pMainView);
+ pMainView->ctrl_bar_item[2] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_INFO, NULL, _ivug_main_view_navibar_detail_cb, pMainView);
+ break;
+
+ case CTRL_BAR_TYPE_VIDEO:
+ pMainView->ctrl_bar_item[0] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_DELETE, NULL, _ivug_main_view_ctrlbar_delete_cb, pMainView);
+ pMainView->ctrl_bar_item[1] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_SLIDESHOW, NULL, _ivug_main_view_ctrlbar_slide_show_cb, pMainView);
+ pMainView->ctrl_bar_item[2] = elm_toolbar_item_append(ctrl_bar,
+ ICON_PATH_INFO, NULL, _ivug_main_view_navibar_detail_cb, pMainView);
+ break;
+
+ default:
+ MSG_MAIN_ERROR("Unhandled ctrl bar type=%d", barType);
+ break;
+ }
+
+}
+
+static void _update_main_view(Ivug_MainView *pMainView, Slide_Item *sitem)
+{
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+ if(mdata == NULL)
+ {
+ MSG_MAIN_ERROR("mdata is NULL");
+ return;
+ }
+
+ PERF_CHECK_BEGIN(LVL6 "Set menu title");
+
+ _update_title(pMainView);
+
+ PERF_CHECK_END(LVL6 "Set menu title");
+
+ if(pMainView->pDetailsView)
+ {
+ MSG_MAIN_ERROR("In details view, skip update toolbar/controlbar");
+ return;
+ }
+
+ enum CTRL_BAR_TYPE ctrlBarType;
+ enum NAVI_BAR_TYPE toolBarType;
+
+ ctrlBarType = _get_ctrl_bar_type(pMainView->mode, mdata->slide_type);
+ toolBarType = _get_tool_bar_type(pMainView->mode, mdata->slide_type);
+
+ if ( toolBarType != pMainView->tool_bar_type ) // when change toolbar Type
+ {
+ PERF_CHECK_BEGIN(LVL6 "add toolbar item");
+
+ MSG_MAIN_HIGH("ToolBar update. Old=%d Cur=%d", toolBarType , pMainView->tool_bar_type);
+ _update_tool_bar(pMainView, toolBarType);
+ pMainView->tool_bar_type = toolBarType;
+
+ PERF_CHECK_END(LVL6 "add toolbar item");
+ }
+
+ if ( ctrlBarType != pMainView->ctrl_bar_type ) // when change ctrlbar Type
+ {
+ PERF_CHECK_BEGIN(LVL6 "add contolbar item");
+
+ MSG_MAIN_HIGH("CtrlBar update. Old=%d Cur=%d", ctrlBarType , pMainView->ctrl_bar_type);
+ _update_ctrl_bar(pMainView, ctrlBarType);
+ pMainView->ctrl_bar_type = ctrlBarType;
+
+ PERF_CHECK_END(LVL6 "add contolbar item");
+ }
+
+// If Inavalid image, disable all buttons.
+
+ slide_state_t state = ivug_slider_item_get_state(sitem);
+
+ Elm_Object_Item *item = NULL;
+ if ( state == SLIDE_STATE_ERROR)
+ {
+ const char *item_label = NULL;
+ Evas_Object *object = NULL;
+
+ /* Disable all toolbar items */
+ int i = 0;
+ for(i=0; i<MAX_NAVI_ITEM_CNT; i++)
+ {
+ if(pMainView->tool_bar_item[i] && (item_label = elm_object_text_get(pMainView->tool_bar_item[i])) )
+ {
+ if(!strncmp(item_label, IDS_DETAILS, strlen(item_label)))
+ {
+ MSG_MAIN_HIGH("Skip %s", item_label);
+ continue;
+ }
+ }
+ elm_object_disabled_set(pMainView->tool_bar_item[i], EINA_TRUE);
+ }
+
+ /* Disable all controlbar items */
+#ifdef _USE_LABEL_
+ item = elm_toolbar_first_item_get(pMainView->ctrl_bar);
+ for(; item!=NULL; item=elm_toolbar_item_next_get(item)){
+ item_label = elm_object_item_text_get(item);
+ if(item_label && (!strncmp(item_label, IDS_DELETE, strlen(item_label)) ||
+ !strncmp(item_label, IDS_DETAILS, strlen(item_label)) ||
+ !strncmp(item_label, IDS_SLIDE_SHOW, strlen(item_label))))
+ {
+ MSG_MAIN_HIGH("Skip %s", item_label);
+ continue;
+ }
+
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ }
+#else
+ const char *icon_file = NULL;
+ item = elm_toolbar_first_item_get(pMainView->ctrl_bar);
+ for(; item!=NULL; item=elm_toolbar_item_next_get(item))
+ {
+ object = elm_toolbar_item_icon_object_get(item);
+ if(!object)
+ continue;
+
+ elm_icon_file_get(object, &icon_file, NULL);
+
+ if(icon_file && (!strncmp(icon_file, ICON_PATH_DELETE, strlen(icon_file)) ||
+ !strncmp(icon_file, ICON_PATH_INFO, strlen(icon_file)) ||
+ !strncmp(icon_file, ICON_PATH_SLIDESHOW, strlen(icon_file))))
+ {
+ MSG_MAIN_HIGH("Skip %s", icon_file);
+ continue;
+ }
+
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ }
+#endif
+ return ;
+ }
+ else
+ {
+ int i = 0;
+ /* Enable all toolbar items */
+ for(i=0; i<MAX_NAVI_ITEM_CNT; i++)
+ {
+ if(pMainView->tool_bar_item[i])
+ {
+ elm_object_disabled_set(pMainView->tool_bar_item[i], EINA_FALSE);
+ }
+ }
+
+ /* Enable all controlbar items */
+ item = elm_toolbar_first_item_get(pMainView->ctrl_bar);
+ for(; item!=NULL; item=elm_toolbar_item_next_get(item))
+ {
+ elm_object_item_disabled_set(item, EINA_FALSE);
+ }
+ }
+
+ if(mdata->slide_type == SLIDE_TYPE_IMAGE)
+ {
+ _show_zoom_icon(pMainView);
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_out,hide","elm");
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_in,hide","elm");
+ }
+}
+
+void
+_ivug_main_view_show_menu_bar(Ivug_MainView *pMainView)
+{
+ MSG_MAIN_HIGH("Show Menu");
+
+ pMainView->bShowMenu = EINA_TRUE;
+ evas_object_show(pMainView->ctrl_bar);
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+
+ _update_main_view(pMainView, sitem);
+
+#ifdef HIDE_INDICATOR
+ elm_win_indicator_mode_set(ug_get_window(), ELM_WIN_INDICATOR_HIDE);
+#else
+ elm_win_indicator_mode_set(ug_get_window(), ELM_WIN_INDICATOR_SHOW);
+#endif
+
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+ if(mdata == NULL)
+ {
+ MSG_MAIN_ERROR("mdata is NULL");
+ return;
+ }
+
+ if(mdata->slide_type == SLIDE_TYPE_IMAGE)
+ {
+ _show_zoom_icon(pMainView);
+ }
+
+ elm_naviframe_item_title_visible_set(pMainView->navi_it, EINA_TRUE);
+ elm_object_item_signal_emit(pMainView->navi_it, "elm,state,controlbar,open", "");
+
+#ifdef TEST_MOUSE_EVENT
+ Eina_List *l = evas_object_clipees_get(pMainView->navi_bar);
+
+ MSG_MAIN_HIGH("Clipper clips %i objects", eina_list_count(l));
+
+ Evas_Object *obj;
+ Eina_List *l1;
+
+ EINA_LIST_FOREACH(l, l1, obj)
+ {
+
+ MSG_MAIN_HIGH("Object Type : %s", evas_object_name_get(obj));
+
+ }
+ Evas_Object *above;
+ Evas_Object *below;
+
+
+ above = evas_object_above_get(pMainView->navi_bar);
+ MSG_MAIN_HIGH("Navi Above : 0x%08x %s %s", above, evas_object_name_get(above), evas_object_type_get(above));
+
+ below = evas_object_below_get(pMainView->navi_bar);
+ MSG_MAIN_HIGH("Navi Below : 0x%08x %s %s", below, evas_object_name_get(below), evas_object_type_get(below));
+
+ above = evas_object_above_get(pMainView->slider);
+ MSG_MAIN_HIGH("Slider Above : 0x%08x %s %s", above, evas_object_name_get(above), evas_object_type_get(above));
+
+ below = evas_object_below_get(pMainView->slider);
+ MSG_MAIN_HIGH("Slider Below : 0x%08x %s %s", below, evas_object_name_get(below), evas_object_type_get(below));
+#endif
+
+
+}
+
+
+void
+_ivug_main_view_hide_menu_bar(Ivug_MainView *pMainView)
+{
+ MSG_MAIN_HIGH("Hide Menu");
+
+ pMainView->bShowMenu = EINA_FALSE;
+ elm_widget_disabled_set(pMainView->ctrl_bar, EINA_TRUE);
+
+ elm_win_indicator_mode_set(ug_get_window(), ELM_WIN_INDICATOR_HIDE);
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_out,hide","elm");
+ edje_object_signal_emit(_EDJ(pMainView->empty_layout), "elm,state,btn_zoom_in,hide","elm");
+ elm_naviframe_item_title_visible_set(pMainView->navi_it, EINA_FALSE);
+ elm_object_item_signal_emit(pMainView->navi_it, "elm,state,controlbar,close", "");
+}
+
+
+static void
+_ivug_main_view_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Main View Clicked");
+ IV_ASSERT(data != NULL);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+// TODO : Bug. menu bar is blinking when stopping slide show.
+ if (pMainView->bShowMenu)
+ {
+ _ivug_main_view_hide_menu_bar(pMainView);
+ }
+ else
+ {
+ _ivug_main_view_show_menu_bar(pMainView);
+ }
+
+}
+
+static void
+_ivug_main_view_icon_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Main View Video icon Clicked");
+ IV_ASSERT(data != NULL);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+
+ if (mdata == NULL)
+ {
+ MSG_MAIN_ERROR("slide data is NULL");
+ return;
+ }
+
+ if (pMainView->mode == IVUG_MODE_FILE || pMainView->mode == IVUG_MODE_DISPLAY || pMainView->mode == IVUG_MODE_SINGLE )
+ {
+ MSG_MAIN_HIGH("Launching simple video player. Mode=%d", pMainView->mode);
+ ivug_ext_aul_launch(pMainView->layout, IVUG_EXT_AUL_SIMPLE_VIDEOPLAYER, mdata->filepath, NULL);
+ }
+ else
+ {
+ MSG_MAIN_HIGH("Launching normal video player");
+ ivug_ext_aul_launch(pMainView->layout, IVUG_EXT_AUL_VIDEOPLAYER, mdata->filepath, NULL);
+ }
+
+}
+
+static void
+_ivug_main_view_long_pressed(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Coord_Point* down_pose = (Evas_Coord_Point*)event_info;
+ ivug_ret_if(!data||!down_pose);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ MSG_MAIN_HIGH("LongPressed XY(%d,%d)", down_pose->x, down_pose->y);
+
+ int x = down_pose->x;
+ int y = down_pose->y;
+
+ Slide_Item *si = ivug_slider_get_current_slide_item(pMainView->slider);
+ IV_ASSERT(si != NULL);
+
+ if ( ivug_slider_item_get_state(si) != SLIDE_STATE_LOADED)
+ {
+ MSG_MAIN_ERROR("Long pressed. but state is not ready");
+ return;
+ }
+
+ pMainView->copy_popup = _ivug_main_create_copy_popup_create(pMainView, x, y);
+ if (pMainView->copy_popup == NULL)
+ {
+ IVUG_DEBUG_WARNING("copy popup create failed");
+ return ;
+ }
+
+}
+
+
+static void
+_ivug_main_view_slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Image slider changed callback. ");
+
+ ivug_ret_if(!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+ Slide_Item *sitem = (Slide_Item *)event_info;
+
+ if ( sitem == NULL || sitem->mitem == NULL)
+ {
+ // There is no item existed. terminate UG
+ MSG_MAIN_ERROR("No item is remained. exit UG. Sitem=0x%08x", sitem);
+ IVUG_MAIN_DESTROY_ME(pMainView);
+ return;
+ }
+
+ if(pMainView->selectioninfo != NULL)
+ {
+ MSG_MAIN_MED("Delete small noti");
+ evas_object_del(pMainView->selectioninfo);
+ pMainView->selectioninfo = NULL;
+ }
+ if (pMainView->copy_popup)
+ {
+ MSG_MAIN_MED("Delete copy popup");
+ evas_object_del(pMainView->copy_popup);
+ pMainView->copy_popup = NULL;
+ }
+
+// Update Main View.
+ if ( pMainView->bShowMenu == true )
+ {
+ PERF_CHECK_BEGIN(LVL5 "Update main view");
+ _update_main_view(pMainView, sitem);
+ PERF_CHECK_END(LVL5 "Update main view");
+ }
+
+}
+
+
+static void
+_ivug_main_view_slider_item_state_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Image slider item state changed callback. ");
+ ivug_ret_if(!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+ Slide_Item *sitem = (Slide_Item *)event_info;
+
+ if ( sitem == NULL || sitem->mitem == NULL)
+ {
+ // There is no item existed. terminate UG
+ MSG_MAIN_ERROR("No item is remained. exit UG");
+ IVUG_MAIN_DESTROY_ME(pMainView);
+ return;
+ }
+
+// Update Main View.
+ if ( pMainView->bShowMenu == true )
+ {
+ _update_main_view(pMainView, sitem);
+ }
+}
+
+
+static void
+_ivug_main_view_slider_deleted_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_MAIN_HIGH("Image slider deleted callback. ");
+ ivug_ret_if(!data);
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+ Slide_Item *sitem = (Slide_Item *)event_info;
+
+ if ( sitem == NULL || sitem->mitem == NULL )
+ {
+ // There is no item existed. terminate UG
+ MSG_MAIN_ERROR("No item is remained. exit UG");
+ IVUG_MAIN_DESTROY_ME(pMainView);
+ return;
+ }
+
+ _main_view_create_selection_info(pMainView, IDS_DELETED);
+
+ if ( pMainView->bShowMenu == true )
+ {
+ _update_main_view(pMainView, sitem);
+ }
+
+}
+
+
+static void
+_ivug_main_view_slider_slideshow_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ IV_ASSERT(data != NULL);
+ MSG_MAIN_HIGH("Slide show finished callback. ");
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ ivug_allow_lcd_off();
+ ivug_slider_stop_slide_show(pMainView->slider);
+
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[1], EINA_FALSE);
+
+ _ivug_main_view_show_menu_bar(pMainView);
+}
+
+static void
+_ivug_main_view_slider_slideshow_interrupted_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ IV_ASSERT(data != NULL);
+ MSG_MAIN_HIGH("Slide show interrupted callback. ");
+
+ Ivug_MainView *pMainView = (Ivug_MainView *)data;
+
+ ivug_allow_lcd_off();
+
+ elm_object_item_disabled_set(pMainView->ctrl_bar_item[1], EINA_FALSE);
+
+ _ivug_main_view_show_menu_bar(pMainView);
+}
+
+
+
+#ifdef TEST_MOUSE_EVENT
+void _on_receive_mouse_move (void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ char *tt = data;
+ MSG_MAIN_HIGH("Hmm!!! %s", tt);
+}
+#endif
+
+static void
+_on_menu_state_changed(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ Ivug_MainView *pMainView = data;
+
+ MSG_MAIN_HIGH("Receive %s %s", emission, source);
+
+ if ( strncmp(emission, "menu,show,finished", strlen(emission)) == 0 )
+ {
+ elm_widget_disabled_set(pMainView->ctrl_bar, EINA_FALSE);
+ }
+ else
+ {
+ evas_object_hide(pMainView->ctrl_bar);
+ elm_widget_disabled_set(pMainView->ctrl_bar, EINA_TRUE);
+ }
+}
+
+bool
+ivug_main_view_load_list(Ivug_MainView *pMainView, ivug_parameter* ivug_param)
+{
+ MSG_MAIN_HIGH("Load media list.");
+
+ PERF_CHECK_BEGIN(LVL1 "create media list");
+
+ Media_Data *mdata = ivug_slider_create_media_list(pMainView->slider, ivug_param);
+ if (mdata == NULL)
+ {
+ MSG_MAIN_ERROR("Creating media list is failed");
+ return false;
+ }
+
+ PERF_CHECK_END(LVL1 "create media list");
+
+ return true;
+}
+
+Ivug_MainView *
+ivug_main_view_create(Evas_Object* parent, ivug_mode mode, ivug_view_by view_by)
+{
+ IV_ASSERT(parent != NULL);
+
+ MSG_MAIN_HIGH("Creating main view. Parent=0x%08x Mode=%d ViewBy=%d", parent, mode, view_by);
+
+ PERF_CHECK_BEGIN(LVL2 "Create layout");
+
+//create main view layout
+ Ivug_MainView *pMainView = calloc(1, sizeof(Ivug_MainView) );
+ IV_ASSERT(pMainView != NULL);
+
+// Set default value
+ pMainView->parent = parent;
+ pMainView->bShowMenu = true;
+ pMainView->ugHandle = gGetUGHandle();
+ pMainView->mode = mode;
+ pMainView->view_by = view_by;
+
+ Evas_Object *layout;
+ layout = elm_layout_add(parent);
+ if ( layout == NULL) //if failed
+ {
+ MSG_MAIN_ERROR("main layout create failed");
+ free(pMainView);
+ return NULL;
+ }
+
+ pMainView->layout = layout;
+
+ PERF_CHECK_END(LVL2 "Create layout");
+
+ PERF_CHECK_BEGIN(LVL2 "load EDJ");
+
+ if (elm_layout_file_set(layout, IVUG_MAIN_EDJ, "mainview") == EINA_FALSE)
+ {
+ MSG_MAIN_ERROR("edj loading fail, file=%s group=%s", IVUG_MAIN_EDJ, IVUG_MAIN_EDJ);
+ evas_object_del(layout);
+ free(pMainView);
+ return NULL;
+ }
+
+ edje_object_signal_callback_add(_EDJ(pMainView->layout),
+ "menu,hide,finished",
+ "edc",
+ _on_menu_state_changed,
+ (void *)pMainView);
+
+ edje_object_signal_callback_add(_EDJ(pMainView->layout),
+ "menu,show,finished",
+ "edc",
+ _on_menu_state_changed,
+ (void *)pMainView);
+
+ evas_object_show(layout);
+
+// Navigation bar
+ pMainView->navi_bar = elm_naviframe_add(layout);
+ if ( pMainView->navi_bar == NULL)
+ {
+ MSG_MAIN_ERROR("navigation bar failed");
+ ivug_main_view_destroy(pMainView);
+ return NULL;
+ }
+
+// Layout life cycle is controlled by application explictily.
+ elm_naviframe_content_preserve_on_pop_set(pMainView->navi_bar, EINA_TRUE);
+
+#ifdef USE_CUSTOM_STYLE
+ elm_object_theme_set(pMainView->navi_bar, gGetSystemTheme() );
+ Eina_Bool bstyle = elm_object_style_set(pMainView->navi_bar, "ivug/default");
+ MSG_MAIN_HIGH("navi_bar elm_object_style_set result = %d", bstyle);
+#endif
+
+ elm_object_part_content_set(layout, "mainview.navibar", pMainView->navi_bar); //swallow
+
+ pMainView->empty_layout = elm_layout_add(layout); //create centents layout.
+ if (elm_layout_file_set(pMainView->empty_layout, IVUG_MAIN_EDJ, "navi_content"))
+ {
+ MSG_MAIN_HIGH("create Empty layout for navigation bar. Navi=0x%08x Empty Layout=0x%08x", pMainView->navi_bar, pMainView->empty_layout);
+ }
+ else
+ {
+ IVUG_DEBUG_WARNING("layout sawllow failed");
+ ivug_main_view_destroy(pMainView);
+ return NULL;
+ }
+
+ //create slider
+ pMainView->slider = ivug_slider_add(pMainView->empty_layout);
+ if (pMainView->slider == NULL)
+ {
+ MSG_MAIN_ERROR("image slider create failed");
+ ivug_main_view_destroy(pMainView);
+ return NULL;
+ }
+ elm_object_part_content_set(pMainView->empty_layout, "mainview.slider", pMainView->slider); //swallow
+
+ Evas_Object *back_btn = elm_button_add(pMainView->navi_bar);
+ elm_object_text_set(back_btn, IDS_BACK ); //elm_button_icon_set
+ elm_object_style_set(back_btn, "naviframe/end_btn/default");
+
+ evas_object_smart_callback_add(back_btn, "clicked", _ivug_main_view_back_cb, pMainView);
+
+ pMainView->navi_it = elm_naviframe_item_push(pMainView->navi_bar, IDS_LOADING , back_btn, NULL, pMainView->empty_layout, NULL);
+
+ pMainView->back_btn = back_btn;
+
+ if (pMainView->mode != IVUG_MODE_DISPLAY) // Display mode has no control bar in bottom.
+ {
+ pMainView->ctrl_bar = _create_ctrl_bar(pMainView->navi_bar, gGetSystemTheme());
+ elm_object_item_part_content_set(pMainView->navi_it, "controlbar", pMainView->ctrl_bar);
+ }
+
+ PERF_CHECK_END(LVL2 "load EDJ");
+
+ PERF_CHECK_BEGIN(LVL2 "add slider");
+
+ //elm_object_part_content_set(layout, "mainview.slider", pMainView->slider); //swallow
+
+//register mouse call back.
+ evas_object_smart_callback_add(pMainView->slider, "slider,clicked", _ivug_main_view_clicked, pMainView);
+ evas_object_smart_callback_add(pMainView->slider, "slider,longpressed", _ivug_main_view_long_pressed, pMainView);
+ evas_object_smart_callback_add(pMainView->slider, "slider,clicked,icon", _ivug_main_view_icon_clicked, pMainView);
+
+ evas_object_smart_callback_add(pMainView->slider, "slider,item,changed", _ivug_main_view_slider_changed_cb, pMainView);
+ evas_object_smart_callback_add(pMainView->slider, "slider,item,deleted", _ivug_main_view_slider_deleted_cb, pMainView);
+ evas_object_smart_callback_add(pMainView->slider, "slider,slideshow,finished", _ivug_main_view_slider_slideshow_finished_cb, pMainView);
+ evas_object_smart_callback_add(pMainView->slider, "slider,slideshow,interrupted", _ivug_main_view_slider_slideshow_interrupted_cb, pMainView);
+ evas_object_smart_callback_add(pMainView->slider, "slider,item,state,changed", _ivug_main_view_slider_item_state_changed_cb, pMainView);
+
+#ifdef TEST_MOUSE_EVENT
+ evas_object_event_callback_add(pMainView->navi_bar, EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "navigarion");
+ evas_object_event_callback_add(pMainView->layout, EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "layout");
+ evas_object_event_callback_add(pMainView->parent, EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "base");
+ evas_object_event_callback_add(pMainView->slider, EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "slider");
+ evas_object_event_callback_add(edje_object_part_object_get(_EDJ(pMainView->layout) , "clip"), EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "clip");
+ evas_object_event_callback_add(edje_object_part_object_get(_EDJ(pMainView->layout) , "mainview.navibar"), EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "navi swallow");
+ evas_object_event_callback_add(pMainView->ctrl_bar, EVAS_CALLBACK_MOUSE_MOVE, _on_receive_mouse_move, "controlbar");
+#endif
+
+ PERF_CHECK_END(LVL2 "add slider");
+
+ PERF_CHECK_BEGIN(LVL2 "add event handler");
+
+ edje_object_signal_callback_add(_EDJ(pMainView->empty_layout),
+ "mainview,zoom_out,clicked",
+ "",
+ _ivug_main_view_zoom_out_cb,
+ (void *)pMainView);
+ edje_object_signal_callback_add(_EDJ(pMainView->empty_layout),
+ "mainview,zoom_in,clicked",
+ "",
+ _ivug_main_view_zoom_in_cb,
+ (void *)pMainView);
+
+ _show_zoom_icon(pMainView);
+
+ int ret = -1;
+ MSG_IMAGEVIEW_HIGH("Register System notifications");
+ ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, _on_mmc_state_changed, pMainView);
+ if ( ret == -1 )
+ {
+ MSG_IMAGEVIEW_ERROR("Register %s is failed", VCONFKEY_SYSMAN_MMC_STATUS);
+ }
+
+ pMainView->keydown_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
+ (void *)_key_down_cb,
+ (void *)pMainView);
+
+ MSG_MAIN_HIGH("Main View starting");
+
+// For debugging.
+ DELETE_NOTIFY(pMainView->layout);
+
+ PERF_CHECK_END(LVL2 "add event handler");
+
+ return pMainView;
+
+}
+
+
+Evas_Object *
+ivug_main_view_object_get(Ivug_MainView *pMainView)
+{
+ IV_ASSERT(pMainView != NULL);
+
+ return pMainView->layout;
+}
+
+void
+ivug_main_view_update(Ivug_MainView *pMainView)
+{
+ IV_ASSERT(pMainView != NULL);
+
+ MSG_MAIN_HIGH("Main View Update");
+
+ Slide_Item *sitem = ivug_slider_get_current_slide_item(pMainView->slider);
+ Media_Data *mdata = ivug_data_get_data(sitem->mitem);
+
+ ivug_ret_if(!mdata);
+
+// TODO : Check this routine!.
+// TODO : Should implement again!!
+
+ if (mdata->slide_type == SLIDE_TYPE_IMAGE || mdata->slide_type == SLIDE_TYPE_VIDEO )
+ {
+ if(mdata->filepath && ecore_file_exists(mdata->filepath)) // Current file is not deleted
+ {
+ MSG_MAIN_HIGH("Current filepath : %s", mdata->filepath);
+ }
+ else
+ {
+ /*if file is not exist ug terminated temporally */
+ MSG_MAIN_ERROR("Center slide file is not exist");
+ IVUG_MAIN_DESTROY_ME(pMainView);
+ return ;
+ }
+ }
+
+// When resume, menu bar will be appeared.
+ _ivug_main_view_show_menu_bar(pMainView);
+}
+
+
+void
+ivug_main_view_destroy(Ivug_MainView *pMainView)
+{
+ IV_ASSERT(pMainView != NULL);
+
+ MSG_MAIN_HIGH("ENTER : Main View Destroy. pMainView=0x%08x", pMainView);
+
+ if( pMainView->event_blocker )
+ {
+ MSG_MAIN_HIGH("delete event blocker");
+ evas_object_del(pMainView->event_blocker);
+ pMainView->event_blocker = NULL;
+ }
+
+ if(pMainView->ext_ug)
+ {
+ MSG_MAIN_HIGH("destroy ug");
+ ug_destroy(pMainView->ext_ug);
+ pMainView->ext_ug = NULL;
+ }
+
+ if( pMainView->pDetailsView )
+ {
+ MSG_MAIN_HIGH("Details View Destroy");
+
+ ivug_details_view_destroy(pMainView->pDetailsView);
+ pMainView->pDetailsView = NULL;
+ }
+
+ if(pMainView->layout) // Remove topmost parent in main view.
+ {
+ evas_object_del(pMainView->layout);
+ pMainView->layout = NULL;
+ }
+
+ if (pMainView->exit_timer)
+ {
+ ecore_timer_del(pMainView->exit_timer);
+ pMainView->exit_timer = NULL;
+ }
+
+ int ret = -1;
+
+ MSG_IMAGEVIEW_HIGH("Unregister system notifications");
+
+ if(pMainView->keydown_handler)
+ {
+ ecore_event_handler_del(pMainView->keydown_handler);
+ pMainView->keydown_handler = NULL;
+ }
+
+ ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, _on_mmc_state_changed);
+ if ( ret == -1 )
+ {
+ MSG_IMAGEVIEW_ERROR("Unegister %s is failed", VCONFKEY_SYSMAN_MMC_STATUS);
+ }
+
+ free(pMainView);
+
+ MSG_MAIN_HIGH("LEAVE : Main View Destroy.");
+
+ return ;
+}
+