+/*
+ * 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://floralicense.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 <stdio.h>
+#include <pthread.h>
+/*
+#include "camera_utils.h"
+*/
+#include "cam.h"
+#include "edc_string.h"
+#include "edc_image_name.h"
+#include "cam_ta.h"
+#include "cam_config.h"
+
+#include "cam_toolbar_edc_callback.h"
+#include "cam_common_edc_callback.h"
+#include "cam_indicator_edc_callback.h"
+#include "cam_long_press.h"
+#include "cam_zoom_edc_callback.h"
+#include "cam_ev_edc_callback.h"
+#include "cam_ui_effect_utils.h"
+#include "cam_menu_composer.h"
+#include "cam_device_capacity.h"
+#include "cam_voice_command.h"
+#include "cam_face_detection_focus.h"
+#include "cam_rec.h"
+#include "cam_mm.h"
+
+
+#define SHUTTER_LONG_TAP_TIME 0.5 /*latency time of AF function*/
+#define CAM_SHOTCUTS_NUMS 22
+
+static int setting_gl_x = 0; /*mouse in setting popup coordinate: x*/
+static int setting_gl_y = 0; /*mouse in setting popup coordinate: y*/
+static Elm_Genlist_Item_Class itc;
+static Elm_Genlist_Item_Class sub_itc;
+
+static Evas_Coord shortcuts_canvas_prev_x;
+static Evas_Coord shortcuts_canvas_prev_y;
+static Eina_List *shortcuts_ele_list = NULL;
+static pthread_mutex_t edit_shortcuts_move_mutex = PTHREAD_MUTEX_INITIALIZER;
+static gboolean show_caf_button = FALSE;
+
+#define POPUP_WIDTH 350
+#define WB_POPUP_HEIGHT 478
+#define EFFECT_MODE_POPUP_NORMAL_HEIGHT 382
+#define FOCUS_POPUP_CAM_HEIGHT 309
+#define FLASH_POPUP_CAM_HEIGHT 338
+#define FLASH_POPUP_REC_HEIGHT 338
+#define REC_MODE_POPUP_HEIGHT 309
+#define SHOT_MODE_POPUP_NORMAL_HEIGHT 382
+#define SHOT_MODE_POPUP_EXTERNAL_HEIGHT 309
+#define MORE_POPUP_HEIGHT 500
+#define METERING_POPUP_HIGHT 309
+#define ISO_POPUP_HEIGHT 561
+#define POPUP_HEIGHT 561
+#define RESOLUTION_POPUP_CAM_HEIGHT (561)
+#define RESOLUTION_POPUP_REC_HEIGHT (561)
+#define TIMER_POPUP_CAM_HEIGHT 382
+
+#define SETTING_POPUP_X (114)
+#define SETTING_POPUP_Y (55)
+#define VER_SETTING_POPUP_X SETTING_POPUP_Y
+#define VER_SETTING_POPUP_Y SETTING_POPUP_X
+#define SHORTCUTS_PART_ARRAY_MAX_LEN (16)
+
+#define OPTION_POPUP_X 107
+#define OPTION_POPUP_Y 613
+#define SHOT_MODE_POPUP 203
+#define EV_POPUP 340
+#define TIMER_POPUP 472
+
+#define RESOLUTION_POPUP 610
+#define ISO_POPUP 763
+#define METERING_POPUP 743
+#define WB_POPUP 900
+#define MORE_POPUP 1067
+
+#define SETTING_HOR_CTX_POPUP_X 554
+#define SETTING_VER_CTX_POPUP_X 152
+#define SCENE_MODE_POPUP_WIDTH 400
+
+#define SUB_MENU_POPUP_WIDTH 502
+#define SUB_MENU_POPUP_HEIGHT 580
+
+#define SETTING_POPUP_WIDTH 550
+#define SETTING_POPUP_HEIGHT 661
+
+#define SHOT_GUIDE_POPUP_WIDTH 600
+#define SHOT_GUIDE_POPUP_HEIGHT 72
+
+static Shortcuts_List_Prop edit_shortcuts_prop_array[CAM_EDIT_SHORTCUTS_INDEX_MAX]
+= {
+ /*row 1*/
+ {CAM_EDIT_SHORTCUTS_INDEX_0, PROP_SHORTCUTS_PART_INDEX_0},
+ {CAM_EDIT_SHORTCUTS_INDEX_1, PROP_SHORTCUTS_PART_INDEX_1},
+ {CAM_EDIT_SHORTCUTS_INDEX_2, PROP_SHORTCUTS_PART_INDEX_2},
+ {CAM_EDIT_SHORTCUTS_INDEX_3, PROP_SHORTCUTS_PART_INDEX_3},
+ /*row 2*/
+ {CAM_EDIT_SHORTCUTS_INDEX_4, PROP_SHORTCUTS_PART_INDEX_4},
+ {CAM_EDIT_SHORTCUTS_INDEX_5, PROP_SHORTCUTS_PART_INDEX_5},
+ {CAM_EDIT_SHORTCUTS_INDEX_6, PROP_SHORTCUTS_PART_INDEX_6},
+ {CAM_EDIT_SHORTCUTS_INDEX_7, PROP_SHORTCUTS_PART_INDEX_7},
+ /*row 3*/
+ {CAM_EDIT_SHORTCUTS_INDEX_8, PROP_SHORTCUTS_PART_INDEX_8},
+ {CAM_EDIT_SHORTCUTS_INDEX_9, PROP_SHORTCUTS_PART_INDEX_9},
+ {CAM_EDIT_SHORTCUTS_INDEX_10, PROP_SHORTCUTS_PART_INDEX_10},
+ {CAM_EDIT_SHORTCUTS_INDEX_11, PROP_SHORTCUTS_PART_INDEX_11},
+ /*row 4*/
+ {CAM_EDIT_SHORTCUTS_INDEX_12, PROP_SHORTCUTS_PART_INDEX_12},
+ {CAM_EDIT_SHORTCUTS_INDEX_13, PROP_SHORTCUTS_PART_INDEX_13},
+ {CAM_EDIT_SHORTCUTS_INDEX_14, PROP_SHORTCUTS_PART_INDEX_14},
+ {CAM_EDIT_SHORTCUTS_INDEX_15, PROP_SHORTCUTS_PART_INDEX_15},
+ /*row 5*/
+ {CAM_EDIT_SHORTCUTS_INDEX_16, PROP_SHORTCUTS_PART_INDEX_16},
+ {CAM_EDIT_SHORTCUTS_INDEX_17, PROP_SHORTCUTS_PART_INDEX_17},
+ {CAM_EDIT_SHORTCUTS_INDEX_18, PROP_SHORTCUTS_PART_INDEX_18},
+ {CAM_EDIT_SHORTCUTS_INDEX_19, PROP_SHORTCUTS_PART_INDEX_19},
+};
+
+static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
+ char **file_path, char **text, Evas_Object_Event_Cb *func);
+static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon);
+
+void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
+void create_menubar_shortcuts_mouse_event(struct appdata *ad);
+void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
+gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no);
+int toolbar_create_shortcuts_popup(struct appdata *ad);
+
+static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow);
+static void setting_ctxpopup_destroy(struct appdata *ad);
+
+static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y);
+
+static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y);
+static int __get_menubar_no_by_index(struct appdata *ad, int index);
+
+static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj, void *event_info);
+static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info);
+static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj, void *event_info);
+static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info);
+static void __update_menubar_icon_by_index(struct appdata *ad, int index);
+static void __cam_toolbar_edit_shortcuts_data_clean();
+static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y);
+static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y);
+
+static void __toolbar_menu_type_update(Evas_Object *toolbar_icon, int type, void *data, ButtonState state, Evas_Object_Event_Cb *func);
+static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction, int mouse_point, int *x, int *y);
+
+/* Setting list callback*/
+static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting);
+static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info);
+static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info);
+static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* Toolbar functions */
+static void __toolbar_menu_icon_update(struct appdata *ad);
+static int __toolbar_menu_item_create(struct appdata *ad);
+static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state);
+static void __toolbar_menu_item_reset(struct appdata *ad);
+static int __toolbar_shutter_button_create(struct appdata *ad);
+static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state);
+static int __toolbar_recording_button_create(struct appdata *ad);
+static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state);
+static int __toolbar_quickview_item_create(struct appdata *ad);
+static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state);
+static int __toolbar_backbutton_create(struct appdata *ad);
+static void __toolbar_backbutton_destroy(struct appdata *ad);
+static int __toolbar_cafbutton_create(struct appdata *ad);
+static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state);
+static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state);;
+
+static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state);
+static const char* __get_text_name(CAM_MENU_ITEM item);
+
+static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect);
+static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
+ int swap_rel1_y,
+ int swap_w,
+ int swap_h,
+ int cur_rel1_x,
+ int cur_rel1_y,
+ int cur_w,
+ int cur_h,
+ int correction_w,
+ int correction_h);
+static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele);
+
+static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no);
+static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata);
+static void __cam_setting_sub_gl_style_set();
+static int __get_sub_menu_height(int count);
+int cam_toolbar_displaypopup_map_menu_value(int display_popup);
+int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item);
+static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2);
+static void __resort_edit_shortcuts_list_by_part_index(void);
+static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele);
+static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no);
+
+static void __update_setting_popup(void* data);
+static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele);
+static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
+ int setting_type,
+ int menubar_no);
+static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no);
+static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
+ ShortCutData *cur_ele,
+ ShortCutData *insert_ele);
+
+static void __set_show_state_preview_obj(void *data, gboolean show);
+static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part);
+
+static Eina_Bool __setting_popup_timeout_checker_cb(void *data);
+static gboolean __setting_popup_timeout_checker_start(struct appdata *ad);
+static void __cam_toolbar_display_shortcuts_editmode(void *data);
+
+static void __cam_toolbar_exit_shortcuts_editmode(void *data);
+static void __toolbar_dim_setting_shortcuts(struct appdata *ad);
+
+
+static void cam_popup_warning_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ if (obj)
+ evas_object_del(obj);
+ obj = NULL;
+}
+
+static void cam_storage_warning_popup()
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ Evas_Object *popup;
+ popup = elm_popup_add(ad->ug_base);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, dgettext(PACKAGE, "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA"));
+ elm_popup_timeout_set(popup, 3.0);
+ evas_object_smart_callback_add(popup, "timeout", cam_popup_warning_response_cb, NULL);
+ evas_object_show(popup);
+}
+
+static Eina_Bool __toolbar_check_af_timer(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, 0);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->check_af_timer)
+ ad->check_af_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if(camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
+ ad->emit_continuous_shutter = TRUE;
+ cam_mm_stop_focusing();
+ if (!cam_do_capture(ad)) {
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+ ad->emit_continuous_shutter = FALSE;
+ }
+
+ if (ad->check_af_timer)
+ ad->check_af_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+static Eina_Bool __toolbar_continuous_shot_timer(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, 0);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->continuous_shot_timer)
+ ad->continuous_shot_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ DEBUG_TRACE("camapp->burst_shot is %d", camapp->burst_shot);
+ if (camapp->burst_shot) {// burst shot mode 'on'
+ camapp->default_capture_mode = CAM_CAPTURE_BURST;
+ ad->emit_continuous_shutter = TRUE;
+ if (camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
+ REMOVE_TIMER(ad->continuous_af_timer);
+ cam_mm_stop_focusing();
+
+ if (!cam_do_capture(ad)) {
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+ }
+ } else {
+ cam_debug(LOG_UI, "Not focused");
+
+ REMOVE_TIMER(ad->check_af_timer);
+ ad->check_af_timer = ecore_timer_add(0.2, __toolbar_check_af_timer, ad);
+ }
+ }
+
+ if (ad->continuous_shot_timer)
+ ad->continuous_shot_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+/* start AF after SHUTTER_LONG_TAP_TIME */
+static Eina_Bool __toolbar_shutter_long_tap_af_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, 0);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->shutter_long_tap_timer)
+ ad->shutter_long_tap_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ camapp->focus_mode = CAM_FOCUS_MODE_HALFSHUTTER;
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ if (!cam_camera_key_half_press(ad)) {
+ cam_warning(LOG_UI, "cam_camera_key_half_press failed");
+ }
+ camapp->key_lock = FALSE;
+ }
+
+ if (ad->shutter_long_tap_timer)
+ ad->shutter_long_tap_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __shutter_button_focus_out_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ if (ad->is_processing) {
+ return;
+ }
+
+ cam_mm_stop_focusing();
+ cam_reset_focus_mode(ad);
+}
+
+void cam_toolbar_shutter_button_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ cam_debug(LOG_UI, "do not capture");
+ return;
+ }
+
+ if (strcmp(emission, "press_shutter_sig") == 0) {
+ if ((camapp->continuous_shot_data && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING )
+ ){
+ cam_critical(LOG_SYS, " capture is skipped because of CAM_CONTI_SHOT_STATUS_CAPTURING");
+ return;
+ }
+
+ ad->emit_continuous_shutter = FALSE;
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ evas_object_event_callback_add(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb, (void *)ad);
+
+ if (camapp->af_mode == CAM_FOCUS_FACE) { /*note: face focus mode, if start capture,stop draw rect*/
+ cam_app_stop_video_stream();
+ }
+ REMOVE_TIMER(ad->continuous_shot_timer);
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) && (camapp->burst_shot == TRUE)) {
+ if (strcmp(source, "hard_key") == 0) {
+ if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
+ ad->continuous_shot_by_hard_key = TRUE;
+ __toolbar_continuous_shot_timer(ad);
+ } else {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ }
+ } else {
+ if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
+ ad->continuous_shot_by_hard_key = FALSE;
+ ad->continuous_shot_timer = ecore_timer_add(0.5, __toolbar_continuous_shot_timer, ad);
+ }
+ }
+
+ ad->stop_continuous_shot = FALSE;
+ } else {
+ if (strcmp(source, "hard_key") == 0) {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ } else {
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_FOCUS_MODE)){
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->shutter_long_tap_timer = ecore_timer_add(SHUTTER_LONG_TAP_TIME, __toolbar_shutter_long_tap_af_timer, ad);
+ }
+ }
+ }
+ } else {
+ if (strcmp(source, "hard_key") == 0) {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ }
+ }
+
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
+ } else if (strcmp(emission, "release_shutter_sig") == 0) {
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ evas_object_event_callback_del(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb);
+ REMOVE_TIMER(ad->shutter_long_tap_timer);
+ REMOVE_TIMER(ad->continuous_shot_timer);
+ REMOVE_TIMER(ad->check_af_timer);
+
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE)
+ && camapp->burst_shot == TRUE
+ && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
+ DEBUG_TRACE("burst capture mode");
+ if (((strcmp(source, "hard_key") == 0) && (ad->continuous_shot_by_hard_key == FALSE))
+ || ((strcmp(source, "toolbar_signal") == 0) && (ad->continuous_shot_by_hard_key == TRUE))) {
+ DEBUG_TRACE("ignore this event");
+ return;
+ }
+ ad->stop_continuous_shot = TRUE;
+ ad->emit_continuous_shutter = FALSE;
+ ad->continuous_shot_by_hard_key = FALSE;
+ }
+ }
+
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
+ } else if ( strcmp(emission, "click_shutter_sig") == 0){
+
+ if (ad->emit_continuous_shutter == TRUE ) {
+ ad->emit_continuous_shutter = FALSE;
+ return;
+ }
+
+ if (camapp->default_capture_mode == CAM_CAPTURE_SINGLE) {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ }
+ }
+}
+
+void cam_toolbar_recording_button_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ int mm_state = cam_mm_get_state();
+
+ if ((camapp->camera_mode == CAM_CAMERA_MODE)
+ && (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)) {
+ cam_debug(LOG_UI, "do not record");
+ return;
+ }
+
+ if (strcmp(emission, "press_shutter_sig") == 0) {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,press", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,press", "prog");
+ } else if (strcmp(emission, "release_shutter_sig") == 0) {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
+ } else if (strcmp(emission, "click_shutter_sig") == 0) {
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (mm_state != CAMERA_STATE_PREVIEW) {
+ cam_critical(LOG_UI, "Cannot start recording in capturing state");
+ return;
+ }
+ }
+
+ if (!ad->is_recording) {
+ // change to camcorder mode
+ GValue value = {0, };
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ CAM_GVALUE_SET_INT(value, CAM_CAMCORDER_MODE);
+ if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
+ return;
+ }
+ }
+
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+
+ if (!cam_do_record(ad))
+ cam_warning(LOG_UI, "cam_do_record failed");
+
+ camapp->key_lock = FALSE;
+ }
+ } else {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING)) {
+ if (!cam_video_record_pause(ad))
+ cam_warning(LOG_UI, "cam_video_record_pause failed");
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ } else if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_PAUSED)) {
+ if (!cam_video_record_resume(ad))
+ cam_warning(LOG_UI, "cam_video_record_resume failed");
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ }
+ }
+}
+
+void cam_toolbar_recording_stop_button_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ int state = 0;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+ HIDE_EVAS_OBJECT(ad->indicator_edje);
+ DEL_EVAS_OBJECT(ad->recording_edje);
+
+ if (strcmp(emission, "press_shutter_sig") == 0) {
+ edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,press", "prog");
+ } else if (strcmp(emission, "release_shutter_sig") == 0) {
+ edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
+ } else if (strcmp(emission, "click_shutter_sig") == 0) {
+ state = cam_mm_get_state();
+
+ if ((state == RECORDER_STATE_RECORDING)
+ || (state == RECORDER_STATE_PAUSED)) {
+ camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
+ if (!cam_video_record_stop(ad))
+ cam_warning(LOG_UI, "cam_video_record_stop failed");
+ } else {
+ cam_debug(LOG_UI, "error, not recording or pause state");
+ }
+ }
+}
+
+static void __toolbar_backbutton_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
+
+ if (ad->timer_activated) {
+ cam_app_cancel_timer(ad);
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (ad->ug_state != CAM_UG_PAUSE_STATE) {
+ GValue value = {0, };
+ CAM_GVALUE_SET_INT(value, CAM_CAMERA_MODE);
+ if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
+ return;
+ }
+ }
+ }
+ }
+ return;
+ } else {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (ad->is_recording) {
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+
+ if (!cam_video_record_cancel(ad))
+ cam_warning(LOG_UI, "failed");
+
+ camapp->key_lock = FALSE;
+ return;
+ }
+ }
+ }
+
+ if (ad->tip_popup) {
+ cam_tip_popup_destroy(ad);
+ return;
+ } else if (ad->toolbar_setting_popup) {
+ if (ad->setting_ctxpopup) {
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ } else {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ return;
+ } else if (ad->setting_ctxpopup) {
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ return;
+ } else if (ad->edit_shortcuts_popup) {
+ toolbar_destroy_shortcuts_popup(ad);
+ return;
+ } else if (ad->ev_edje) {
+ unload_ev_edje(ad);
+ return;
+ } else if (ad->zoom_edje) {
+ unload_zoom_edje(ad);
+ return;
+ }
+ }
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)
+ cam_app_exit(ad);
+ else
+ elm_win_lower(ug_get_window());
+
+
+ DEBUG_TRACE("END");
+}
+
+static void __toolbar_cafbutton_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (ad->is_rotating)
+ return;
+
+ cam_reset_focus_mode(ad);
+}
+
+static Ecore_Idler *run_image_view_idler = NULL;
+static Eina_Bool __cam_toolbar_run_image_viewer_idler(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
+
+ if (run_image_view_idler) {
+ ecore_idler_del(run_image_view_idler);
+ run_image_view_idler = NULL;
+ }
+
+ if (ad->ug_is_deleting_process == TRUE)
+ return ECORE_CALLBACK_CANCEL;
+
+ if (!cam_app_run_media_browser(ad, camapp->filename)) {
+ DEBUG_TRACE("cam_app_run_media_browser failed");
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __toolbar_quickview_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ cam_ret_if(data == NULL);
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(emission == NULL);
+ cam_ret_if(source == NULL);
+ if (ad->ug_is_deleting_process == TRUE)
+ return;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ if (ad->imageviewer_ug) {
+ return;
+ }
+ if (emission && source)
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (strcmp(emission, "portrait,quickview,release") == 0
+ || strcmp(emission, "landscape,quickview,release") == 0) {
+ pthread_mutex_lock(&ad->file_reg_mutex);
+ cam_debug(LOG_SYS, " lock file_reg_mutex");
+ pthread_mutex_unlock(&ad->file_reg_mutex);
+ run_image_view_idler = ecore_idler_add(__cam_toolbar_run_image_viewer_idler, (void *)ad);
+ }
+}
+
+#if 0 /*block it temporary*/
+static void __shotcus_edit_shotcuts_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_edit_shortcut_popup_cb(data, obj, event_info);
+}
+#endif
+
+static void __shortcuts_burst_shot_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_burst_shot_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_volume_key_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_volume_key_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_self_portrait_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_self_portrait_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_flash_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_flash_popup(data, obj, event_info);
+}
+
+static void __shortcuts_shooting_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_shot_mode_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_record_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_record_mode_popup(data, obj, event_info);
+}
+
+static void __shortcuts_scene_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_scenemode_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_exposure_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_ev_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_focus_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_focus_mode_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_timer_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_timer_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_effects_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_effects_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_photo_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_photo_resolution_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_video_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_video_resolution_popup_cb(data, obj, event_info);
+
+}
+
+static void __shortcuts_white_banlance_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_wb_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_iso_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_iso_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_metering_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_metering_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_anti_shake_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_anti_shake_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_outdoor_visibility_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_outdoor_visibility_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_auto_contrast_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_autocontrast_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_guideline_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_guideline_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_capture_voice_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_capture_by_voice_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_gps_tag_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_gps_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_storage_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_storage_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_reset_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_restore_defaults_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_save_as_flip_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_save_as_flip_popup_cb(data, obj, event_info);
+}
+
+
+static void __update_menu_bar_shortcuts_state_by_index(struct appdata *ad, int index, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+ int menubar_no = __get_menubar_no_by_index(ad, index);
+ switch(menubar_no) {
+ case CAM_MENU_BAR_LEFT_0:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_0_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_0_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_0_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_1:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_2:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_3:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_4:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,invisible", "prog");
+ break;
+ default:
+ DEBUG_TRACE("not in menubar");
+ }
+
+}
+
+static void __toolbar_menu_type_update(Evas_Object *toolbar_icon,
+ int type, void *data, ButtonState state, Evas_Object_Event_Cb *func)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ char *icon_name = NULL;
+ char *text = NULL;
+
+ ButtonState button_state = state;
+ ToolbarItemState item_state = TOOLBAR_ITEM_STATE_NORMAL;
+
+ if (!cam_is_enabled_menu(ad, type)) {
+ button_state = BUTTON_STATE_DIM;
+ item_state = TOOLBAR_ITEM_STATE_DIM;
+ }
+
+ __get_toolbar_shortcuts_file_func(ad, type, button_state, &icon_name, &text, func);
+
+ if (icon_name)
+ elm_image_file_set(toolbar_icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ else
+ cam_critical(LOG_UI, "icon_name is NULL");
+
+ __update_menu_bar_shortcuts_state_by_index(ad, type, item_state);
+
+ if (button_state == BUTTON_STATE_DIM)
+ evas_object_color_set(toolbar_icon, 255, 255, 255, 77); /*opacity 30% for dim menu */
+ else
+ evas_object_color_set(toolbar_icon, 255, 255, 255, 255);
+}
+
+static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
+ char **file_path, char **text, Evas_Object_Event_Cb *func)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ *file_path = NULL;
+ *text = NULL;
+ *func = NULL;
+
+ switch(type) {
+ case CAM_MENU_EMPTY:
+ case CAM_MENU_SHORTCUTS:
+ break;
+ case CAM_MENU_BURST_SHOT_MODE: {
+ if (camapp->burst_shot) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = BURST_SHOT_MODE_ON_PRESS_ICON;
+ else
+ *file_path = BURST_SHOT_MODE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = BURST_SHOT_MODE_OFF_PRESS_ICON;
+ else
+ *file_path = BURST_SHOT_MODE_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_burst_shot_popup_cb;
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY: {
+ *file_path = __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_volume_key_popup_cb;
+ }
+ break;
+ case CAM_MENU_SELF_PORTRAIT: {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = CAMERA_SELF_PORTRAIT_PRESS_ICON;
+ else
+ *file_path = CAMERA_SELF_PORTRAIT_NORMAL_ICON;
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_self_portrait_popup_cb;
+ }
+ break;
+ case CAM_MENU_FLASH: {
+ *file_path = __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_FLASH");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_flash_popup_cb;
+ }
+ break;
+ case CAM_MENU_SHOOTING_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_shooting_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_RECORDING_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_record_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_SCENE_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_scene_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE: {
+ *file_path = __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_exposure_popup_cb;
+ }
+ break;
+ case CAM_MENU_FOCUS_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_focus_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_TIMER: {
+ *file_path = __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_TIMER");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_timer_popup_cb;
+
+ }
+ break;
+ case CAM_MENU_EFFECTS: {
+ *file_path = __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_effects_popup_cb;
+ }
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION: {
+ *file_path = __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_photo_resolution_popup_cb;
+ }
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION: {
+ *file_path = __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_video_resolution_popup_cb;
+
+ }
+ break;
+ case CAM_MENU_WHITE_BALANCE: {
+ *file_path = __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_white_banlance_popup_cb;
+ }
+ break;
+ case CAM_MENU_ISO: {
+ *file_path = __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_ISO");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_iso_popup_cb;
+ }
+ break;
+ case CAM_MENU_METERING: {
+ *file_path = __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_METERING");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_metering_popup_cb;
+ }
+ break;
+ case CAM_MENU_ANTI_SHAKE: {
+ if (ad->camapp_handle->anti_shake) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = ANTISHAKE_ON_PRESS_ICON;
+ else
+ *file_path = ANTISHAKE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = ANTISHAKE_OFF_PRESS_ICON;
+ else
+ *file_path = ANTISHAKE_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_anti_shake_popup_cb;
+ }
+ break;
+ case CAM_MENU_OUTDOOR_VISIBILITY: {
+ if (ad->camapp_handle->outdoor_visibility) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = OUTDOOR_VISIBILITY_ON_PRESS_ICON;
+ else
+ *file_path = OUTDOOR_VISIBILITY_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = OUTDOOR_VISIBILITY_OFF_PRESS_ICON;
+ else
+ *file_path = OUTDOOR_VISIBILITY_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_outdoor_visibility_popup_cb;
+ }
+ break;
+ case CAM_MENU_AUTO_CONTRAST: {
+ if (ad->camapp_handle->auto_contrast) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = AUTO_CONTRAST_ON_PRESS_ICON;
+ else
+ *file_path = AUTO_CONTRAST_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = AUTO_CONTRAST_OFF_PRESS_ICON;
+ else
+ *file_path = AUTO_CONTRAST_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_auto_contrast_popup_cb;
+ }
+ break;
+ case CAM_MENU_GUIDELINES: {
+ if (ad->camapp_handle->guideline) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GUIDELINE_ON_PRESS_ICON;
+ else
+ *file_path = GUIDELINE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GUIDELINE_OFF_PRESS_ICON;
+ else
+ *file_path = GUIDELINE_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_guideline_popup_cb;
+ }
+ break;
+ case CAM_MENU_CAPTURE_VOICE: {
+ if (ad->camapp_handle->capture_by_voice) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = CAPTURE_WITH_VOICE_ON_PRESS_ICON;
+ else
+ *file_path = CAPTURE_WITH_VOICE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = CAPTURE_WITH_VOICE_OFF_PRESS_ICON;
+ else
+ *file_path = CAPTURE_WITH_VOICE_OFF_NORMAL_ICON;
+ }
+
+ *text = "Capture with voice";
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_capture_voice_popup_cb;
+ }
+ break;
+ case CAM_MENU_GPS_TAG: {
+ if (ad->camapp_handle->gps) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GPS_ON_PRESS_ICON;
+ else
+ *file_path = GPS_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GPS_OFF_PRESS_ICON;
+ else
+ *file_path = GPS_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_gps_tag_popup_cb;
+ }
+ break;
+ case CAM_MENU_SAVE_AS_FLIP: {
+ if (ad->camapp_handle->save_as_flip) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = SAVE_AS_FLIP_ON_PRESS_ICON;
+ else
+ *file_path = SAVE_AS_FLIP_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = SAVE_AS_FLIP_OFF_PRESS_ICON;
+ else
+ *file_path = SAVE_AS_FLIP_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_save_as_flip_cb;
+ }
+ break;
+ case CAM_MENU_STORAGE: {
+ *file_path = __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_storage_popup_cb;
+ }
+ break;
+ case CAM_MENU_RESET: {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = RESET_SETTING_PRESS_ICON;
+ else
+ *file_path = RESET_SETTING_NORMAL_ICON;
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_reset_popup_cb;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void __toolbar_menu_icon_update(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
+ }
+}
+
+static void __toolbar_menu_item_unswallow(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ char buf[32 + 1] = {'\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", i);
+ elm_object_part_content_unset(ad->toolbar_edje, buf);
+ }
+}
+
+static void __toolbar_menu_item_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ __toolbar_menu_item_unswallow(ad);
+ Evas_Object *icon = NULL;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ icon = ad->toolbar_menu_arrays[i].icon;
+ DEL_EVAS_OBJECT(icon);
+ ad->toolbar_menu_arrays[i].icon = NULL;
+ }
+}
+
+static void __toolbar_menu_item_swallow(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ Evas_Object *icon = NULL;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ icon = ad->toolbar_menu_arrays[i].icon;
+ char buf[32 + 1] = {'\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", i);
+ elm_object_part_content_set(ad->toolbar_edje, buf, icon);
+ }
+
+}
+
+static int __toolbar_menu_item_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, -1);
+
+ Evas_Object *icon = NULL;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
+/* setting icon */
+ if (icon == NULL) {
+ icon = elm_image_add(ad->toolbar_edje);
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ }
+ elm_object_part_content_set(ad->toolbar_edje, "toolbar_0_icon", icon);
+ ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon = icon;
+
+/* shortcut icon */
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ icon = ad->toolbar_menu_arrays[i].icon;
+ if (icon == NULL) {
+ icon = elm_image_add(ad->toolbar_edje);
+ }
+ char buf[32 + 1] = {'\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", i);
+ elm_object_part_content_set(ad->toolbar_edje, buf, icon);
+ ad->toolbar_menu_arrays[i].icon = icon;
+ }
+ return 0;
+}
+
+static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_menu_arrays[i].menu_type, state);
+
+ if(state == TOOLBAR_ITEM_STATE_DIM) { //it don't make dimming in edje
+ Evas_Object *icon = NULL;
+ int menubar_no = __get_menubar_no_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
+ cam_retm_if(menubar_no == CAM_MENU_BAR_LEFT_INVALID, "invalid menubar no");
+
+ icon = ad->toolbar_menu_arrays[menubar_no].icon;
+
+ if (icon != NULL)
+ evas_object_color_set(icon, 255, 255, 255, 77); // set opacity 30%
+ }
+ }
+}
+
+static void __toolbar_menu_item_reset(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+
+ __toolbar_menu_item_destroy(ad);
+ __toolbar_menu_item_create(ad);
+
+ ad->toolbar_menu_arrays[1].menu_type = CAM_MENU_EMPTY;
+ ad->toolbar_menu_arrays[2].menu_type = CAM_MENU_EMPTY;
+
+ if (cam_mm_is_support_front_camera() == TRUE)
+ ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_SELF_PORTRAIT;
+ else
+ ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_EMPTY;
+
+#ifdef CAMERA_MACHINE_I686
+ ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_EMPTY;
+#else
+ ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_FLASH;
+#endif
+
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ cam_toolbar_menu_config_update(ad);
+}
+
+static void __toolbar_shutter_button_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "shutter_button");
+}
+
+static void __toolbar_shutter_button_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ if (ad->shutterbtn) {
+ __toolbar_shutter_button_unset(ad);
+ if (ad->shutterbtn_camera_icon) {
+ elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
+ DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
+ }
+ DEL_EVAS_OBJECT(ad->shutterbtn)
+ }
+}
+
+static void __toolbar_shutter_button_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->shutterbtn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "shutter_button", ad->shutterbtn);
+}
+
+static int __toolbar_shutter_button_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ if (ad->shutterbtn) {
+ if (ad->shutterbtn_camera_icon) {
+ elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
+ DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
+ }
+ DEL_EVAS_OBJECT(ad->shutterbtn)
+ }
+ ad->shutterbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "shutter_button");
+ edje = ad->shutterbtn;
+ cam_retv_if(edje == NULL, -1);
+
+ ad->shutterbtn_camera_icon = elm_image_add(edje);
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
+ elm_object_part_content_set(edje, "camera_icon", ad->shutterbtn_camera_icon);
+
+ edje_object_signal_callback_del(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb);
+ edje_object_signal_callback_add(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb, ad);
+
+ elm_object_part_content_set(ad->toolbar_edje, "shutter_button", edje);
+ evas_object_show(edje);
+ DEBUG_TRACE("END");
+
+ return EXIT_SUCCESS;
+}
+
+void cam_toolbar_update_shutter_button(struct appdata *ad, ToolbarItemState state)
+{
+ __toolbar_shutter_button_update(ad, state);
+}
+
+static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
+ } else if (state == TOOLBAR_ITEM_STATE_PRESS) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
+ } else if (state == TOOLBAR_ITEM_STATE_DIM) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,dim", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,dim", "prog");
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON_DIM);
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,invisible", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,invisible", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for shutter button");
+ }
+}
+
+static void __toolbar_recording_button_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "recording_button");
+}
+
+static void __toolbar_recording_button_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_recording_button_unset(ad);
+ DEL_EVAS_OBJECT(ad->recordingbtn);
+}
+
+static void __toolbar_recording_button_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->recordingbtn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "recording_button", ad->recordingbtn);
+}
+
+static int __toolbar_recording_button_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ DEL_EVAS_OBJECT(ad->recordingbtn);
+ ad->recordingbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_button");
+ edje = ad->recordingbtn;
+ cam_retv_if(edje == NULL, -1);
+
+ edje_object_signal_callback_del(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb);
+ edje_object_signal_callback_add(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb, ad);
+ elm_object_part_content_set(ad->toolbar_edje, "recording_button", edje);
+ evas_object_show(edje);
+ DEBUG_TRACE("END");
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(ad->recordingbtn == NULL);
+
+ int recording_state = 0;
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ recording_state = cam_mm_get_state();
+
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (recording_state == RECORDER_STATE_RECORDING)) {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
+ } else {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,invisible", "prog");
+ }
+
+ } else if (state == TOOLBAR_ITEM_STATE_DIM) {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,dim", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for recording button");
+ }
+}
+
+static void __toolbar_recording_stop_button_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "recording_stop_button");
+}
+
+static void __toolbar_recording_stop_button_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_recording_stop_button_unset(ad);
+ DEL_EVAS_OBJECT(ad->recording_stop_btn);
+}
+
+static void __toolbar_recording_stop_button_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->recording_stop_btn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", ad->recording_stop_btn);
+}
+
+static int __toolbar_recording_stop_button_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ DEL_EVAS_OBJECT(ad->recording_stop_btn);
+ ad->recording_stop_btn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_stop_button");
+ edje = ad->recording_stop_btn;
+ cam_retv_if(edje == NULL, -1);
+
+ edje_object_signal_callback_del(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb);
+ edje_object_signal_callback_add(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb, ad);
+ elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", edje);
+ edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
+ evas_object_show(edje);
+ DEBUG_TRACE("END");
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_quickview_item_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "quickview_item");
+}
+
+static void __toolbar_quickview_item_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_quickview_item_unset(ad);
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.edje);
+}
+
+static void __toolbar_quickview_item_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->toolbar.quickview_item.edje == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "quickview_item", ad->toolbar.quickview_item.edje);
+}
+
+static int __toolbar_quickview_item_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+
+ if (ad->toolbar.quickview_item.edje == NULL) {
+ ad->toolbar.quickview_item.edje =
+ cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_quickview_item");
+ edje_object_signal_callback_del(_EDJ(ad->toolbar.quickview_item.edje),
+ "*", "toolbar_signal", __toolbar_quickview_cb);
+ edje_object_signal_callback_add(_EDJ(ad->toolbar.quickview_item.edje),
+ "*", "toolbar_signal", __toolbar_quickview_cb, ad);
+ }
+ edje = ad->toolbar.quickview_item.edje;
+
+ cam_retv_if(edje == NULL, -1);
+ elm_object_part_content_set(ad->toolbar_edje, "quickview_item", edje);
+ evas_object_show(edje);
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+
+ Evas_Object *edje = NULL;
+ edje = ad->toolbar.quickview_item.edje;
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ edje_object_signal_emit(_EDJ(edje), "SET_DEFAULT", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(edje), "SET_INVISIBLE", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for quickview button");
+ }
+}
+
+static int __toolbar_backbutton_create(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ if (ad->backbtn == NULL) {
+ ad->backbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_backbutton_item");
+ edje_object_signal_callback_del(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb);
+ edje_object_signal_callback_add(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb, ad);
+ }
+ edje = ad->backbtn;
+
+ cam_retv_if(edje == NULL, -1);
+ elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", edje);
+ evas_object_show(edje);
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_backbutton_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "backbutton_item");
+}
+
+static void __toolbar_backbutton_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_backbutton_unset(ad);
+ DEL_EVAS_OBJECT(ad->backbtn);
+}
+
+static void __toolbar_backbutton_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->backbtn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", ad->backbtn);
+}
+
+
+static void __toolbar_cafbutton_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "cafbutton_item");
+}
+
+static void __toolbar_cafbutton_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ __toolbar_cafbutton_unset(ad);
+ DEL_EVAS_OBJECT(ad->caf_button);
+}
+
+static void __toolbar_cafbutton_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->caf_button == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
+}
+
+static int __toolbar_cafbutton_create(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+ cam_retvm_if(ad == NULL, -1, "appdata is null");
+ if (ad->caf_button == NULL) {
+ ad->caf_button = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_cafbutton_item");
+ }
+ cam_retvm_if(ad->caf_button == NULL, -1, "ad->caf_button is null");
+
+ edje_object_signal_callback_del(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb);
+ edje_object_signal_callback_add(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb, ad);
+
+ elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
+ evas_object_show(ad->caf_button);
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ show_caf_button = TRUE;
+ edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,normal", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ show_caf_button = FALSE;
+ edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,invisible", "prog");
+ } else {
+ show_caf_button = FALSE;
+ DEBUG_TRACE("Invalid state for caf_button");
+ }
+}
+
+static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,show", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,hide", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for caf_button");
+ }
+}
+
+#define SETTING_SHORTCUTS_HOLD_TIME (0.5)
+static Ecore_Timer *edit_shortcuts_timer = NULL;
+static Eina_Bool __toolbar_show_edit_shortcuts_timer_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
+ if (edit_shortcuts_timer) {
+ edit_shortcuts_timer = NULL;
+ }
+ toolbar_create_shortcuts_popup(ad);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __toolbar_create_show_edit_shortcuts_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ if (edit_shortcuts_timer) {
+ ecore_timer_del(edit_shortcuts_timer);
+ edit_shortcuts_timer = NULL;
+ }
+ edit_shortcuts_timer = ecore_timer_add(SETTING_SHORTCUTS_HOLD_TIME,
+ __toolbar_show_edit_shortcuts_timer_cb,
+ ad);
+}
+
+static void __toolbar_destroy_show_edit_shortcuts_timer(void)
+{
+ if (edit_shortcuts_timer) {
+ ecore_timer_del(edit_shortcuts_timer);
+ edit_shortcuts_timer = NULL;
+ }
+}
+
+static void __toolbar_edje_signal_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("_________________################____________________\n");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ cam_app_timeout_checker_update();
+ DEBUG_TRACE("ad->is_rotating = %d", ad->is_rotating);
+ if (ad->is_rotating == TRUE) {
+ DEBUG_TRACE("now in rotating target, do not accept signal");
+ return;
+ }
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(emission == NULL);
+ cam_ret_if(source == NULL);
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->tip_popup)
+ cam_tip_popup_destroy(ad);
+
+ if (ad->edit_shortcuts_popup) {
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ return;
+ }
+
+ if(ad->battery_status == LOW_BATTERY_CRITICAL_STATUS)
+ return;
+
+ if (emission && source)
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ Evas_Object_Event_Cb func = NULL;
+
+ if (strcmp(emission, "toolbar_0_press_sig") == 0) {
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_PRESS_ICON);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_0_release_sig") == 0) {
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_0_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_create(ad);
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ } else if (strcmp(emission, "toolbar_1_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_1_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_1_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_1) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else if (strcmp(emission, "toolbar_2_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_2_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_2_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_2) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else if (strcmp(emission, "toolbar_3_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_3_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_3_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_3) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else if (strcmp(emission, "toolbar_4_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_4_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_4_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_4) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else {
+ DEBUG_TRACE("invalid signal");
+ }
+}
+
+int cam_toolbar_create(struct appdata *ad)
+{
+
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ elm_object_part_content_unset(ad->ug_base, "toolbar_layout");
+
+/*note: create layout*/
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ if (ad->toolbar_edje_landscape == NULL) {
+ ad->toolbar_edje_landscape = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_landscape == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ if (ad->toolbar_edje_landscape_inverse == NULL) {
+ ad->toolbar_edje_landscape_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_landscape_inverse == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ if (ad->toolbar_edje_portrait == NULL) {
+ ad->toolbar_edje_portrait = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_portrait == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ if (ad->toolbar_edje_portrait_inverse == NULL) {
+ ad->toolbar_edje_portrait_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_portrait_inverse == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
+ break;
+ default:
+ DEBUG_TRACE("note: run into un-reached codes");
+ }
+ cam_retv_if(ad->toolbar_edje == NULL, -1);
+
+ elm_object_part_content_set(ad->ug_base, "toolbar_layout", ad->toolbar_edje);
+
+ __toolbar_menu_item_create(ad);
+
+ elm_object_signal_callback_del(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb);
+ elm_object_signal_callback_add(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb, ad);
+
+ __toolbar_shutter_button_create(ad);
+ __toolbar_recording_button_create(ad);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL)
+ __toolbar_quickview_item_create(ad);
+
+ __toolbar_backbutton_create(ad);
+ __toolbar_cafbutton_create(ad);
+
+ cam_toolbar_update(ad);
+
+ return EXIT_SUCCESS;
+}
+
+void cam_toolbar_content_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ __toolbar_menu_item_destroy(ad);
+ __toolbar_shutter_button_destroy(ad);
+ __toolbar_recording_button_destroy(ad);
+ __toolbar_recording_stop_button_destroy(ad);
+ __toolbar_quickview_item_destroy(ad);
+ __toolbar_backbutton_destroy(ad);
+ __toolbar_cafbutton_destroy(ad);
+}
+
+void cam_toolbar_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_toolbar_content_destroy(ad);
+ /*NOTE: all sub obj of toolbar will be deleted auto while toolar is deleted*/
+ edje_object_signal_callback_del(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_landscape);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_landscape_inverse);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_portrait);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_portrait_inverse);
+
+ ad->toolbar_edje = NULL;
+
+ REMOVE_TIMER(ad->setting_toolbar_hide_timer);
+
+ /*elm_all_flush();*/
+ cam_elm_cache_flush();
+}
+
+void cam_toolbar_update(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ CamShotMode shotmode = camapp->shooting_mode;
+
+ __toolbar_menu_icon_update(ad);
+
+ if (ad->timer_activated) {
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ }
+ } else {
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ switch (shotmode) {
+ case CAM_SINGLE_MODE:
+ case CAM_SELF_SINGLE_MODE:
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ if (cam_is_enabled_menu(ad, CAM_MENU_BURST_SHOT_MODE)
+ && camapp->continuous_shot_data
+ && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING) {
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_PRESS);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ }
+ __toolbar_recording_stop_button_destroy(ad);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+
+ break;
+ default:
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_stop_button_destroy(ad);
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ break;
+ }
+
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ } else {
+ if (ad->is_recording) {
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_stop_button_create(ad);
+
+ if (show_caf_button)
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ }
+ } else {
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_stop_button_destroy(ad);
+
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ }
+ }
+ }
+}
+
+int cam_toolbar_rotate(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+ cam_toolbar_setting_popup_destroy(ad);
+ cam_toolbar_destroy(ad);
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ if (ad->toolbar_edje_landscape == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ if (ad->toolbar_edje_landscape_inverse == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ if (ad->toolbar_edje_portrait == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ if (ad->toolbar_edje_portrait_inverse == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
+ break;
+ default:
+ DEBUG_TRACE("note: run into un-reached codes");
+ }
+
+ evas_object_show(ad->toolbar_edje);
+
+ return EXIT_SUCCESS;
+}
+
+int show_toolbar_edje(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ if (ad->toolbar_edje == NULL) {
+ return -1;
+ }
+ if (!ad->toolbar_hided) {
+ cam_toolbar_update(ad);
+ evas_object_show(ad->toolbar_edje);
+ } else {
+ hide_toolbar_edje(ad);
+ }
+
+ return EXIT_SUCCESS;
+}
+
+int hide_toolbar_edje(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ evas_object_hide(ad->toolbar_edje);
+ return EXIT_SUCCESS;
+}
+
+gboolean toolbar_update_quickview_thumbnail_no_animation(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
+ DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
+
+ if (camapp->thumbnail_name != NULL) {
+ ad->toolbar.quickview_item.thumbnail_image = elm_bg_add(ad->toolbar.quickview_item.edje);
+ cam_retv_if(ad->toolbar.quickview_item.thumbnail_image == NULL, FALSE);
+ elm_bg_file_set(ad->toolbar.quickview_item.thumbnail_image, camapp->thumbnail_name, NULL);
+
+ Evas_Object *layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
+ Evas_Object *thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout, "thumbnail_area");
+ cam_retv_if(thumbnail_area == NULL, FALSE);
+ Evas_Coord x = 0, y = 0, w = 0, h = 0;
+ evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
+ evas_object_resize(ad->toolbar.quickview_item.thumbnail_image, w, h);
+ DEBUG_TRACE("%d %d %d %d", x, y, w, h);
+
+ if (ad->toolbar.quickview_item.edje) {
+ elm_object_part_content_set(ad->toolbar.quickview_item.edje,
+ "thumbnail", ad->toolbar.quickview_item.thumbnail_image);
+ evas_object_show(ad->toolbar.quickview_item.edje);
+ }
+
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean toolbar_update_quickview_thumbnail(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+ cam_retv_if(ad->evas == NULL, FALSE);
+
+ cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
+ DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
+
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL);
+
+ return TRUE;
+}
+
+static void setting_ctxpopup_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->sub_menu_group);
+
+ if (ad->sub_genlist != NULL) {
+ elm_genlist_clear(ad->sub_genlist);
+ evas_object_del(ad->sub_genlist);
+ ad->sub_genlist = NULL;
+ }
+
+ DEL_EVAS_OBJECT(ad->setting_ctxpopup);
+ ad->ctxpopup_area = NULL;
+ ad->sub_menu_type = CAM_MENU_EMPTY;
+
+ if (ad->toolbar_setting_popup == NULL)
+ __set_show_state_preview_obj(ad, TRUE);
+}
+
+static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->toolbar_edje == NULL)
+ DEBUG_TRACE("error occur");
+
+ __set_show_state_preview_obj(ad, FALSE);
+
+ ad->ctxpopup_area = (Evas_Object *)
+ edje_object_part_object_get(elm_layout_edje_get
+ (ad->toolbar_edje), "popup_area");
+ ad->setting_ctxpopup = elm_ctxpopup_add(ad->ctxpopup_area);
+ elm_object_scroll_hold_push(ad->setting_ctxpopup);
+ if (!bNoArrow)
+ elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera");
+ else
+ elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera_no_arrow");
+ /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
+ return EXIT_SUCCESS;
+}
+
+static int setting_toolbar_popup_create(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->toolbar_edje == NULL)
+ DEBUG_TRACE("error occur");
+
+ ad->toolbar_setting_popup_area = (Evas_Object *)
+ edje_object_part_object_get(elm_layout_edje_get
+ (ad->toolbar_edje), "setting_popup");
+ ad->toolbar_setting_popup = elm_ctxpopup_add(ad->toolbar_setting_popup_area);
+ elm_object_scroll_hold_push(ad->toolbar_setting_popup);
+ elm_object_style_set(ad->toolbar_setting_popup, "beat_winset_test/camera");
+ /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
+ return EXIT_SUCCESS;
+}
+
+static int setting_shortcuts_popup_create(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->toolbar_edje == NULL)
+ DEBUG_TRACE("error occur");
+
+ ad->edit_shortcuts_popup = (Evas_Object *)
+ edje_object_part_object_get(elm_layout_edje_get
+ (ad->toolbar_edje), "shortcuts_popup");
+
+ DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
+ ad->edit_shortcuts_popup_description =
+ cam_app_load_edj(ad->toolbar_edje, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME,
+ "camera/shortcuts/layout/description");
+
+ /*TODO: need id: IDS_CAM_POP_TAP_AND_HOLD_AN_ICON_AND_MOVE_TO_EDIT_SHORTCUTS*/
+ edje_object_part_text_set(_EDJ(ad->edit_shortcuts_popup_description), "description.txtblock", dgettext(PACKAGE, "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"));
+ elm_object_scroll_hold_push(ad->edit_shortcuts_popup);
+ return EXIT_SUCCESS;
+}
+
+int cam_guideline_create(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ cam_retv_if(ad->camapp_handle == NULL, -1);
+
+ DEL_EVAS_OBJECT(ad->guideline_edje);
+ elm_object_part_content_unset(ad->ug_base, "guideline_layout");
+
+ if (ad->guideline_edje == NULL) {
+ ad->guideline_edje = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, "guideline");
+ }
+
+ cam_retv_if(ad->guideline_edje == NULL, -1);
+ elm_object_part_content_set(ad->ug_base, "guideline_layout", ad->guideline_edje);
+
+ gboolean wide_mode = FALSE;
+ gint ret = 0;
+
+ gint p_width = 0;
+ gint p_height =0;
+ ret = cam_mm_get_video_size(&p_width, &p_height);
+
+ if (!ret) {
+ DEBUG_TRACE("Middle Ware error occur!");
+ return -1;
+ }
+
+ DEBUG_TRACE("p_width == %d ,p_height = %d" ,p_width , p_height);
+ if (ad->camapp_handle->camera_mode == CAM_CAMERA_MODE) {
+ wide_mode = cam_utils_check_wide_resolution(p_width, p_height);
+ } else if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
+ if ( p_width > PREVIEW_W ) {
+ wide_mode = TRUE;
+ } else {
+ wide_mode = FALSE;
+ }
+ }
+
+ if (p_width == 1392 && p_height == 1392) {
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ DEBUG_TRACE("landscape");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,square", "prog_guideline");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ DEBUG_TRACE("portrait");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,vertical,square", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,vertical,normal", "prog_guideline");
+ break;
+ }
+ } else {
+ if (wide_mode) {
+ DEBUG_TRACE("hor,wide_mode");
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ DEBUG_TRACE("landscape");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,wide", "prog_guideline");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ DEBUG_TRACE("portrait");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,vertical,wide", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,vertical,normal", "prog_guideline");
+ break;
+ }
+
+ } else {
+ DEBUG_TRACE("hor,normal mode");
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ DEBUG_TRACE("landscape");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,normal", "prog_guideline");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ DEBUG_TRACE("portrait");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,vertical,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,vertical,normal", "prog_guideline");
+ break;
+ }
+
+ }
+ }
+ /*evas_object_lower(ad->guideline_edje);*/
+ evas_object_show(ad->guideline_edje);
+
+ DEBUG_TRACE("over");
+ return 0;
+}
+
+static void __volume_key_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+
+ switch((int)data) {
+ case CAM_MENU_VOLUME_KEY_ZOOM:
+ {
+ CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_ZOOM);
+ cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY_SHUTTER:
+ {
+ CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_SHUTTER);
+ cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
+ }
+ break;
+ default:
+ break;
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_VOLUME_KEY);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __storage_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int mmc_state = -1;
+ GValue value = {0};
+
+ switch((int)data) {
+ case CAM_MENU_STORAGE_PHONE:
+ {
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ }
+ break;
+ case CAM_MENU_STORAGE_MMC:
+ {
+ if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
+ if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED) {
+ GValue value = {
+ 0
+ };
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ cam_info(LOG_UI, "MMC card is removed");
+ cam_storage_warning_popup();
+ } else {
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_EXTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_STORAGE);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int wb = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set wb value */
+ if (ad->camapp_handle->white_balance != wb) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, wb);
+ cam_handle_value_set(ad, PROP_WB, &value);
+ }
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_WHITE_BALANCE);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int iso = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set iso value */
+ if (ad->camapp_handle->iso != iso) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, iso);
+ cam_handle_value_set(ad, PROP_ISO, &value);
+ }
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_ISO);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+static void __metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int metering = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set metering value */
+ if (ad->camapp_handle->auto_exposure != metering) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, metering);
+ cam_handle_value_set(ad, PROP_METERING, &value);
+ }
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_METERING);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int index = (int)data - CAM_MENU_TIMER_OFF;
+ DEBUG_TRACE("index : [%d]", index);
+ cam_ret_if(index < 0 || index >= CAM_SETTINGS_TIMER_NUMS);
+
+ /* set timer value */
+ if (ad->camapp_handle->timer != index) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, index);
+ cam_handle_value_set(ad, PROP_TIMER, &value);/*set ad->camapp_handle->timer*/
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_TIMER);
+ }
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __reset_settings_launch(void)
+{
+ GValue i_value = { 0, };
+ GValue b_value = { 0, };
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ CamAppData *camapp = NULL;
+
+ cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
+
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, " cam_handle is NULL");
+
+ g_value_init(&i_value, G_TYPE_INT);
+ g_value_init(&b_value, G_TYPE_BOOLEAN);
+
+ camapp->device_type = CAM_DEVICE_MEGA;
+
+ /* Shot mode */
+ g_value_set_int(&i_value, SHOTMODE_DEFAULT);
+ cam_handle_value_set(ad, PROP_SHOT_MODE, &i_value);
+
+ /* Rec mode */
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && ad->exe_args->size_limit > 0) {
+ g_value_set_int(&i_value, CAM_RECORD_MMS);
+ } else {
+ g_value_set_int(&i_value, RECMODE_DEFAULT);
+ }
+ cam_handle_value_set(ad, PROP_REC_MODE, &i_value);
+
+ /* Scene */
+ g_value_set_int(&i_value, PG_MODE_DEFAULT);
+ cam_handle_value_set(ad, PROP_SCENE_MODE, &i_value);
+
+ /* auto focus */
+ g_value_set_int(&i_value, AF_DEFAULT);
+ cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
+
+ /* Timer */
+ g_value_set_int(&i_value, TIMER_DEFAULT);
+ cam_handle_value_set(ad, PROP_TIMER, &i_value);
+
+ /* white balance */
+ g_value_set_int(&i_value, WB_DEFAULT);
+ cam_handle_value_set(ad, PROP_WB, &i_value);
+
+ /* Effect */
+ g_value_set_int(&i_value, EFFECT_DEFAULT);
+ cam_handle_value_set(ad, PROP_EFFECT, &i_value);
+
+ /* ISO */
+ g_value_set_int(&i_value, ISO_DEFAULT);
+ cam_handle_value_set(ad, PROP_ISO, &i_value);
+
+ /* Metering */
+ g_value_set_int(&i_value, AE_DEFAULT);
+ cam_handle_value_set(ad, PROP_METERING, &i_value);
+
+ /* Anti-shake */
+ g_value_set_int(&i_value, AHS_DEFAULT);
+ cam_handle_value_set(ad, PROP_AHS, &i_value);
+
+ /* wild dynamic range */
+ g_value_set_int(&i_value, WDR_DEFAULT);
+ cam_handle_value_set(ad, PROP_WDR, &i_value);
+
+ /* Image quality */
+ g_value_set_int(&i_value, QUALITY_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
+
+ /* Video quality */
+ g_value_set_int(&i_value, QUALITY_DEFAULT);
+ cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
+
+ /* Auto Contrast */
+ g_value_set_int(&i_value, FALSE);
+ cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &i_value);
+
+ /* Guide Line */
+ g_value_set_boolean(&b_value, GUIDE_LINE_DEFAULT);
+ cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
+ settings_guideline_refresh(ad);
+
+ /* Review */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_REVIEW, &b_value);
+
+ /* GPS Connect */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_GPS, &b_value);
+
+ /* shutter sound */
+ g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
+ cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
+
+ /* sound */
+ cam_mm_set_shutter_sound(SOUND_DEFAULT);
+ ad->camapp_handle->shutter_sound = SHUTTER_SOUND_DEFAULT;
+
+ /* audio recording */
+ g_value_set_boolean(&b_value, TRUE);
+ cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
+
+ /* storage */
+ g_value_set_int(&i_value, STORAGE_DEFAULT);
+ cam_handle_value_set(ad, PROP_STORAGE, &i_value);
+
+ /* brightness */
+ g_value_set_int(&i_value, BRIGHTNESS_DEFAULT);
+ cam_handle_value_set(ad, PROP_BRIGHTNESS, &i_value);
+
+ /* Resolution */
+ g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
+ cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &i_value);
+
+ g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
+ cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &i_value);
+
+ if (ad->indicator_edje) {
+ /* delete indicator */
+ evas_object_hide(ad->indicator_edje);
+ cam_indicator_destory(ad);
+ }
+ cam_indicator_create(ad);
+
+ /* Flash */
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ g_value_set_int(&i_value, FLASH_DEFAULT);
+ } else {
+ g_value_set_int(&i_value, REC_FLASH_DEFAULT);
+ }
+ cam_handle_value_set(ad, PROP_FLASH, &i_value);
+
+ /* Outdoor visibility */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &b_value);
+
+ /* save as flip */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &b_value);
+
+
+ /* Zoom */
+ g_value_set_int(&i_value, ZOOM_DEFAULT);
+ cam_handle_value_set(ad, PROP_ZOOM, &i_value);
+
+ /* Size limit type */
+ g_value_set_int(&i_value, CAM_MM_SIZE_LIMIT_TYPE_BYTE);
+ cam_handle_value_set(ad, PROP_SIZE_LIMIT_TYPE, &i_value);
+
+ /* Size limit */
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && ad->exe_args->size_limit > 0) {
+ g_value_set_int(&i_value, CAM_REC_MMS_MAX_SIZE);
+ } else {
+ g_value_set_int(&i_value, REC_SIZE_LIMIT_DEFAULT);
+ }
+ cam_handle_value_set(ad, PROP_SIZE_LIMIT, &i_value);
+
+ /* Timer */
+ g_value_set_int(&i_value, TIMER_DEFAULT);
+ cam_handle_value_set(ad, PROP_TIMER, &i_value);
+
+ /* Image count */
+ g_value_set_int(&i_value, IMAGE_COUNT_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_COUNT, &i_value);
+
+ CAM_GVALUE_SET_INT(i_value, CAM_VOLUME_KEY_ZOOM);
+ cam_handle_value_set(ad, PROP_VOLUME_KEY, &i_value);
+
+ camapp->continuous_shot_data = NULL;
+ camapp->enable_touch_af = TRUE;
+ camapp->burst_shot = TRUE;
+
+ /*Edit shortcuts*/
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHOW_POP_TIP,
+ TRUE);/*note: set show pop tip flag*/
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHORTCUTS_INIT_PART_INDEX,
+ FALSE);/*note: set shorcuts init flag*/
+}
+
+static void __restore_defaults_popup_cb_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
+
+ DEL_EVAS_OBJECT(ad->confirm_popup);
+
+ hide_toolbar_edje(ad);
+ cam_app_preview_stop();
+
+ __reset_settings_launch();
+ __toolbar_menu_item_reset(ad);
+
+ ResetCaps();
+
+ show_toolbar_edje(ad);
+
+ if (!cam_app_preview_start(ad)) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ }
+
+}
+
+static void __restore_defaults_popup_cb_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
+
+ DEL_EVAS_OBJECT(ad->confirm_popup);
+}
+
+static void __effects_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+ int effect = CAM_SCENE_NONE;
+ switch ((int)data) {
+ case CAM_MENU_EFFECT_NONE:
+ effect = CAMERA_ATTR_EFFECT_NONE;
+ break;
+ case CAM_MENU_EFFECT_NEGATIVE:
+ effect = CAMERA_ATTR_EFFECT_NEGATIVE;
+ break;
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ effect = CAMERA_ATTR_EFFECT_MONO;
+ break;
+ case CAM_MENU_EFFECT_SEPIA:
+ effect = CAMERA_ATTR_EFFECT_SEPIA;
+ break;
+ default:
+ break;
+ }
+
+ if (ad->camapp_handle->effect != effect) {
+ CAM_GVALUE_SET_INT(value, effect);
+ cam_handle_value_set(ad, PROP_EFFECT, &value);
+ }
+
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_EFFECTS);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __shot_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ switch ((int)data) {
+ case CAM_MENU_SHOOTING_SINGLE:
+ shot_mode_set(ad, CAM_SINGLE_MODE);
+ break;
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ shot_mode_set(ad, CAM_SELF_SINGLE_MODE);
+ break;
+ default:
+ break;
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item) {
+ elm_genlist_item_update(ad->setting_select_item);
+ }
+
+ __toolbar_menu_icon_update(ad);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __scene_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+
+ int scene = CAM_MENU_SCENE_AUTO;
+ switch ((int)data) {
+ case CAM_MENU_SCENE_AUTO:
+ scene = CAM_SCENE_NONE;
+ break;
+ case CAM_MENU_SCENE_PORTRAIT:
+ scene = CAM_SCENE_PORTRAIT;
+ break;
+ case CAM_MENU_SCENE_LANDSCAPE:
+ scene = CAM_SCENE_LANDSCAPE;
+ break;
+ case CAM_MENU_SCENE_NIGHT:
+ scene = CAM_SCENE_NIGHT;
+ break;
+ case CAM_MENU_SCENE_SPORTS:
+ scene = CAM_SCENE_SPORTS;
+ break;
+ case CAM_MENU_SCENE_PARTY:
+ scene = CAM_SCENE_PARTY;
+ break;
+ case CAM_MENU_SCENE_BEACHSNOW:
+ scene = CAM_SCENE_BEACHSNOW;
+ break;
+ case CAM_MENU_SCENE_SUNSET:
+ scene = CAM_SCENE_SUNSET;
+ break;
+ case CAM_MENU_SCENE_DUSKDAWN:
+ scene = CAM_SCENE_DUSKDAWN;
+ break;
+ case CAM_MENU_SCENE_FALL:
+ scene = CAM_SCENE_FALL;
+ break;
+ case CAM_MENU_SCENE_FIREWORK:
+ scene = CAM_SCENE_FIREWORK;
+ break;
+ case CAM_MENU_SCENE_TEXT:
+ scene = CAM_SCENE_TEXT;
+ break;
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ scene = CAM_SCENE_CANDLELIGHT;
+ break;
+ case CAM_MENU_SCENE_BACKLIGHT:
+ scene = CAM_SCENE_BACKLIGHT;
+ break;
+ case CAM_MENU_SCENE_SHOW_WINDOW:
+ scene = CAM_SCENE_SHOW_WINDOW;
+ break;
+ default:
+ break;
+ }
+
+ if (ad->camapp_handle->scene_mode != scene) {
+ CAM_GVALUE_SET_INT(value, scene);
+ cam_handle_value_set(ad, PROP_SCENE_MODE, &value);
+ }
+
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ __toolbar_menu_icon_update(ad);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ __update_setting_popup(ad);
+}
+
+static void __focus_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+ int focus_mode = CAM_FOCUS_AUTO;
+ switch ((int)data) {
+ case CAM_MENU_FOCUS_AUTO:
+ focus_mode = CAM_FOCUS_AUTO;
+ break;
+ case CAM_MENU_FOCUS_MACRO:
+ focus_mode = CAM_FOCUS_MACRO;
+ break;
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ focus_mode = CAM_FOCUS_FACE;
+ break;
+ default:
+ break;
+ }
+
+ CAM_GVALUE_SET_INT(value, focus_mode);
+ cam_handle_value_set(ad, PROP_AF_MODE, &value);
+
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_FOCUS_MODE);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ __update_setting_popup(ad);
+}
+
+static void __record_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+ int record_mode = CAM_RECORD_NORMAL;
+ switch ((int)data) {
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ record_mode = CAM_RECORD_NORMAL;
+ break;
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ record_mode = CAM_RECORD_MMS;
+ break;
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ record_mode = CAM_RECORD_SLOW;
+ break;
+ case CAM_MENU_RECORDING_MODE_FAST:
+ record_mode = CAM_RECORD_FAST;
+ break;
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ record_mode = CAM_RECORD_SELF;
+ break;
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ record_mode = CAM_RECORD_SELF_MMS;
+ break;
+ default:
+ break;
+ }
+
+ if (ad->camapp_handle->recording_mode != record_mode) {
+ CAM_GVALUE_SET_INT(value, record_mode);
+ cam_handle_value_set(ad, PROP_REC_MODE, &value);
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item) {
+ elm_genlist_item_update(ad->setting_select_item);
+ }
+
+ __toolbar_menu_icon_update(ad);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __update_menubar_icon_by_index(struct appdata *ad, int index)
+{
+ Evas_Object_Event_Cb func = NULL;
+ int menubar_no = -1;
+ menubar_no = __get_menubar_no_by_index(ad, index);
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
+ Evas_Object *icon = NULL;
+ icon = ad->toolbar_menu_arrays[menubar_no].icon;
+ if (icon)
+ __toolbar_menu_type_update(icon, index, ad, BUTTON_STATE_NORMAL, &func);
+}
+
+static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int flash_value = 0;
+ GValue value = {0};
+ switch ((int)data) {
+ case CAM_MENU_FLASH_OFF:
+ flash_value = CAM_FLASH_OFF;
+ break;
+ case CAM_MENU_FLASH_ON:
+ flash_value = CAM_FLASH_ON;
+ break;
+ case CAM_MENU_FLASH_AUTO:
+ flash_value = CAM_FLASH_AUTO;
+ break;
+ default:
+ flash_value = CAM_FLASH_OFF;
+ break;
+ }
+ CAM_GVALUE_SET_INT(value, flash_value);
+ cam_handle_value_set(ad, PROP_FLASH, &value);
+ __update_menubar_icon_by_index(ad, CAM_MENU_FLASH);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void toolbar_move_with_scale(Evas_Object *eo, double x, double y)
+{
+ DEBUG_TRACE("x = %f, y = %f" , x, y);
+ DEBUG_TRACE("elm_config_scale_get() = %f" , elm_config_scale_get());
+ evas_object_move(eo, x * elm_config_scale_get(), y * elm_config_scale_get());
+}
+
+/*note: @mouse_point is the coordinate of mouse click, output is scaled*/
+static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction,
+ int mouse_point,
+ int *x,
+ int *y)
+{
+ int ver_x, ver_y, h_x, h_y;
+ ver_x = ver_y = h_x = h_y = 0;
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ *x = (int)(SETTING_HOR_CTX_POPUP_X * elm_config_scale_get());
+ *y = mouse_point;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *x = (int)((1280 - SETTING_HOR_CTX_POPUP_X) * elm_config_scale_get());
+ *y = mouse_point;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ *x = (int)(SETTING_VER_CTX_POPUP_X * elm_config_scale_get());;
+ *y = mouse_point;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *x = (int)((720 - SETTING_VER_CTX_POPUP_X) * elm_config_scale_get());
+ *y = mouse_point;
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+
+ }
+}
+
+static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y)
+{
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *out_x = (int)((MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
+ *out_y = (int)(0.9*MAIN_H);
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *out_x = (int)((VER_MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
+ *out_y = (int)(0.8*VER_MAIN_H);
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+ }
+}
+
+/*note: in this func, all coordinate is not scale*/
+static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y)
+{
+ int menu_bar_no = menubar_no;
+ int ver_x, ver_y, hor_x, hor_y;
+ ver_x = ver_y = hor_x = hor_y = 0;
+
+ switch (menu_bar_no) {
+ case CAM_MENU_BAR_LEFT_0:
+ ver_x = 83;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 648;
+ break;
+ case CAM_MENU_BAR_LEFT_1:
+ ver_x = 223;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 508;
+ break;
+ case CAM_MENU_BAR_LEFT_2:
+ ver_x = 364;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 364;
+ break;
+ case CAM_MENU_BAR_LEFT_3:
+ ver_x = 508;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 223;
+ break;
+ case CAM_MENU_BAR_LEFT_4:
+ ver_x = 648;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 83;
+ break;
+ default:
+ DEBUG_TRACE("input para,error!");
+ break;
+ }
+
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ *x = hor_x;
+ *y = hor_y;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *x = 1280 - hor_x;
+ *y = ver_x;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ *x = ver_x;
+ *y = ver_y;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *x = hor_y;
+ *y = 1280 - ver_y;
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+ break;
+ }
+}
+
+static int __get_menubar_no_by_index(struct appdata *ad, int index)
+{
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ if (index == ad->toolbar_menu_arrays[i].menu_type) {
+ return i;
+ }
+ }
+ return CAM_MENU_BAR_LEFT_INVALID;
+}
+
+static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y)
+{
+ if (!obj) return;
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN);
+
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP);
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT);
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT);
+ break;
+ default:
+ DEBUG_TRACE("wow, check it, reached un-able reached codes");
+ }
+
+ toolbar_move_with_scale(obj, x, y);
+}
+
+static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y)
+{
+ if (!obj) return;
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN);
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP);
+ break;
+ default:
+ DEBUG_TRACE("wow, check it, reached un-able reached codes");
+ }
+
+ evas_object_move(obj, x, y);
+}
+
+static void __tip_popup_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ gboolean pop_tip = FALSE;
+ pop_tip = elm_check_state_get(obj);
+ DEBUG_TRACE("do_not_ask_again = %d", pop_tip);
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, !pop_tip);
+ cam_config_save();
+}
+
+static void __tip_popup_button_selected_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE();
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ cam_tip_popup_destroy(ad);
+}
+
+/*note: input x,y should be landscape mode coordinate*/
+static void __get_tip_popup_coord(int target_direction, int *out_x, int *out_y)
+{
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+ }
+}
+
+void cam_tip_popup_create(struct appdata *ad, const CamTipPopupType type)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ if (ad->tip_popup) {
+ cam_tip_popup_destroy(ad);
+ }
+
+ /*hide focus guide*/
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+
+ elm_object_part_content_unset(ad->ug_base, "tip_popup_layout");
+
+ ad->tip_popup = cam_app_load_edj(ad->ug_base, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/help");
+
+ cam_retm_if(ad->tip_popup == NULL, "tip_popup is NULL");
+ elm_object_part_content_set(ad->ug_base, "tip_popup_layout", ad->tip_popup);
+
+ Evas_Object *check = elm_check_add(ad->tip_popup);
+ evas_object_smart_callback_add(check, "changed", __tip_popup_check_cb, (void*)ad);
+ evas_object_show(check);
+ elm_object_part_content_set(ad->tip_popup, "content.help.check.swallow", check);
+
+ gboolean show_popup_tip = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, POP_TIP_DEFAULT);
+ if (show_popup_tip)
+ elm_check_state_set(check, EINA_FALSE);
+ else
+ elm_check_state_set(check, EINA_TRUE);
+
+ Evas_Object *btn = elm_button_add(ad->tip_popup);
+ elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_SK_OK"));
+ evas_object_smart_callback_add(btn, "unpressed", __tip_popup_button_selected_cb, (void *)ad);
+ evas_object_show(btn);
+ elm_object_part_content_set(ad->tip_popup, "button.swallow", btn);
+
+ Evas_Object *image = elm_image_add(ad->tip_popup);
+ elm_object_part_content_set(ad->tip_popup, "content.help.image", image);
+
+ if (ad->tip_popup) {
+ evas_object_show(ad->tip_popup);
+ evas_object_size_hint_min_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
+ evas_object_size_hint_max_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
+ evas_object_resize(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
+
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.check.txt", dgettext(PACKAGE, "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"));
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "tips.txt", dgettext(PACKAGE, "IDS_CAM_HEADER_TIPS"));
+
+ switch (type) {
+ case CAM_TIP_POPUP_BURSTSHOT_HELP:
+ ad->tip_popup_type = CAM_TIP_POPUP_BURSTSHOT_HELP;
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
+ dgettext(PACKAGE, "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"));
+ elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_BURSTSHOT_HELP_IMAGE);
+ break;
+ case CAM_TIP_POPUP_VOLUMEKEY_HELP:
+ ad->tip_popup_type = CAM_TIP_POPUP_VOLUMEKEY_HELP;
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
+ dgettext(PACKAGE, "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"));
+ elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_VOLUMEKEY_HELP_IMAGE);
+ break;
+ default:
+ DEBUG_TRACE("invalid tip-popup type");
+ break;
+ }
+
+ evas_object_show(ad->tip_popup);
+
+ int output_x, output_y;
+ output_x = output_y = 0;
+ __get_tip_popup_coord(ad->target_direction, &output_x, &output_y);
+ evas_object_move(ad->tip_popup, output_x, output_y);/*landscape*/
+ }
+}
+
+void cam_tip_popup_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->tip_popup);
+ ad->tip_popup_type = CAM_TIP_POPUP_NONE;
+}
+
+void cam_tip_popup_rotate(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->tip_popup);
+ cam_tip_popup_create(ad, ad->tip_popup_type);
+}
+
+static char *__sub_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ int index = (int)data;
+
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ CAM_MENU_ITEM* menu_item = NULL;
+ menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
+ return strdup(dgettext(PACKAGE, __get_text_name(*menu_item)));
+}
+
+static Evas_Object *__sub_menu_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, NULL, "camapp_handle is NULL");
+
+ int index = (int)data;
+ int value_index = 0;
+
+ if (strcmp(part, "elm.radio") == 0) {
+ Evas_Object* radio = elm_radio_add(obj);
+
+ elm_object_style_set(radio, "beat_winset_test/camera");
+ elm_radio_state_value_set(radio, index);
+ elm_radio_group_add(radio, ad->sub_menu_group);
+
+ switch (ad->sub_menu_type) {
+ case CAM_MENU_FLASH:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FLASH, camapp->flash);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SHOOTING_MODE, camapp->shooting_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_RECORDING_MODE, camapp->recording_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_SCENE_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SCENE_MODE, camapp->scene_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FOCUS_MODE, camapp->af_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_TIMER:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_TIMER, camapp->timer);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_EFFECTS:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_EFFECTS, camapp->effect);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_PHOTO_RESOLUTION, camapp->photo_resolution);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VIDEO_RESOLUTION, camapp->video_resolution);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_WHITE_BALANCE, camapp->white_balance);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_ISO:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_ISO, camapp->iso);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_METERING:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_METERING, camapp->auto_exposure);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_STORAGE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_STORAGE, camapp->storage);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VOLUME_KEY, camapp->volume_key);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ default:
+ break;
+ }
+ evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ return radio;
+ } else if (strcmp(part, "elm.icon") == 0) {
+ Evas_Object *icon = NULL;
+ char icon_name[1024+1] = { '\0', };
+ CAM_MENU_ITEM* menu_item = NULL;
+
+ menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
+ strncpy(icon_name, __get_icon_image_name(*menu_item, BUTTON_STATE_NORMAL), sizeof(icon_name));
+ icon = elm_image_add(obj);
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ return icon;
+ }
+
+ return NULL;
+}
+
+void __cam_setting_sub_gl_style_set()
+{
+
+ sub_itc.item_style = "camera/1text.2icon";
+ sub_itc.func.text_get = __sub_menu_gl_text_get;
+ sub_itc.func.content_get = __sub_menu_gl_icon_get;
+ sub_itc.func.state_get = NULL;
+ sub_itc.func.del = NULL;
+}
+
+static void* __get_sub_menu_genlist_cb(const CAM_MENU_ITEM item)
+{
+ switch(item){
+ case CAM_MENU_FLASH:
+ return __flash_selected_cb;
+ case CAM_MENU_SHOOTING_MODE:
+ return __shot_mode_selected_cb;
+ case CAM_MENU_RECORDING_MODE:
+ return __record_mode_selected_cb;
+ case CAM_MENU_SCENE_MODE:
+ return __scene_mode_selected_cb;
+ case CAM_MENU_FOCUS_MODE:
+ return __focus_mode_selected_cb;
+ case CAM_MENU_TIMER:
+ return __timer_popup_cb;
+ case CAM_MENU_EFFECTS:
+ return __effects_selected_cb;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return __photo_resolution_popup_cb;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return __video_resolution_popup_cb;
+ case CAM_MENU_WHITE_BALANCE:
+ return __wb_popup_cb;
+ case CAM_MENU_ISO:
+ return __iso_popup_cb;
+ case CAM_MENU_METERING:
+ return __metering_popup_cb;
+ case CAM_MENU_STORAGE:
+ return __storage_popup_cb;
+ case CAM_MENU_VOLUME_KEY:
+ return __volume_key_popup_cb;
+ default:
+ return NULL;
+ }
+}
+
+static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata)
+{
+ struct appdata *ad = (struct appdata *)fdata;
+ cam_retv_if(ad == NULL, EINA_FALSE);
+
+ CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
+ DEBUG_TRACE("item = %d", *item);
+
+ elm_genlist_item_append(ad->sub_genlist, &sub_itc, (void*)(ad->sub_menu_index),
+ NULL, ELM_GENLIST_ITEM_NONE, __get_sub_menu_genlist_cb(ad->sub_menu_type), (void *)*item);
+
+ ad->sub_menu_index++;
+ return EINA_TRUE;
+}
+
+static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ Evas_Object *layout = NULL;
+ int menu_bar_no = -1;
+ int x, y;
+
+ setting_ctxpopup_create(ad, from_setting);
+ layout = elm_layout_add(ad->setting_ctxpopup);
+ elm_layout_file_set(layout, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout");
+
+ /* set text */
+ edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text", _setting_gl_text_get((void*)menu_item, NULL, NULL));
+
+ if (ad->sub_menu_composer) {
+ cam_compose_free(ad->sub_menu_composer);
+ ad->sub_menu_composer = NULL;
+ }
+
+ if (ad->sub_menu_composer == NULL) {
+ ad->sub_menu_composer = calloc(1, sizeof(cam_menu_composer));
+ cam_compose_list_menu((void*)ad, menu_item, ad->sub_menu_composer);
+ }
+
+ int size = eina_array_count(ad->sub_menu_composer->array);
+ int sub_menu_height = __get_sub_menu_height(size);
+ evas_object_size_hint_min_set(layout,
+ SUB_MENU_POPUP_WIDTH * elm_config_scale_get(),
+ sub_menu_height * elm_config_scale_get());
+
+ ad->sub_menu_type = menu_item;
+ ad->sub_menu_index = 0;
+ ad->sub_genlist = elm_genlist_add(layout);
+ ad->sub_menu_group = elm_radio_add(ad->sub_genlist);
+
+ __cam_setting_sub_gl_style_set();
+ eina_array_foreach(ad->sub_menu_composer->array, __sub_menu_genlist_each_cb, ad);
+
+ evas_object_show(ad->sub_genlist);
+ elm_object_part_content_set(layout, "elm.swallow.box", ad->sub_genlist);
+ elm_object_content_set(ad->setting_ctxpopup, layout);
+
+ if (from_setting) {
+ __cam_get_ctxpopup_coord_in_setting_toolbar(ad->target_direction, setting_gl_y, &x, &y);
+ __cam_toolbar_move_sub_menu(ad->setting_ctxpopup, ad->target_direction, x, y);
+ } else {
+ menu_bar_no = __get_menubar_no_by_index(ad, menu_item);
+ __get_option_coord_by_menubar_no(menu_bar_no, ad->target_direction, &x, &y);
+ __cam_toolbar_move_ctxpopup(ad->setting_ctxpopup, ad->target_direction, x, y);
+ }
+
+ evas_object_show(ad->setting_ctxpopup);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ gboolean from_setting = FALSE;
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ }
+ if (event_info) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ }
+
+ ad->displayed_setting_popup = FALSE;
+ toolbar_create_shortcuts_popup(ad);
+}
+
+static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_VOLUME_KEY_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_VOLUME_KEY, from_setting);
+}
+
+static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ if (!ad->enable_mode_change) {
+ DEBUG_TRACE("Can not change mode");
+ return;
+ }
+
+ ad->enable_mode_change = FALSE;
+
+ cam_toolbar_setting_popup_destroy(ad);
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+
+ if (camapp->self_portrait == TRUE)
+ camapp->self_portrait = FALSE;
+ else
+ camapp->self_portrait = TRUE;
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->self_portrait);
+ cam_handle_value_set(ad, PROP_SELF_PORTRAIT, &value);
+
+ cam_toolbar_update(ad);
+}
+
+static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_FLASH_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_FLASH, from_setting);
+}
+
+static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_SHOOTING_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_SHOOTING_MODE, from_setting);
+}
+
+static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_RECORDING_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_RECORDING_MODE, from_setting);
+}
+
+static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_SCENE_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_SCENE_MODE, from_setting);
+}
+
+static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "ad->camapp_handle is NULL");
+
+ load_ev_edje(ad);
+
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->burst_shot = %d", camapp->burst_shot);
+
+ if (obj != ad->burst_shot_mode_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->burst_shot == TRUE) {
+ camapp->burst_shot = FALSE;
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
+ } else {
+ camapp->burst_shot = TRUE;
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->burst_shot == TRUE)
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->burst_shot);
+ cam_handle_value_set(ad, PROP_BURST_SHOT, &value);
+
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_BURST_SHOT_MODE);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_FOCUS_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_FOCUS_MODE, from_setting);
+}
+
+static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_TIMER_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_TIMER, from_setting);
+}
+
+static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_EFFECTS_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_EFFECTS, from_setting);
+}
+
+static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_WHITE_BALANCE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_WHITE_BALANCE, from_setting);
+}
+
+static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_ISO_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_ISO, from_setting);
+}
+
+static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_METERING_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_METERING, from_setting);
+}
+
+static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->anti_shake = %d", camapp->anti_shake);
+
+ if (obj != ad->antishake_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->anti_shake == TRUE) {
+ camapp->anti_shake = FALSE;
+ elm_check_state_set(ad->antishake_radio, EINA_FALSE);
+ } else {
+ camapp->anti_shake = TRUE;
+ elm_check_state_set(ad->antishake_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->anti_shake == TRUE)
+ elm_check_state_set(ad->antishake_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->antishake_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->anti_shake);
+ cam_handle_value_set(ad, PROP_AHS, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_ANTI_SHAKE);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->outdoor_visibility = %d", camapp->outdoor_visibility);
+
+ if (obj != ad->outdoor_visibility_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->outdoor_visibility == TRUE) {
+ camapp->outdoor_visibility = FALSE;
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
+ } else {
+ camapp->outdoor_visibility = TRUE;
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->outdoor_visibility == TRUE)
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->outdoor_visibility);
+ cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_OUTDOOR_VISIBILITY);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->auto_contrast = %d", camapp->auto_contrast);
+
+ if (obj != ad->autocontrast_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->auto_contrast == TRUE) {
+ camapp->auto_contrast = FALSE;
+ elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
+ } else {
+ camapp->auto_contrast = TRUE;
+ elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->auto_contrast == TRUE)
+ elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->auto_contrast);
+ cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_AUTO_CONTRAST);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+
+void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->guideline = %d", camapp->guideline);
+
+ if (obj != ad->guideline_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->guideline == TRUE) {
+ camapp->guideline = FALSE;
+ elm_check_state_set(ad->guideline_radio, EINA_FALSE);
+ } else {
+ camapp->guideline = TRUE;
+ elm_check_state_set(ad->guideline_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->guideline == TRUE)
+ elm_check_state_set(ad->guideline_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->guideline_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->guideline);
+ cam_handle_value_set(ad, PROP_GUIDELINE, &value);
+
+ settings_guideline_refresh(ad);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_GUIDELINES);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+
+static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->save_as_flip = %d", camapp->save_as_flip);
+
+ if (obj != ad->save_as_flip_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->save_as_flip == TRUE) {
+ camapp->save_as_flip = FALSE;
+ elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
+ } else {
+ camapp->save_as_flip = TRUE;
+ elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->save_as_flip == TRUE)
+ elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->save_as_flip);
+ cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_SAVE_AS_FLIP);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+
+static void __voice_cmd_cb(CamVoiceCmdState state, void* data)
+{
+ switch(state) {
+ case CAM_VOICE_CMD_READY:
+ // do capture
+ {
+ char *emission = "release_shutter_sig";
+ char *source = "temp";
+ cam_toolbar_shutter_button_cb(data, NULL,
+ emission, source);
+ }
+ break;
+ case CAM_VOICE_CMD_REJECT:
+ // do action - after discuss with UX
+ break;
+ case CAM_VOICE_CMD_ERROR:
+ //do action - after discuss with UX
+ break;
+ default:
+ break;
+ }
+}
+
+static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->capture_by_voice = %d", camapp->capture_by_voice);
+
+ if (obj != ad->capture_by_voice_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->capture_by_voice == TRUE) {
+ camapp->capture_by_voice = FALSE;
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
+ } else {
+ camapp->capture_by_voice = TRUE;
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->capture_by_voice == TRUE)
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
+ return;
+ }
+
+ if (camapp->capture_by_voice) {
+ if ( !cam_voice_cmd_create((cam_voice_cmd_cb)__voice_cmd_cb,ad)) {
+ cam_voice_cmd_destroy();
+ camapp->capture_by_voice = FALSE;
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
+ }
+
+ } else cam_voice_cmd_destroy();
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_CAPTURE_VOICE);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->gps = %d", camapp->gps);
+
+ if (obj != ad->gps_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->gps == TRUE) {
+ camapp->gps = FALSE;
+ elm_check_state_set(ad->gps_radio, EINA_FALSE);
+ } else {
+ camapp->gps = TRUE;
+ elm_check_state_set(ad->gps_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->gps == TRUE)
+ elm_check_state_set(ad->gps_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->gps_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->gps);
+ cam_handle_value_set(ad, PROP_GPS, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_GPS_TAG);
+ __setting_popup_timeout_checker_start(ad);
+
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_STORAGE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_STORAGE, from_setting);
+}
+
+static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_PHOTO_RESOLUTION_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_PHOTO_RESOLUTION, from_setting);
+}
+
+static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_VIDEO_RESOLUTION_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_VIDEO_RESOLUTION, from_setting);
+}
+
+static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(data == NULL);
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ gboolean from_setting = FALSE;
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_RESET_POPUP;
+ }
+ if (event_info) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ }
+
+ DEL_EVAS_OBJECT(ad->confirm_popup);
+
+ ad->confirm_popup = elm_popup_add(ad->ug_base);
+ evas_object_size_hint_weight_set(ad->confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_popup_timeout_set(ad->confirm_popup, 9.0);
+
+
+ char popup_str[1024 + 1] = { '\0',};
+ snprintf(popup_str, 1024, "%s%s%s", _("<font=SLP:style=Roman><color=#000000><align=center>"),
+ dgettext(PACKAGE, "IDS_CAM_POP_RESET_SETTINGS_Q"), _("</align></color></font>"));
+
+ elm_object_text_set(ad->confirm_popup, popup_str);
+ Evas_Object *btn1 = elm_button_add(ad->confirm_popup);
+ elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
+ elm_object_part_content_set(ad->confirm_popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __restore_defaults_popup_cb_ok_cb, (void*)ad);
+ Evas_Object *btn2 = elm_button_add(ad->confirm_popup);
+ elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+ elm_object_part_content_set(ad->confirm_popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", __restore_defaults_popup_cb_cancel_cb, (void*)ad);
+
+ evas_object_show(ad->confirm_popup);
+
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+void settings_guideline_refresh(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL,"camapp is NULL");
+ DEBUG_TRACE("ad->camapp_handle->guideline = %d" ,ad->camapp_handle->guideline);
+
+ if( ad->camapp_handle->guideline == TRUE) {
+ cam_guideline_create(ad);
+
+ if (ad->guideline_edje && ad->toolbar_setting_popup) {
+ evas_object_hide(ad->guideline_edje);
+ } else {
+ if (ad->toolbar_edje)
+ evas_object_raise(ad->toolbar_edje);
+ }
+ } else {
+ DEL_EVAS_OBJECT(ad->guideline_edje);
+ }
+}
+
+static Eina_Bool __setting_popup_timeout_checker_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->setting_toolbar_hide_timer)
+ ad->setting_toolbar_hide_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+
+ }
+ if (ad->setting_toolbar_hide_timer)
+ ad->setting_toolbar_hide_timer = NULL;
+ gdouble diff_time = 0.0;
+ diff_time = _get_current_time() - camapp->start_time;
+ if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
+ && (diff_time >= CAM_SETTING_POPUP_TIMEOUT)) {
+ DEBUG_TRACE("destroy setting pupup");
+ if (ad->setting_toolbar_hide_timer) {
+ if (ad->setting_ctxpopup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ if (ad->shot_mode_guide_popup)
+ toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
+ } else if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+ }
+ }
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static gboolean __setting_popup_timeout_checker_start(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+ if (ad->setting_toolbar_hide_timer) {
+ ecore_timer_del(ad->setting_toolbar_hide_timer);
+ ad->setting_toolbar_hide_timer = NULL;
+ }
+ ad->setting_toolbar_hide_timer =
+ ecore_timer_add(CAM_SETTING_POPUP_TIMEOUT, __setting_popup_timeout_checker_cb, ad);
+ camapp->start_time = _get_current_time();
+ DEBUG_TRACE("END");
+ return TRUE;
+}
+
+int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item)
+{
+ int menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
+ Evas_Object *icon = NULL;
+ __get_menubar_shortcuts_info(ad, menu_item, &menu_bar_no, &icon);
+ return menu_bar_no;
+}
+
+/*note: output menu index, input display popup value*/
+int cam_toolbar_displaypopup_map_menu_value(int display_popup)
+{
+ switch (display_popup) {
+ case DISPLAY_NONE_POPUP:
+ return CAM_MENU_EMPTY;
+ break;
+ case DISPLAY_EDIT_SHOTCUTS_POPUP:
+ return CAM_MENU_SHORTCUTS;
+ break;
+ case DISPLAY_BURST_SHOT_MODE_POPUP:
+ return CAM_MENU_BURST_SHOT_MODE;
+ break;
+ case DISPLAY_VOLUME_KEY_POPUP:
+ return CAM_MENU_VOLUME_KEY;
+ break;
+ case DISPLAY_SELF_PORTRAIT_POPUP:
+ return CAM_MENU_SELF_PORTRAIT;
+ break;
+ case DISPLAY_SCENE_MODE_POPUP:
+ return CAM_MENU_SCENE_MODE;
+ break;
+ case DISPLAY_FOCUS_MODE_POPUP:
+ return CAM_MENU_FOCUS_MODE;
+ break;
+ case DISPLAY_EFFECTS_POPUP:
+ return CAM_MENU_EFFECTS;
+ break;
+ case DISPLAY_ANTI_SHAKE_POPUP:
+ return CAM_MENU_ANTI_SHAKE;
+ break;
+ case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
+ return CAM_MENU_OUTDOOR_VISIBILITY;
+ break;
+ case DISPLAY_AUTO_CONTRAST_POPUP:
+ return CAM_MENU_AUTO_CONTRAST;
+ break;
+ case DISPLAY_GUIDELINES_POPUP:
+ return CAM_MENU_GUIDELINES;
+ break;
+ case DISPLAY_CAPTURE_VOICE_POPUP:
+ return CAM_MENU_CAPTURE_VOICE;
+ break;
+ case DISPLAY_GPS_TAG_POPUP:
+ return CAM_MENU_GPS_TAG;
+ break;
+ case DISPLAY_STORAGE_POPUP:
+ return CAM_MENU_STORAGE;
+ break;
+ case DISPLAY_RESET_POPUP:
+ return CAM_MENU_RESET;
+ break;
+ case DISPLAY_SHOOTING_MODE_POPUP:
+ return CAM_MENU_SHOOTING_MODE;
+ break;
+ case DISPLAY_RECORDING_MODE_POPUP:
+ return CAM_MENU_RECORDING_MODE;
+ break;
+ case DISPLAY_VIDEO_RESOLUTION_POPUP:
+ return CAM_MENU_VIDEO_RESOLUTION;
+ break;
+ case DISPLAY_PHOTO_RESOLUTION_POPUP:
+ return CAM_MENU_PHOTO_RESOLUTION;
+ break;
+ case DISPLAY_ISO_POPUP:
+ return CAM_MENU_ISO;
+ break;
+ case DISPLAY_METERING_POPUP:
+ return CAM_MENU_METERING;
+ break;
+ case DISPLAY_WHITE_BALANCE_POPUP:
+ return CAM_MENU_WHITE_BALANCE;
+ break;
+ case DISPLAY_FLASH_POPUP:
+ return CAM_MENU_FLASH;
+ break;
+ case DISPLAY_TIMER_POPUP:
+ return CAM_MENU_TIMER;
+ break;
+ case DISPLAY_SAVE_AS_FLIP:
+ return CAM_MENU_SAVE_AS_FLIP;
+ default:
+ return CAM_MENU_EMPTY;
+ break;
+ }
+}
+
+Eina_Bool cam_show_setting_menu_option_popup(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ switch (ad->displayed_setting_popup) {
+ case DISPLAY_NONE_POPUP:
+ break;
+ case DISPLAY_EDIT_SHOTCUTS_POPUP:
+ __setting_edit_shortcut_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_VOLUME_KEY_POPUP:
+ __setting_volume_key_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_SELF_PORTRAIT_POPUP:
+ __setting_self_portrait_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_SCENE_MODE_POPUP:
+ __setting_scenemode_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_FOCUS_MODE_POPUP:
+ __setting_focus_mode_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_EFFECTS_POPUP:
+ __setting_effects_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_ANTI_SHAKE_POPUP:
+ __setting_anti_shake_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
+ __setting_outdoor_visibility_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_AUTO_CONTRAST_POPUP:
+ __setting_autocontrast_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_GUIDELINES_POPUP:
+ __setting_guideline_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_CAPTURE_VOICE_POPUP:
+ __setting_capture_by_voice_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_GPS_TAG_POPUP:
+ __setting_gps_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_STORAGE_POPUP:
+ __setting_storage_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_RESET_POPUP:
+ __setting_restore_defaults_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_SHOOTING_MODE_POPUP:
+ __setting_shot_mode_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_RECORDING_MODE_POPUP:
+ __setting_record_mode_popup(ad, NULL, NULL);
+ break;
+ case DISPLAY_VIDEO_RESOLUTION_POPUP:
+ __setting_video_resolution_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_PHOTO_RESOLUTION_POPUP:
+ __setting_photo_resolution_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_ISO_POPUP:
+ __setting_iso_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_METERING_POPUP:
+ __setting_metering_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_WHITE_BALANCE_POPUP:
+ __setting_wb_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_FLASH_POPUP:
+ __setting_flash_popup(ad, NULL, NULL);
+ break;
+ case DISPLAY_TIMER_POPUP:
+ __setting_timer_popup_cb(ad,NULL,NULL);
+ break;
+ case DISPLAY_SAVE_AS_FLIP:
+ __setting_save_as_flip_popup_cb(ad, NULL, NULL);
+ break;
+ default:
+ break;
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool cam_show_setting_menu(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ if (ad->show_setting_popup_after_rotate == TRUE) {
+ cam_toolbar_setting_popup_create(ad);
+ } else if (ad->show_edit_shortcuts_popup_after_rotate == TRUE) {
+ toolbar_create_shortcuts_popup(ad);
+ }
+
+ if (ad->displayed_setting_popup != DISPLAY_NONE_POPUP) {
+ ecore_idler_add(cam_show_setting_menu_option_popup, ad);
+ }
+
+ ad->is_rotating = FALSE;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void toolbar_destroy_shortcuts_popup(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ cam_retm_if(ad->toolbar_edje == NULL, "appdata is null");
+ elm_object_part_content_unset(ad->toolbar_edje, "shortcuts_popup");
+
+ DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_scroll);
+ DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
+ ad->edit_shortcuts_popup_scroll = NULL;
+ ad->edit_shortcuts_popup_ctx = NULL;
+ ad->edit_shortcuts_popup = NULL;
+
+ /*clear eina_list*/
+ __cam_toolbar_edit_shortcuts_data_clean();
+
+ destroy_menubar_shortcuts_mouse_event(ad, 0, TRUE);
+ /*exit edit mode*/
+ /*show edit mode*/
+ /*TODO: here should be rotate icon*/
+
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+
+ __set_show_state_preview_obj(ad, TRUE);
+
+ int i = 0;
+ for (i = CAM_MENU_EMPTY + 1; i < CAM_MENU_MAX_NUMS; i++) {
+ __update_menubar_icon_by_index(ad, i);
+ }
+}
+
+void cam_toolbar_setting_popup_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ DEBUG_TRACE("");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->genlist) {
+ elm_genlist_clear(ad->genlist);
+ evas_object_del(ad->genlist);
+ ad->genlist = NULL;
+ }
+
+ DEL_EVAS_OBJECT(ad->toolbar_setting_popup);
+ ad->toolbar_setting_popup_area = NULL;
+ ad->setting_select_item = NULL; /*select item*/
+
+ /*elm_all_flush();*/
+ cam_elm_cache_flush();
+
+ __set_show_state_preview_obj(ad, TRUE);
+}
+
+void cam_toolbar_setting_popup_update(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+
+ if (!ad->toolbar_setting_popup)
+ return;
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ __update_setting_popup(ad);
+}
+
+static Evas_Object *_setting_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is null");
+
+ int index = (int)data;
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, NULL);
+ Evas_Object *icon = NULL;
+
+ switch(index) {
+ case CAM_MENU_SHORTCUTS:
+ icon = NULL;
+ break;
+ case CAM_MENU_BURST_SHOT_MODE:
+ {
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->burst_shot) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_burst_shot_popup_cb, (void*)ad);
+ ad->burst_shot_mode_radio = icon;
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_SELF_PORTRAIT:
+ icon = elm_check_add(obj);
+
+ if (camapp->self_portrait == FALSE) {
+ elm_check_state_set(icon, EINA_FALSE);
+ } else {
+ elm_check_state_set(icon, EINA_TRUE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ break;
+ case CAM_MENU_FLASH:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_SCENE_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_TIMER:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_EFFECTS:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_ISO:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_METERING:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_ANTI_SHAKE:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->anti_shake) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_anti_shake_popup_cb, (void*)ad);
+ ad->antishake_radio = icon;
+ break;
+ case CAM_MENU_OUTDOOR_VISIBILITY:/*TODO:is finding solution*/
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->outdoor_visibility) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_outdoor_visibility_popup_cb, (void*)ad);
+ ad->outdoor_visibility_radio = icon;
+ break;
+ case CAM_MENU_AUTO_CONTRAST:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->auto_contrast) {
+ elm_check_state_set(icon, EINA_TRUE);
+ }
+ else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_autocontrast_popup_cb, (void*)ad);
+ ad->autocontrast_radio = icon;
+ break;
+
+ case CAM_MENU_GUIDELINES:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->guideline) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_guideline_popup_cb, (void*)ad);
+ ad->guideline_radio = icon;
+ break;
+ case CAM_MENU_CAPTURE_VOICE:/*TODO:now no relase solution to support it*/
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->capture_by_voice) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_capture_by_voice_popup_cb, (void*)ad);
+ ad->capture_by_voice_radio = icon;
+ break;
+ case CAM_MENU_GPS_TAG:
+ icon = elm_check_add(obj);
+
+ if (camapp->gps) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_gps_popup_cb, (void*)ad);
+ ad->gps_radio = icon;
+ break;
+ case CAM_MENU_SAVE_AS_FLIP:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->save_as_flip) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_save_as_flip_popup_cb, (void*)ad);
+ ad->save_as_flip_radio = icon;
+ break;
+ case CAM_MENU_STORAGE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_RESET:
+ break;
+ case CAM_MENU_MAX_NUMS:
+ DEBUG_TRACE("your array out, please check!");
+ break;
+ default:
+ DEBUG_TRACE("Error occur!");
+ }
+ if (icon) {
+ /*evas_object_resize(icon, 86 , 84);
+ evas_object_size_hint_min_set(icon, 86, 84);
+ evas_object_size_hint_max_set(icon, 86, 84);*/
+ evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ }
+ return icon;
+}
+
+static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ int index = (int)data;
+
+ switch(index) {
+ case CAM_MENU_SHORTCUTS:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EDIT_SHORTCUTS"));
+ break;
+ case CAM_MENU_BURST_SHOT_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB"));
+ break;
+ case CAM_MENU_VOLUME_KEY:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"));
+ break;
+ case CAM_MENU_SELF_PORTRAIT:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT"));
+ break;
+ case CAM_MENU_FLASH:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FLASH"));
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE"));
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE"));
+ break;
+ case CAM_MENU_SCENE_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE"));
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE"));
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE"));
+ break;
+ case CAM_MENU_TIMER:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_TIMER"));
+ break;
+ case CAM_MENU_EFFECTS:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS"));
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"));
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"));
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB"));
+ break;
+ case CAM_MENU_ISO:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ISO"));
+ break;
+ case CAM_MENU_METERING:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_METERING"));
+ break;
+ case CAM_MENU_ANTI_SHAKE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE"));
+ break;
+ case CAM_MENU_OUTDOOR_VISIBILITY:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY"));
+ break;
+ case CAM_MENU_AUTO_CONTRAST:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST"));
+ break;
+ case CAM_MENU_GUIDELINES:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE"));
+ break;
+ case CAM_MENU_CAPTURE_VOICE:
+ return strdup("Capture with voice");
+ break;
+ case CAM_MENU_GPS_TAG:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG"));
+ break;
+ case CAM_MENU_SAVE_AS_FLIP:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED"));
+ break;
+ case CAM_MENU_STORAGE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE"));
+ break;
+ case CAM_MENU_RESET:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET"));
+ break;
+ case CAM_MENU_MAX_NUMS:
+ DEBUG_TRACE("your array out, please check!");
+ break;
+ default:
+ DEBUG_TRACE("Error occur!");
+ }
+ return strdup("test");
+}
+
+static void __setting_gl_mouse_down(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info){
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ if (ad->setting_ctxpopup) {
+ /*setting_ctxpopup_destroy(ad);*/
+ evas_object_hide(ad->setting_ctxpopup);
+ }
+ Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
+ setting_gl_x = mu->canvas.x;
+ setting_gl_y = mu->canvas.y;
+ setting_gl_x = mu->output.x;
+ setting_gl_y = mu->output.y;
+ DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
+ DEBUG_TRACE("mu->output.x = %d, mu->output.y = %d", mu->output.x, mu->output.y);
+
+ __setting_popup_timeout_checker_start(ad);
+ cam_app_timeout_checker_update();
+}
+
+/*mouse move func for setting popup*/
+static void __setting_gl_mouse_move(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info){
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ if (ad->setting_ctxpopup) {
+ /*setting_ctxpopup_destroy(ad);*/
+ evas_object_hide(ad->setting_ctxpopup);
+ }
+ Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
+ setting_gl_x = mu->cur.canvas.x;
+ setting_gl_y = mu->cur.canvas.y;
+ setting_gl_x = mu->cur.output.x;
+ setting_gl_y = mu->cur.output.y;
+ DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
+ DEBUG_TRACE("mu->cur->canvas.x = %d, mu->cur->canvas.y = %d", mu->cur.canvas.x, mu->cur.canvas.y);
+
+ __setting_popup_timeout_checker_start(ad);
+ cam_app_timeout_checker_update();
+}
+
+static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info){
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ cam_app_timeout_checker_update();
+ __setting_popup_timeout_checker_start(ad);
+ if (!event_info) return;
+ Evas_Coord x, y, w, h;
+
+ Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
+ shortcuts_canvas_prev_x = mu->canvas.x;
+ shortcuts_canvas_prev_y = mu->canvas.y;
+ DEBUG_TRACE("x = %d, y = %d", shortcuts_canvas_prev_x, shortcuts_canvas_prev_y);
+
+ cam_long_press_trigger(LONG_PRESS_ID_EDIT, mu->canvas.x, mu->canvas.y);
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ evas_object_geometry_get(shortcuts_ele->icon, &x, &y, &w, &h);
+ shortcuts_ele->x = x;
+ shortcuts_ele->y = y;
+ shortcuts_ele->w = w;
+ shortcuts_ele->h = h;
+ DEBUG_TRACE("x,%d y,%d w,%d h,%d index %d",x, y, w, h, shortcuts_ele->part_index);
+
+ if (obj == shortcuts_ele->icon) {
+ ad->shortcut_data = shortcuts_ele;
+ }
+ }
+ if (!ad->shortcut_data) { /*not find shortcut data, so it will come from menubar*/
+ int menubar_no = -1;
+ if (check_if_shortcuts_from_menubar(ad, obj, &menubar_no)) {
+ /*get shortcuts data:*/
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->menu_bar_no == menubar_no) {
+ ad->shortcut_data = shortcuts_ele;
+ }
+ }
+ } else {
+ DEBUG_TRACE("error occur!");
+ }
+ } else {
+ DEBUG_TRACE("find in the shortcuts panel");
+ }
+
+ evas_object_raise(obj);
+ evas_object_lower(evas_object_above_get(obj));
+
+}
+
+static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj,void *event_info)
+{
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ pthread_mutex_lock(&edit_shortcuts_move_mutex);
+ ShortCutData *moving_ele = ad->shortcut_data;
+ ShortCutData *swap_ele = ad->swap_data;
+
+ /*NOTE: reset opacity*/
+ if (ad->swap_data) {
+ if (ad->swap_data->is_on_menu_bar) {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
+ evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
+ }
+ } else {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->swap_data->icon) {
+ evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
+ }
+ }
+ }
+
+ /*TODO: SWAP:*/
+ if (swap_ele && swap_ele->setting_type >= 0) {
+ if ((swap_ele->is_on_menu_bar & moving_ele->is_on_menu_bar) == TRUE) {/*note: both in menubar*/
+ __swap_menubar_shortcuts(ad, moving_ele, swap_ele);
+ cam_toolbar_menu_config_update((void *)ad);
+ } else if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
+ DEBUG_TRACE("do nothing in mouse up");
+ } else {/*note: one is in menubar, one is not*/
+ if (swap_ele->is_on_menu_bar == TRUE) {/*note: swap_ele is on menubar*/
+ evas_object_event_callback_del(obj,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
+ } else {/*note: swap_ele is not on menubar*/
+ moving_ele->is_on_menu_bar = FALSE;
+ int tmp_menub_bar_no = moving_ele->menu_bar_no;
+ moving_ele->menu_bar_no = -1;
+ DEL_EVAS_OBJECT(obj);
+ __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
+ update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+ cam_toolbar_menu_config_update((void *)ad);
+ destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+
+ /*TODO: update part_index*/
+ __edit_shortcuts_layout_shortcuts_insert(ad, swap_ele, moving_ele);
+ }
+ }
+ }
+ if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar)) {
+ /*note: menu bar shortcuts move to the empty item in toolbar*/
+ if (moving_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
+ }
+ moving_ele->is_on_menu_bar = TRUE;
+ moving_ele->menu_bar_no = swap_ele->menu_bar_no;
+ moving_ele->part_index = -1;
+ ad->toolbar_menu_arrays[moving_ele->menu_bar_no].menu_type = moving_ele->setting_type;
+ cam_toolbar_menu_config_update((void *)ad);
+ update_menubar_shortcuts_mouse_event(ad, moving_ele->menu_bar_no, FALSE);
+ evas_object_hide(moving_ele->icon);
+ free(swap_ele);
+ swap_ele = NULL;
+ ad->swap_data = NULL;
+ } else if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar == FALSE)) {
+ /*note: case: menubar shortcuts move to the empty item in edit short panel: flash|empty(move to here)|empty*/
+ if (moving_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
+ }
+ moving_ele->is_on_menu_bar = FALSE;
+ moving_ele->menu_bar_no = -1;
+ moving_ele->part_index = swap_ele->part_index;
+ moving_ele->list_index = swap_ele->list_index;
+ cam_toolbar_menu_config_update((void *)ad);
+ evas_object_show(moving_ele->icon);
+ HIDE_EVAS_OBJECT(obj);
+ free(swap_ele);
+ swap_ele = NULL;
+ ad->swap_data = NULL;
+ __resort_edit_shortcuts_list_by_part_index();
+ }
+ ad->swap_data = NULL;
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ pthread_mutex_unlock(&edit_shortcuts_move_mutex);
+
+}
+
+bool shortcuts_rect_check_intersect(Evas_Coord a_left, Evas_Coord a_top, Evas_Coord a_right, Evas_Coord a_bottom,
+ Evas_Coord b_left, Evas_Coord b_top, Evas_Coord b_right, Evas_Coord b_bottom)
+{
+ if( (MIN(a_right, b_right) - MAX(a_left, b_left) > 60)
+ && (MIN(a_bottom, b_bottom) - MAX(a_top, b_top)> 30)) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+}
+
+/*note: parent_shortcuts is swap_ele, sub_shortcuts is cur_ele, if cur_ele is in swap_ele, not swap them*/
+gboolean __cam_toolbar_shortcuts_rect_contain_check(CAM_Edit_ShortCuts_Rect sub_shortcuts,
+ CAM_Edit_ShortCuts_Rect parent_shortcuts,
+ int correction_w,
+ int correction_h)
+{
+ int swap_rel1_x, swap_rel1_y, swap_w, swap_h;
+ int cur_rel1_x, cur_rel1_y, cur_w, cur_h;
+ cur_rel1_x = sub_shortcuts.x;
+ cur_rel1_y = sub_shortcuts.y;
+ cur_w = sub_shortcuts.w;
+ cur_h = sub_shortcuts.h;
+
+ swap_rel1_x = parent_shortcuts.x;
+ swap_rel1_y = parent_shortcuts.y;
+ swap_w = parent_shortcuts.w;
+ swap_h = parent_shortcuts.h;
+
+ return __shortcuts_rect_contain_check(swap_rel1_x, swap_rel1_y, swap_w, swap_h,
+ cur_rel1_x, cur_rel1_y, cur_w, cur_h,
+ correction_w, correction_h);
+}
+
+static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
+ int swap_rel1_y,
+ int swap_w,
+ int swap_h,
+ int cur_rel1_x,
+ int cur_rel1_y,
+ int cur_w,
+ int cur_h,
+ int correction_w,
+ int correction_h)
+{
+ int a_rel1_x = swap_rel1_x - correction_w;
+ int a_rel1_y = swap_rel1_y - correction_h;
+ int a_rel2_x;
+ if (swap_w < cur_w)
+ a_rel2_x = swap_rel1_x + cur_w + correction_w;
+ else
+ a_rel2_x = swap_rel1_x + swap_w + correction_w;
+ int a_rel2_y;
+ if (swap_h < cur_h)
+ a_rel2_y = swap_rel1_y + cur_h + correction_h;
+ else
+ a_rel2_y = swap_rel1_y + swap_h + correction_h;
+
+ int b_rel1_x = cur_rel1_x;
+ int b_rel1_y = cur_rel1_y;
+ int b_rel2_x = cur_rel1_x + cur_w;
+ int b_rel2_y = cur_rel1_y + cur_h;
+
+ if ((a_rel1_x < b_rel1_x)
+ &&(a_rel1_y < b_rel1_y)
+ &&(a_rel2_x > b_rel2_x)
+ &&(a_rel2_y > b_rel2_y)
+ ) {
+ return TRUE;
+ } else {
+
+ return FALSE;
+ }
+}
+
+
+/*
+@item_1:pre
+@item_2:behind item_1
+*/
+void shortcuts_swap(Eina_List **head, Eina_List * item_1, Eina_List * item_2)
+{
+
+ Eina_List *tmp_item_1_next = item_1->next;
+ Eina_List *tmp_item_2_prev = item_2->prev;
+ if(item_1->prev!=NULL)
+ item_1->prev->next = item_2;
+ else
+ *head = item_2;
+
+ item_2->prev = item_1->prev;
+
+ item_1->next = item_2->next;
+
+ if(item_2->next!=NULL)
+ item_2->next->prev = item_1;
+
+ if (tmp_item_1_next == item_2) { /*item_1->item_2*/
+ item_2->next = item_1;
+ item_1->prev = item_2;
+ } else {/*item_1->....->item_2*/
+ tmp_item_1_next->prev = item_2;
+ item_2->next = tmp_item_1_next;
+ tmp_item_2_prev->next = item_1;
+ item_1->prev = tmp_item_2_prev;
+ }
+}
+
+static void __swap_menubar_shortcuts_ctx(struct appdata *ad, ShortCutData *menu_ele, ShortCutData *cur_ele)
+{
+ if (!cur_ele || !ad || !menu_ele)
+ return;
+ cur_ele->is_on_menu_bar = TRUE;
+ cur_ele->menu_bar_no = menu_ele->menu_bar_no;
+ DEBUG_TRACE("cur_ele->menu_bar_no = %d", cur_ele->menu_bar_no);
+ if (cur_ele->menu_bar_no > CAM_MENU_BAR_LEFT_4 || cur_ele->menu_bar_no < CAM_MENU_BAR_LEFT_0) {
+ cam_critical(LOG_UI, "menubar no error, check it ASAP");
+ return;
+ }
+
+ /*do:ele_layout*/
+ ad->toolbar_menu_arrays[cur_ele->menu_bar_no].menu_type = cur_ele->setting_type;
+ update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
+
+ menu_ele->is_on_menu_bar = FALSE;
+ menu_ele->menu_bar_no = -1;
+ char buf[16] = { 0 };
+ snprintf(buf, sizeof(buf),"row.%d", menu_ele->part_index);
+ DEBUG_TRACE("PART:%s", buf);
+ evas_object_show(menu_ele->icon);
+ evas_object_hide(cur_ele->icon);
+ snprintf(buf, sizeof(buf),"row.%d", cur_ele->part_index);
+ DEBUG_TRACE("PART:%s", buf);
+ cam_toolbar_menu_config_update((void *)ad);
+
+}
+
+static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect)
+{
+ if (!rect) return;
+ Evas_Coord x=0, y=0, w=0, h=0;
+ if (shortcuts_icon)
+ evas_object_geometry_get(shortcuts_icon, &x, &y, &w, &h);
+ rect->x = x;
+ rect->y = y;
+ rect->w = w;
+ rect->h = h;
+}
+
+static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no)
+{
+ if (!ad) return;
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0)
+ return;
+
+ ad->toolbar_menu_arrays[menubar_no].menu_type = -1;
+ Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
+ edje_object_part_unswallow(_EDJ(ad->toolbar_edje), icon);
+ DEL_EVAS_OBJECT(icon);
+ icon = elm_image_add(ad->toolbar_edje);
+ elm_image_file_set(icon, NULL, NULL);
+ char buf[32+1] = {'\0',};
+ snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
+ edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
+ ad->toolbar_menu_arrays[menubar_no].icon = icon;
+}
+
+/*
+ * note: check moving shortcuts with possible empty shortcuts in menubar,
+ * if find, and moving shortcuts is in the empty shortcuts area, push this moving
+ * shortcuts in this empty shortcuts. and return true, else return false
+ */
+gboolean check_with_menubar_empty_shortcuts(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ if (!ad || !moving_ele ||!moving_obj)
+ return FALSE;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ ShortCutData *cur_ele = moving_ele;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (type < 0) {
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(icon, &parent_rect);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ if (cur_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
+ }
+ cur_ele->is_on_menu_bar = TRUE;
+ cur_ele->menu_bar_no = i;
+ cur_ele->part_index = -1;
+ ad->toolbar_menu_arrays[i].menu_type = cur_ele->setting_type;
+ cam_toolbar_menu_config_update((void *)ad);
+
+ update_menubar_shortcuts_mouse_event(ad, i, FALSE);
+
+ evas_object_hide(cur_ele->icon);
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no)
+{
+ if (!obj || !ad || !menubar_no)
+ return FALSE;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (icon == obj) {
+ *menubar_no = i;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele)
+{
+ Evas_Object *icon;
+ Evas_Object_Event_Cb func;
+ CAM_MENU_ITEM setting_type;
+ char *icon_filepath;
+ char *name;
+ int menu_bar_no;
+ gboolean is_on_menu_bar;
+ Evas_Coord x, y, w, h;
+ int part_index;
+ int list_index;
+ int row;
+ int col;
+
+ icon = cur_ele->icon;
+ func = cur_ele->func;
+ setting_type = cur_ele->setting_type;
+ icon_filepath = cur_ele->icon_filepath;
+ name = cur_ele->name;
+ menu_bar_no = cur_ele->menu_bar_no;
+ is_on_menu_bar = cur_ele->is_on_menu_bar;
+ x = cur_ele->x;
+ y = cur_ele->y;
+ w = cur_ele->w;
+ h = cur_ele->h;
+ part_index = cur_ele->part_index;
+ list_index = cur_ele->list_index;
+ row = cur_ele->row;
+ col = cur_ele->col;
+
+ cur_ele->icon = swap_ele->icon;
+ cur_ele->func = swap_ele->func;
+ cur_ele->setting_type = swap_ele->setting_type;
+ cur_ele->icon_filepath = swap_ele->icon_filepath;
+ cur_ele->name = swap_ele->name;
+ /*cur_ele->menu_bar_no = swap_ele->menu_bar_no;*/
+ cur_ele->is_on_menu_bar = swap_ele->is_on_menu_bar;
+ cur_ele->x = swap_ele->x;
+ cur_ele->y = swap_ele->y;
+ cur_ele->w = swap_ele->w;
+ cur_ele->h = swap_ele->h;
+ cur_ele->part_index = swap_ele->part_index;
+ /*cur_ele->list_index = swap_ele->list_index;*/
+ cur_ele->row = swap_ele->row;
+ cur_ele->col = swap_ele->col;
+
+ swap_ele->icon = icon;
+ swap_ele->func = func;
+ swap_ele->setting_type = setting_type;
+ swap_ele->icon_filepath = icon_filepath;
+ swap_ele->name = name;
+ /*swap_ele->menu_bar_no = menu_bar_no;*/
+ swap_ele->is_on_menu_bar = is_on_menu_bar;
+ swap_ele->x = x;
+ swap_ele->y = y;
+ swap_ele->w = w;
+ swap_ele->h = h;
+ swap_ele->part_index = part_index;
+ /*swap_ele->list_index = swap_ele->list_index;*/
+ swap_ele->row = row;
+ swap_ele->col = col;
+
+}
+
+static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
+ int setting_type,
+ int menubar_no)
+{
+ if (!ad) return;
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
+
+ ad->toolbar_menu_arrays[menubar_no].menu_type = setting_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
+ DEL_EVAS_OBJECT(icon);
+ icon = elm_image_add(ad->toolbar_edje);
+ char buf[32 + 1] = { '\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
+ edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
+ ad->toolbar_menu_arrays[menubar_no].icon = icon;
+ __update_menubar_icon_by_index(ad, setting_type);
+}
+
+static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele)
+{
+ __shortcuts_data_swap(cur_ele, swap_ele);
+ __update_menubar_shortcuts_by_menubar_no(ad, cur_ele->setting_type, cur_ele->menu_bar_no);
+ __update_menubar_shortcuts_by_menubar_no(ad, swap_ele->setting_type, swap_ele->menu_bar_no);
+ update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
+ update_menubar_shortcuts_mouse_event(ad, swap_ele->menu_bar_no, FALSE);
+}
+
+/*NOTE: moving shortcuts, is from menubar*/
+static gboolean __check_menubar_moving_shortcuts_swap(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ cam_retv_if(moving_ele == NULL, FALSE);
+ cam_retv_if(moving_obj == NULL, FALSE);
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ ShortCutData *cur_ele = moving_ele;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ ShortCutData *swap_ele = NULL;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->icon == cur_ele->icon) {
+ DEBUG_TRACE("find self");
+ continue;
+ }
+ Evas_Object *parent_icon = NULL;
+ if (shortcuts_ele->is_on_menu_bar) {
+ parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
+
+ } else {
+ parent_icon = shortcuts_ele->icon;
+ }
+
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(parent_icon, &parent_rect);
+
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ DEBUG_TRACE("find swap ele");
+ swap_ele = shortcuts_ele;
+ break;
+ }
+ }
+ if (!swap_ele) {
+ DEBUG_TRACE("not find, continue");
+ return FALSE;
+ /*evas_object_move(moving_obj, x , y);*/
+ }
+
+ if (swap_ele->is_on_menu_bar) {/*TODO: support menubar shortcuts swap*/
+ __swap_menubar_shortcuts(ad, cur_ele, swap_ele);
+ cam_toolbar_menu_config_update((void *)ad);
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ return TRUE;
+ } else {
+ cur_ele->is_on_menu_bar = FALSE;
+ int tmp_menub_bar_no = cur_ele->menu_bar_no;
+ cur_ele->menu_bar_no = -1;
+ DEL_EVAS_OBJECT(moving_obj);
+
+ __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
+ update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+
+ cam_toolbar_menu_config_update((void *)ad);
+
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+ return TRUE;
+ }
+
+
+}
+
+static void __edit_shortcuts_layout_shortcuts_move_prev(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(swap_ele == NULL);
+ cam_ret_if(cur_ele == NULL);
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ Eina_List *cur_item = NULL;
+ Eina_List *swap_item = NULL;
+ cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
+ swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+
+ /*
+ *
+ * note: cur_item ->...->swap_item, should insert cur_item after swap_item, and
+ * move between cur_item ...swap_item items.
+ *
+ */
+
+
+
+ int temp_swap_ele_list_index = swap_ele->list_index;
+ int temp_swap_ele_part_index = swap_ele->part_index;
+ EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele == cur_ele) {
+ cur_ele->list_index = temp_swap_ele_list_index;
+ cur_ele->part_index = temp_swap_ele_part_index;
+ continue;
+ }
+
+ if (!shortcuts_ele->is_on_menu_bar) {
+ /* TODO: for animator effect*/
+ char buf[32+1] = { '\0',};
+ snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_PREV, buf);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
+ shortcuts_ele->part_index -= 1;
+ }
+ shortcuts_ele->list_index -= 1;
+ if (shortcuts_ele == swap_ele) {
+ break;
+ }
+ }
+ Eina_List *left = NULL;
+ Eina_List *right = NULL;
+ shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
+
+ left = eina_list_split_list(shortcuts_ele_list, swap_item, &right);
+ left = eina_list_append(left, cur_ele);
+ shortcuts_ele_list = eina_list_merge(left, right);
+
+
+}
+
+/*note: insert insert_ele before cur_ele*/
+static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
+ ShortCutData *cur_ele,
+ ShortCutData *insert_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(cur_ele == NULL);
+ cam_ret_if(insert_ele == NULL);
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *cur_item = NULL;
+
+ insert_ele->part_index = cur_ele->part_index;
+ cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
+ EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (!shortcuts_ele->is_on_menu_bar) {
+ char buf[32+1] = { '\0',};
+ snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
+ shortcuts_ele->part_index += 1;
+ }
+ }
+ __resort_edit_shortcuts_list_by_part_index();
+
+}
+
+
+static void __edit_shortcuts_layout_shortcuts_move_next(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(swap_ele == NULL);
+ cam_ret_if(cur_ele == NULL);
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ Eina_List *swap_item = NULL;
+
+ swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+
+ /*
+ *
+ * note: swap_item ->...->cur_item, should insert cur_item before swap_item, and
+ * move between swap_item ...cur_item items.
+ *
+ */
+
+ int temp_swap_ele_list_index = swap_ele->list_index;
+ int temp_swap_ele_part_index = swap_ele->part_index;
+ EINA_LIST_FOREACH(swap_item, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele == cur_ele) {
+ cur_ele->list_index = temp_swap_ele_list_index;
+ cur_ele->part_index = temp_swap_ele_part_index;
+ break;
+ }
+ if (!shortcuts_ele->is_on_menu_bar) {
+ /* TODO: for animator effect*/
+ char buf[32+1] = { '\0',};
+ snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
+ shortcuts_ele->part_index += 1;
+ }
+ shortcuts_ele->list_index += 1;
+ }
+ Eina_List *left = NULL;
+ Eina_List *right = NULL;
+ shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
+ if (swap_item->prev) {
+ left = eina_list_split_list(shortcuts_ele_list, swap_item->prev, &right);
+ left = eina_list_append(left, cur_ele);
+ shortcuts_ele_list = eina_list_merge(left, right);
+ } else {
+ shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, cur_ele);
+ }
+}
+
+static void __resort_edit_shortcuts(struct appdata *ad, Evas_Object *moving_obj)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(moving_obj == NULL);
+ __resort_edit_shortcuts_list_by_part_index();
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
+ }
+
+
+ int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
+
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
+ if (shortcuts_ele->part_index >=0
+ && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
+
+ shortcuts_part_to_menu[shortcuts_ele->part_index] = shortcuts_ele->setting_type;
+ }
+ if (moving_obj == shortcuts_ele->icon) {
+ ad->shortcut_data = shortcuts_ele;
+ DEBUG_TRACE("PART:%s", buf);
+ continue;
+ }
+ DEBUG_TRACE("PART:%s", buf);
+ edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
+ }
+
+ int index = 0;
+ for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[index].prop_name,
+ shortcuts_part_to_menu[index]);
+ }
+
+}
+
+static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(swap_ele == NULL);
+ cam_ret_if(cur_ele == NULL);
+ Eina_List *cur_item = NULL;
+ Eina_List *prev_item = NULL;
+ Eina_List *next_item = NULL;
+ Evas_Coord prev_x=0, prev_y=0, prev_w=0, prev_h=0;
+ Evas_Coord next_x=0, next_y=0, next_w=0, next_h=0;
+
+ cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
+ if (!cur_item)
+ return;
+ if (swap_ele->list_index > cur_ele->list_index) {
+ next_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+ if (NULL != next_item) {
+ evas_object_geometry_get(swap_ele->icon, &next_x, &next_y, &next_w, &next_h);
+ evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
+ cur_ele->x = next_x;
+ cur_ele->y = next_y;
+ cur_ele->w = next_w;
+ cur_ele->h = next_h;
+ int idx = swap_ele->part_index;
+ swap_ele->part_index = cur_ele->part_index;
+ cur_ele->part_index = idx;
+
+ idx = swap_ele->list_index;
+ swap_ele->list_index = cur_ele->list_index;
+ cur_ele->list_index = idx;
+ if (swap_ele->is_on_menu_bar)
+ __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
+ shortcuts_swap(&shortcuts_ele_list, cur_item, next_item);
+ }
+ } else {
+ prev_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+ if(NULL != prev_item) {
+ evas_object_geometry_get(swap_ele->icon, &prev_x, &prev_y, &prev_w, &prev_h);
+ evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
+ cur_ele->x = prev_x;
+ cur_ele->y = prev_y;
+ cur_ele->w = prev_w;
+ cur_ele->h = prev_h;
+ int idx = swap_ele->part_index;
+ swap_ele->part_index = cur_ele->part_index;
+ cur_ele->part_index = idx;
+
+ idx = swap_ele->list_index;
+ swap_ele->list_index = cur_ele->list_index;
+ cur_ele->list_index = idx;
+ if (swap_ele->is_on_menu_bar)
+ __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
+ shortcuts_swap(&shortcuts_ele_list, prev_item, cur_item);
+ }
+ }
+}
+
+static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no)
+{
+ if (!ad) return NULL;
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return NULL;
+ return ad->toolbar_menu_arrays[menubar_no].icon;
+}
+
+/*note: check with menu_no menubar shortcut*/
+static gboolean __check_with_menubar_shortcuts(struct appdata *ad, int menu_no, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ if (!ad || !moving_ele ||!moving_obj)
+ return FALSE;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ ShortCutData *cur_ele = moving_ele;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ Evas_Object *toolbar_icon = __get_toolbar_shortcuts_evas_object(ad, menu_no);
+
+ /*check space menu*/
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(toolbar_icon, &parent_rect);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ if (cur_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
+ }
+ cur_ele->is_on_menu_bar = TRUE;
+ cur_ele->menu_bar_no = menu_no;
+ cur_ele->part_index = -1;
+ ad->toolbar_menu_arrays[menu_no].menu_type = cur_ele->setting_type;
+ cam_toolbar_menu_config_update((void *)ad);
+ update_menubar_shortcuts_mouse_event(ad, menu_no, FALSE);
+ evas_object_hide(cur_ele->icon);
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ return TRUE;
+
+ }
+ return FALSE;
+
+}
+
+/*note: get menubar_no now is covering*/
+static int __get_edit_shortcuts_swap_menubar_no(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ if (!ad || !moving_ele ||!moving_obj)
+ return FALSE;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (type < 0) {
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(icon, &parent_rect);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ return i;
+ }
+ }
+ }
+
+ return CAM_MENU_BAR_LEFT_INVALID;
+
+}
+
+/*NOTE: TODO*/
+static gboolean __get_edit_shortcuts_swap_element(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj, ShortCutData **swap_ele)
+{
+ if (swap_ele == NULL) return FALSE;
+
+ ShortCutData *cur_ele = moving_ele;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+ int edit_shortcuts_item_count = -1;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->icon == cur_ele->icon) {
+ continue;
+ }
+ Evas_Object *parent_icon = NULL;
+ if (shortcuts_ele->is_on_menu_bar) {
+ parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
+
+ } else {
+ parent_icon = shortcuts_ele->icon;
+ edit_shortcuts_item_count++;
+ }
+
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(parent_icon, &parent_rect);
+
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ DEBUG_TRACE("find swap ele");
+ *swap_ele = shortcuts_ele;
+ return TRUE;
+ }
+ }
+
+ /*NOTE: case: moving shortcut is from menubar, and it is moving into the edit shortcuts the first empty panel*/
+ char buf[16] = { 0 };
+ snprintf(buf, sizeof(buf),"row.%d", (edit_shortcuts_item_count+1));
+ Evas_Object *part_object = (Evas_Object *)
+ edje_object_part_object_get(_EDJ
+ (ad->edit_shortcuts_popup_ctx), buf);
+ if (cur_ele->is_on_menu_bar) {
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(part_object, &parent_rect);
+
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ 0,
+ 0);
+ if (sub_in_parent) {
+ ShortCutData *virtual_ele = NULL;
+ if (ad->swap_data) {
+ if (ad->swap_data->is_virtual) {
+ free(ad->swap_data);
+ ad->swap_data = NULL;
+ }
+ }
+ virtual_ele = calloc(1, sizeof(ShortCutData));
+ if (virtual_ele) {
+ virtual_ele->is_virtual = TRUE;
+ virtual_ele->setting_type = -1;
+ virtual_ele->is_on_menu_bar = FALSE;
+ virtual_ele->part_index= edit_shortcuts_item_count+1;
+ }
+ *swap_ele = virtual_ele;
+ return TRUE;
+ }
+ }
+ *swap_ele = NULL;
+ return FALSE;
+}
+
+/*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
+static void __resort_edit_shortcuts_list_by_part_index(void)
+{
+ if (shortcuts_ele_list == NULL) return;
+ shortcuts_ele_list = eina_list_sort(shortcuts_ele_list,
+ eina_list_count(shortcuts_ele_list),
+ __edit_shortcuts_list_sort_cb);
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+ int list_index = 0;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ shortcuts_ele->list_index = list_index;
+ DEBUG_TRACE("part_index %d, list_index %d", shortcuts_ele->part_index, shortcuts_ele->list_index);
+ list_index++;
+ }
+
+}
+
+/*NOTE: swap integer, we do not judge a, b wether null*/
+static void __swap_int_type_value(int *a, int *b)
+{
+ int tmp = 0;
+ tmp = *a;
+ *a = *b;
+ *b = tmp;
+}
+
+static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ cam_app_timeout_checker_update();/*note: update check_timer*/
+ __setting_popup_timeout_checker_start(ad);
+
+/*note: check wether is long press*/
+ Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
+ cam_long_press_validate(LONG_PRESS_ID_EDIT, mu->cur.canvas.x, mu->cur.canvas.y);
+ if (!cam_get_long_press_running_state(LONG_PRESS_ID_EDIT)) {
+ return;
+ }
+
+/*note: update coordinate*/
+ Evas_Coord cur_x=0, cur_y=0, cur_w=0, cur_h=0;
+ Evas_Coord x=0, y=0;
+ Evas_Coord dx, dy;
+ evas_object_geometry_get(obj, &cur_x, &cur_y, &cur_w, &cur_h);
+ x = cur_x + (mu->cur.canvas.x - shortcuts_canvas_prev_x);
+ y = cur_y + (mu->cur.canvas.y - shortcuts_canvas_prev_y);
+ dx = mu->cur.canvas.x - shortcuts_canvas_prev_x;
+ dy = mu->cur.canvas.y - shortcuts_canvas_prev_y;
+ shortcuts_canvas_prev_x = mu->cur.canvas.x;
+ shortcuts_canvas_prev_y = mu->cur.canvas.y;
+
+
+/*note: check swap elements*/
+ pthread_mutex_lock(&edit_shortcuts_move_mutex);
+ ShortCutData *moving_ele = ad->shortcut_data;
+ ShortCutData *swap_ele = NULL;
+ gboolean swap_condition = __get_edit_shortcuts_swap_element(ad, moving_ele, obj, &swap_ele);
+ DEBUG_TRACE("%d", swap_condition);
+
+ if (swap_condition) {
+ ad->swap_data = swap_ele;
+ if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
+ if (ABS(moving_ele->part_index - swap_ele->part_index) == 1) {
+ __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
+ } else if (moving_ele->list_index > swap_ele->list_index) {
+ __edit_shortcuts_layout_shortcuts_move_next(ad, swap_ele, moving_ele);
+ } else {
+ __edit_shortcuts_layout_shortcuts_move_prev(ad, swap_ele, moving_ele);
+ }
+ __resort_edit_shortcuts(ad, obj);
+ evas_object_move(obj, x , y);
+ goto EXIT_MOVE;
+ } else {
+ if (swap_ele->is_on_menu_bar) {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon) {
+ evas_object_color_get(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, r, g, b, 30);
+ }
+ } else {
+ /*todo: */
+ if (swap_ele->setting_type == -1) {/*note: swap_ele is empty part in edit shortcuts panel*/
+ DEBUG_TRACE("swap_ele is empty part in edit shortcuts panel");
+ }
+
+
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (swap_ele->icon) {
+ evas_object_color_get(swap_ele->icon, &r, &g, &b, &a);
+ evas_object_color_set(swap_ele->icon, r, g, b, 30);
+ }
+ }
+ }
+ evas_object_move(obj, x , y);
+ goto EXIT_MOVE;
+ } else {
+ if (ad->swap_data) {
+ if (ad->swap_data->is_on_menu_bar) {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
+ evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
+ }
+ } else {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->swap_data->icon) {
+ evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
+ }
+ }
+ }
+ ad->swap_data = NULL;
+ }
+
+ int menu_no = __get_edit_shortcuts_swap_menubar_no(ad, moving_ele, obj);
+ /*TODO: for mouse up swap, we could to record a virtual shortcut element*/
+ if (menu_no != CAM_MENU_BAR_LEFT_INVALID) {
+ ShortCutData *virtual_ele = NULL;
+ virtual_ele = calloc(1, sizeof(ShortCutData));
+ if (virtual_ele) {
+ virtual_ele->is_virtual = TRUE;
+ virtual_ele->setting_type = -1;
+ virtual_ele->menu_bar_no = menu_no;
+ virtual_ele->is_on_menu_bar = TRUE;
+ }
+ ad->swap_data = virtual_ele;
+
+ /*TODO: set swap_ele style*/
+ }
+
+ evas_object_move(obj, x , y);
+EXIT_MOVE:
+ pthread_mutex_unlock(&edit_shortcuts_move_mutex);
+
+}
+
+void cam_setting_gl_style_set(void)
+{
+ itc.item_style = "camera/1text.1icon";
+ itc.func.text_get = _setting_gl_text_get;
+ itc.func.content_get = _setting_gl_icon_get;
+ itc.func.state_get = NULL;
+ itc.func.del = NULL;
+}
+
+static void __cam_toolbar_display_shortcuts_editmode(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,edit", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,edit", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,edit", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,edit", "prog");
+}
+
+static void __cam_toolbar_exit_shortcuts_editmode(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+}
+
+/*init shortcuts*/
+static int __cam_long_press_editmode_cb(void *data, int x, int y)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, -1);
+ DEBUG_TRACE();
+
+ int err = 0;
+ err = pthread_mutex_init(&edit_shortcuts_move_mutex, NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM, "Create px inst mutex failed");
+ return FALSE;
+ }
+
+ if (ad->shortcut_data) {
+ edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), ad->shortcut_data->icon);
+ evas_object_event_callback_add(ad->shortcut_data->icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move,
+ (void *)ad);
+ }
+ evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, TRUE);
+
+ return 0;
+}
+
+static int __cam_long_press_exit_editmode_cb(void *data, int x, int y)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, -1);
+ DEBUG_TRACE();
+
+ /*re-sort sortcuts element list*/
+ int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
+
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *l = NULL;
+ int temp_index = 0;
+ int temp_list_index = 0;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ shortcuts_ele->list_index = temp_list_index;
+ temp_list_index++;
+ if (shortcuts_ele->is_on_menu_bar) {
+ shortcuts_ele->part_index = -1;
+ continue;
+ }
+ shortcuts_ele->part_index = temp_index;
+ shortcuts_part_to_menu[temp_index] = shortcuts_ele->setting_type;
+ temp_index++;
+ DEBUG_TRACE("shortcuts_ele->index %d" , shortcuts_ele->part_index);
+ }
+
+ /*re-set menubar shortcuts*/
+ int i = 0;
+ for (i = CAM_MENU_SHORTCUTS; i < CAM_MENU_MAX_NUMS; i++) {
+ __update_menubar_icon_by_index(ad, i);
+ }
+
+ /*menu bar shortcut update*/
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
+ }
+
+ /* shortcut panel update*/
+ char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
+
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
+
+ }
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->part_index < 0 ||
+ shortcuts_ele->part_index >19) {
+ continue;
+ }
+ snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
+ DEBUG_TRACE("PART:%s", buf);
+ edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
+ }
+
+ int index = 0;
+ for (index = CAM_EDIT_SHORTCUTS_INDEX_1; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[index].prop_name,
+ shortcuts_part_to_menu[index]);
+ }
+
+ __cam_toolbar_display_shortcuts_editmode(ad);
+ __toolbar_dim_setting_shortcuts(ad);
+ if (ad->shortcut_data) {
+ if (ad->shortcut_data->icon) {
+ evas_object_event_callback_del(ad->shortcut_data->icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ }
+ }
+
+ ad->shortcut_data = NULL;
+ ad->swap_data = NULL;
+ evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, FALSE);
+ pthread_mutex_destroy(&edit_shortcuts_move_mutex);
+ return 0;
+}
+
+static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon)
+{
+ if (!ad) {
+ *icon = NULL;
+ *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
+ return;
+ }
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ if (index == ad->toolbar_menu_arrays[i].menu_type) {
+ *menu_bar_no = i;
+ *icon = ad->toolbar_menu_arrays[i].icon;
+ return;
+ }
+ }
+
+ *icon = NULL;
+ *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
+
+ return;
+}
+
+void create_menubar_shortcuts_mouse_event(struct appdata *ad)
+{
+ if (!ad)
+ return;
+ int i = 0;
+ /*note: CAM_MENU_BAR_LEFT_0: do not need register*/
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (type >= 0) {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up,
+ (void *)ad);
+ }
+ }
+
+}
+
+void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
+{
+ if (!ad)
+ return;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (i == menubar_no || all_menubar) {
+ if (type < 0) {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ } else {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up,
+ (void *)ad);
+ }
+ }
+
+ }
+}
+
+
+void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
+{
+ if (!ad)
+ return;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (i == menubar_no || all_menubar) {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ }
+
+ }
+
+}
+
+/*free all memory for shortcuts*/
+static void __cam_toolbar_edit_shortcuts_data_clean()
+{
+ /*clear eina_list*/
+ if (NULL != shortcuts_ele_list) {
+ eina_list_free(shortcuts_ele_list);
+ shortcuts_ele_list = NULL;
+ }
+}
+
+static void __toolbar_edit_shortcuts_mouse_down_cb (void *data,
+ Evas *e,
+ Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ /*struct appdata *ad = (struct appdata *)data;
+ cam_long_press_register(LONG_PRESS_ID_EDIT,
+ LONG_PRESS_TIME,
+ __cam_long_press_editmode_cb,
+ __cam_long_press_exit_editmode_cb,
+ (void*)ad);*/
+}
+
+
+static void __toolbar_edit_shortcuts_mouse_move_cb (void *data,
+ Evas *e,
+ Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ /*struct appdata *ad = (struct appdata *)data;*/
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *l = NULL;
+/** TODO: find solution to distinguish the scroll move
+ cam_long_press_unregister(LONG_PRESS_ID_EDIT);
+ */
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele) {
+ if (shortcuts_ele->icon) {
+ evas_object_freeze_events_set(shortcuts_ele->icon, TRUE);
+ }
+ }
+ }
+
+}
+
+static void __toolbar_edit_shortcuts_mouse_up_cb (void *data,
+ Evas *e,
+ Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *l = NULL;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele) {
+ if (shortcuts_ele->icon) {
+ evas_object_freeze_events_set(shortcuts_ele->icon, FALSE);
+ }
+ }
+ }
+}
+
+static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2)
+{
+ ShortCutData *ele_0 = (ShortCutData *)data1;
+ ShortCutData *ele_1 = (ShortCutData *)data2;
+ int part_index_0 = ele_0->part_index;
+ int part_index_1 = ele_1->part_index;
+ DEBUG_TRACE("part_index_0 %d", part_index_0);
+ DEBUG_TRACE("part_index_1 %d", part_index_1);
+ if (part_index_0 > part_index_1)
+ return 1;
+ else if (part_index_0 < part_index_1)
+ return -1;
+ else
+ return 0;
+}
+
+static void __edit_shortcuts_create_empty_menubar_shortcut(struct appdata *ad,
+ int menu_no,
+ ShortCutData **shortcuts_ele)
+{
+ if (menu_no > CAM_MENU_BAR_LEFT_4 || menu_no < CAM_MENU_BAR_LEFT_0) return;
+ ShortCutData *sd = (ShortCutData *)malloc(sizeof(ShortCutData));
+ if (sd) {
+ memset(sd, '\0', sizeof(ShortCutData));
+ sd->icon = ad->toolbar_menu_arrays[menu_no].icon;
+ sd->list_index = -1;
+ sd->part_index = -1;
+ sd->setting_type = -1;
+ sd->menu_bar_no = menu_no;
+ sd->is_on_menu_bar = TRUE;
+ }
+ *shortcuts_ele = sd;
+
+}
+
+static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no)
+{
+ if (!ad) return;
+ if (menu_no > CAM_MENU_BAR_LEFT_4 || CAM_MENU_BAR_LEFT_1) return; /*note: CAM_MENU_BAR_LEFT_0, do not update*/
+ ShortCutData *shortcuts_ele = NULL;
+ /*note: add empty menubar shortcuts to list*/
+ if (ad->toolbar_menu_arrays[menu_no].menu_type < 0) {
+ __edit_shortcuts_create_empty_menubar_shortcut(ad, CAM_MENU_BAR_LEFT_1, &shortcuts_ele);
+ shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, shortcuts_ele);
+ }
+}
+
+static void __toolbar_dim_setting_shortcuts(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ Evas_Object *setting_icon = NULL;
+ Evas_Object_Event_Cb func = NULL;
+ int type = -1;
+ setting_icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].menu_type;
+ __toolbar_menu_type_update(setting_icon, type, ad, BUTTON_STATE_DIM, &func);
+}
+
+int toolbar_create_shortcuts_popup(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ gboolean init_state = FALSE;
+ init_state = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHORTCUTS_INIT_PART_INDEX,
+ FALSE);
+ if (!init_state) {
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHORTCUTS_INIT_PART_INDEX,
+ TRUE);
+ }
+
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+ ad->show_edit_shortcuts_popup_after_rotate = FALSE;
+
+ __toolbar_dim_setting_shortcuts(ad);
+
+ int index = 0;
+ Evas_Object *icon = NULL;
+ Evas_Object *setting_popup = NULL;
+ Evas_Object *ele_layout = NULL;
+
+ cam_long_press_register(LONG_PRESS_ID_EDIT,
+ LONG_PRESS_TIME,
+ __cam_long_press_editmode_cb,
+ __cam_long_press_exit_editmode_cb,
+ (void*)ad);
+
+ setting_shortcuts_popup_create(ad);
+
+ setting_popup = elm_layout_add(ad->edit_shortcuts_popup);
+ elm_layout_file_set(setting_popup, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/layout");
+
+ /* set text */
+ Evas_Object *scroller = elm_scroller_add(ad->edit_shortcuts_popup);
+ elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+ elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
+
+ char *icon_name = NULL;
+ char *text = NULL;
+ char part_name[16] = { '\0', };
+ ShortCutData *shortcuts_ele = NULL;
+ Evas_Object_Event_Cb callback = NULL;
+ int part_index = 0;
+ int list_index = 0;
+ gboolean is_on_toolbar = FALSE;
+ int menu_bar_no = -1;
+
+ /*create edit callback in the menubar*/
+ create_menubar_shortcuts_mouse_event(ad);
+
+ /*clear eina_list*/
+ __cam_toolbar_edit_shortcuts_data_clean();
+
+ if( ad->setting_menu_composer == NULL){
+ cam_critical(LOG_UI,"ad->setting_menu_composer is null");
+ return -1;
+ }
+
+ int shortcuts_menu_to_part[CAM_MENU_RESET + 1] = { -1,};
+ if (init_state) {
+ for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
+ int item = cam_config_get_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[index].prop_name,
+ -1);
+ shortcuts_menu_to_part[item] = index;
+ DEBUG_TRACE("item %d index %d", item, index);
+ }
+ }
+
+ CAM_MENU_ITEM* menu_item = NULL;
+ int size = eina_array_count(ad->setting_menu_composer->array);
+
+ for (index = 0; index < size; index++) {
+ menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->setting_menu_composer->array, index);
+
+ if (*menu_item == CAM_MENU_EFFECTS
+ || *menu_item == CAM_MENU_ANTI_SHAKE
+ || *menu_item == CAM_MENU_CAPTURE_VOICE
+ || *menu_item == CAM_MENU_GPS_TAG
+ || *menu_item == CAM_MENU_STORAGE
+ || *menu_item == CAM_MENU_RESET) {
+ DEBUG_TRACE("Do not add menu in shortcut");
+ continue;
+ }
+
+ Evas_Object *menubar_obj = NULL;
+ __get_menubar_shortcuts_info(ad, *menu_item, &menu_bar_no, &menubar_obj);
+ is_on_toolbar = ((menu_bar_no == CAM_MENU_BAR_LEFT_INVALID) ? FALSE : TRUE);
+ __get_toolbar_shortcuts_file_func((void *)ad, *menu_item, BUTTON_STATE_NORMAL, &icon_name, &text, &callback);
+
+ if (icon_name) {
+ /*create layout for element*/
+ ele_layout = elm_layout_add(setting_popup);
+ elm_layout_file_set(ele_layout, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/ele");
+ icon = elm_image_add(ele_layout);
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ } else {
+ DEBUG_TRACE("index = %d, no icon file path or file path error, please check!", index);
+
+ if (text)
+ free(text);
+ text = NULL;
+ continue;
+ }
+
+ if (text) {
+ edje_object_part_text_set(elm_layout_edje_get(ele_layout), "ele.txt", text);
+ DEBUG_TRACE("text %s", text);
+ }
+
+ edje_object_part_swallow(_EDJ(ele_layout), "ele.icon", icon);
+ evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_DOWN, __setting_shortcuts_mouse_down, (void *)ad);
+ evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_UP, __setting_shortcuts_mouse_up, (void *)ad);
+
+ evas_object_show(ele_layout);
+
+ shortcuts_ele = (ShortCutData *)malloc(sizeof(ShortCutData));
+ shortcuts_ele->icon = ele_layout;
+ shortcuts_ele->list_index = list_index;
+ shortcuts_ele->setting_type = *menu_item;
+ shortcuts_ele->icon_filepath = icon_name;
+ shortcuts_ele->name = text;
+ shortcuts_ele->func = callback;
+ shortcuts_ele->menu_bar_no = menu_bar_no;
+ shortcuts_ele->is_on_menu_bar = is_on_toolbar;
+
+ if (is_on_toolbar) {
+ shortcuts_ele->part_index = -1;
+ evas_object_hide(ele_layout);
+ } else {
+ if (!init_state) { /*note: if there is no init value in config file, init now*/
+ shortcuts_ele->part_index = part_index;
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[part_index].prop_name,
+ *menu_item);
+ shortcuts_menu_to_part[*menu_item] = part_index;
+ } else { /*note: if there is init value in config file, read value from init*/
+ shortcuts_ele->part_index = shortcuts_menu_to_part[*menu_item];
+ }
+ }
+ if (shortcuts_ele->part_index > CAM_EDIT_SHORTCUTS_INDEX_INVALID
+ && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
+ snprintf(part_name, sizeof(part_name),"row.%d",(shortcuts_ele->part_index));
+ edje_object_part_swallow(_EDJ(setting_popup), part_name, ele_layout);
+ }
+
+ shortcuts_ele_list = eina_list_append(shortcuts_ele_list, shortcuts_ele);
+ if (shortcuts_ele_list == NULL) {
+ continue;
+ }
+ list_index++;
+ if (is_on_toolbar)
+ continue;
+ part_index++;
+ }
+
+ /*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
+ __resort_edit_shortcuts_list_by_part_index();
+
+ elm_object_content_set(scroller, setting_popup);
+ /*elm_object_part_content_set(edit_shortcuts_layout, "swallow.items", setting_popup);*/
+ elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup", scroller);
+ elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup_description", ad->edit_shortcuts_popup_description);
+
+
+ __cam_toolbar_display_shortcuts_editmode(ad);
+#if 0 /*TODO: TODO: find solution to distinguish the scroll move*/
+ evas_object_event_callback_del(scroller,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __toolbar_edit_shortcuts_mouse_down_cb);
+
+ evas_object_event_callback_del(scroller,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __toolbar_edit_shortcuts_mouse_move_cb);
+ evas_object_event_callback_del(scroller,
+ EVAS_CALLBACK_MOUSE_UP,
+ __toolbar_edit_shortcuts_mouse_up_cb);
+ evas_object_event_callback_add(scroller,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __toolbar_edit_shortcuts_mouse_down_cb,
+ (void *)ad);
+ evas_object_event_callback_add(scroller,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __toolbar_edit_shortcuts_mouse_move_cb,
+ (void *)ad);
+ evas_object_event_callback_add(scroller,
+ EVAS_CALLBACK_MOUSE_UP,
+ __toolbar_edit_shortcuts_mouse_up_cb,
+ (void *)ad);
+
+#endif
+
+ ad->edit_shortcuts_popup_ctx = setting_popup;
+ ad->edit_shortcuts_popup_scroll = scroller;
+
+ evas_object_show(ad->toolbar_edje);
+ __setting_popup_timeout_checker_start(ad);
+ /*note: set destroy operation after display to avoid bs*/
+ if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ __set_show_state_preview_obj(ad, FALSE);
+
+ return EXIT_SUCCESS;
+}
+
+void* __get_genlist_cb(const CAM_MENU_ITEM item)
+{
+ switch(item){
+ case CAM_MENU_SHORTCUTS:
+ return __setting_edit_shortcut_popup_cb;
+ case CAM_MENU_BURST_SHOT_MODE:
+ return __setting_burst_shot_popup_cb;
+ case CAM_MENU_VOLUME_KEY:
+ return __setting_volume_key_popup_cb;
+ case CAM_MENU_SELF_PORTRAIT:
+ return __setting_self_portrait_popup_cb;
+ case CAM_MENU_FLASH:
+ return __setting_flash_popup;
+ case CAM_MENU_SHOOTING_MODE:
+ return __setting_shot_mode_popup_cb;
+ case CAM_MENU_RECORDING_MODE:
+ return __setting_record_mode_popup;
+ case CAM_MENU_SCENE_MODE:
+ return __setting_scenemode_popup_cb;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ return __setting_ev_popup_cb;
+ case CAM_MENU_FOCUS_MODE:
+ return __setting_focus_mode_cb;
+ case CAM_MENU_TIMER:
+ return __setting_timer_popup_cb;
+ case CAM_MENU_EFFECTS:
+ return __setting_effects_popup_cb;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return __setting_photo_resolution_popup_cb;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return __setting_video_resolution_popup_cb;
+ case CAM_MENU_WHITE_BALANCE:
+ return __setting_wb_popup_cb;
+ case CAM_MENU_ISO:
+ return __setting_iso_popup_cb;
+ case CAM_MENU_METERING:
+ return __setting_metering_popup_cb;
+ case CAM_MENU_ANTI_SHAKE:
+ return __setting_anti_shake_popup_cb;
+ case CAM_MENU_OUTDOOR_VISIBILITY:
+ return __setting_outdoor_visibility_popup_cb;
+ case CAM_MENU_AUTO_CONTRAST:
+ return __setting_autocontrast_popup_cb;
+ case CAM_MENU_GUIDELINES:
+ return __setting_guideline_popup_cb;
+ case CAM_MENU_CAPTURE_VOICE:
+ return __setting_capture_by_voice_popup_cb;
+ case CAM_MENU_GPS_TAG:
+ return __setting_gps_popup_cb;
+ case CAM_MENU_SAVE_AS_FLIP:
+ return __setting_save_as_flip_popup_cb;
+ case CAM_MENU_STORAGE:
+ return __setting_storage_popup_cb;
+ case CAM_MENU_RESET:
+ return __setting_restore_defaults_popup_cb;
+ default:
+ return NULL;
+ }
+}
+
+static Eina_Bool __genlist_each_cb(const void *container, void *data, void *fdata)
+{
+ struct appdata *ad = (struct appdata *)fdata;
+ cam_retv_if(ad == NULL, EINA_FALSE);
+
+ CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
+ Elm_Object_Item *object_item = NULL;
+ object_item = elm_genlist_item_append(ad->genlist,
+ &itc,
+ (void*)*item,
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ __get_genlist_cb(*item),
+ (void*)ad);
+
+ if(!cam_is_enabled_menu(ad,*item))
+ elm_object_item_disabled_set(object_item, TRUE);
+
+ return EINA_TRUE;
+}
+
+int cam_toolbar_setting_popup_create(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ ad->show_setting_popup_after_rotate = FALSE;
+
+ Evas_Object *setting_popup = NULL;
+
+ setting_toolbar_popup_create(ad);
+
+ setting_popup = elm_layout_add(ad->toolbar_setting_popup);
+ elm_layout_file_set(setting_popup, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout/setting");
+
+ /* set text */
+ edje_object_part_text_set(elm_layout_edje_get(setting_popup), "elm.text", dgettext(PACKAGE, "IDS_CAM_BODY_SETTINGS"));
+
+ evas_object_size_hint_min_set(setting_popup,
+ SETTING_POPUP_WIDTH * elm_config_scale_get(),
+ SETTING_POPUP_HEIGHT * elm_config_scale_get());
+
+ ad->genlist = elm_genlist_add(setting_popup);
+ evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_DOWN, __setting_gl_mouse_down, (void *)ad);
+ evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_MOVE, __setting_gl_mouse_move, (void *)ad);
+
+ cam_setting_gl_style_set();
+
+ if( ad->setting_menu_composer != NULL)
+ eina_array_foreach(ad->setting_menu_composer->array, __genlist_each_cb, ad);
+
+ evas_object_show(ad->genlist);
+ elm_object_part_content_set(setting_popup, "elm.swallow.box", ad->genlist);
+ elm_object_content_set(ad->toolbar_setting_popup, setting_popup);
+
+ int x, y ;
+ x = y = 0;
+ DEBUG_TRACE("ad->target_direction = %d", ad->target_direction);
+ __get_option_coord_by_menubar_no(CAM_MENU_BAR_LEFT_0, ad->target_direction, &x, &y);
+ DEBUG_TRACE("x = %d y = %d", x, y);
+ __cam_toolbar_move_ctxpopup(ad->toolbar_setting_popup, ad->target_direction, x, y);
+
+ evas_object_show(ad->toolbar_setting_popup);
+ __setting_popup_timeout_checker_start(ad);
+
+ __set_show_state_preview_obj(ad, FALSE);
+
+ return EXIT_SUCCESS;
+}
+
+int toolbar_shot_guide_popup_create(struct appdata *ad, int shot_mode)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ int str_num1 = 0;
+ int str_num2 = 0;
+ char *str = NULL;
+
+ if (ad->shot_mode_guide_popup) {
+ toolbar_shot_guide_popup_destory(ad);
+ }
+
+ elm_object_part_content_unset(ad->ug_base, "shot_guide_popup_layout");
+
+ if ((cam_handle->shooting_mode == CAM_SINGLE_MODE)
+ || (cam_handle->shooting_mode == CAM_SELF_SINGLE_MODE))
+ return EXIT_SUCCESS;
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_landscape");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_potrait");
+ break;
+ default:
+ DEBUG_TRACE("Invalid direction type!!!");
+ }
+
+ cam_retvm_if(ad->shot_mode_guide_popup == NULL, -1, "shot_mode_guide_popup is NULL");
+ elm_object_part_content_set(ad->ug_base, "shot_guide_popup_layout", ad->shot_mode_guide_popup);
+
+ char popup_str[1024 + 1] = { '\0',};
+ snprintf(popup_str, 1024, "%s", dgettext(PACKAGE, "IDS_CAM_POP_PRESS_SHUTTER"));
+ edje_object_part_text_set(_EDJ(ad->shot_mode_guide_popup), "text", popup_str);
+
+ evas_object_show(ad->shot_mode_guide_popup);
+
+ return EXIT_SUCCESS;
+}
+
+int toolbar_shot_guide_popup_destory(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ UI_TEST_LOG("Guide popup destory");
+
+ if (ad->shot_mode_guide_popup) {
+ evas_object_del(ad->shot_mode_guide_popup);
+ ad->shot_mode_guide_popup = NULL;
+ }
+
+ return 0;
+}
+
+int toolbar_shot_guide_popup_move(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+
+ int x = 0, y = 0;
+
+ if (ad->shot_mode_guide_popup) {
+ Eina_Bool setting_ctxpopup_is_visible = false;
+ ecore_x_window_size_get(ad->main_xid, &x, &y);
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_is_visible = evas_object_visible_get(ad->setting_ctxpopup);
+
+ cam_debug(LOG_UI, "evas_object_visible_get(ad->setting_ctxpopup) =%d", setting_ctxpopup_is_visible);
+
+ if (ad->toolbar_setting_popup) {
+ __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
+ toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
+ } else {
+ __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
+ toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
+ }
+
+ cam_critical(LOG_UI, "x = %d, y= %d", x, y);
+ }
+
+ return 0;
+}
+
+static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, NULL, "camapp is NULL");
+
+ char *icon_name = NULL;
+ int exposure_value = 0;
+
+ switch(item){
+ case CAM_MENU_SCENE_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_AUTO_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_PORTRAIT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_PORTRAIT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_PORTRAIT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_LANDSCAPE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_LANDSCAPE_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_LANDSCAPE_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_NIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_NIGHT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_NIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_SPORTS:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_SPORTS_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_SPORTS_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_PARTY:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_PARTY_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_PARTY_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_BEACHSNOW:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_BEACHSNOW_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_BEACHSNOW_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_SUNSET:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_SUNSET_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_SUNSET_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_DUSKDAWN:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_DUSKDAWN_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_DUSKDAWN_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_FALL:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_FALL_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_FALL_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_FIREWORK:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_FIREWORK_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_FIREWORK_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_TEXT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_TEXT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_TEXT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_CANDLELIGHT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_CANDLELIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_BACKLIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_BACKLIGHT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_BACKLIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SHOOTING_SINGLE:
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SHOOTING_MODE_SINGLE_PRESS_ICON;
+ else
+ icon_name = SHOOTING_MODE_SINGLE_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_8M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_8M_NORMAL_ICON;
+ break;
+
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W5_7M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W5_7M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_5M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_5M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_3_2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_3_2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W2_4M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W2_4M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1280x960:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_1_3M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_1_3M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1280x720:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W0_9M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W0_9M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_640x480:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_0_3M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_0_3M_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_FULLHD_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_FULLHD_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_HD:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_HD_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_HD_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_WVGA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_WVGA_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_WVGA_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_VGA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_VGA_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_VGA_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_QVGA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_QVGA_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_QVGA_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_QCIF:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_QCIF_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_QCIF_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_AWB:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_AUTO_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_INCANDESCENT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_INCANDESCENT_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_INCANDESCENT_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_FLUORESCENT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_FLUORESCENT_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_FLUORESCENT_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_DAYLIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_DAYLIGHT_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_DAYLIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_CLOUDY:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_CLOUDY_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_CLOUDY_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_SHADE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_SHADE_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_SHADE_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_HORIZON:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_HORIZON_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_HORIZON_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_FLASH:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_WB_CUSTOM:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_EFFECT_NONE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_NONE_PRESS_ICON;
+ else
+ icon_name = EFFECTS_NONE_NORMAL_ICON;
+ break;
+ case CAM_MENU_EFFECT_NEGATIVE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_NEGATIVE_PRESS_ICON;
+ else
+ icon_name = EFFECTS_NEGATIVE_NORMAL_ICON;
+ break;
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_BLACKANDWHITE_PRESS_ICON;
+ else
+ icon_name = EFFECTS_BLACKANDWHITE_NORMAL_ICON;
+ break;
+ case CAM_MENU_EFFECT_SEPIA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_SEPIA_PRESS_ICON;
+ else
+ icon_name = EFFECTS_SEPIA_NORMAL_ICON;
+ break;
+ case CAM_MENU_FOCUS_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FOCUS_MODE_AUTO_PRESS_ICON;
+ else
+ icon_name = FOCUS_MODE_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_FOCUS_MACRO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FOCUS_MODE_MACRO_PRESS_ICON;
+ else
+ icon_name = FOCUS_MODE_MACRO_NORMAL_ICON;
+ break;
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FOCUS_MODE_FACE_DETECTION_PRESS_ICON;
+ else
+ icon_name = FOCUS_MODE_FACE_DETECTION_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_NORMAL_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_NORMAL_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_LIMIT_MMS_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_LIMIT_MMS_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_SLOW_MOTION_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_SLOW_MOTION_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_FAST:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_FAST_MOTION_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_FAST_MOTION_NORMAL_ICON;
+ break;
+ case CAM_MENU_FLASH_OFF:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FLASH_OFF_PRESS_ICON;
+ else
+ icon_name = FLASH_OFF_NORMAL_ICON;
+ break;
+ case CAM_MENU_FLASH_ON:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FLASH_ON_PRESS_ICON;
+ else
+ icon_name = FLASH_ON_NORMAL_ICON;
+ break;
+ case CAM_MENU_FLASH_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FLASH_AUTO_PRESS_ICON;
+ else
+ icon_name = FLASH_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_METERING_MATRIX:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = METERING_MATRIX_PRESS_ICON;
+ else
+ icon_name = METERING_MATRIX_NORMAL_ICON;
+ break;
+ case CAM_MENU_METERING_CENTER_WEIGHTED:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = METERING_CENTER_WEIGHTED_PRESS_ICON;
+ else
+ icon_name = METERING_CENTER_WEIGHTED_NORMAL_ICON;
+ break;
+ case CAM_MENU_METERING_SPOT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = METERING_SPOT_PRESS_ICON;
+ else
+ icon_name = METERING_SPOT_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_AUTO_PRESS_ICON;
+ else
+ icon_name = ISO_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_50:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_50_PRESS_ICON;
+ else
+ icon_name = ISO_50_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_100:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_100_PRESS_ICON;
+ else
+ icon_name = ISO_100_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_200:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_200_PRESS_ICON;
+ else
+ icon_name = ISO_200_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_400:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_400_PRESS_ICON;
+ else
+ icon_name = ISO_400_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_80O:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_800_PRESS_ICON;
+ else
+ icon_name = ISO_800_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_1600:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_ISO_320O:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_STORAGE_PHONE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = STORAGE_MYDEVICE_PRESS_ICON;
+ else
+ icon_name = STORAGE_MYDEVICE_NORMAL_ICON;
+ break;
+ case CAM_MENU_STORAGE_MMC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = STORAGE_CARD_PRESS_ICON;
+ else
+ icon_name = STORAGE_CARD_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_OFF:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_OFF_PRESS_ICON;
+ else
+ icon_name = TIMER_OFF_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_2SEC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_2SEC_PRESS_ICON;
+ else
+ icon_name = TIMER_2SEC_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_5SEC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_5SEC_PRESS_ICON;
+ else
+ icon_name = TIMER_5SEC_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_10SEC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_10SEC_PRESS_ICON;
+ else
+ icon_name = TIMER_10SEC_NORMAL_ICON;
+ break;
+ case CAM_MENU_VOLUME_KEY_ZOOM:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = VOLUME_KEY_AS_ZOOM_PRESS_ICON;
+ else
+ icon_name = VOLUME_KEY_AS_ZOOM_NORMAL_ICON;
+ break;
+ case CAM_MENU_VOLUME_KEY_SHUTTER:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = VOLUME_KEY_AS_SHUTTER_PRESS_ICON;
+ else
+ icon_name = VOLUME_KEY_AS_SHUTTER_NORMAL_ICON;
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ if (camapp->self_portrait == FALSE)
+ exposure_value = camapp->brightness;
+ else
+ exposure_value = camapp->brightness + 4;
+
+ if (exposure_value == 0) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_2_0_ICON;
+ } else if (exposure_value == 1) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_1_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_1_5_ICON;
+ } else if (exposure_value == 2) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_1_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_1_0_ICON;
+ } else if (exposure_value == 3) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_0_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_0_5_ICON;
+ } else if (exposure_value == 4) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_0_ICON;
+ } else if (exposure_value == 5) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_0_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_0_5_ICON;
+ } else if (exposure_value == 6) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_1_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_1_0_ICON;
+ } else if (exposure_value == 7) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_1_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_1_5_ICON;
+ } else if (exposure_value == 8) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_2_0_ICON;
+ } else {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_0_ICON;
+ }
+ break;
+ default:
+ icon_name = NULL;
+ }
+
+ return icon_name;
+}
+
+static const char* __get_text_name(CAM_MENU_ITEM item)
+{
+ switch(item){
+ case CAM_MENU_SCENE_AUTO:
+ return "IDS_CAM_BODY_NONE";
+ case CAM_MENU_SCENE_PORTRAIT:
+ return "IDS_CAM_OPT_SCENE_PORTRAIT";
+ case CAM_MENU_SCENE_LANDSCAPE:
+ return "IDS_CAM_OPT_SCENE_LANDSCAPE";
+ case CAM_MENU_SCENE_NIGHT:
+ return "IDS_CAM_OPT_SCENEMODE_NIGHT";
+ case CAM_MENU_SCENE_SPORTS:
+ return "IDS_CAM_OPT_SCENE_SPORTS";
+ case CAM_MENU_SCENE_PARTY:
+ return "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR";
+ case CAM_MENU_SCENE_BEACHSNOW:
+ return "IDS_CAM_OPT_BEACH_SNOW";
+ case CAM_MENU_SCENE_SUNSET:
+ return "IDS_CAM_OPT_SCENEMODE_SUNSET";
+ case CAM_MENU_SCENE_DUSKDAWN:
+ return "IDS_CAM_OPT_SCENE_DAWN";
+ case CAM_MENU_SCENE_FALL:
+ return "IDS_CAM_OPT_AUTUMN_COLOUR";
+ case CAM_MENU_SCENE_FIREWORK:
+ return "IDS_CAM_BODY_SCENEMODE_FIREWORK";
+ case CAM_MENU_SCENE_TEXT:
+ return "IDS_CAM_BODY_SCENEMODE_TEXT";
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ return "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT";
+ case CAM_MENU_SCENE_BACKLIGHT:
+ return "IDS_CAM_OPT_SCENE_BACKLIGHT";
+ case CAM_MENU_SHOOTING_SINGLE:
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ return "IDS_CAM_BODY_SINGLE";
+ case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
+ return "3264x2448";
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
+ return "3264x1960";
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
+ return "3264x1836";
+ case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
+ return "2800x1920";
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
+ return "2560x1920";
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
+ return "2560x1440";
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
+ return "2048x1536";
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
+ return "2048x1152";
+ case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
+ return "1920x1080";
+ case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
+ return "1600x1200";
+ case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
+ return "1392x1392";
+ case CAM_MENU_PHOTO_RESOLUTION_1280x960:
+ return "1280x960";
+ case CAM_MENU_PHOTO_RESOLUTION_1280x720:
+ return "1280x720";
+ case CAM_MENU_PHOTO_RESOLUTION_640x480:
+ return "640x480";
+ case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
+ return "1920x1080";
+ case CAM_MENU_VIDEO_RESOLUTION_HD:
+ return "1280x720";
+ case CAM_MENU_VIDEO_RESOLUTION_WVGA:
+ return "720X480";
+ case CAM_MENU_VIDEO_RESOLUTION_VGA:
+ return "640x480";
+ case CAM_MENU_VIDEO_RESOLUTION_QVGA:
+ return "320x240";
+ case CAM_MENU_VIDEO_RESOLUTION_QCIF:
+ return "176x144";
+ case CAM_MENU_WB_AWB:
+ return "IDS_CAM_BODY_AUTO";
+ case CAM_MENU_WB_INCANDESCENT:
+ return "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT";
+ case CAM_MENU_WB_FLUORESCENT:
+ return "IDS_CAM_BODY_FLUORESCENT";
+ case CAM_MENU_WB_DAYLIGHT:
+ return "IDS_CAM_BODY_DAYLIGHT";
+ case CAM_MENU_WB_CLOUDY:
+ return "IDS_CAM_BODY_CLOUDY";
+ case CAM_MENU_WB_SHADE:
+ return "IDS_CAM_BODY_SHADE";
+ case CAM_MENU_WB_HORIZON:
+ return "IDS_CAM_BODY_HORIZON";
+ case CAM_MENU_WB_FLASH:
+ return "IDS_CAM_OPT_FLASH";
+ case CAM_MENU_WB_CUSTOM:
+ return "IDS_CAM_BODY_CUSTOM";
+ case CAM_MENU_EFFECT_NONE:
+ return "IDS_CAM_BODY_NONE";
+ case CAM_MENU_EFFECT_NEGATIVE:
+ return "IDS_CAM_BODY_NEGATIVE";
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ return "IDS_CAM_BODY_BLACK_AND_WHITE";
+ case CAM_MENU_EFFECT_SEPIA:
+ return "IDS_CAM_BODY_SEPIA";
+ case CAM_MENU_FOCUS_AUTO:
+ return "IDS_CAM_OPT_AUTO_FOCUS";
+ case CAM_MENU_FOCUS_MACRO:
+ return "IDS_CAM_BODY_MACRO";
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ return "IDS_CAM_OPT_FACE_DETECTION";
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ return "IDS_CAM_OPT_MESSAGE_LIMIT";
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ return "IDS_CAM_OPT_SLOW_MOTION";
+ case CAM_MENU_RECORDING_MODE_FAST:
+ return "IDS_CAM_BODY_FAST_MOTION";
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ return "IDS_CAM_OPT_MESSAGE_LIMIT";
+ case CAM_MENU_FLASH_OFF:
+ return "IDS_CAM_BODY_OFF";
+ case CAM_MENU_FLASH_ON:
+ return "IDS_CAM_BODY_ON";
+ case CAM_MENU_FLASH_AUTO:
+ return "IDS_CAM_BODY_AUTO";
+ case CAM_MENU_METERING_MATRIX:
+ return "IDS_CAM_BODY_MATRIX";
+ case CAM_MENU_METERING_CENTER_WEIGHTED:
+ return "IDS_CAM_BODY_CENTER_WEIGHTED";
+ case CAM_MENU_METERING_SPOT:
+ return "IDS_CAM_BODY_SPOT";
+ case CAM_MENU_ISO_AUTO:
+ return "IDS_CAM_BODY_AUTO";
+ case CAM_MENU_ISO_50:
+ return "50";
+ case CAM_MENU_ISO_100:
+ return "100";
+ case CAM_MENU_ISO_200:
+ return "200";
+ case CAM_MENU_ISO_400:
+ return "400";
+ case CAM_MENU_ISO_80O:
+ return "800";
+ case CAM_MENU_ISO_1600:
+ return "1600";
+ case CAM_MENU_ISO_320O:
+ return "3200";
+ case CAM_MENU_STORAGE_PHONE:
+ return "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY";
+ case CAM_MENU_STORAGE_MMC:
+ return "IDS_CAM_OPT_MEMORY_CARD";
+ case CAM_MENU_TIMER_OFF:
+ return "IDS_CAM_BODY_OFF";
+ case CAM_MENU_TIMER_2SEC:
+ return "IDS_CAM_BODY_2_SEC";
+ case CAM_MENU_TIMER_5SEC:
+ return "IDS_CAM_BODY_5_SEC";
+ case CAM_MENU_TIMER_10SEC:
+ return "IDS_CAM_BODY_10_SEC";
+ case CAM_MENU_VOLUME_KEY_ZOOM:
+ return "IDS_CAM_MBODY_THE_ZOOM_KEY";
+ case CAM_MENU_VOLUME_KEY_SHUTTER:
+ return "IDS_CAM_MBODY_THE_CAMERA_KEY";
+ default:
+ return NULL;
+ }
+}
+
+#define SUB_MENU_MAX_COUNT (5)
+#define SUB_MENU_2_COUNT_GAP (35)
+#define SUB_MENU_3_COUNT_GAP (30)
+#define SUB_MENU_4_COUNT_GAP (25)
+#define SUB_MENU_5_COUNT_GAP (15)
+
+static int __get_sub_menu_height(int count)
+{
+ int height = 0;
+ if (count > 5)
+ height = SUB_MENU_POPUP_HEIGHT;
+ else {
+ height = (int)(SUB_MENU_POPUP_HEIGHT * count/SUB_MENU_MAX_COUNT);
+ switch (count) {
+ case 2:
+ height += SUB_MENU_2_COUNT_GAP;
+ break;
+ case 3:
+ height += SUB_MENU_3_COUNT_GAP;
+ break;
+ case 4:
+ height += SUB_MENU_4_COUNT_GAP;
+ break;
+ case 5:
+ height += SUB_MENU_5_COUNT_GAP;
+ break;
+ }
+ }
+ return height;
+}
+
+static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ DEBUG_TRACE("");
+
+ int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set resolution value */
+ if (camapp->photo_resolution != resolution) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, resolution);
+ if (!cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &value)) {
+ DEBUG_TRACE("set photo resolution failed!");
+ }
+ }
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_PHOTO_RESOLUTION);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ DEBUG_TRACE("");
+
+ int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set resolution value */
+ if (camapp->video_resolution != resolution) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, resolution);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ DEBUG_TRACE("set video resolution failed!");
+ }
+ }
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_VIDEO_RESOLUTION);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+void cam_toolbar_show_cafbutton(struct appdata *ad, gboolean show)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (show) {
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ else {
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ }
+}
+
+static void __update_setting_popup(void* data)
+{
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ Elm_Object_Item *it = NULL;
+ it = elm_genlist_first_item_get(ad->genlist);
+
+ while (it) {
+ CAM_MENU_ITEM item = (CAM_MENU_ITEM)elm_object_item_data_get(it);
+ gboolean cap_enable = cam_is_enabled_menu(ad,item);
+ gboolean cur_state = elm_object_item_disabled_get(it);
+ DEBUG_TRACE("cap_enable %d", cap_enable);
+ DEBUG_TRACE("cur_state %d", cap_enable);
+ if(cap_enable == cur_state) {
+ DEBUG_TRACE("cur_state|cap_enable %d", cap_enable|cur_state);
+ elm_object_item_disabled_set(it, !cap_enable);
+ elm_genlist_item_update(it);
+ }
+
+ it = elm_genlist_item_next_get(it);
+
+ }
+
+}
+
+static void __set_show_state_preview_obj(void *data, gboolean show)
+{
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (show) {
+ cam_app_focus_guide_update(ad);
+ cam_indicator_set_show_state(ad, TRUE);
+
+ if (ad->guideline_edje)
+ evas_object_show(ad->guideline_edje);
+
+ if (ad->shot_mode_guide_popup)
+ evas_object_show(ad->shot_mode_guide_popup);
+ } else {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ cam_indicator_set_show_state(ad, FALSE);
+
+ if (ad->guideline_edje)
+ evas_object_hide(ad->guideline_edje);
+
+ if (ad->shot_mode_guide_popup)
+ evas_object_hide(ad->shot_mode_guide_popup);
+ }
+}
+
+//end file