Closes app now when you hit the back button. This is a temp fix to keep media workin...
[profile/ivi/ug-camera-efl.git] / src / edc-callback / cam_toolbar_edc_callback.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *        http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18 #include <stdio.h>
19 #include <pthread.h>
20 /*
21 #include "camera_utils.h"
22 */
23 #include "cam.h"
24 #include "edc_string.h"
25 #include "edc_image_name.h"
26 #include "cam_ta.h"
27 #include "cam_config.h"
28
29 #include "cam_toolbar_edc_callback.h"
30 #include "cam_common_edc_callback.h"
31 #include "cam_indicator_edc_callback.h"
32 #include "cam_long_press.h"
33 #include "cam_zoom_edc_callback.h"
34 #include "cam_ev_edc_callback.h"
35 #include "cam_ui_effect_utils.h"
36 #include "cam_menu_composer.h"
37 #include "cam_device_capacity.h"
38 #include "cam_voice_command.h"
39 #include "cam_face_detection_focus.h"
40 #include "cam_rec.h"
41 #include "cam_mm.h"
42
43
44 #define SHUTTER_LONG_TAP_TIME 0.5 /*latency time of AF function*/
45 #define CAM_SHOTCUTS_NUMS 22
46
47 static int setting_gl_x = 0; /*mouse in setting popup coordinate: x*/
48 static int setting_gl_y = 0; /*mouse in setting popup coordinate: y*/
49 static Elm_Genlist_Item_Class itc;
50 static Elm_Genlist_Item_Class sub_itc;
51
52 static Evas_Coord shortcuts_canvas_prev_x;
53 static Evas_Coord shortcuts_canvas_prev_y;
54 static Eina_List *shortcuts_ele_list = NULL;
55 static pthread_mutex_t edit_shortcuts_move_mutex = PTHREAD_MUTEX_INITIALIZER;
56 static gboolean show_caf_button = FALSE;
57
58 #define POPUP_WIDTH 350
59 #define WB_POPUP_HEIGHT 478
60 #define EFFECT_MODE_POPUP_NORMAL_HEIGHT 382
61 #define FOCUS_POPUP_CAM_HEIGHT 309
62 #define FLASH_POPUP_CAM_HEIGHT 338
63 #define FLASH_POPUP_REC_HEIGHT 338
64 #define REC_MODE_POPUP_HEIGHT 309
65 #define SHOT_MODE_POPUP_NORMAL_HEIGHT 382
66 #define SHOT_MODE_POPUP_EXTERNAL_HEIGHT 309
67 #define MORE_POPUP_HEIGHT 500
68 #define METERING_POPUP_HIGHT 309
69 #define ISO_POPUP_HEIGHT 561
70 #define POPUP_HEIGHT 561
71 #define RESOLUTION_POPUP_CAM_HEIGHT (561)
72 #define RESOLUTION_POPUP_REC_HEIGHT (561)
73 #define TIMER_POPUP_CAM_HEIGHT 382
74
75 #define SETTING_POPUP_X (114)
76 #define SETTING_POPUP_Y (55)
77 #define VER_SETTING_POPUP_X SETTING_POPUP_Y
78 #define VER_SETTING_POPUP_Y SETTING_POPUP_X
79 #define SHORTCUTS_PART_ARRAY_MAX_LEN (16)
80
81 #define OPTION_POPUP_X          107
82 #define OPTION_POPUP_Y          613
83 #define SHOT_MODE_POPUP         203
84 #define EV_POPUP                        340
85 #define TIMER_POPUP             472
86
87 #define RESOLUTION_POPUP        610
88 #define ISO_POPUP                       763
89 #define METERING_POPUP  743
90 #define WB_POPUP                        900
91 #define MORE_POPUP                      1067
92
93 #define SETTING_HOR_CTX_POPUP_X         554
94 #define SETTING_VER_CTX_POPUP_X         152
95 #define SCENE_MODE_POPUP_WIDTH 400
96
97 #define SUB_MENU_POPUP_WIDTH 502
98 #define SUB_MENU_POPUP_HEIGHT 580
99
100 #define SETTING_POPUP_WIDTH 550
101 #define SETTING_POPUP_HEIGHT 661
102
103 #define SHOT_GUIDE_POPUP_WIDTH  600
104 #define SHOT_GUIDE_POPUP_HEIGHT 72
105
106 static Shortcuts_List_Prop edit_shortcuts_prop_array[CAM_EDIT_SHORTCUTS_INDEX_MAX]
107 = {
108                 /*row 1*/
109         {CAM_EDIT_SHORTCUTS_INDEX_0, PROP_SHORTCUTS_PART_INDEX_0},
110         {CAM_EDIT_SHORTCUTS_INDEX_1, PROP_SHORTCUTS_PART_INDEX_1},
111         {CAM_EDIT_SHORTCUTS_INDEX_2, PROP_SHORTCUTS_PART_INDEX_2},
112         {CAM_EDIT_SHORTCUTS_INDEX_3, PROP_SHORTCUTS_PART_INDEX_3},
113                 /*row 2*/
114         {CAM_EDIT_SHORTCUTS_INDEX_4, PROP_SHORTCUTS_PART_INDEX_4},
115         {CAM_EDIT_SHORTCUTS_INDEX_5, PROP_SHORTCUTS_PART_INDEX_5},
116         {CAM_EDIT_SHORTCUTS_INDEX_6, PROP_SHORTCUTS_PART_INDEX_6},
117         {CAM_EDIT_SHORTCUTS_INDEX_7, PROP_SHORTCUTS_PART_INDEX_7},
118                 /*row 3*/
119         {CAM_EDIT_SHORTCUTS_INDEX_8, PROP_SHORTCUTS_PART_INDEX_8},
120         {CAM_EDIT_SHORTCUTS_INDEX_9, PROP_SHORTCUTS_PART_INDEX_9},
121         {CAM_EDIT_SHORTCUTS_INDEX_10, PROP_SHORTCUTS_PART_INDEX_10},
122         {CAM_EDIT_SHORTCUTS_INDEX_11, PROP_SHORTCUTS_PART_INDEX_11},
123                 /*row 4*/
124         {CAM_EDIT_SHORTCUTS_INDEX_12, PROP_SHORTCUTS_PART_INDEX_12},
125         {CAM_EDIT_SHORTCUTS_INDEX_13, PROP_SHORTCUTS_PART_INDEX_13},
126         {CAM_EDIT_SHORTCUTS_INDEX_14, PROP_SHORTCUTS_PART_INDEX_14},
127         {CAM_EDIT_SHORTCUTS_INDEX_15, PROP_SHORTCUTS_PART_INDEX_15},
128                 /*row 5*/
129         {CAM_EDIT_SHORTCUTS_INDEX_16, PROP_SHORTCUTS_PART_INDEX_16},
130         {CAM_EDIT_SHORTCUTS_INDEX_17, PROP_SHORTCUTS_PART_INDEX_17},
131         {CAM_EDIT_SHORTCUTS_INDEX_18, PROP_SHORTCUTS_PART_INDEX_18},
132         {CAM_EDIT_SHORTCUTS_INDEX_19, PROP_SHORTCUTS_PART_INDEX_19},
133 };
134
135 static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
136                                 char **file_path, char **text, Evas_Object_Event_Cb *func);
137 static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon);
138
139 void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
140 void create_menubar_shortcuts_mouse_event(struct appdata *ad);
141 void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
142 gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no);
143 int toolbar_create_shortcuts_popup(struct appdata *ad);
144
145 static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow);
146 static void setting_ctxpopup_destroy(struct appdata *ad);
147
148 static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y);
149
150 static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction,      int *x, int *y);
151 static int __get_menubar_no_by_index(struct appdata *ad, int index);
152
153 static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj, void *event_info);
154 static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info);
155 static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj, void *event_info);
156 static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info);
157 static void __update_menubar_icon_by_index(struct appdata *ad, int index);
158 static void __cam_toolbar_edit_shortcuts_data_clean();
159 static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y);
160 static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y);
161
162 static void __toolbar_menu_type_update(Evas_Object *toolbar_icon, int type, void *data, ButtonState state, Evas_Object_Event_Cb *func);
163 static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction, int mouse_point,  int *x, int *y);
164
165 /* Setting list callback*/
166 static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting);
167 static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info);
168 static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info);
169 static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info);
170 static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info);
171 static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info);
172 static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info);
173 static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info);
174 static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info);
175 static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info);
176 static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info);
177 static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info);
178 static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info);
179 static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info);
180 static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info);
181 static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info);
182 static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info);
183 static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info);
184 static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info);
185 static void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info);
186 static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info);
187 static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info);
188 static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info);
189 static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info);
190 static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
191 static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
192 static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info);
193
194 /* Toolbar functions */
195 static void __toolbar_menu_icon_update(struct appdata *ad);
196 static int __toolbar_menu_item_create(struct appdata *ad);
197 static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state);
198 static void __toolbar_menu_item_reset(struct appdata *ad);
199 static int __toolbar_shutter_button_create(struct appdata *ad);
200 static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state);
201 static int __toolbar_recording_button_create(struct appdata *ad);
202 static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state);
203 static int __toolbar_quickview_item_create(struct appdata *ad);
204 static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state);
205 static int __toolbar_backbutton_create(struct appdata *ad);
206 static void __toolbar_backbutton_destroy(struct appdata *ad);
207 static int __toolbar_cafbutton_create(struct appdata *ad);
208 static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state);
209 static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state);;
210
211 static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state);
212 static const char* __get_text_name(CAM_MENU_ITEM item);
213
214 static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
215 static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
216 static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect);
217 static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
218                                                         int swap_rel1_y,
219                                                         int swap_w,
220                                                         int swap_h,
221                                                         int cur_rel1_x,
222                                                         int cur_rel1_y,
223                                                         int cur_w,
224                                                         int cur_h,
225                                                         int correction_w,
226                                                         int correction_h);
227 static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
228                                                                         ShortCutData *swap_ele,
229                                                                         ShortCutData *cur_ele);
230
231 static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no);
232 static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata);
233 static void __cam_setting_sub_gl_style_set();
234 static int __get_sub_menu_height(int count);
235 int cam_toolbar_displaypopup_map_menu_value(int display_popup);
236 int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item);
237 static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2);
238 static void __resort_edit_shortcuts_list_by_part_index(void);
239 static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele);
240 static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no);
241
242 static void __update_setting_popup(void* data);
243 static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele);
244 static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
245                                                                                 int setting_type,
246                                                                                 int menubar_no);
247 static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no);
248 static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
249                                                                         ShortCutData *cur_ele,
250                                                                         ShortCutData *insert_ele);
251
252 static void __set_show_state_preview_obj(void *data, gboolean show);
253 static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part);
254
255 static Eina_Bool __setting_popup_timeout_checker_cb(void *data);
256 static gboolean __setting_popup_timeout_checker_start(struct appdata *ad);
257 static void __cam_toolbar_display_shortcuts_editmode(void *data);
258
259 static void __cam_toolbar_exit_shortcuts_editmode(void *data);
260 static void __toolbar_dim_setting_shortcuts(struct appdata *ad);
261
262
263 static void cam_popup_warning_response_cb(void *data, Evas_Object *obj, void *event_info)
264 {
265         if (obj)
266                 evas_object_del(obj);
267         obj = NULL;
268 }
269
270 static void cam_storage_warning_popup()
271 {
272         struct appdata *ad = (struct appdata *)cam_appdata_get();
273         cam_retm_if(ad == NULL, " appdata is NULL");
274         Evas_Object *popup;
275         popup = elm_popup_add(ad->ug_base);
276         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
277         elm_object_text_set(popup, dgettext(PACKAGE, "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA"));
278         elm_popup_timeout_set(popup, 3.0);
279         evas_object_smart_callback_add(popup, "timeout", cam_popup_warning_response_cb, NULL);
280         evas_object_show(popup);
281 }
282
283 static Eina_Bool __toolbar_check_af_timer(void *data)
284 {
285         DEBUG_TRACE("");
286         struct appdata *ad = (struct appdata *)data;
287         cam_retv_if(ad == NULL, 0);
288         CamAppData *camapp = ad->camapp_handle;
289         if (camapp == NULL) {
290                 if (ad->check_af_timer)
291                         ad->check_af_timer = NULL;
292                 return ECORE_CALLBACK_CANCEL;
293         }
294
295         if(camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
296                 || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
297                 || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
298                 ad->emit_continuous_shutter = TRUE;
299                 cam_mm_stop_focusing();
300                 if (!cam_do_capture(ad)) {
301                         cam_warning(LOG_UI, "cam_do_capture failed");
302                         camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
303                         ad->emit_continuous_shutter = FALSE;
304                 }
305
306                 if (ad->check_af_timer)
307                         ad->check_af_timer = NULL;
308
309                 return ECORE_CALLBACK_CANCEL;
310         }
311
312         return ECORE_CALLBACK_RENEW;
313 }
314 static Eina_Bool __toolbar_continuous_shot_timer(void *data)
315 {
316         DEBUG_TRACE("");
317         struct appdata *ad = (struct appdata *)data;
318         cam_retv_if(ad == NULL, 0);
319         CamAppData *camapp = ad->camapp_handle;
320         if (camapp == NULL) {
321                 if (ad->continuous_shot_timer)
322                         ad->continuous_shot_timer = NULL;
323                 return ECORE_CALLBACK_CANCEL;
324         }
325
326         DEBUG_TRACE("camapp->burst_shot is %d", camapp->burst_shot);
327         if (camapp->burst_shot) {// burst shot mode 'on'
328                 camapp->default_capture_mode = CAM_CAPTURE_BURST;
329                 ad->emit_continuous_shutter = TRUE;
330                 if (camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
331                         || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
332                         || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
333                         REMOVE_TIMER(ad->continuous_af_timer);
334                         cam_mm_stop_focusing();
335
336                         if (!cam_do_capture(ad)) {
337                                 cam_warning(LOG_UI, "cam_do_capture failed");
338                                 camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
339                         }
340                 } else {
341                         cam_debug(LOG_UI, "Not focused");
342
343                         REMOVE_TIMER(ad->check_af_timer);
344                         ad->check_af_timer = ecore_timer_add(0.2, __toolbar_check_af_timer, ad);
345                 }
346         }
347
348         if (ad->continuous_shot_timer)
349                 ad->continuous_shot_timer = NULL;
350         return ECORE_CALLBACK_CANCEL;
351 }
352
353 /* start AF after SHUTTER_LONG_TAP_TIME */
354 static Eina_Bool __toolbar_shutter_long_tap_af_timer(void *data)
355 {
356         struct appdata *ad = (struct appdata *)data;
357         cam_retv_if(ad == NULL, 0);
358         CamAppData *camapp = ad->camapp_handle;
359         if (camapp == NULL) {
360                 if (ad->shutter_long_tap_timer)
361                         ad->shutter_long_tap_timer = NULL;
362                 return ECORE_CALLBACK_CANCEL;
363         }
364
365         if (!camapp->key_lock) {
366                 camapp->key_lock = TRUE;
367                 camapp->focus_mode = CAM_FOCUS_MODE_HALFSHUTTER;
368                 camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
369                 if (!cam_camera_key_half_press(ad)) {
370                         cam_warning(LOG_UI, "cam_camera_key_half_press failed");
371                 }
372                 camapp->key_lock = FALSE;
373         }
374
375         if (ad->shutter_long_tap_timer)
376                 ad->shutter_long_tap_timer = NULL;
377         return ECORE_CALLBACK_CANCEL;
378 }
379
380 static void __shutter_button_focus_out_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
381 {
382         DEBUG_TRACE("START");
383
384         struct appdata *ad = (struct appdata *)data;
385         cam_retm_if(ad == NULL, "appdata is NULL");
386         CamAppData *camapp = ad->camapp_handle;
387         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
388
389         if (ad->is_processing) {
390                 return;
391         }
392
393         cam_mm_stop_focusing();
394         cam_reset_focus_mode(ad);
395 }
396
397 void cam_toolbar_shutter_button_cb(void *data, Evas_Object *o,
398                                     const char *emission, const char *source)
399 {
400         DEBUG_TRACE("START");
401
402         struct appdata *ad = (struct appdata *)data;
403         cam_retm_if(ad == NULL, "appdata is NULL");
404         cam_app_timeout_checker_update();
405         if (ad->is_rotating) return;/*note: now is rotating*/
406         CamAppData *camapp = ad->camapp_handle;;
407         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
408
409         cam_retm_if(emission == NULL, "emission is NULL");
410         cam_retm_if(source == NULL, "source is NULL");
411         cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
412
413         if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
414
415         if (ad->zoom_edje)
416                 unload_zoom_edje(ad);
417
418         if (ad->ev_edje)
419                 unload_ev_edje(ad);
420
421         if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
422                 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
423                 cam_toolbar_setting_popup_destroy(ad);
424         }
425
426         if (ad->edit_shortcuts_popup)
427                 toolbar_destroy_shortcuts_popup(ad);
428
429         if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
430                 cam_debug(LOG_UI, "do not capture");
431                 return;
432         }
433
434         if (strcmp(emission, "press_shutter_sig") == 0) {
435                 if ((camapp->continuous_shot_data && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING )
436                         ){
437                         cam_critical(LOG_SYS, " capture is skipped because of CAM_CONTI_SHOT_STATUS_CAPTURING");
438                         return;
439                 }
440
441                 ad->emit_continuous_shutter = FALSE;
442                 if (camapp->camera_mode == CAM_CAMERA_MODE) {
443                         evas_object_event_callback_add(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb, (void *)ad);
444
445                         if (camapp->af_mode == CAM_FOCUS_FACE) { /*note: face focus mode, if start capture,stop draw rect*/
446                                 cam_app_stop_video_stream();
447                         }
448                         REMOVE_TIMER(ad->continuous_shot_timer);
449                         camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
450
451                         if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) && (camapp->burst_shot == TRUE)) {
452                                 if (strcmp(source, "hard_key") == 0) {
453                                         if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
454                                                 ad->continuous_shot_by_hard_key = TRUE;
455                                                 __toolbar_continuous_shot_timer(ad);
456                                         } else {
457                                                 if (!cam_do_capture(ad))
458                                                         cam_warning(LOG_UI, "cam_do_capture failed");
459                                         }
460                                 } else {
461                                         if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
462                                                 ad->continuous_shot_by_hard_key = FALSE;
463                                                 ad->continuous_shot_timer = ecore_timer_add(0.5, __toolbar_continuous_shot_timer, ad);
464                                         }
465                                 }
466
467                                 ad->stop_continuous_shot = FALSE;
468                         } else {
469                                 if (strcmp(source, "hard_key") == 0) {
470                                         if (!cam_do_capture(ad))
471                                                 cam_warning(LOG_UI, "cam_do_capture failed");
472                                 } else {
473                                         if (cam_is_enabled_menu((void*)ad, CAM_MENU_FOCUS_MODE)){
474                                                 REMOVE_TIMER(ad->continuous_af_timer);
475                                                 ad->shutter_long_tap_timer = ecore_timer_add(SHUTTER_LONG_TAP_TIME, __toolbar_shutter_long_tap_af_timer, ad);
476                                         }
477                                 }
478                         }
479                 } else {
480                         if (strcmp(source, "hard_key") == 0) {
481                                 if (!cam_do_capture(ad))
482                                         cam_warning(LOG_UI, "cam_do_capture failed");
483                         }
484                 }
485
486                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
487         } else if (strcmp(emission, "release_shutter_sig") == 0) {
488                 if (camapp->camera_mode == CAM_CAMERA_MODE) {
489                         evas_object_event_callback_del(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb);
490                         REMOVE_TIMER(ad->shutter_long_tap_timer);
491                         REMOVE_TIMER(ad->continuous_shot_timer);
492                         REMOVE_TIMER(ad->check_af_timer);
493
494                         if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE)
495                                 && camapp->burst_shot == TRUE
496                                 && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
497                                 DEBUG_TRACE("burst capture mode");
498                                 if (((strcmp(source, "hard_key") == 0) && (ad->continuous_shot_by_hard_key == FALSE))
499                                                 || ((strcmp(source, "toolbar_signal") == 0) && (ad->continuous_shot_by_hard_key == TRUE))) {
500                                         DEBUG_TRACE("ignore this event");
501                                         return;
502                                 }
503                                 ad->stop_continuous_shot = TRUE;
504                                 ad->emit_continuous_shutter = FALSE;
505                                 ad->continuous_shot_by_hard_key = FALSE;
506                         }
507                 }
508
509                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
510         } else if ( strcmp(emission, "click_shutter_sig") == 0){
511
512                 if (ad->emit_continuous_shutter == TRUE ) {
513                         ad->emit_continuous_shutter = FALSE;
514                         return;
515                 }
516
517                 if (camapp->default_capture_mode == CAM_CAPTURE_SINGLE) {
518                         if (!cam_do_capture(ad))
519                                 cam_warning(LOG_UI, "cam_do_capture failed");
520                 }
521         }
522 }
523
524 void cam_toolbar_recording_button_cb(void *data, Evas_Object *o,
525                                     const char *emission, const char *source)
526 {
527         DEBUG_TRACE("START");
528
529         struct appdata *ad = (struct appdata *)data;
530         cam_retm_if(ad == NULL, "appdata is NULL");
531         cam_app_timeout_checker_update();
532         if (ad->is_rotating) return;/*note: now is rotating*/
533         CamAppData *camapp = ad->camapp_handle;;
534         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
535
536         cam_retm_if(emission == NULL, "emission is NULL");
537         cam_retm_if(source == NULL, "source is NULL");
538         cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
539
540         if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
541
542         if (ad->zoom_edje)
543                 unload_zoom_edje(ad);
544
545         if (ad->ev_edje)
546                 unload_ev_edje(ad);
547
548         if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
549                 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
550                 cam_toolbar_setting_popup_destroy(ad);
551         }
552
553         if (ad->edit_shortcuts_popup)
554                 toolbar_destroy_shortcuts_popup(ad);
555
556         int mm_state = cam_mm_get_state();
557
558         if ((camapp->camera_mode == CAM_CAMERA_MODE)
559                 && (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)) {
560                 cam_debug(LOG_UI, "do not record");
561                 return;
562         }
563
564         if (strcmp(emission, "press_shutter_sig") == 0) {
565                 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
566                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,press", "prog");
567                 else
568                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,press", "prog");
569         } else if (strcmp(emission, "release_shutter_sig") == 0) {
570                 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
571                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
572                 else
573                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
574         } else if (strcmp(emission, "click_shutter_sig") == 0) {
575
576                 if (camapp->camera_mode == CAM_CAMERA_MODE) {
577                         if (mm_state != CAMERA_STATE_PREVIEW) {
578                                 cam_critical(LOG_UI, "Cannot start recording in capturing state");
579                                 return;
580                         }
581                 }
582
583                 if (!ad->is_recording) {
584                         // change to camcorder mode
585                         GValue value = {0, };
586                         if (camapp->camera_mode == CAM_CAMERA_MODE) {
587                                 CAM_GVALUE_SET_INT(value, CAM_CAMCORDER_MODE);
588                                 if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
589                                         return;
590                                 }
591                         }
592
593                         if (!camapp->key_lock) {
594                                 camapp->key_lock = TRUE;
595
596                                 if (!cam_do_record(ad))
597                                         cam_warning(LOG_UI, "cam_do_record failed");
598
599                                 camapp->key_lock = FALSE;
600                         }
601                 } else {
602                         if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING)) {
603                                 if (!cam_video_record_pause(ad))
604                                         cam_warning(LOG_UI, "cam_video_record_pause failed");
605
606                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
607                         } else if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_PAUSED)) {
608                                 if (!cam_video_record_resume(ad))
609                                         cam_warning(LOG_UI, "cam_video_record_resume failed");
610
611                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
612                         }
613                 }
614         }
615 }
616
617 void cam_toolbar_recording_stop_button_cb(void *data, Evas_Object *o,
618                                     const char *emission, const char *source)
619 {
620         DEBUG_TRACE("START");
621
622         struct appdata *ad = (struct appdata *)data;
623         cam_retm_if(ad == NULL, "appdata is NULL");
624         cam_app_timeout_checker_update();
625         if (ad->is_rotating) return;/*note: now is rotating*/
626         CamAppData *camapp = ad->camapp_handle;;
627         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
628
629         cam_retm_if(emission == NULL, "emission is NULL");
630         cam_retm_if(source == NULL, "source is NULL");
631         cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
632
633         int state = 0;
634
635         if (ad->zoom_edje)
636                 unload_zoom_edje(ad);
637         HIDE_EVAS_OBJECT(ad->indicator_edje);
638         DEL_EVAS_OBJECT(ad->recording_edje);
639
640         if (strcmp(emission, "press_shutter_sig") == 0) {
641                 edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,press", "prog");
642         } else if (strcmp(emission, "release_shutter_sig") == 0) {
643                 edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
644         } else if (strcmp(emission, "click_shutter_sig") == 0) {
645                 state = cam_mm_get_state();
646
647                 if ((state == RECORDER_STATE_RECORDING)
648                                 || (state == RECORDER_STATE_PAUSED)) {
649                         camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
650                         if (!cam_video_record_stop(ad))
651                                 cam_warning(LOG_UI, "cam_video_record_stop failed");
652                 } else {
653                         cam_debug(LOG_UI, "error, not recording or pause state");
654                 }
655         }
656 }
657
658 static void __toolbar_backbutton_cb(void *data, Evas_Object *o,
659                                     const char *emission, const char *source)
660 {
661         DEBUG_TRACE("START");
662
663         struct appdata *ad = (struct appdata *)data;
664         cam_retm_if(ad == NULL, "appdata is NULL");
665         if (ad->is_rotating) return;/*note: now is rotating*/
666         CamAppData *camapp = ad->camapp_handle;;
667         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
668
669         cam_retm_if(emission == NULL, "emission is NULL");
670         cam_retm_if(source == NULL, "source is NULL");
671         cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
672
673         if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
674
675         if (ad->timer_activated) {
676                 cam_app_cancel_timer(ad);
677                 if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
678                         if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
679                                 if (ad->ug_state != CAM_UG_PAUSE_STATE) {
680                                         GValue value = {0, };
681                                         CAM_GVALUE_SET_INT(value, CAM_CAMERA_MODE);
682                                         if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
683                                                 return;
684                                         }
685                                 }
686                         }
687                 }
688                 return;
689         } else {
690                 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
691                         if (ad->is_recording) {
692                                 if (!camapp->key_lock) {
693                                         camapp->key_lock = TRUE;
694
695                                         if (!cam_video_record_cancel(ad))
696                                                 cam_warning(LOG_UI, "failed");
697
698                                         camapp->key_lock = FALSE;
699                                         return;
700                                 }
701                         }
702                 }
703
704                 if (ad->tip_popup) {
705                         cam_tip_popup_destroy(ad);
706                         return;
707                 } else if (ad->toolbar_setting_popup) {
708                         if (ad->setting_ctxpopup) {
709                                 setting_ctxpopup_destroy(ad);
710                                 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
711                         } else {
712                                 cam_toolbar_setting_popup_destroy(ad);
713                         }
714                         return;
715                 } else if (ad->setting_ctxpopup) {
716                         setting_ctxpopup_destroy(ad);
717                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
718                         return;
719                 } else if (ad->edit_shortcuts_popup) {
720                         toolbar_destroy_shortcuts_popup(ad);
721                         return;
722                 } else if (ad->ev_edje) {
723                         unload_ev_edje(ad);
724                         return;
725                 } else if (ad->zoom_edje) {
726                         unload_zoom_edje(ad);
727                         return;
728                 }
729         }
730
731 /*      TODO: Properly release video and audio when minimizing. Otherwise it keeps other apps from gaining access 
732         if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)
733                 cam_app_exit(ad);
734         else
735                 elm_win_lower(ug_get_window());
736 */
737         cam_app_exit(ad);
738
739         DEBUG_TRACE("END");
740 }
741
742 static void __toolbar_cafbutton_cb(void *data, Evas_Object *o,
743                                     const char *emission, const char *source)
744 {
745         DEBUG_TRACE("START");
746
747         struct appdata *ad = (struct appdata *)data;
748         cam_retm_if(ad == NULL, "appdata is NULL");
749         CamAppData *camapp = ad->camapp_handle;;
750         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
751
752         cam_retm_if(emission == NULL, "emission is NULL");
753         cam_retm_if(source == NULL, "source is NULL");
754         cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
755
756         if (ad->is_rotating)
757                 return;
758
759         cam_reset_focus_mode(ad);
760 }
761
762 static Ecore_Idler *run_image_view_idler = NULL;
763 static Eina_Bool __cam_toolbar_run_image_viewer_idler(void *data)
764 {
765         struct appdata *ad = (struct appdata *)data;
766         cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
767         CamAppData *camapp = ad->camapp_handle;
768         cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
769
770         if (run_image_view_idler) {
771                 ecore_idler_del(run_image_view_idler);
772                 run_image_view_idler = NULL;
773         }
774
775         if (ad->ug_is_deleting_process == TRUE)
776                 return ECORE_CALLBACK_CANCEL;
777
778         if (!cam_app_run_media_browser(ad, camapp->filename)) {
779                 DEBUG_TRACE("cam_app_run_media_browser failed");
780         }
781
782         return ECORE_CALLBACK_CANCEL;
783 }
784
785 static void __toolbar_quickview_cb(void *data, Evas_Object *o,
786                                    const char *emission, const char *source)
787 {
788         cam_ret_if(data == NULL);
789         struct appdata *ad = (struct appdata *)data;
790         cam_retm_if(ad == NULL, "appdata is NULL");
791         cam_app_timeout_checker_update();
792         if (ad->is_rotating) return;/*note: now is rotating*/
793         CamAppData *camapp = ad->camapp_handle;
794         cam_ret_if(camapp == NULL);
795         cam_ret_if(emission == NULL);
796         cam_ret_if(source == NULL);
797         if (ad->ug_is_deleting_process == TRUE)
798                 return;
799
800         if (ad->zoom_edje)
801                 unload_zoom_edje(ad);
802
803         if (ad->ev_edje)
804                 unload_ev_edje(ad);
805
806         if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
807                 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
808                 cam_toolbar_setting_popup_destroy(ad);
809         }
810
811         if (ad->edit_shortcuts_popup)
812                 toolbar_destroy_shortcuts_popup(ad);
813
814         if (ad->imageviewer_ug) {
815                 return;
816         }
817         if (emission && source)
818                 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
819
820         if (strcmp(emission, "portrait,quickview,release") == 0
821                 || strcmp(emission, "landscape,quickview,release") == 0) {
822                 pthread_mutex_lock(&ad->file_reg_mutex);
823                 cam_debug(LOG_SYS, " lock file_reg_mutex");
824                 pthread_mutex_unlock(&ad->file_reg_mutex);
825                 run_image_view_idler = ecore_idler_add(__cam_toolbar_run_image_viewer_idler, (void *)ad);
826         }
827 }
828
829 #if 0 /*block it temporary*/
830 static void __shotcus_edit_shotcuts_popup_cb(void *data, Evas * evas, Evas_Object *obj,
831                             void *event_info)
832 {
833         DEBUG_TRACE();
834         __setting_edit_shortcut_popup_cb(data, obj, event_info);
835 }
836 #endif
837
838 static void __shortcuts_burst_shot_popup_cb(void *data, Evas * evas, Evas_Object *obj,
839                             void *event_info)
840 {
841         DEBUG_TRACE();
842         __setting_burst_shot_popup_cb(data, obj, event_info);
843 }
844
845 static void __shortcuts_volume_key_popup_cb(void *data, Evas * evas, Evas_Object *obj,
846                             void *event_info)
847 {
848          DEBUG_TRACE();
849         __setting_volume_key_popup_cb(data, obj, event_info);
850 }
851
852 static void __shortcuts_self_portrait_popup_cb(void *data, Evas * evas, Evas_Object *obj,
853                             void *event_info)
854 {
855          DEBUG_TRACE();
856         __setting_self_portrait_popup_cb(data, obj, event_info);
857 }
858
859 static void __shortcuts_setting_flash_popup_cb(void *data, Evas * evas, Evas_Object *obj,
860                             void *event_info)
861 {
862         DEBUG_TRACE();
863         __setting_flash_popup(data, obj, event_info);
864 }
865
866 static void __shortcuts_shooting_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
867                             void *event_info)
868 {
869         DEBUG_TRACE();
870         __setting_shot_mode_popup_cb(data, obj, event_info);
871 }
872
873 static void __shortcuts_record_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
874                             void *event_info)
875 {
876         DEBUG_TRACE();
877         __setting_record_mode_popup(data, obj, event_info);
878 }
879
880 static void __shortcuts_scene_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
881                             void *event_info)
882 {
883         DEBUG_TRACE();
884         __setting_scenemode_popup_cb(data, obj, event_info);
885 }
886
887 static void __shortcuts_exposure_popup_cb(void *data, Evas * evas, Evas_Object *obj,
888                             void *event_info)
889 {
890         DEBUG_TRACE();
891         __setting_ev_popup_cb(data, obj, event_info);
892 }
893
894 static void __shortcuts_focus_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
895                             void *event_info)
896 {
897         DEBUG_TRACE();
898         __setting_focus_mode_cb(data, obj, event_info);
899 }
900
901 static void __shortcuts_setting_timer_popup_cb(void *data, Evas * evas, Evas_Object *obj,
902                             void *event_info)
903 {
904         DEBUG_TRACE();
905         __setting_timer_popup_cb(data, obj, event_info);
906 }
907
908 static void __shortcuts_effects_popup_cb(void *data, Evas * evas, Evas_Object *obj,
909                             void *event_info)
910 {
911         DEBUG_TRACE();
912         __setting_effects_popup_cb(data, obj, event_info);
913 }
914
915 static void __shortcuts_photo_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
916                             void *event_info)
917 {
918         DEBUG_TRACE();
919         __setting_photo_resolution_popup_cb(data, obj, event_info);
920 }
921
922 static void __shortcuts_video_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
923                             void *event_info)
924 {
925         DEBUG_TRACE();
926         __setting_video_resolution_popup_cb(data, obj, event_info);
927
928 }
929
930 static void __shortcuts_white_banlance_popup_cb(void *data, Evas * evas, Evas_Object *obj,
931                             void *event_info)
932 {
933         DEBUG_TRACE();
934         __setting_wb_popup_cb(data, obj, event_info);
935 }
936
937 static void __shortcuts_setting_iso_popup_cb(void *data, Evas * evas, Evas_Object *obj,
938                             void *event_info)
939 {
940         DEBUG_TRACE();
941         __setting_iso_popup_cb(data, obj, event_info);
942 }
943
944 static void __shortcuts_setting_metering_popup_cb(void *data, Evas * evas, Evas_Object *obj,
945                             void *event_info)
946 {
947         DEBUG_TRACE();
948         __setting_metering_popup_cb(data, obj, event_info);
949 }
950
951 static void __shortcuts_anti_shake_popup_cb(void *data, Evas * evas, Evas_Object *obj,
952                             void *event_info)
953 {
954         DEBUG_TRACE();
955         __setting_anti_shake_popup_cb(data, obj, event_info);
956 }
957
958 static void __shortcuts_outdoor_visibility_popup_cb(void *data, Evas * evas, Evas_Object *obj,
959                             void *event_info)
960 {
961         DEBUG_TRACE();
962         __setting_outdoor_visibility_popup_cb(data, obj, event_info);
963 }
964
965 static void __shortcuts_auto_contrast_popup_cb(void *data, Evas * evas, Evas_Object *obj,
966                             void *event_info)
967 {
968         DEBUG_TRACE();
969         __setting_autocontrast_popup_cb(data, obj, event_info);
970 }
971
972 static void __shortcuts_guideline_popup_cb(void *data, Evas * evas, Evas_Object *obj,
973                             void *event_info)
974 {
975         DEBUG_TRACE();
976         __setting_guideline_popup_cb(data, obj, event_info);
977 }
978
979 static void __shortcuts_capture_voice_popup_cb(void *data, Evas * evas, Evas_Object *obj,
980                             void *event_info)
981 {
982         DEBUG_TRACE();
983         __setting_capture_by_voice_popup_cb(data, obj, event_info);
984 }
985
986 static void __shortcuts_gps_tag_popup_cb(void *data, Evas * evas, Evas_Object *obj,
987                             void *event_info)
988 {
989         DEBUG_TRACE();
990         __setting_gps_popup_cb(data, obj, event_info);
991 }
992
993 static void __shortcuts_storage_popup_cb(void *data, Evas * evas, Evas_Object *obj,
994                             void *event_info)
995 {
996         DEBUG_TRACE();
997         __setting_storage_popup_cb(data, obj, event_info);
998 }
999
1000 static void __shortcuts_reset_popup_cb(void *data, Evas * evas, Evas_Object *obj,
1001                             void *event_info)
1002 {
1003         DEBUG_TRACE();
1004         __setting_restore_defaults_popup_cb(data, obj, event_info);
1005 }
1006
1007 static void __shortcuts_save_as_flip_cb(void *data, Evas * evas, Evas_Object *obj,
1008                             void *event_info)
1009 {
1010         DEBUG_TRACE();
1011         __setting_save_as_flip_popup_cb(data, obj, event_info);
1012 }
1013
1014
1015 static void __update_menu_bar_shortcuts_state_by_index(struct appdata *ad, int index, ToolbarItemState state)
1016 {
1017         cam_ret_if(ad == NULL);
1018         int menubar_no = __get_menubar_no_by_index(ad, index);
1019         switch(menubar_no) {
1020         case CAM_MENU_BAR_LEFT_0:
1021                 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1022                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1023                                         "toolbar_0_icon,normal", "prog");
1024                 else if (TOOLBAR_ITEM_STATE_DIM == state)
1025                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1026                                         "toolbar_0_icon,dim", "prog");
1027                 else
1028                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1029                                         "toolbar_0_icon,invisible", "prog");
1030                 break;
1031         case CAM_MENU_BAR_LEFT_1:
1032                 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1033                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1034                                         "toolbar_1_icon,normal", "prog");
1035                 else if (TOOLBAR_ITEM_STATE_DIM == state)
1036                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1037                                         "toolbar_1_icon,dim", "prog");
1038                 else
1039                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1040                                         "toolbar_1_icon,invisible", "prog");
1041                 break;
1042         case CAM_MENU_BAR_LEFT_2:
1043                 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1044                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1045                                         "toolbar_2_icon,normal", "prog");
1046                 else if (TOOLBAR_ITEM_STATE_DIM == state)
1047                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1048                                         "toolbar_2_icon,dim", "prog");
1049                 else
1050                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1051                                         "toolbar_2_icon,invisible", "prog");
1052                 break;
1053         case CAM_MENU_BAR_LEFT_3:
1054                 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1055                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1056                                         "toolbar_3_icon,normal", "prog");
1057                 else if (TOOLBAR_ITEM_STATE_DIM == state)
1058                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1059                                         "toolbar_3_icon,dim", "prog");
1060                 else
1061                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1062                                         "toolbar_3_icon,invisible", "prog");
1063                 break;
1064         case CAM_MENU_BAR_LEFT_4:
1065                 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1066                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1067                                         "toolbar_4_icon,normal", "prog");
1068                 else if (TOOLBAR_ITEM_STATE_DIM == state)
1069                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1070                                         "toolbar_4_icon,dim", "prog");
1071                 else
1072                         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1073                                         "toolbar_4_icon,invisible", "prog");
1074                 break;
1075         default:
1076                 DEBUG_TRACE("not in menubar");
1077         }
1078
1079 }
1080
1081 static void __toolbar_menu_type_update(Evas_Object *toolbar_icon,
1082                                                 int type, void *data, ButtonState state, Evas_Object_Event_Cb *func)
1083 {
1084         struct appdata *ad = (struct appdata *)data;
1085         cam_ret_if(ad == NULL);
1086         CamAppData *camapp = ad->camapp_handle;
1087         cam_ret_if(camapp == NULL);
1088
1089         char *icon_name = NULL;
1090         char *text = NULL;
1091
1092         ButtonState button_state = state;
1093         ToolbarItemState item_state = TOOLBAR_ITEM_STATE_NORMAL;
1094
1095         if (!cam_is_enabled_menu(ad, type)) {
1096                 button_state = BUTTON_STATE_DIM;
1097                 item_state = TOOLBAR_ITEM_STATE_DIM;
1098         }
1099
1100         __get_toolbar_shortcuts_file_func(ad, type, button_state, &icon_name, &text, func);
1101
1102         if (icon_name)
1103                 elm_image_file_set(toolbar_icon, CAM_IMAGE_EDJ_NAME, icon_name);
1104         else
1105                 cam_critical(LOG_UI, "icon_name is NULL");
1106
1107         __update_menu_bar_shortcuts_state_by_index(ad, type, item_state);
1108
1109         if (button_state == BUTTON_STATE_DIM)
1110                 evas_object_color_set(toolbar_icon, 255, 255, 255, 77); /*opacity 30% for dim menu */
1111         else
1112                 evas_object_color_set(toolbar_icon, 255, 255, 255, 255);
1113 }
1114
1115 static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
1116                                 char **file_path, char **text, Evas_Object_Event_Cb *func)
1117 {
1118         struct appdata *ad = (struct appdata *)data;
1119         cam_ret_if(ad == NULL);
1120         CamAppData *camapp = ad->camapp_handle;
1121         cam_ret_if(camapp == NULL);
1122
1123         *file_path = NULL;
1124         *text = NULL;
1125         *func = NULL;
1126
1127         switch(type) {
1128         case CAM_MENU_EMPTY:
1129         case CAM_MENU_SHORTCUTS:
1130                 break;
1131         case CAM_MENU_BURST_SHOT_MODE: {
1132                         if (camapp->burst_shot) {
1133                                 if (state == BUTTON_STATE_PRESS)
1134                                         *file_path = BURST_SHOT_MODE_ON_PRESS_ICON;
1135                                 else
1136                                         *file_path = BURST_SHOT_MODE_ON_NORMAL_ICON;
1137                         }
1138                         else {
1139                                 if (state == BUTTON_STATE_PRESS)
1140                                         *file_path = BURST_SHOT_MODE_OFF_PRESS_ICON;
1141                                 else
1142                                         *file_path = BURST_SHOT_MODE_OFF_NORMAL_ICON;
1143                         }
1144
1145                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB");
1146
1147                         if (state != BUTTON_STATE_DIM)
1148                                 *func = __shortcuts_burst_shot_popup_cb;
1149                 }
1150                 break;
1151         case CAM_MENU_VOLUME_KEY: {
1152                         *file_path = __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), state);
1153                         *text = dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS");
1154
1155                         if (state != BUTTON_STATE_DIM)
1156                                 *func = __shortcuts_volume_key_popup_cb;
1157                 }
1158                 break;
1159         case CAM_MENU_SELF_PORTRAIT: {
1160                         if (state == BUTTON_STATE_PRESS)
1161                                 *file_path = CAMERA_SELF_PORTRAIT_PRESS_ICON;
1162                         else
1163                                 *file_path = CAMERA_SELF_PORTRAIT_NORMAL_ICON;
1164
1165                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT");
1166
1167                         if (state != BUTTON_STATE_DIM)
1168                                 *func = __shortcuts_self_portrait_popup_cb;
1169                 }
1170                 break;
1171         case CAM_MENU_FLASH: {
1172                         *file_path = __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), state);
1173                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_FLASH");
1174
1175                         if (state != BUTTON_STATE_DIM)
1176                                 *func = __shortcuts_setting_flash_popup_cb;
1177                 }
1178                 break;
1179         case CAM_MENU_SHOOTING_MODE: {
1180                         *file_path = __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), state);
1181                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE");
1182
1183                         if (state != BUTTON_STATE_DIM)
1184                                 *func = __shortcuts_shooting_mode_popup_cb;
1185                 }
1186                 break;
1187         case CAM_MENU_RECORDING_MODE: {
1188                         *file_path = __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), state);
1189                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE");
1190
1191                         if (state != BUTTON_STATE_DIM)
1192                                 *func = __shortcuts_record_mode_popup_cb;
1193                 }
1194                 break;
1195         case CAM_MENU_SCENE_MODE: {
1196                         *file_path = __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), state);
1197                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE");
1198
1199                         if (state != BUTTON_STATE_DIM)
1200                                 *func = __shortcuts_scene_mode_popup_cb;
1201                 }
1202                 break;
1203         case CAM_MENU_EXPLOSURE_VALUE: {
1204                         *file_path = __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, state);
1205                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE");
1206
1207                         if (state != BUTTON_STATE_DIM)
1208                                 *func = __shortcuts_exposure_popup_cb;
1209                 }
1210                 break;
1211         case CAM_MENU_FOCUS_MODE: {
1212                         *file_path = __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), state);
1213                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE");
1214
1215                         if (state != BUTTON_STATE_DIM)
1216                                 *func = __shortcuts_focus_mode_popup_cb;
1217                 }
1218                 break;
1219         case CAM_MENU_TIMER: {
1220                         *file_path = __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), state);
1221                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_TIMER");
1222
1223                         if (state != BUTTON_STATE_DIM)
1224                                 *func = __shortcuts_setting_timer_popup_cb;
1225
1226                 }
1227                 break;
1228         case CAM_MENU_EFFECTS: {
1229                         *file_path = __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), state);
1230                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS");
1231
1232                         if (state != BUTTON_STATE_DIM)
1233                                 *func = __shortcuts_effects_popup_cb;
1234                 }
1235                 break;
1236         case CAM_MENU_PHOTO_RESOLUTION: {
1237                         *file_path = __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), state);
1238                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB");
1239
1240                         if (state != BUTTON_STATE_DIM)
1241                                 *func = __shortcuts_photo_resolution_popup_cb;
1242                 }
1243                 break;
1244         case CAM_MENU_VIDEO_RESOLUTION: {
1245                         *file_path = __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), state);
1246                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB");
1247
1248                         if (state != BUTTON_STATE_DIM)
1249                                 *func = __shortcuts_video_resolution_popup_cb;
1250
1251                 }
1252                 break;
1253         case CAM_MENU_WHITE_BALANCE: {
1254                         *file_path = __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), state);
1255                         *text = dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB");
1256
1257                         if (state != BUTTON_STATE_DIM)
1258                                 *func = __shortcuts_white_banlance_popup_cb;
1259                 }
1260                 break;
1261         case CAM_MENU_ISO: {
1262                         *file_path = __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), state);
1263                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_ISO");
1264
1265                         if (state != BUTTON_STATE_DIM)
1266                                 *func = __shortcuts_setting_iso_popup_cb;
1267                 }
1268                 break;
1269         case CAM_MENU_METERING: {
1270                         *file_path = __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), state);
1271                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_METERING");
1272
1273                         if (state != BUTTON_STATE_DIM)
1274                                 *func = __shortcuts_setting_metering_popup_cb;
1275                 }
1276                 break;
1277         case CAM_MENU_ANTI_SHAKE: {
1278                         if (ad->camapp_handle->anti_shake) {
1279                                 if (state == BUTTON_STATE_PRESS)
1280                                         *file_path = ANTISHAKE_ON_PRESS_ICON;
1281                                 else
1282                                         *file_path = ANTISHAKE_ON_NORMAL_ICON;
1283                         }
1284                         else {
1285                                 if (state == BUTTON_STATE_PRESS)
1286                                         *file_path = ANTISHAKE_OFF_PRESS_ICON;
1287                                 else
1288                                         *file_path = ANTISHAKE_OFF_NORMAL_ICON;
1289                         }
1290
1291                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE");
1292
1293                         if (state != BUTTON_STATE_DIM)
1294                                 *func = __shortcuts_anti_shake_popup_cb;
1295                 }
1296                 break;
1297         case CAM_MENU_OUTDOOR_VISIBILITY: {
1298                         if (ad->camapp_handle->outdoor_visibility) {
1299                                 if (state == BUTTON_STATE_PRESS)
1300                                         *file_path = OUTDOOR_VISIBILITY_ON_PRESS_ICON;
1301                                 else
1302                                         *file_path = OUTDOOR_VISIBILITY_ON_NORMAL_ICON;
1303                         }
1304                         else {
1305                                 if (state == BUTTON_STATE_PRESS)
1306                                         *file_path = OUTDOOR_VISIBILITY_OFF_PRESS_ICON;
1307                                 else
1308                                         *file_path = OUTDOOR_VISIBILITY_OFF_NORMAL_ICON;
1309                         }
1310
1311                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY");
1312
1313                         if (state != BUTTON_STATE_DIM)
1314                                 *func = __shortcuts_outdoor_visibility_popup_cb;
1315                 }
1316                 break;
1317         case CAM_MENU_AUTO_CONTRAST: {
1318                         if (ad->camapp_handle->auto_contrast) {
1319                                 if (state == BUTTON_STATE_PRESS)
1320                                         *file_path = AUTO_CONTRAST_ON_PRESS_ICON;
1321                                 else
1322                                         *file_path = AUTO_CONTRAST_ON_NORMAL_ICON;
1323                         }
1324                         else {
1325                                 if (state == BUTTON_STATE_PRESS)
1326                                         *file_path = AUTO_CONTRAST_OFF_PRESS_ICON;
1327                                 else
1328                                         *file_path = AUTO_CONTRAST_OFF_NORMAL_ICON;
1329                         }
1330
1331                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST");
1332
1333                         if (state != BUTTON_STATE_DIM)
1334                                 *func = __shortcuts_auto_contrast_popup_cb;
1335                 }
1336                 break;
1337         case CAM_MENU_GUIDELINES: {
1338                         if (ad->camapp_handle->guideline) {
1339                                 if (state == BUTTON_STATE_PRESS)
1340                                         *file_path = GUIDELINE_ON_PRESS_ICON;
1341                                 else
1342                                         *file_path = GUIDELINE_ON_NORMAL_ICON;
1343                         }
1344                         else {
1345                                 if (state == BUTTON_STATE_PRESS)
1346                                         *file_path = GUIDELINE_OFF_PRESS_ICON;
1347                                 else
1348                                         *file_path = GUIDELINE_OFF_NORMAL_ICON;
1349                         }
1350
1351                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE");
1352
1353                         if (state != BUTTON_STATE_DIM)
1354                                 *func = __shortcuts_guideline_popup_cb;
1355                 }
1356                 break;
1357         case CAM_MENU_CAPTURE_VOICE: {
1358                         if (ad->camapp_handle->capture_by_voice) {
1359                                 if (state == BUTTON_STATE_PRESS)
1360                                         *file_path = CAPTURE_WITH_VOICE_ON_PRESS_ICON;
1361                                 else
1362                                         *file_path = CAPTURE_WITH_VOICE_ON_NORMAL_ICON;
1363                         }
1364                         else {
1365                                 if (state == BUTTON_STATE_PRESS)
1366                                         *file_path = CAPTURE_WITH_VOICE_OFF_PRESS_ICON;
1367                                 else
1368                                         *file_path = CAPTURE_WITH_VOICE_OFF_NORMAL_ICON;
1369                         }
1370
1371                         *text = "Capture with voice";
1372
1373                         if (state != BUTTON_STATE_DIM)
1374                                 *func = __shortcuts_capture_voice_popup_cb;
1375                 }
1376                 break;
1377         case CAM_MENU_GPS_TAG: {
1378                         if (ad->camapp_handle->gps) {
1379                                 if (state == BUTTON_STATE_PRESS)
1380                                         *file_path = GPS_ON_PRESS_ICON;
1381                                 else
1382                                         *file_path = GPS_ON_NORMAL_ICON;
1383                         }
1384                         else {
1385                                 if (state == BUTTON_STATE_PRESS)
1386                                         *file_path = GPS_OFF_PRESS_ICON;
1387                                 else
1388                                         *file_path = GPS_OFF_NORMAL_ICON;
1389                         }
1390
1391                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG");
1392
1393                         if (state != BUTTON_STATE_DIM)
1394                                 *func = __shortcuts_gps_tag_popup_cb;
1395                 }
1396                 break;
1397         case CAM_MENU_SAVE_AS_FLIP: {
1398                         if (ad->camapp_handle->save_as_flip) {
1399                                 if (state == BUTTON_STATE_PRESS)
1400                                         *file_path = SAVE_AS_FLIP_ON_PRESS_ICON;
1401                                 else
1402                                         *file_path = SAVE_AS_FLIP_ON_NORMAL_ICON;
1403                         }
1404                         else {
1405                                 if (state == BUTTON_STATE_PRESS)
1406                                         *file_path = SAVE_AS_FLIP_OFF_PRESS_ICON;
1407                                 else
1408                                         *file_path = SAVE_AS_FLIP_OFF_NORMAL_ICON;
1409                         }
1410
1411                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED");
1412
1413                         if (state != BUTTON_STATE_DIM)
1414                                 *func = __shortcuts_save_as_flip_cb;
1415                 }
1416                 break;
1417         case CAM_MENU_STORAGE: {
1418                 *file_path = __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), state);
1419                 *text = dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE");
1420
1421                 if (state != BUTTON_STATE_DIM)
1422                         *func = __shortcuts_storage_popup_cb;
1423                 }
1424                 break;
1425         case CAM_MENU_RESET: {
1426                         if (state == BUTTON_STATE_PRESS)
1427                                 *file_path = RESET_SETTING_PRESS_ICON;
1428                         else
1429                                 *file_path = RESET_SETTING_NORMAL_ICON;
1430
1431                         *text = dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET");
1432
1433                         if (state != BUTTON_STATE_DIM)
1434                                 *func = __shortcuts_reset_popup_cb;
1435                 }
1436                 break;
1437         default:
1438                 break;
1439         }
1440 }
1441
1442 static void __toolbar_menu_icon_update(struct appdata *ad)
1443 {
1444         cam_ret_if(ad == NULL);
1445         int i = 0;
1446         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1447                 __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
1448         }
1449 }
1450
1451 static void __toolbar_menu_item_unswallow(struct appdata *ad)
1452 {
1453         cam_ret_if(ad == NULL);
1454         cam_ret_if(ad->toolbar_edje == NULL);
1455
1456         int i = 0;
1457         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1458                 char buf[32 + 1] = {'\0', };
1459                 snprintf(buf, 32, "toolbar_%d_icon", i);
1460                 elm_object_part_content_unset(ad->toolbar_edje, buf);
1461         }
1462 }
1463
1464 static void __toolbar_menu_item_destroy(struct appdata *ad)
1465 {
1466         cam_ret_if(ad == NULL);
1467         __toolbar_menu_item_unswallow(ad);
1468         Evas_Object *icon  = NULL;
1469         int i = 0;
1470         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1471                 icon = ad->toolbar_menu_arrays[i].icon;
1472                 DEL_EVAS_OBJECT(icon);
1473                 ad->toolbar_menu_arrays[i].icon = NULL;
1474         }
1475 }
1476
1477 static void __toolbar_menu_item_swallow(struct appdata *ad)
1478 {
1479         cam_ret_if(ad == NULL);
1480         cam_ret_if(ad->toolbar_edje == NULL);
1481
1482         Evas_Object *icon  = NULL;
1483         int i = 0;
1484         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1485                 icon = ad->toolbar_menu_arrays[i].icon;
1486                 char buf[32 + 1] = {'\0', };
1487                 snprintf(buf, 32, "toolbar_%d_icon", i);
1488                 elm_object_part_content_set(ad->toolbar_edje, buf, icon);
1489         }
1490
1491 }
1492
1493 static int __toolbar_menu_item_create(struct appdata *ad)
1494 {
1495         DEBUG_TRACE("");
1496         cam_retv_if(ad == NULL, -1);
1497         CamAppData *camapp = ad->camapp_handle;
1498         cam_retv_if(camapp == NULL, -1);
1499
1500         Evas_Object *icon  = NULL;
1501         icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
1502 /* setting icon */
1503         if (icon == NULL) {
1504                 icon = elm_image_add(ad->toolbar_edje);
1505                 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
1506         }
1507         elm_object_part_content_set(ad->toolbar_edje, "toolbar_0_icon", icon);
1508         ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon = icon;
1509
1510 /* shortcut icon */
1511         int i = 0;
1512         for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1513                 icon = ad->toolbar_menu_arrays[i].icon;
1514                 if (icon == NULL) {
1515                         icon = elm_image_add(ad->toolbar_edje);
1516                 }
1517                 char buf[32 + 1] = {'\0', };
1518                 snprintf(buf, 32, "toolbar_%d_icon", i);
1519                 elm_object_part_content_set(ad->toolbar_edje, buf, icon);
1520                 ad->toolbar_menu_arrays[i].icon = icon;
1521         }
1522         return 0;
1523 }
1524
1525 static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state)
1526 {
1527         cam_retm_if(ad == NULL, "appdata is null");
1528         int i = 0;
1529         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1530                 __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_menu_arrays[i].menu_type, state);
1531
1532                 if(state == TOOLBAR_ITEM_STATE_DIM) { //it don't make dimming in edje
1533                         Evas_Object *icon = NULL;
1534                         int menubar_no = __get_menubar_no_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
1535                         cam_retm_if(menubar_no == CAM_MENU_BAR_LEFT_INVALID, "invalid menubar no");
1536
1537                         icon = ad->toolbar_menu_arrays[menubar_no].icon;
1538
1539                         if (icon != NULL)
1540                                 evas_object_color_set(icon, 255, 255, 255, 77); // set opacity 30%
1541                 }
1542         }
1543 }
1544
1545 static void __toolbar_menu_item_reset(struct appdata *ad)
1546 {
1547         cam_retm_if(ad == NULL, "appdata is null");
1548
1549         __toolbar_menu_item_destroy(ad);
1550         __toolbar_menu_item_create(ad);
1551
1552         ad->toolbar_menu_arrays[1].menu_type = CAM_MENU_EMPTY;
1553         ad->toolbar_menu_arrays[2].menu_type = CAM_MENU_EMPTY;
1554
1555         if (cam_mm_is_support_front_camera() == TRUE)
1556                 ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_SELF_PORTRAIT;
1557         else
1558                 ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_EMPTY;
1559
1560 #ifdef CAMERA_MACHINE_I686
1561         ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_EMPTY;
1562 #else
1563         ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_FLASH;
1564 #endif
1565
1566         __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
1567
1568         cam_toolbar_menu_config_update(ad);
1569 }
1570
1571 static void __toolbar_shutter_button_unset(struct appdata *ad)
1572 {
1573         cam_ret_if(ad == NULL);
1574         cam_ret_if(ad->toolbar_edje == NULL);
1575
1576         elm_object_part_content_unset(ad->toolbar_edje, "shutter_button");
1577 }
1578
1579 static void __toolbar_shutter_button_destroy(struct appdata *ad)
1580 {
1581         cam_ret_if(ad == NULL);
1582
1583         if (ad->shutterbtn) {
1584                 __toolbar_shutter_button_unset(ad);
1585                 if (ad->shutterbtn_camera_icon) {
1586                         elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
1587                         DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
1588                 }
1589                 DEL_EVAS_OBJECT(ad->shutterbtn)
1590         }
1591 }
1592
1593 static void __toolbar_shutter_button_set(struct appdata *ad)
1594 {
1595         cam_ret_if(ad == NULL);
1596         cam_ret_if(ad->toolbar_edje == NULL);
1597         cam_ret_if(ad->shutterbtn == NULL);
1598
1599         elm_object_part_content_set(ad->toolbar_edje, "shutter_button", ad->shutterbtn);
1600 }
1601
1602 static int __toolbar_shutter_button_create(struct appdata *ad)
1603 {
1604         DEBUG_TRACE("");
1605         cam_retv_if(ad == NULL, -1);
1606         Evas_Object *edje = NULL;
1607         if (ad->shutterbtn) {
1608                 if (ad->shutterbtn_camera_icon) {
1609                         elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
1610                         DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
1611                 }
1612                 DEL_EVAS_OBJECT(ad->shutterbtn)
1613         }
1614         ad->shutterbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "shutter_button");
1615         edje = ad->shutterbtn;
1616         cam_retv_if(edje == NULL, -1);
1617
1618         ad->shutterbtn_camera_icon = elm_image_add(edje);
1619         elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
1620         elm_object_part_content_set(edje, "camera_icon", ad->shutterbtn_camera_icon);
1621
1622         edje_object_signal_callback_del(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb);
1623         edje_object_signal_callback_add(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb, ad);
1624
1625         elm_object_part_content_set(ad->toolbar_edje, "shutter_button", edje);
1626         evas_object_show(edje);
1627         DEBUG_TRACE("END");
1628
1629         return EXIT_SUCCESS;
1630 }
1631
1632 void cam_toolbar_update_shutter_button(struct appdata *ad, ToolbarItemState state)
1633 {
1634         __toolbar_shutter_button_update(ad, state);
1635 }
1636
1637 static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state)
1638 {
1639         cam_ret_if(ad == NULL);
1640         CamAppData *camapp = ad->camapp_handle;
1641         cam_ret_if(camapp == NULL);
1642
1643         if (state ==  TOOLBAR_ITEM_STATE_NORMAL) {
1644                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
1645                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
1646                 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
1647         } else if (state == TOOLBAR_ITEM_STATE_PRESS) {
1648                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
1649                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
1650                 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
1651         } else if (state == TOOLBAR_ITEM_STATE_DIM) {
1652                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,dim", "prog");
1653                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,dim", "prog");
1654                 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON_DIM);
1655         } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1656                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,invisible", "prog");
1657                 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,invisible", "prog");
1658         } else {
1659                 DEBUG_TRACE("Invalid state for shutter button");
1660         }
1661 }
1662
1663 static void __toolbar_recording_button_unset(struct appdata *ad)
1664 {
1665         cam_ret_if(ad == NULL);
1666         cam_ret_if(ad->toolbar_edje == NULL);
1667
1668         elm_object_part_content_unset(ad->toolbar_edje, "recording_button");
1669 }
1670
1671 static void __toolbar_recording_button_destroy(struct appdata *ad)
1672 {
1673         cam_ret_if(ad == NULL);
1674
1675         __toolbar_recording_button_unset(ad);
1676         DEL_EVAS_OBJECT(ad->recordingbtn);
1677 }
1678
1679 static void __toolbar_recording_button_set(struct appdata *ad)
1680 {
1681         cam_ret_if(ad == NULL);
1682         cam_ret_if(ad->toolbar_edje == NULL);
1683         cam_ret_if(ad->recordingbtn == NULL);
1684
1685         elm_object_part_content_set(ad->toolbar_edje, "recording_button", ad->recordingbtn);
1686 }
1687
1688 static int __toolbar_recording_button_create(struct appdata *ad)
1689 {
1690         DEBUG_TRACE("");
1691         cam_retv_if(ad == NULL, -1);
1692         Evas_Object *edje = NULL;
1693         DEL_EVAS_OBJECT(ad->recordingbtn);
1694         ad->recordingbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_button");
1695         edje = ad->recordingbtn;
1696         cam_retv_if(edje == NULL, -1);
1697
1698         edje_object_signal_callback_del(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb);
1699         edje_object_signal_callback_add(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb, ad);
1700         elm_object_part_content_set(ad->toolbar_edje, "recording_button", edje);
1701         evas_object_show(edje);
1702         DEBUG_TRACE("END");
1703
1704         return EXIT_SUCCESS;
1705 }
1706
1707 static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state)
1708 {
1709         cam_ret_if(ad == NULL);
1710         CamAppData *camapp = ad->camapp_handle;
1711         cam_ret_if(camapp == NULL);
1712         cam_ret_if(ad->recordingbtn == NULL);
1713
1714         int recording_state = 0;
1715
1716         if (state ==  TOOLBAR_ITEM_STATE_NORMAL) {
1717                 recording_state = cam_mm_get_state();
1718
1719                 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (recording_state == RECORDER_STATE_RECORDING)) {
1720                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
1721                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
1722                 } else {
1723                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
1724                         edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,invisible", "prog");
1725                 }
1726
1727         } else if (state == TOOLBAR_ITEM_STATE_DIM) {
1728                 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,dim", "prog");
1729         } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1730                 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
1731         } else {
1732                 DEBUG_TRACE("Invalid state for recording button");
1733         }
1734 }
1735
1736 static void __toolbar_recording_stop_button_unset(struct appdata *ad)
1737 {
1738         cam_ret_if(ad == NULL);
1739         cam_ret_if(ad->toolbar_edje == NULL);
1740
1741         elm_object_part_content_unset(ad->toolbar_edje, "recording_stop_button");
1742 }
1743
1744 static void __toolbar_recording_stop_button_destroy(struct appdata *ad)
1745 {
1746         cam_ret_if(ad == NULL);
1747
1748         __toolbar_recording_stop_button_unset(ad);
1749         DEL_EVAS_OBJECT(ad->recording_stop_btn);
1750 }
1751
1752 static void __toolbar_recording_stop_button_set(struct appdata *ad)
1753 {
1754         cam_ret_if(ad == NULL);
1755         cam_ret_if(ad->toolbar_edje == NULL);
1756         cam_ret_if(ad->recording_stop_btn == NULL);
1757
1758         elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", ad->recording_stop_btn);
1759 }
1760
1761 static int __toolbar_recording_stop_button_create(struct appdata *ad)
1762 {
1763         DEBUG_TRACE("");
1764         cam_retv_if(ad == NULL, -1);
1765         Evas_Object *edje = NULL;
1766         DEL_EVAS_OBJECT(ad->recording_stop_btn);
1767         ad->recording_stop_btn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_stop_button");
1768         edje = ad->recording_stop_btn;
1769         cam_retv_if(edje == NULL, -1);
1770
1771         edje_object_signal_callback_del(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb);
1772         edje_object_signal_callback_add(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb, ad);
1773         elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", edje);
1774         edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
1775         evas_object_show(edje);
1776         DEBUG_TRACE("END");
1777
1778         return EXIT_SUCCESS;
1779 }
1780
1781 static void __toolbar_quickview_item_unset(struct appdata *ad)
1782 {
1783         cam_ret_if(ad == NULL);
1784         cam_ret_if(ad->toolbar_edje == NULL);
1785
1786         elm_object_part_content_unset(ad->toolbar_edje, "quickview_item");
1787 }
1788
1789 static void __toolbar_quickview_item_destroy(struct appdata *ad)
1790 {
1791         cam_ret_if(ad == NULL);
1792
1793         __toolbar_quickview_item_unset(ad);
1794         DEL_EVAS_OBJECT(ad->toolbar.quickview_item.edje);
1795 }
1796
1797 static void __toolbar_quickview_item_set(struct appdata *ad)
1798 {
1799         cam_ret_if(ad == NULL);
1800         cam_ret_if(ad->toolbar_edje == NULL);
1801         cam_ret_if(ad->toolbar.quickview_item.edje == NULL);
1802
1803         elm_object_part_content_set(ad->toolbar_edje, "quickview_item", ad->toolbar.quickview_item.edje);
1804 }
1805
1806 static int __toolbar_quickview_item_create(struct appdata *ad)
1807 {
1808         DEBUG_TRACE("");
1809         cam_retv_if(ad == NULL, -1);
1810         Evas_Object *edje = NULL;
1811
1812         if (ad->toolbar.quickview_item.edje == NULL) {
1813                 ad->toolbar.quickview_item.edje =
1814                     cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_quickview_item");
1815                 edje_object_signal_callback_del(_EDJ(ad->toolbar.quickview_item.edje),
1816                                                 "*", "toolbar_signal", __toolbar_quickview_cb);
1817                 edje_object_signal_callback_add(_EDJ(ad->toolbar.quickview_item.edje),
1818                                                 "*", "toolbar_signal", __toolbar_quickview_cb, ad);
1819         }
1820         edje = ad->toolbar.quickview_item.edje;
1821
1822         cam_retv_if(edje == NULL, -1);
1823         elm_object_part_content_set(ad->toolbar_edje, "quickview_item", edje);
1824         evas_object_show(edje);
1825
1826         return EXIT_SUCCESS;
1827 }
1828
1829 static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state)
1830 {
1831         cam_ret_if(ad == NULL);
1832
1833         Evas_Object *edje = NULL;
1834         edje = ad->toolbar.quickview_item.edje;
1835
1836         if (state ==  TOOLBAR_ITEM_STATE_NORMAL) {
1837                 edje_object_signal_emit(_EDJ(edje), "SET_DEFAULT", "prog");
1838         } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1839                 edje_object_signal_emit(_EDJ(edje), "SET_INVISIBLE", "prog");
1840         } else {
1841                 DEBUG_TRACE("Invalid state for quickview button");
1842         }
1843 }
1844
1845 static int __toolbar_backbutton_create(struct appdata *ad)
1846 {
1847         DEBUG_TRACE("START");
1848         cam_retv_if(ad == NULL, -1);
1849         Evas_Object *edje = NULL;
1850         if (ad->backbtn == NULL) {
1851                 ad->backbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_backbutton_item");
1852                 edje_object_signal_callback_del(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb);
1853                 edje_object_signal_callback_add(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb, ad);
1854         }
1855         edje = ad->backbtn;
1856
1857         cam_retv_if(edje == NULL, -1);
1858         elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", edje);
1859         evas_object_show(edje);
1860
1861         return EXIT_SUCCESS;
1862 }
1863
1864 static void __toolbar_backbutton_unset(struct appdata *ad)
1865 {
1866         cam_ret_if(ad == NULL);
1867         cam_ret_if(ad->toolbar_edje == NULL);
1868
1869         elm_object_part_content_unset(ad->toolbar_edje, "backbutton_item");
1870 }
1871
1872 static void __toolbar_backbutton_destroy(struct appdata *ad)
1873 {
1874         cam_ret_if(ad == NULL);
1875
1876         __toolbar_backbutton_unset(ad);
1877         DEL_EVAS_OBJECT(ad->backbtn);
1878 }
1879
1880 static void __toolbar_backbutton_set(struct appdata *ad)
1881 {
1882         cam_ret_if(ad == NULL);
1883         cam_ret_if(ad->toolbar_edje == NULL);
1884         cam_ret_if(ad->backbtn == NULL);
1885
1886         elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", ad->backbtn);
1887 }
1888
1889
1890 static void __toolbar_cafbutton_unset(struct appdata *ad)
1891 {
1892         cam_ret_if(ad == NULL);
1893         cam_ret_if(ad->toolbar_edje == NULL);
1894
1895         elm_object_part_content_unset(ad->toolbar_edje, "cafbutton_item");
1896 }
1897
1898 static void __toolbar_cafbutton_destroy(struct appdata *ad)
1899 {
1900         cam_ret_if(ad == NULL);
1901         __toolbar_cafbutton_unset(ad);
1902         DEL_EVAS_OBJECT(ad->caf_button);
1903 }
1904
1905 static void __toolbar_cafbutton_set(struct appdata *ad)
1906 {
1907         cam_ret_if(ad == NULL);
1908         cam_ret_if(ad->toolbar_edje == NULL);
1909         cam_ret_if(ad->caf_button == NULL);
1910
1911         elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
1912 }
1913
1914 static int __toolbar_cafbutton_create(struct appdata *ad)
1915 {
1916         DEBUG_TRACE("START");
1917         cam_retvm_if(ad == NULL, -1, "appdata is null");
1918         if (ad->caf_button == NULL) {
1919                 ad->caf_button = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_cafbutton_item");
1920         }
1921         cam_retvm_if(ad->caf_button == NULL, -1, "ad->caf_button is null");
1922
1923         edje_object_signal_callback_del(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb);
1924         edje_object_signal_callback_add(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb, ad);
1925
1926         elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
1927         evas_object_show(ad->caf_button);
1928
1929         return EXIT_SUCCESS;
1930 }
1931
1932 static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state)
1933 {
1934         cam_retm_if(ad == NULL, "appdata is null");
1935         cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
1936
1937         if (state ==  TOOLBAR_ITEM_STATE_NORMAL) {
1938                 show_caf_button = TRUE;
1939                 edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,normal", "prog");
1940         } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1941                 show_caf_button = FALSE;
1942                 edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,invisible", "prog");
1943         } else {
1944                 show_caf_button = FALSE;
1945                 DEBUG_TRACE("Invalid state for caf_button");
1946         }
1947 }
1948
1949 static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state)
1950 {
1951         cam_retm_if(ad == NULL, "appdata is null");
1952         cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
1953
1954         if (state ==  TOOLBAR_ITEM_STATE_NORMAL) {
1955                 edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,show", "prog");
1956         } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1957                 edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,hide", "prog");
1958         } else {
1959                 DEBUG_TRACE("Invalid state for caf_button");
1960         }
1961 }
1962
1963 #define SETTING_SHORTCUTS_HOLD_TIME (0.5)
1964 static Ecore_Timer *edit_shortcuts_timer = NULL;
1965 static Eina_Bool __toolbar_show_edit_shortcuts_timer_cb(void *data)
1966 {
1967         struct appdata *ad = (struct appdata *)data;
1968         cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
1969         if (edit_shortcuts_timer) {
1970                 edit_shortcuts_timer = NULL;
1971         }
1972         toolbar_create_shortcuts_popup(ad);
1973         return ECORE_CALLBACK_CANCEL;
1974 }
1975
1976 static void __toolbar_create_show_edit_shortcuts_timer(void *data)
1977 {
1978         struct appdata *ad = (struct appdata *)data;
1979         cam_ret_if(ad == NULL);
1980         if (edit_shortcuts_timer) {
1981                 ecore_timer_del(edit_shortcuts_timer);
1982                 edit_shortcuts_timer = NULL;
1983         }
1984         edit_shortcuts_timer = ecore_timer_add(SETTING_SHORTCUTS_HOLD_TIME,
1985                                                 __toolbar_show_edit_shortcuts_timer_cb,
1986                                                 ad);
1987 }
1988
1989 static void __toolbar_destroy_show_edit_shortcuts_timer(void)
1990 {
1991         if (edit_shortcuts_timer) {
1992                 ecore_timer_del(edit_shortcuts_timer);
1993                 edit_shortcuts_timer = NULL;
1994         }
1995 }
1996
1997 static void __toolbar_edje_signal_cb(void *data, Evas_Object *o,
1998                                      const char *emission, const char *source)
1999 {
2000         DEBUG_TRACE("_________________################____________________\n");
2001
2002         struct appdata *ad = (struct appdata *)data;
2003         cam_ret_if(ad == NULL);
2004         cam_app_timeout_checker_update();
2005         DEBUG_TRACE("ad->is_rotating = %d", ad->is_rotating);
2006         if (ad->is_rotating == TRUE) {
2007                 DEBUG_TRACE("now in rotating target, do not accept signal");
2008                 return;
2009         }
2010         CamAppData *camapp = ad->camapp_handle;
2011         cam_ret_if(camapp == NULL);
2012         cam_ret_if(emission == NULL);
2013         cam_ret_if(source == NULL);
2014
2015         if (ad->zoom_edje)
2016                 unload_zoom_edje(ad);
2017
2018         if (ad->ev_edje)
2019                 unload_ev_edje(ad);
2020
2021         if (ad->tip_popup)
2022                 cam_tip_popup_destroy(ad);
2023
2024         if (ad->edit_shortcuts_popup) {
2025                 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
2026                 return;
2027         }
2028
2029         if(ad->battery_status == LOW_BATTERY_CRITICAL_STATUS)
2030                 return;
2031
2032         if (emission && source)
2033                 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
2034
2035         Evas_Object_Event_Cb func = NULL;
2036
2037         if (strcmp(emission, "toolbar_0_press_sig") == 0) {
2038                 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_PRESS_ICON);
2039                 __toolbar_create_show_edit_shortcuts_timer(ad);
2040         } else if (strcmp(emission, "toolbar_0_release_sig") == 0) {
2041                 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
2042                 __toolbar_destroy_show_edit_shortcuts_timer();
2043         } else if (strcmp(emission, "toolbar_0_click_sig") == 0) {
2044                 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2045                         return;
2046                 if (ad->toolbar_setting_popup) {
2047                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2048                         cam_toolbar_setting_popup_destroy(ad);
2049                         return;
2050                 }
2051                 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2052                 cam_toolbar_setting_popup_create(ad);
2053                 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
2054         } else if (strcmp(emission, "toolbar_1_press_sig") == 0) {
2055                 Evas_Object *icon = NULL;
2056                 int type = -1;
2057                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
2058                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
2059                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2060                 __toolbar_create_show_edit_shortcuts_timer(ad);
2061         } else if (strcmp(emission, "toolbar_1_release_sig") == 0) {
2062                 Evas_Object *icon = NULL;
2063                 int type = -1;
2064                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
2065                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
2066                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2067                 __toolbar_destroy_show_edit_shortcuts_timer();
2068         } else if (strcmp(emission, "toolbar_1_click_sig") == 0) {
2069                 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2070                         return;
2071                 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2072                 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2073                 if (menu_bar_no == CAM_MENU_BAR_LEFT_1) {
2074                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2075                         cam_toolbar_setting_popup_destroy(ad);
2076                         return;
2077                 }
2078                 if (ad->toolbar_setting_popup) {
2079                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2080                         cam_toolbar_setting_popup_destroy(ad);
2081                 }
2082
2083                 Evas_Object *icon = NULL;
2084                 int type = -1;
2085                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
2086                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
2087                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2088                 if (func) {
2089                         (*func)((void *)ad, NULL, o, NULL);
2090                 }
2091         } else if (strcmp(emission, "toolbar_2_press_sig") == 0) {
2092                 Evas_Object *icon = NULL;
2093                 int type = -1;
2094                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
2095                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
2096                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2097                 __toolbar_create_show_edit_shortcuts_timer(ad);
2098         } else if (strcmp(emission, "toolbar_2_release_sig") == 0) {
2099                 Evas_Object *icon = NULL;
2100                 int type = -1;
2101                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
2102                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
2103                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2104                 __toolbar_destroy_show_edit_shortcuts_timer();
2105         } else if (strcmp(emission, "toolbar_2_click_sig") == 0) {
2106                 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2107                         return;
2108                 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2109                 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2110                 if (menu_bar_no == CAM_MENU_BAR_LEFT_2) {
2111                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2112                         cam_toolbar_setting_popup_destroy(ad);
2113                         return;
2114                 }
2115                 if (ad->toolbar_setting_popup) {
2116                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2117                         cam_toolbar_setting_popup_destroy(ad);
2118                 }
2119                 Evas_Object *icon = NULL;
2120                 int type = -1;
2121                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
2122                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
2123                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2124                 if (func) {
2125                         (*func)((void *)ad, NULL, o, NULL);
2126                 }
2127         } else if (strcmp(emission, "toolbar_3_press_sig") == 0) {
2128                 Evas_Object *icon = NULL;
2129                 int type = -1;
2130                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
2131                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
2132                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2133                 __toolbar_create_show_edit_shortcuts_timer(ad);
2134         } else if (strcmp(emission, "toolbar_3_release_sig") == 0) {
2135                 Evas_Object *icon = NULL;
2136                 int type = -1;
2137                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
2138                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
2139                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2140                 __toolbar_destroy_show_edit_shortcuts_timer();
2141         } else if (strcmp(emission, "toolbar_3_click_sig") == 0) {
2142                 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2143                         return;
2144                 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2145                 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2146                 if (menu_bar_no == CAM_MENU_BAR_LEFT_3) {
2147                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2148                         cam_toolbar_setting_popup_destroy(ad);
2149                         return;
2150                 }
2151                 if (ad->toolbar_setting_popup) {
2152                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2153                         cam_toolbar_setting_popup_destroy(ad);
2154                 }
2155                 Evas_Object *icon = NULL;
2156                 int type = -1;
2157                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
2158                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
2159                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2160                 if (func) {
2161                         (*func)((void *)ad, NULL, o, NULL);
2162                 }
2163         } else if (strcmp(emission, "toolbar_4_press_sig") == 0) {
2164                 Evas_Object *icon = NULL;
2165                 int type = -1;
2166                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
2167                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
2168                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2169                 __toolbar_create_show_edit_shortcuts_timer(ad);
2170         } else if (strcmp(emission, "toolbar_4_release_sig") == 0) {
2171                 Evas_Object *icon = NULL;
2172                 int type = -1;
2173                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
2174                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
2175                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2176                 __toolbar_destroy_show_edit_shortcuts_timer();
2177         } else if (strcmp(emission, "toolbar_4_click_sig") == 0) {
2178                 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2179                         return;
2180                 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2181                 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2182                 if (menu_bar_no == CAM_MENU_BAR_LEFT_4) {
2183                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2184                         cam_toolbar_setting_popup_destroy(ad);
2185                         return;
2186                 }
2187                 if (ad->toolbar_setting_popup) {
2188                         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2189                         cam_toolbar_setting_popup_destroy(ad);
2190                 }
2191                 Evas_Object *icon = NULL;
2192                 int type = -1;
2193                 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
2194                 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
2195                 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2196                 if (func) {
2197                         (*func)((void *)ad, NULL, o, NULL);
2198                 }
2199         } else {
2200                 DEBUG_TRACE("invalid signal");
2201         }
2202 }
2203
2204 int cam_toolbar_create(struct appdata *ad)
2205 {
2206
2207         cam_retv_if(ad == NULL, -1);
2208         CamAppData *cam_handle = ad->camapp_handle;
2209         cam_retv_if(cam_handle == NULL, -1);
2210
2211         elm_object_part_content_unset(ad->ug_base, "toolbar_layout");
2212
2213 /*note: create layout*/
2214         switch (ad->target_direction) {
2215         case CAM_TARGET_DIRECTION_LANDSCAPE:
2216                 if (ad->toolbar_edje_landscape == NULL) {
2217                         ad->toolbar_edje_landscape = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2218                         cam_retv_if(ad->toolbar_edje_landscape == NULL, -1);
2219                 }
2220                 ad->toolbar_edje = ad->toolbar_edje_landscape;
2221                 break;
2222         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2223                 if (ad->toolbar_edje_landscape_inverse == NULL) {
2224                         ad->toolbar_edje_landscape_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2225                         cam_retv_if(ad->toolbar_edje_landscape_inverse == NULL, -1);
2226                 }
2227                 ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
2228                 break;
2229         case CAM_TARGET_DIRECTION_PORTRAIT:
2230                 if (ad->toolbar_edje_portrait == NULL) {
2231                         ad->toolbar_edje_portrait = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2232                         cam_retv_if(ad->toolbar_edje_portrait == NULL, -1);
2233                 }
2234                 ad->toolbar_edje = ad->toolbar_edje_portrait;
2235                 break;
2236         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2237                 if (ad->toolbar_edje_portrait_inverse == NULL) {
2238                         ad->toolbar_edje_portrait_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2239                         cam_retv_if(ad->toolbar_edje_portrait_inverse == NULL, -1);
2240                 }
2241                 ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
2242                 break;
2243         default:
2244                 DEBUG_TRACE("note: run into un-reached codes");
2245         }
2246         cam_retv_if(ad->toolbar_edje == NULL, -1);
2247
2248         elm_object_part_content_set(ad->ug_base, "toolbar_layout", ad->toolbar_edje);
2249
2250         __toolbar_menu_item_create(ad);
2251
2252         elm_object_signal_callback_del(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb);
2253         elm_object_signal_callback_add(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb, ad);
2254
2255         __toolbar_shutter_button_create(ad);
2256         __toolbar_recording_button_create(ad);
2257
2258         if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL)
2259                 __toolbar_quickview_item_create(ad);
2260
2261         __toolbar_backbutton_create(ad);
2262         __toolbar_cafbutton_create(ad);
2263
2264         cam_toolbar_update(ad);
2265
2266         return EXIT_SUCCESS;
2267 }
2268
2269 void cam_toolbar_content_destroy(struct appdata *ad)
2270 {
2271         cam_retm_if(ad == NULL, "appdata is NULL");
2272         __toolbar_menu_item_destroy(ad);
2273         __toolbar_shutter_button_destroy(ad);
2274         __toolbar_recording_button_destroy(ad);
2275         __toolbar_recording_stop_button_destroy(ad);
2276         __toolbar_quickview_item_destroy(ad);
2277         __toolbar_backbutton_destroy(ad);
2278         __toolbar_cafbutton_destroy(ad);
2279 }
2280
2281 void cam_toolbar_destroy(struct appdata *ad)
2282 {
2283         cam_retm_if(ad == NULL, "appdata is NULL");
2284         cam_toolbar_content_destroy(ad);
2285         /*NOTE: all sub obj of toolbar will be deleted auto while toolar is deleted*/
2286         edje_object_signal_callback_del(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb);
2287         DEL_EVAS_OBJECT(ad->toolbar_edje_landscape);
2288         DEL_EVAS_OBJECT(ad->toolbar_edje_landscape_inverse);
2289         DEL_EVAS_OBJECT(ad->toolbar_edje_portrait);
2290         DEL_EVAS_OBJECT(ad->toolbar_edje_portrait_inverse);
2291
2292         ad->toolbar_edje = NULL;
2293
2294         REMOVE_TIMER(ad->setting_toolbar_hide_timer);
2295
2296         /*elm_all_flush();*/
2297         cam_elm_cache_flush();
2298 }
2299
2300 void cam_toolbar_update(struct appdata *ad)
2301 {
2302         DEBUG_TRACE("");
2303         cam_retm_if(ad == NULL, "appdata is NULL");
2304         CamAppData *camapp = ad->camapp_handle;
2305         cam_retm_if(camapp == NULL, "camapp is NULL");
2306         CamShotMode shotmode = camapp->shooting_mode;
2307
2308         __toolbar_menu_icon_update(ad);
2309
2310         if (ad->timer_activated) {
2311                 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2312                 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2313
2314                 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2315                         __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2316                         __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2317                 } else {
2318                         __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2319                         __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2320                 }
2321
2322                 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2323                         __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2324                 }
2325         } else {
2326                 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2327                         switch (shotmode) {
2328                         case CAM_SINGLE_MODE:
2329                         case CAM_SELF_SINGLE_MODE:
2330                                 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2331
2332                                 if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
2333                                         __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2334                                         __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2335                                         __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2336                                 } else {
2337                                         if (cam_is_enabled_menu(ad, CAM_MENU_BURST_SHOT_MODE)
2338                                                         && camapp->continuous_shot_data
2339                                                         && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING) {
2340                                                 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_DIM);
2341                                                 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_PRESS);
2342                                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2343                                         } else {
2344                                                 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2345                                                 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2346                                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2347                                         }
2348                                 }
2349                                 __toolbar_recording_stop_button_destroy(ad);
2350
2351                                 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2352                                         __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2353                                 }
2354
2355                                 break;
2356                         default:
2357                                 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2358                                 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2359                                 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2360                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2361                                 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2362                                 __toolbar_recording_stop_button_destroy(ad);
2363                                 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2364                                 break;
2365                         }
2366
2367                         __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2368                 } else {
2369                         if (ad->is_recording) {
2370                                 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2371                                 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2372
2373                                 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2374
2375                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2376                                 __toolbar_recording_stop_button_create(ad);
2377
2378                                 if (show_caf_button)
2379                                         __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2380
2381                                 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2382                                         __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2383                                 }
2384                         } else {
2385                                 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2386                                 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2387
2388                                 if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
2389                                         __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2390                                 } else {
2391                                         __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2392                                 }
2393
2394                                 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2395                                 __toolbar_recording_stop_button_destroy(ad);
2396
2397                                 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2398
2399                                 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2400                                         __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2401                                 }
2402                         }
2403                 }
2404         }
2405 }
2406
2407 int cam_toolbar_rotate(struct appdata *ad)
2408 {
2409         DEBUG_TRACE("");
2410         cam_retv_if(ad == NULL, -1);
2411         CamAppData *cam_handle = ad->camapp_handle;
2412         cam_retv_if(cam_handle == NULL, -1);
2413         cam_toolbar_setting_popup_destroy(ad);
2414         cam_toolbar_destroy(ad);
2415
2416         switch (ad->target_direction) {
2417         case CAM_TARGET_DIRECTION_LANDSCAPE:
2418                 if (ad->toolbar_edje_landscape == NULL) {
2419                         cam_toolbar_create(ad);
2420                 }
2421                 ad->toolbar_edje = ad->toolbar_edje_landscape;
2422                 break;
2423         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2424                 if (ad->toolbar_edje_landscape_inverse == NULL) {
2425                         cam_toolbar_create(ad);
2426                 }
2427                 ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
2428                 break;
2429         case CAM_TARGET_DIRECTION_PORTRAIT:
2430                 if (ad->toolbar_edje_portrait == NULL) {
2431                         cam_toolbar_create(ad);
2432                 }
2433                 ad->toolbar_edje = ad->toolbar_edje_portrait;
2434                 break;
2435         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2436                 if (ad->toolbar_edje_portrait_inverse == NULL) {
2437                         cam_toolbar_create(ad);
2438                 }
2439                 ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
2440                 break;
2441         default:
2442                 DEBUG_TRACE("note: run into un-reached codes");
2443         }
2444
2445         evas_object_show(ad->toolbar_edje);
2446
2447         return EXIT_SUCCESS;
2448 }
2449
2450 int show_toolbar_edje(struct appdata *ad)
2451 {
2452         cam_retv_if(ad == NULL, -1);
2453         if (ad->toolbar_edje == NULL) {
2454                 return -1;
2455         }
2456         if (!ad->toolbar_hided) {
2457                 cam_toolbar_update(ad);
2458                 evas_object_show(ad->toolbar_edje);
2459         } else {
2460                 hide_toolbar_edje(ad);
2461         }
2462
2463         return EXIT_SUCCESS;
2464 }
2465
2466 int hide_toolbar_edje(struct appdata *ad)
2467 {
2468         cam_retv_if(ad == NULL, -1);
2469         evas_object_hide(ad->toolbar_edje);
2470         return EXIT_SUCCESS;
2471 }
2472
2473 gboolean toolbar_update_quickview_thumbnail_no_animation(struct appdata *ad)
2474 {
2475         cam_retv_if(ad == NULL, FALSE);
2476         CamAppData *camapp = ad->camapp_handle;
2477         cam_retv_if(camapp == NULL, FALSE);
2478         DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
2479         DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
2480
2481         if (camapp->thumbnail_name != NULL) {
2482                 ad->toolbar.quickview_item.thumbnail_image = elm_bg_add(ad->toolbar.quickview_item.edje);
2483                 cam_retv_if(ad->toolbar.quickview_item.thumbnail_image == NULL, FALSE);
2484                 elm_bg_file_set(ad->toolbar.quickview_item.thumbnail_image, camapp->thumbnail_name, NULL);
2485
2486                 Evas_Object *layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
2487                 Evas_Object *thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout, "thumbnail_area");
2488                 cam_retv_if(thumbnail_area == NULL, FALSE);
2489                 Evas_Coord x = 0, y = 0, w = 0, h = 0;
2490                 evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
2491                 evas_object_resize(ad->toolbar.quickview_item.thumbnail_image, w, h);
2492                 DEBUG_TRACE("%d %d %d %d", x, y, w, h);
2493
2494                 if (ad->toolbar.quickview_item.edje) {
2495                         elm_object_part_content_set(ad->toolbar.quickview_item.edje,
2496                                                         "thumbnail", ad->toolbar.quickview_item.thumbnail_image);
2497                         evas_object_show(ad->toolbar.quickview_item.edje);
2498                 }
2499
2500                 return TRUE;
2501         }
2502         return FALSE;
2503 }
2504
2505 gboolean toolbar_update_quickview_thumbnail(struct appdata *ad)
2506 {
2507         cam_retv_if(ad == NULL, FALSE);
2508         CamAppData *camapp = ad->camapp_handle;
2509         cam_retv_if(camapp == NULL, FALSE);
2510         cam_retv_if(ad->evas == NULL, FALSE);
2511
2512         cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
2513         DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
2514
2515         cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL);
2516
2517         return TRUE;
2518 }
2519
2520 static void setting_ctxpopup_destroy(struct appdata *ad)
2521 {
2522         cam_retm_if(ad == NULL, "appdata is NULL");
2523
2524         DEL_EVAS_OBJECT(ad->sub_menu_group);
2525
2526         if (ad->sub_genlist != NULL) {
2527                 elm_genlist_clear(ad->sub_genlist);
2528                 evas_object_del(ad->sub_genlist);
2529                 ad->sub_genlist = NULL;
2530         }
2531
2532         DEL_EVAS_OBJECT(ad->setting_ctxpopup);
2533         ad->ctxpopup_area = NULL;
2534         ad->sub_menu_type = CAM_MENU_EMPTY;
2535
2536         if (ad->toolbar_setting_popup == NULL)
2537                 __set_show_state_preview_obj(ad, TRUE);
2538 }
2539
2540 static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow)
2541 {
2542         cam_retvm_if(ad == NULL, -1, "appdata is NULL");
2543
2544         if (ad->setting_ctxpopup)
2545                 setting_ctxpopup_destroy(ad);
2546
2547         if (ad->toolbar_edje == NULL)
2548                 DEBUG_TRACE("error occur");
2549
2550         __set_show_state_preview_obj(ad, FALSE);
2551
2552         ad->ctxpopup_area = (Evas_Object *)
2553                     edje_object_part_object_get(elm_layout_edje_get
2554                                                 (ad->toolbar_edje), "popup_area");
2555         ad->setting_ctxpopup = elm_ctxpopup_add(ad->ctxpopup_area);
2556         elm_object_scroll_hold_push(ad->setting_ctxpopup);
2557         if (!bNoArrow)
2558                 elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera");
2559         else
2560                 elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera_no_arrow");
2561         /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
2562         return EXIT_SUCCESS;
2563 }
2564
2565 static int setting_toolbar_popup_create(struct appdata *ad)
2566 {
2567         cam_retvm_if(ad == NULL, -1, "appdata is NULL");
2568
2569         if (ad->setting_ctxpopup)
2570                 setting_ctxpopup_destroy(ad);
2571
2572         if (ad->toolbar_edje == NULL)
2573                 DEBUG_TRACE("error occur");
2574
2575         ad->toolbar_setting_popup_area = (Evas_Object *)
2576                     edje_object_part_object_get(elm_layout_edje_get
2577                                                 (ad->toolbar_edje), "setting_popup");
2578         ad->toolbar_setting_popup = elm_ctxpopup_add(ad->toolbar_setting_popup_area);
2579         elm_object_scroll_hold_push(ad->toolbar_setting_popup);
2580         elm_object_style_set(ad->toolbar_setting_popup, "beat_winset_test/camera");
2581         /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
2582         return EXIT_SUCCESS;
2583 }
2584
2585 static int setting_shortcuts_popup_create(struct appdata *ad)
2586 {
2587         cam_retvm_if(ad == NULL, -1, "appdata is NULL");
2588
2589         if (ad->setting_ctxpopup)
2590                 setting_ctxpopup_destroy(ad);
2591
2592         if (ad->toolbar_edje == NULL)
2593                 DEBUG_TRACE("error occur");
2594
2595         ad->edit_shortcuts_popup = (Evas_Object *)
2596                     edje_object_part_object_get(elm_layout_edje_get
2597                                                 (ad->toolbar_edje), "shortcuts_popup");
2598
2599         DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
2600         ad->edit_shortcuts_popup_description =
2601                 cam_app_load_edj(ad->toolbar_edje, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME,
2602                                      "camera/shortcuts/layout/description");
2603
2604         /*TODO: need id: IDS_CAM_POP_TAP_AND_HOLD_AN_ICON_AND_MOVE_TO_EDIT_SHORTCUTS*/
2605         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"));
2606         elm_object_scroll_hold_push(ad->edit_shortcuts_popup);
2607         return EXIT_SUCCESS;
2608 }
2609
2610 int cam_guideline_create(struct appdata *ad)
2611 {
2612         cam_retv_if(ad == NULL, -1);
2613         cam_retv_if(ad->camapp_handle == NULL, -1);
2614
2615         DEL_EVAS_OBJECT(ad->guideline_edje);
2616         elm_object_part_content_unset(ad->ug_base, "guideline_layout");
2617
2618         if (ad->guideline_edje == NULL) {
2619                 ad->guideline_edje = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, "guideline");
2620         }
2621
2622         cam_retv_if(ad->guideline_edje == NULL, -1);
2623         elm_object_part_content_set(ad->ug_base, "guideline_layout", ad->guideline_edje);
2624
2625         gboolean wide_mode = FALSE;
2626         gint ret = 0;
2627
2628         gint p_width = 0;
2629         gint p_height =0;
2630         ret = cam_mm_get_video_size(&p_width, &p_height);
2631
2632         if (!ret) {
2633                 DEBUG_TRACE("Middle Ware error occur!");
2634                 return -1;
2635         }
2636
2637         DEBUG_TRACE("p_width == %d ,p_height = %d" ,p_width , p_height);
2638         if (ad->camapp_handle->camera_mode == CAM_CAMERA_MODE) {
2639                 wide_mode = cam_utils_check_wide_resolution(p_width, p_height);
2640         } else if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
2641                 if ( p_width > PREVIEW_W ) {
2642                         wide_mode = TRUE;
2643                 } else {
2644                         wide_mode = FALSE;
2645                 }
2646         }
2647
2648         if (p_width == 1392 && p_height == 1392) {
2649                 switch (ad->target_direction) {
2650                 case CAM_TARGET_DIRECTION_LANDSCAPE:
2651                 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2652                         DEBUG_TRACE("landscape");
2653                         edje_object_signal_emit(_EDJ(ad->guideline_edje),
2654                                                         "guide_line,1,2,normal", "prog_guideline");
2655                         edje_object_signal_emit(_EDJ(ad->guideline_edje),
2656                                                         "guide_line,3,4,square", "prog_guideline");
2657                         break;
2658                 case CAM_TARGET_DIRECTION_PORTRAIT:
2659                 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2660                         DEBUG_TRACE("portrait");
2661                         edje_object_signal_emit(_EDJ(ad->guideline_edje),
2662                                                         "guide_line,1,2,vertical,square", "prog_guideline");
2663                         edje_object_signal_emit(_EDJ(ad->guideline_edje),
2664                                                         "guide_line,3,4,vertical,normal", "prog_guideline");
2665                         break;
2666                 }
2667         } else {
2668                 if (wide_mode) {
2669                         DEBUG_TRACE("hor,wide_mode");
2670                         switch (ad->target_direction) {
2671                         case CAM_TARGET_DIRECTION_LANDSCAPE:
2672                         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2673                                 DEBUG_TRACE("landscape");
2674                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2675                                                                 "guide_line,1,2,normal", "prog_guideline");
2676                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2677                                                                 "guide_line,3,4,wide", "prog_guideline");
2678                                 break;
2679                         case CAM_TARGET_DIRECTION_PORTRAIT:
2680                         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2681                                 DEBUG_TRACE("portrait");
2682                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2683                                                         "guide_line,1,2,vertical,wide", "prog_guideline");
2684                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2685                                                         "guide_line,3,4,vertical,normal", "prog_guideline");
2686                                 break;
2687                         }
2688
2689                 } else {
2690                         DEBUG_TRACE("hor,normal mode");
2691                         switch (ad->target_direction) {
2692                         case CAM_TARGET_DIRECTION_LANDSCAPE:
2693                         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2694                                 DEBUG_TRACE("landscape");
2695                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2696                                                                 "guide_line,1,2,normal", "prog_guideline");
2697                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2698                                                                 "guide_line,3,4,normal", "prog_guideline");
2699                                 break;
2700                         case CAM_TARGET_DIRECTION_PORTRAIT:
2701                         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2702                                 DEBUG_TRACE("portrait");
2703                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2704                                                         "guide_line,1,2,vertical,normal", "prog_guideline");
2705                                 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2706                                                         "guide_line,3,4,vertical,normal", "prog_guideline");
2707                                 break;
2708                         }
2709
2710                 }
2711         }
2712         /*evas_object_lower(ad->guideline_edje);*/
2713         evas_object_show(ad->guideline_edje);
2714
2715         DEBUG_TRACE("over");
2716         return 0;
2717 }
2718
2719 static void __volume_key_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
2720 {
2721         cam_retm_if(obj == NULL, "obj is NULL");
2722         struct appdata *ad = (struct appdata *)cam_appdata_get();
2723         cam_retm_if(ad == NULL, "appdata is NULL");
2724
2725         DEBUG_TRACE("");
2726
2727         GValue value = {0};
2728
2729         switch((int)data) {
2730                 case CAM_MENU_VOLUME_KEY_ZOOM:
2731                         {
2732                                 CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_ZOOM);
2733                                 cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
2734                         }
2735                         break;
2736                 case CAM_MENU_VOLUME_KEY_SHUTTER:
2737                         {
2738                                 CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_SHUTTER);
2739                                 cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
2740                         }
2741                         break;
2742                 default:
2743                         break;
2744         }
2745
2746         evas_object_show(ad->toolbar_setting_popup);
2747         if (ad->setting_select_item)
2748                 elm_genlist_item_update(ad->setting_select_item);
2749         __update_menubar_icon_by_index(ad, CAM_MENU_VOLUME_KEY);
2750
2751         setting_ctxpopup_destroy(ad);
2752         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2753 }
2754
2755 static void __storage_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
2756 {
2757         cam_retm_if(obj == NULL, "obj is NULL");
2758         struct appdata *ad = (struct appdata *)cam_appdata_get();
2759         cam_retm_if(ad == NULL, "appdata is NULL");
2760
2761         DEBUG_TRACE("");
2762
2763         int mmc_state = -1;
2764         GValue value = {0};
2765
2766         switch((int)data) {
2767                 case CAM_MENU_STORAGE_PHONE:
2768                         {
2769                                 CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
2770                                 cam_handle_value_set(ad, PROP_STORAGE, &value);
2771                         }
2772                         break;
2773                 case CAM_MENU_STORAGE_MMC:
2774                         {
2775                                 if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
2776                                         if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED) {
2777                                                 GValue value = {
2778                                                         0
2779                                                 };
2780                                                 CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
2781                                                 cam_handle_value_set(ad, PROP_STORAGE, &value);
2782                                                 cam_info(LOG_UI, "MMC card is removed");
2783                                                 cam_storage_warning_popup();
2784                                         } else {
2785                                                 CAM_GVALUE_SET_INT(value, CAM_STORAGE_EXTERNAL);
2786                                                 cam_handle_value_set(ad, PROP_STORAGE, &value);
2787                                         }
2788                                 }
2789                         }
2790                         break;
2791                 default:
2792                         break;
2793         }
2794
2795         evas_object_show(ad->toolbar_setting_popup);
2796         if (ad->setting_select_item)
2797                 elm_genlist_item_update(ad->setting_select_item);
2798         __update_menubar_icon_by_index(ad, CAM_MENU_STORAGE);
2799
2800         setting_ctxpopup_destroy(ad);
2801         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2802 }
2803
2804 static void __wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
2805 {
2806         cam_retm_if(obj == NULL, "obj is NULL");
2807         struct appdata *ad = (struct appdata *)cam_appdata_get();
2808         cam_retm_if(ad == NULL, "appdata is NULL");
2809
2810         DEBUG_TRACE("");
2811
2812         int wb = cam_convert_menu_item_to_mmfw_value((int)data);
2813
2814         /* set wb value */
2815         if (ad->camapp_handle->white_balance != wb) {
2816                 GValue value = {0};
2817                 CAM_GVALUE_SET_INT(value, wb);
2818                 cam_handle_value_set(ad, PROP_WB, &value);
2819         }
2820         evas_object_show(ad->toolbar_setting_popup);
2821         if (ad->setting_select_item)
2822                 elm_genlist_item_update(ad->setting_select_item);
2823         __update_menubar_icon_by_index(ad, CAM_MENU_WHITE_BALANCE);
2824
2825         setting_ctxpopup_destroy(ad);
2826         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2827 }
2828
2829 static void __iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
2830 {
2831         cam_retm_if(obj == NULL, "obj is NULL");
2832         struct appdata *ad = (struct appdata *)cam_appdata_get();
2833         cam_retm_if(ad == NULL, "appdata is NULL");
2834
2835         DEBUG_TRACE("");
2836
2837         int iso = cam_convert_menu_item_to_mmfw_value((int)data);
2838
2839         /* set iso value */
2840         if (ad->camapp_handle->iso != iso) {
2841                 GValue value = {0};
2842                 CAM_GVALUE_SET_INT(value, iso);
2843                 cam_handle_value_set(ad, PROP_ISO, &value);
2844         }
2845         evas_object_show(ad->toolbar_setting_popup);
2846         if (ad->setting_select_item)
2847                 elm_genlist_item_update(ad->setting_select_item);
2848         __update_menubar_icon_by_index(ad, CAM_MENU_ISO);
2849
2850         setting_ctxpopup_destroy(ad);
2851         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2852 }
2853 static void __metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
2854 {
2855         cam_retm_if(obj == NULL, "obj is NULL");
2856         struct appdata *ad = (struct appdata *)cam_appdata_get();
2857         cam_retm_if(ad == NULL, "appdata is NULL");
2858
2859         DEBUG_TRACE("");
2860
2861         int metering = cam_convert_menu_item_to_mmfw_value((int)data);
2862
2863         /* set metering value */
2864         if (ad->camapp_handle->auto_exposure != metering) {
2865                 GValue value = {0};
2866                 CAM_GVALUE_SET_INT(value, metering);
2867                 cam_handle_value_set(ad, PROP_METERING, &value);
2868         }
2869         evas_object_show(ad->toolbar_setting_popup);
2870         if (ad->setting_select_item)
2871                 elm_genlist_item_update(ad->setting_select_item);
2872         __update_menubar_icon_by_index(ad, CAM_MENU_METERING);
2873
2874         setting_ctxpopup_destroy(ad);
2875         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2876 }
2877
2878 static void __timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
2879 {
2880         cam_retm_if(obj == NULL, "obj is NULL");
2881         struct appdata *ad = (struct appdata *)cam_appdata_get();
2882         cam_retm_if(ad == NULL, "appdata is NULL");
2883
2884         DEBUG_TRACE("");
2885
2886         int index = (int)data - CAM_MENU_TIMER_OFF;
2887         DEBUG_TRACE("index : [%d]", index);
2888         cam_ret_if(index < 0 || index >= CAM_SETTINGS_TIMER_NUMS);
2889
2890         /* set timer value */
2891         if (ad->camapp_handle->timer != index) {
2892                 GValue value = {0};
2893                 CAM_GVALUE_SET_INT(value, index);
2894                 cam_handle_value_set(ad, PROP_TIMER, &value);/*set ad->camapp_handle->timer*/
2895                 evas_object_show(ad->toolbar_setting_popup);
2896                 if (ad->setting_select_item)
2897                         elm_genlist_item_update(ad->setting_select_item);
2898                 __update_menubar_icon_by_index(ad, CAM_MENU_TIMER);
2899         }
2900
2901         setting_ctxpopup_destroy(ad);
2902         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2903 }
2904
2905 static void __reset_settings_launch(void)
2906 {
2907         GValue i_value = { 0, };
2908         GValue b_value = { 0, };
2909         struct appdata *ad = (struct appdata *)cam_appdata_get();
2910         CamAppData *camapp = NULL;
2911
2912         cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
2913
2914         cam_retm_if(ad == NULL, " appdata is NULL");
2915         camapp = ad->camapp_handle;
2916         cam_retm_if(camapp == NULL, " cam_handle is NULL");
2917
2918         g_value_init(&i_value, G_TYPE_INT);
2919         g_value_init(&b_value, G_TYPE_BOOLEAN);
2920
2921         camapp->device_type = CAM_DEVICE_MEGA;
2922
2923         /* Shot mode */
2924         g_value_set_int(&i_value, SHOTMODE_DEFAULT);
2925         cam_handle_value_set(ad, PROP_SHOT_MODE, &i_value);
2926
2927         /* Rec mode */
2928         if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
2929                         && ad->exe_args->size_limit > 0) {
2930                 g_value_set_int(&i_value, CAM_RECORD_MMS);
2931         } else {
2932                 g_value_set_int(&i_value, RECMODE_DEFAULT);
2933         }
2934         cam_handle_value_set(ad, PROP_REC_MODE, &i_value);
2935
2936         /* Scene */
2937         g_value_set_int(&i_value, PG_MODE_DEFAULT);
2938         cam_handle_value_set(ad, PROP_SCENE_MODE, &i_value);
2939
2940         /* auto focus */
2941         g_value_set_int(&i_value, AF_DEFAULT);
2942         cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
2943
2944         /* Timer */
2945         g_value_set_int(&i_value, TIMER_DEFAULT);
2946         cam_handle_value_set(ad, PROP_TIMER, &i_value);
2947
2948         /* white balance */
2949         g_value_set_int(&i_value, WB_DEFAULT);
2950         cam_handle_value_set(ad, PROP_WB, &i_value);
2951
2952         /* Effect */
2953         g_value_set_int(&i_value, EFFECT_DEFAULT);
2954         cam_handle_value_set(ad, PROP_EFFECT, &i_value);
2955
2956         /* ISO */
2957         g_value_set_int(&i_value, ISO_DEFAULT);
2958         cam_handle_value_set(ad, PROP_ISO, &i_value);
2959
2960         /* Metering */
2961         g_value_set_int(&i_value, AE_DEFAULT);
2962         cam_handle_value_set(ad, PROP_METERING, &i_value);
2963
2964         /* Anti-shake */
2965         g_value_set_int(&i_value, AHS_DEFAULT);
2966         cam_handle_value_set(ad, PROP_AHS, &i_value);
2967
2968         /* wild dynamic range */
2969         g_value_set_int(&i_value, WDR_DEFAULT);
2970         cam_handle_value_set(ad, PROP_WDR, &i_value);
2971
2972         /* Image quality */
2973         g_value_set_int(&i_value, QUALITY_DEFAULT);
2974         cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
2975
2976         /* Video quality */
2977         g_value_set_int(&i_value, QUALITY_DEFAULT);
2978         cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
2979
2980         /* Auto Contrast */
2981         g_value_set_int(&i_value, FALSE);
2982         cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &i_value);
2983
2984         /* Guide Line */
2985         g_value_set_boolean(&b_value, GUIDE_LINE_DEFAULT);
2986         cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
2987         settings_guideline_refresh(ad);
2988
2989         /* Review */
2990         g_value_set_boolean(&b_value, FALSE);
2991         cam_handle_value_set(ad, PROP_REVIEW, &b_value);
2992
2993         /* GPS Connect */
2994         g_value_set_boolean(&b_value, FALSE);
2995         cam_handle_value_set(ad, PROP_GPS, &b_value);
2996
2997         /* shutter sound */
2998         g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
2999         cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
3000
3001         /* sound */
3002         cam_mm_set_shutter_sound(SOUND_DEFAULT);
3003         ad->camapp_handle->shutter_sound = SHUTTER_SOUND_DEFAULT;
3004
3005         /* audio recording */
3006         g_value_set_boolean(&b_value, TRUE);
3007         cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
3008
3009         /* storage */
3010         g_value_set_int(&i_value, STORAGE_DEFAULT);
3011         cam_handle_value_set(ad, PROP_STORAGE, &i_value);
3012
3013         /* brightness */
3014         g_value_set_int(&i_value, BRIGHTNESS_DEFAULT);
3015         cam_handle_value_set(ad, PROP_BRIGHTNESS, &i_value);
3016
3017         /* Resolution */
3018         g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
3019         cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &i_value);
3020
3021         g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
3022         cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &i_value);
3023
3024         if (ad->indicator_edje) {
3025                 /* delete indicator */
3026                 evas_object_hide(ad->indicator_edje);
3027                 cam_indicator_destory(ad);
3028         }
3029         cam_indicator_create(ad);
3030
3031         /* Flash */
3032         if (camapp->camera_mode == CAM_CAMERA_MODE) {
3033                 g_value_set_int(&i_value, FLASH_DEFAULT);
3034         } else {
3035                 g_value_set_int(&i_value, REC_FLASH_DEFAULT);
3036         }
3037         cam_handle_value_set(ad, PROP_FLASH, &i_value);
3038
3039         /* Outdoor visibility */
3040         g_value_set_boolean(&b_value, FALSE);
3041         cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &b_value);
3042
3043         /* save as flip */
3044         g_value_set_boolean(&b_value, FALSE);
3045         cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &b_value);
3046
3047
3048         /* Zoom */
3049         g_value_set_int(&i_value, ZOOM_DEFAULT);
3050         cam_handle_value_set(ad, PROP_ZOOM, &i_value);
3051
3052         /* Size limit type */
3053         g_value_set_int(&i_value, CAM_MM_SIZE_LIMIT_TYPE_BYTE);
3054         cam_handle_value_set(ad, PROP_SIZE_LIMIT_TYPE, &i_value);
3055
3056         /* Size limit */
3057         if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
3058                         && ad->exe_args->size_limit > 0) {
3059                 g_value_set_int(&i_value, CAM_REC_MMS_MAX_SIZE);
3060         } else {
3061                 g_value_set_int(&i_value, REC_SIZE_LIMIT_DEFAULT);
3062         }
3063         cam_handle_value_set(ad, PROP_SIZE_LIMIT, &i_value);
3064
3065         /*  Timer */
3066         g_value_set_int(&i_value, TIMER_DEFAULT);
3067         cam_handle_value_set(ad, PROP_TIMER, &i_value);
3068
3069         /* Image count */
3070         g_value_set_int(&i_value, IMAGE_COUNT_DEFAULT);
3071         cam_handle_value_set(ad, PROP_IMAGE_COUNT, &i_value);
3072
3073         CAM_GVALUE_SET_INT(i_value, CAM_VOLUME_KEY_ZOOM);
3074         cam_handle_value_set(ad, PROP_VOLUME_KEY, &i_value);
3075
3076         camapp->continuous_shot_data = NULL;
3077         camapp->enable_touch_af = TRUE;
3078         camapp->burst_shot = TRUE;
3079
3080         /*Edit shortcuts*/
3081         cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
3082                                                 PROP_SHOW_POP_TIP,
3083                                                 TRUE);/*note: set show pop tip flag*/
3084         cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
3085                                                 PROP_SHORTCUTS_INIT_PART_INDEX,
3086                                                 FALSE);/*note: set shorcuts init flag*/
3087 }
3088
3089 static void __restore_defaults_popup_cb_ok_cb(void *data, Evas_Object *obj, void *event_info)
3090 {
3091         struct appdata *ad = (struct appdata *)cam_appdata_get();
3092         cam_retm_if(ad == NULL, " appdata is NULL");
3093         cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
3094
3095         DEL_EVAS_OBJECT(ad->confirm_popup);
3096
3097         hide_toolbar_edje(ad);
3098         cam_app_preview_stop();
3099
3100         __reset_settings_launch();
3101         __toolbar_menu_item_reset(ad);
3102
3103         ResetCaps();
3104
3105         show_toolbar_edje(ad);
3106
3107         if (!cam_app_preview_start(ad)) {
3108                 cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
3109         }
3110
3111 }
3112
3113 static void __restore_defaults_popup_cb_cancel_cb(void *data, Evas_Object *obj, void *event_info)
3114 {
3115         struct appdata *ad = (struct appdata *)cam_appdata_get();
3116         cam_retm_if(ad == NULL, " appdata is NULL");
3117         cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
3118
3119         DEL_EVAS_OBJECT(ad->confirm_popup);
3120 }
3121
3122 static void __effects_selected_cb(void *data, Evas_Object *obj, void *event_info)
3123 {
3124         cam_retm_if(obj == NULL, "obj is NULL");
3125         struct appdata *ad = (struct appdata *)cam_appdata_get();
3126         cam_retm_if(ad == NULL, "appdata is NULL");
3127
3128         DEBUG_TRACE("");
3129
3130         GValue value = {0};
3131         int effect = CAM_SCENE_NONE;
3132         switch ((int)data) {
3133         case CAM_MENU_EFFECT_NONE:
3134                 effect = CAMERA_ATTR_EFFECT_NONE;
3135                 break;
3136         case CAM_MENU_EFFECT_NEGATIVE:
3137                 effect = CAMERA_ATTR_EFFECT_NEGATIVE;
3138                 break;
3139         case CAM_MENU_EFFECT_BLACKANDWHITE:
3140                 effect = CAMERA_ATTR_EFFECT_MONO;
3141                 break;
3142         case CAM_MENU_EFFECT_SEPIA:
3143                 effect = CAMERA_ATTR_EFFECT_SEPIA;
3144                 break;
3145         default:
3146                 break;
3147         }
3148
3149         if (ad->camapp_handle->effect != effect) {
3150                 CAM_GVALUE_SET_INT(value, effect);
3151                 cam_handle_value_set(ad, PROP_EFFECT, &value);
3152         }
3153
3154         if (ad->setting_select_item)
3155                 elm_genlist_item_update(ad->setting_select_item);
3156         __update_menubar_icon_by_index(ad, CAM_MENU_EFFECTS);
3157
3158         setting_ctxpopup_destroy(ad);
3159         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3160 }
3161
3162 static void __shot_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3163 {
3164         cam_retm_if(obj == NULL, "obj is NULL");
3165         struct appdata *ad = (struct appdata *)cam_appdata_get();
3166         cam_retm_if(ad == NULL, "appdata is NULL");
3167
3168         DEBUG_TRACE("");
3169
3170         switch ((int)data) {
3171         case CAM_MENU_SHOOTING_SINGLE:
3172                 shot_mode_set(ad, CAM_SINGLE_MODE);
3173                 break;
3174         case CAM_MENU_SHOOTING_SELF_SINGLE:
3175                 shot_mode_set(ad, CAM_SELF_SINGLE_MODE);
3176                 break;
3177         default:
3178                 break;
3179         }
3180
3181         evas_object_show(ad->toolbar_setting_popup);
3182         if (ad->setting_select_item) {
3183                 elm_genlist_item_update(ad->setting_select_item);
3184         }
3185
3186         __toolbar_menu_icon_update(ad);
3187
3188         setting_ctxpopup_destroy(ad);
3189         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3190         cam_toolbar_setting_popup_destroy(ad);
3191 }
3192
3193 static void __scene_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3194 {
3195         cam_retm_if(obj == NULL, "obj is NULL");
3196         struct appdata *ad = (struct appdata *)cam_appdata_get();
3197         cam_retm_if(ad == NULL, "appdata is NULL");
3198
3199         DEBUG_TRACE("");
3200
3201         GValue value = {0};
3202
3203         int scene = CAM_MENU_SCENE_AUTO;
3204         switch ((int)data) {
3205         case CAM_MENU_SCENE_AUTO:
3206                 scene = CAM_SCENE_NONE;
3207                 break;
3208         case CAM_MENU_SCENE_PORTRAIT:
3209                 scene = CAM_SCENE_PORTRAIT;
3210                 break;
3211         case CAM_MENU_SCENE_LANDSCAPE:
3212                 scene = CAM_SCENE_LANDSCAPE;
3213                 break;
3214         case CAM_MENU_SCENE_NIGHT:
3215                 scene = CAM_SCENE_NIGHT;
3216                 break;
3217         case CAM_MENU_SCENE_SPORTS:
3218                 scene = CAM_SCENE_SPORTS;
3219                 break;
3220         case CAM_MENU_SCENE_PARTY:
3221                 scene = CAM_SCENE_PARTY;
3222                 break;
3223         case CAM_MENU_SCENE_BEACHSNOW:
3224                 scene = CAM_SCENE_BEACHSNOW;
3225                 break;
3226         case CAM_MENU_SCENE_SUNSET:
3227                 scene = CAM_SCENE_SUNSET;
3228                 break;
3229         case CAM_MENU_SCENE_DUSKDAWN:
3230                 scene = CAM_SCENE_DUSKDAWN;
3231                 break;
3232         case CAM_MENU_SCENE_FALL:
3233                 scene = CAM_SCENE_FALL;
3234                 break;
3235         case CAM_MENU_SCENE_FIREWORK:
3236                 scene = CAM_SCENE_FIREWORK;
3237                 break;
3238         case CAM_MENU_SCENE_TEXT:
3239                 scene = CAM_SCENE_TEXT;
3240                 break;
3241         case CAM_MENU_SCENE_CANDLELIGHT:
3242                 scene = CAM_SCENE_CANDLELIGHT;
3243                 break;
3244         case CAM_MENU_SCENE_BACKLIGHT:
3245                 scene = CAM_SCENE_BACKLIGHT;
3246                 break;
3247         case CAM_MENU_SCENE_SHOW_WINDOW:
3248                 scene = CAM_SCENE_SHOW_WINDOW;
3249                 break;
3250         default:
3251                 break;
3252         }
3253
3254         if (ad->camapp_handle->scene_mode != scene) {
3255                 CAM_GVALUE_SET_INT(value, scene);
3256                 cam_handle_value_set(ad, PROP_SCENE_MODE, &value);
3257         }
3258
3259         if (ad->setting_select_item)
3260                 elm_genlist_item_update(ad->setting_select_item);
3261
3262         __toolbar_menu_icon_update(ad);
3263
3264         setting_ctxpopup_destroy(ad);
3265         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3266         __update_setting_popup(ad);
3267 }
3268
3269 static void __focus_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3270 {
3271         cam_retm_if(obj == NULL, "obj is NULL");
3272         struct appdata *ad = (struct appdata *)cam_appdata_get();
3273         cam_retm_if(ad == NULL, "appdata is NULL");
3274
3275         DEBUG_TRACE("");
3276
3277         GValue value = {0};
3278         int focus_mode = CAM_FOCUS_AUTO;
3279         switch ((int)data) {
3280         case CAM_MENU_FOCUS_AUTO:
3281                 focus_mode = CAM_FOCUS_AUTO;
3282                 break;
3283         case CAM_MENU_FOCUS_MACRO:
3284                 focus_mode = CAM_FOCUS_MACRO;
3285                 break;
3286         case CAM_MENU_FOCUS_FACE_DETECTION:
3287                 focus_mode = CAM_FOCUS_FACE;
3288                 break;
3289         default:
3290                 break;
3291         }
3292
3293         CAM_GVALUE_SET_INT(value, focus_mode);
3294         cam_handle_value_set(ad, PROP_AF_MODE, &value);
3295
3296         if (ad->setting_select_item)
3297                 elm_genlist_item_update(ad->setting_select_item);
3298         __update_menubar_icon_by_index(ad, CAM_MENU_FOCUS_MODE);
3299
3300         setting_ctxpopup_destroy(ad);
3301         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3302         __update_setting_popup(ad);
3303 }
3304
3305 static void __record_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3306 {
3307         cam_retm_if(obj == NULL, "obj is NULL");
3308         struct appdata *ad = (struct appdata *)cam_appdata_get();
3309         cam_retm_if(ad == NULL, "appdata is NULL");
3310
3311         DEBUG_TRACE("");
3312
3313         GValue value = {0};
3314         int record_mode = CAM_RECORD_NORMAL;
3315         switch ((int)data) {
3316         case CAM_MENU_RECORDING_MODE_NORMAL:
3317                 record_mode = CAM_RECORD_NORMAL;
3318                 break;
3319         case CAM_MENU_RECORDING_MODE_LIMIT:
3320                 record_mode = CAM_RECORD_MMS;
3321                 break;
3322         case CAM_MENU_RECORDING_MODE_SLOW:
3323                 record_mode = CAM_RECORD_SLOW;
3324                 break;
3325         case CAM_MENU_RECORDING_MODE_FAST:
3326                 record_mode = CAM_RECORD_FAST;
3327                 break;
3328         case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
3329                 record_mode = CAM_RECORD_SELF;
3330                 break;
3331         case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
3332                 record_mode = CAM_RECORD_SELF_MMS;
3333                 break;
3334         default:
3335                 break;
3336         }
3337
3338         if (ad->camapp_handle->recording_mode != record_mode) {
3339                 CAM_GVALUE_SET_INT(value, record_mode);
3340                 cam_handle_value_set(ad, PROP_REC_MODE, &value);
3341         }
3342
3343         evas_object_show(ad->toolbar_setting_popup);
3344         if (ad->setting_select_item) {
3345                 elm_genlist_item_update(ad->setting_select_item);
3346         }
3347
3348         __toolbar_menu_icon_update(ad);
3349
3350         setting_ctxpopup_destroy(ad);
3351         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3352         cam_toolbar_setting_popup_destroy(ad);
3353 }
3354
3355 static void __update_menubar_icon_by_index(struct appdata *ad, int index)
3356 {
3357         Evas_Object_Event_Cb func = NULL;
3358         int menubar_no = -1;
3359         menubar_no = __get_menubar_no_by_index(ad, index);
3360         if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
3361         Evas_Object *icon = NULL;
3362         icon = ad->toolbar_menu_arrays[menubar_no].icon;
3363         if (icon)
3364                 __toolbar_menu_type_update(icon, index, ad, BUTTON_STATE_NORMAL, &func);
3365 }
3366
3367 static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info)
3368 {
3369         cam_retm_if(obj == NULL, "obj is NULL");
3370         struct appdata *ad = (struct appdata *)cam_appdata_get();
3371         cam_retm_if(ad == NULL, "appdata is NULL");
3372
3373         DEBUG_TRACE("");
3374
3375         int flash_value = 0;
3376         GValue value = {0};
3377         switch ((int)data) {
3378         case CAM_MENU_FLASH_OFF:
3379                 flash_value = CAM_FLASH_OFF;
3380                 break;
3381         case CAM_MENU_FLASH_ON:
3382                 flash_value = CAM_FLASH_ON;
3383                 break;
3384         case CAM_MENU_FLASH_AUTO:
3385                 flash_value = CAM_FLASH_AUTO;
3386                 break;
3387         default:
3388                 flash_value = CAM_FLASH_OFF;
3389                 break;
3390         }
3391         CAM_GVALUE_SET_INT(value, flash_value);
3392         cam_handle_value_set(ad, PROP_FLASH, &value);
3393         __update_menubar_icon_by_index(ad, CAM_MENU_FLASH);
3394         if (ad->setting_select_item)
3395                 elm_genlist_item_update(ad->setting_select_item);
3396
3397         setting_ctxpopup_destroy(ad);
3398         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3399 }
3400
3401 static void toolbar_move_with_scale(Evas_Object *eo, double x, double y)
3402 {
3403         DEBUG_TRACE("x = %f, y = %f" , x, y);
3404         DEBUG_TRACE("elm_config_scale_get() = %f" , elm_config_scale_get());
3405         evas_object_move(eo, x * elm_config_scale_get(), y * elm_config_scale_get());
3406 }
3407
3408 /*note: @mouse_point is the coordinate of mouse click, output is scaled*/
3409 static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction,
3410                                                                                 int mouse_point,
3411                                                                                 int *x,
3412                                                                                 int *y)
3413 {
3414         int ver_x, ver_y, h_x, h_y;
3415         ver_x = ver_y = h_x = h_y = 0;
3416         switch (target_direction) {
3417         case CAM_TARGET_DIRECTION_LANDSCAPE:
3418                 *x = (int)(SETTING_HOR_CTX_POPUP_X * elm_config_scale_get());
3419                 *y = mouse_point;
3420                 break;
3421         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3422                 *x = (int)((1280 - SETTING_HOR_CTX_POPUP_X) * elm_config_scale_get());
3423                 *y = mouse_point;
3424                 break;
3425         case CAM_TARGET_DIRECTION_PORTRAIT:
3426                 *x = (int)(SETTING_VER_CTX_POPUP_X * elm_config_scale_get());;
3427                 *y = mouse_point;
3428                 break;
3429         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3430                 *x = (int)((720 - SETTING_VER_CTX_POPUP_X) * elm_config_scale_get());
3431                 *y = mouse_point;
3432                 break;
3433         default:
3434                 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3435
3436         }
3437 }
3438
3439 static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y)
3440 {
3441         switch (target_direction) {
3442         case CAM_TARGET_DIRECTION_LANDSCAPE:
3443         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3444                 *out_x = (int)((MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
3445                 *out_y = (int)(0.9*MAIN_H);
3446                 break;
3447         case CAM_TARGET_DIRECTION_PORTRAIT:
3448         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3449                 *out_x = (int)((VER_MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
3450                 *out_y = (int)(0.8*VER_MAIN_H);
3451                 break;
3452         default:
3453                 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3454         }
3455 }
3456
3457 /*note: in this func, all coordinate is not scale*/
3458 static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y)
3459 {
3460         int menu_bar_no = menubar_no;
3461         int ver_x, ver_y, hor_x, hor_y;
3462         ver_x = ver_y = hor_x = hor_y = 0;
3463
3464         switch (menu_bar_no) {
3465         case CAM_MENU_BAR_LEFT_0:
3466                 ver_x = 83;
3467                 ver_y = 161;
3468                 hor_x = 161;
3469                 hor_y = 648;
3470                 break;
3471         case CAM_MENU_BAR_LEFT_1:
3472                 ver_x = 223;
3473                 ver_y = 161;
3474                 hor_x = 161;
3475                 hor_y = 508;
3476                 break;
3477         case CAM_MENU_BAR_LEFT_2:
3478                 ver_x = 364;
3479                 ver_y = 161;
3480                 hor_x = 161;
3481                 hor_y = 364;
3482                 break;
3483         case CAM_MENU_BAR_LEFT_3:
3484                 ver_x = 508;
3485                 ver_y = 161;
3486                 hor_x = 161;
3487                 hor_y = 223;
3488                 break;
3489         case CAM_MENU_BAR_LEFT_4:
3490                 ver_x = 648;
3491                 ver_y = 161;
3492                 hor_x = 161;
3493                 hor_y = 83;
3494                 break;
3495         default:
3496                 DEBUG_TRACE("input para,error!");
3497                 break;
3498         }
3499
3500         switch (target_direction) {
3501         case CAM_TARGET_DIRECTION_LANDSCAPE:
3502                 *x = hor_x;
3503                 *y = hor_y;
3504                 break;
3505         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3506                 *x = 1280 - hor_x;
3507                 *y = ver_x;
3508                 break;
3509         case CAM_TARGET_DIRECTION_PORTRAIT:
3510                 *x = ver_x;
3511                 *y = ver_y;
3512                 break;
3513         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3514                 *x = hor_y;
3515                 *y = 1280 - ver_y;
3516                 break;
3517         default:
3518                 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3519                 break;
3520         }
3521 }
3522
3523 static int __get_menubar_no_by_index(struct appdata *ad, int index)
3524 {
3525
3526         int i = 0;
3527         for (i  = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
3528                 if (index == ad->toolbar_menu_arrays[i].menu_type) {
3529                         return i;
3530                 }
3531         }
3532         return CAM_MENU_BAR_LEFT_INVALID;
3533 }
3534
3535 static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y)
3536 {
3537         if (!obj) return;
3538         switch (target_direction) {
3539         case CAM_TARGET_DIRECTION_LANDSCAPE:
3540                 elm_ctxpopup_direction_priority_set(obj,
3541                                                         ELM_CTXPOPUP_DIRECTION_RIGHT,
3542                                                         ELM_CTXPOPUP_DIRECTION_UP,
3543                                                         ELM_CTXPOPUP_DIRECTION_LEFT,
3544                                                         ELM_CTXPOPUP_DIRECTION_DOWN);
3545
3546                 break;
3547         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3548                 elm_ctxpopup_direction_priority_set(obj,
3549                                                         ELM_CTXPOPUP_DIRECTION_LEFT,
3550                                                         ELM_CTXPOPUP_DIRECTION_DOWN,
3551                                                         ELM_CTXPOPUP_DIRECTION_RIGHT,
3552                                                         ELM_CTXPOPUP_DIRECTION_UP);
3553                 break;
3554         case CAM_TARGET_DIRECTION_PORTRAIT:
3555                 elm_ctxpopup_direction_priority_set(obj,
3556                                                         ELM_CTXPOPUP_DIRECTION_DOWN,
3557                                                         ELM_CTXPOPUP_DIRECTION_RIGHT,
3558                                                         ELM_CTXPOPUP_DIRECTION_UP,
3559                                                         ELM_CTXPOPUP_DIRECTION_LEFT);
3560                 break;
3561         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3562                 elm_ctxpopup_direction_priority_set(obj,
3563                                                         ELM_CTXPOPUP_DIRECTION_UP,
3564                                                         ELM_CTXPOPUP_DIRECTION_LEFT,
3565                                                         ELM_CTXPOPUP_DIRECTION_DOWN,
3566                                                         ELM_CTXPOPUP_DIRECTION_RIGHT);
3567                 break;
3568         default:
3569                 DEBUG_TRACE("wow, check it, reached un-able reached codes");
3570         }
3571
3572         toolbar_move_with_scale(obj, x, y);
3573 }
3574
3575 static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y)
3576 {
3577         if (!obj) return;
3578         switch (target_direction) {
3579         case CAM_TARGET_DIRECTION_LANDSCAPE:
3580         case CAM_TARGET_DIRECTION_PORTRAIT:
3581                 elm_ctxpopup_direction_priority_set(obj,
3582                                                         ELM_CTXPOPUP_DIRECTION_RIGHT,
3583                                                         ELM_CTXPOPUP_DIRECTION_UP,
3584                                                         ELM_CTXPOPUP_DIRECTION_LEFT,
3585                                                         ELM_CTXPOPUP_DIRECTION_DOWN);
3586                 break;
3587         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3588         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3589                 elm_ctxpopup_direction_priority_set(obj,
3590                                                         ELM_CTXPOPUP_DIRECTION_LEFT,
3591                                                         ELM_CTXPOPUP_DIRECTION_DOWN,
3592                                                         ELM_CTXPOPUP_DIRECTION_RIGHT,
3593                                                         ELM_CTXPOPUP_DIRECTION_UP);
3594                 break;
3595         default:
3596                 DEBUG_TRACE("wow, check it, reached un-able reached codes");
3597         }
3598
3599         evas_object_move(obj, x, y);
3600 }
3601
3602 static void __tip_popup_check_cb(void *data, Evas_Object *obj, void *event_info)
3603 {
3604         struct appdata *ad = (struct appdata *)cam_appdata_get();
3605         cam_retm_if(ad == NULL, "appdata is NULL");
3606         gboolean pop_tip = FALSE;
3607         pop_tip = elm_check_state_get(obj);
3608         DEBUG_TRACE("do_not_ask_again = %d", pop_tip);
3609         cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, !pop_tip);
3610         cam_config_save();
3611 }
3612
3613 static void __tip_popup_button_selected_cb(void *data, Evas_Object * obj, void *event_info)
3614 {
3615         DEBUG_TRACE();
3616         struct appdata *ad = (struct appdata *)cam_appdata_get();
3617         cam_retm_if(ad == NULL, "appdata is NULL");
3618
3619         cam_tip_popup_destroy(ad);
3620 }
3621
3622 /*note: input x,y should be landscape mode coordinate*/
3623 static void __get_tip_popup_coord(int target_direction, int *out_x, int *out_y)
3624 {
3625         switch (target_direction) {
3626         case CAM_TARGET_DIRECTION_LANDSCAPE:
3627                 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
3628                 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
3629                 break;
3630         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3631                 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
3632                 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
3633                 break;
3634         case CAM_TARGET_DIRECTION_PORTRAIT:
3635                 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
3636                 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
3637                 break;
3638         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3639                 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
3640                 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
3641                 break;
3642         default:
3643                 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3644         }
3645 }
3646
3647 void cam_tip_popup_create(struct appdata *ad, const CamTipPopupType type)
3648 {
3649         cam_retm_if(ad == NULL, "appdata is NULL");
3650
3651         if (ad->toolbar_setting_popup) {
3652                 cam_toolbar_setting_popup_destroy(ad);
3653         }
3654
3655         if (ad->edit_shortcuts_popup_scroll) {
3656                 toolbar_destroy_shortcuts_popup(ad);
3657         }
3658
3659         if (ad->tip_popup) {
3660                 cam_tip_popup_destroy(ad);
3661         }
3662
3663         /*hide focus guide*/
3664         edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
3665
3666         elm_object_part_content_unset(ad->ug_base, "tip_popup_layout");
3667
3668         ad->tip_popup = cam_app_load_edj(ad->ug_base, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/help");
3669
3670         cam_retm_if(ad->tip_popup == NULL, "tip_popup is NULL");
3671         elm_object_part_content_set(ad->ug_base, "tip_popup_layout", ad->tip_popup);
3672
3673         Evas_Object *check = elm_check_add(ad->tip_popup);
3674         evas_object_smart_callback_add(check, "changed", __tip_popup_check_cb, (void*)ad);
3675         evas_object_show(check);
3676         elm_object_part_content_set(ad->tip_popup, "content.help.check.swallow", check);
3677
3678         gboolean show_popup_tip = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, POP_TIP_DEFAULT);
3679         if (show_popup_tip)
3680                 elm_check_state_set(check, EINA_FALSE);
3681         else
3682                 elm_check_state_set(check, EINA_TRUE);
3683
3684         Evas_Object *btn = elm_button_add(ad->tip_popup);
3685         elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_SK_OK"));
3686         evas_object_smart_callback_add(btn, "unpressed", __tip_popup_button_selected_cb, (void *)ad);
3687         evas_object_show(btn);
3688         elm_object_part_content_set(ad->tip_popup, "button.swallow", btn);
3689
3690         Evas_Object *image = elm_image_add(ad->tip_popup);
3691         elm_object_part_content_set(ad->tip_popup, "content.help.image", image);
3692
3693         if (ad->tip_popup) {
3694                 evas_object_show(ad->tip_popup);
3695                 evas_object_size_hint_min_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
3696                 evas_object_size_hint_max_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
3697                 evas_object_resize(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
3698
3699                 edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.check.txt", dgettext(PACKAGE, "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"));
3700                 edje_object_part_text_set(_EDJ(ad->tip_popup), "tips.txt", dgettext(PACKAGE, "IDS_CAM_HEADER_TIPS"));
3701
3702                 switch (type) {
3703                 case CAM_TIP_POPUP_BURSTSHOT_HELP:
3704                         ad->tip_popup_type = CAM_TIP_POPUP_BURSTSHOT_HELP;
3705                         edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
3706                                 dgettext(PACKAGE, "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"));
3707                         elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_BURSTSHOT_HELP_IMAGE);
3708                         break;
3709                 case CAM_TIP_POPUP_VOLUMEKEY_HELP:
3710                         ad->tip_popup_type = CAM_TIP_POPUP_VOLUMEKEY_HELP;
3711                         edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
3712                                 dgettext(PACKAGE, "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"));
3713                         elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_VOLUMEKEY_HELP_IMAGE);
3714                         break;
3715                 default:
3716                         DEBUG_TRACE("invalid tip-popup type");
3717                         break;
3718                 }
3719
3720                 evas_object_show(ad->tip_popup);
3721
3722                 int output_x, output_y;
3723                 output_x = output_y = 0;
3724                 __get_tip_popup_coord(ad->target_direction, &output_x, &output_y);
3725                 evas_object_move(ad->tip_popup, output_x, output_y);/*landscape*/
3726         }
3727 }
3728
3729 void cam_tip_popup_destroy(struct appdata *ad)
3730 {
3731         cam_retm_if(ad == NULL, "appdata is NULL");
3732
3733         DEL_EVAS_OBJECT(ad->tip_popup);
3734         ad->tip_popup_type = CAM_TIP_POPUP_NONE;
3735 }
3736
3737 void cam_tip_popup_rotate(struct appdata *ad)
3738 {
3739         cam_retm_if(ad == NULL, "appdata is NULL");
3740
3741         DEL_EVAS_OBJECT(ad->tip_popup);
3742         cam_tip_popup_create(ad, ad->tip_popup_type);
3743 }
3744
3745 static char *__sub_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
3746 {
3747         int index = (int)data;
3748
3749         struct appdata *ad  = (struct appdata *)cam_appdata_get();
3750         cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3751
3752         CAM_MENU_ITEM* menu_item  = NULL;
3753         menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
3754         return strdup(dgettext(PACKAGE, __get_text_name(*menu_item)));
3755 }
3756
3757 static Evas_Object *__sub_menu_gl_icon_get(void *data, Evas_Object *obj, const char *part)
3758 {
3759         struct appdata *ad  = (struct appdata *)cam_appdata_get();
3760         cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3761
3762         CamAppData *camapp = ad->camapp_handle;
3763         cam_retvm_if(camapp == NULL, NULL, "camapp_handle is NULL");
3764
3765         int index = (int)data;
3766         int value_index = 0;
3767
3768         if (strcmp(part, "elm.radio") == 0) {
3769                 Evas_Object* radio = elm_radio_add(obj);
3770
3771                 elm_object_style_set(radio, "beat_winset_test/camera");
3772                 elm_radio_state_value_set(radio, index);
3773                 elm_radio_group_add(radio, ad->sub_menu_group);
3774
3775                 switch (ad->sub_menu_type) {
3776                 case CAM_MENU_FLASH:
3777                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FLASH, camapp->flash);
3778                         if (index == value_index) {
3779                                 elm_radio_value_set(radio, value_index);
3780                         }
3781                         break;
3782                 case CAM_MENU_SHOOTING_MODE:
3783                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SHOOTING_MODE, camapp->shooting_mode);
3784                         if (index == value_index) {
3785                                 elm_radio_value_set(radio, value_index);
3786                         }
3787                         break;
3788                 case CAM_MENU_RECORDING_MODE:
3789                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_RECORDING_MODE, camapp->recording_mode);
3790                         if (index == value_index) {
3791                                 elm_radio_value_set(radio, value_index);
3792                         }
3793                         break;
3794                 case CAM_MENU_SCENE_MODE:
3795                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SCENE_MODE, camapp->scene_mode);
3796                         if (index == value_index) {
3797                                 elm_radio_value_set(radio, value_index);
3798                         }
3799                         break;
3800                 case CAM_MENU_FOCUS_MODE:
3801                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FOCUS_MODE, camapp->af_mode);
3802                         if (index == value_index) {
3803                                 elm_radio_value_set(radio, value_index);
3804                         }
3805                         break;
3806                 case CAM_MENU_TIMER:
3807                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_TIMER, camapp->timer);
3808                         if (index == value_index) {
3809                                 elm_radio_value_set(radio, value_index);
3810                         }
3811                         break;
3812                 case CAM_MENU_EFFECTS:
3813                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_EFFECTS, camapp->effect);
3814                         if (index == value_index) {
3815                                 elm_radio_value_set(radio, value_index);
3816                         }
3817                         break;
3818                 case CAM_MENU_PHOTO_RESOLUTION:
3819                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_PHOTO_RESOLUTION, camapp->photo_resolution);
3820                         if (index == value_index) {
3821                                 elm_radio_value_set(radio, value_index);
3822                         }
3823                         break;
3824                 case CAM_MENU_VIDEO_RESOLUTION:
3825                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VIDEO_RESOLUTION, camapp->video_resolution);
3826                         if (index == value_index) {
3827                                 elm_radio_value_set(radio, value_index);
3828                         }
3829                         break;
3830                 case CAM_MENU_WHITE_BALANCE:
3831                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_WHITE_BALANCE, camapp->white_balance);
3832                         if (index == value_index) {
3833                                 elm_radio_value_set(radio, value_index);
3834                         }
3835                         break;
3836                 case CAM_MENU_ISO:
3837                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_ISO, camapp->iso);
3838                         if (index == value_index) {
3839                                 elm_radio_value_set(radio, value_index);
3840                         }
3841                         break;
3842                 case CAM_MENU_METERING:
3843                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_METERING, camapp->auto_exposure);
3844                         if (index == value_index) {
3845                                 elm_radio_value_set(radio, value_index);
3846                         }
3847                         break;
3848                 case CAM_MENU_STORAGE:
3849                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_STORAGE, camapp->storage);
3850                         if (index == value_index) {
3851                                 elm_radio_value_set(radio, value_index);
3852                         }
3853                         break;
3854                 case CAM_MENU_VOLUME_KEY:
3855                         value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VOLUME_KEY, camapp->volume_key);
3856                         if (index == value_index) {
3857                                 elm_radio_value_set(radio, value_index);
3858                         }
3859                         break;
3860                 default:
3861                         break;
3862                 }
3863                 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
3864                 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
3865
3866                 return radio;
3867         } else if (strcmp(part, "elm.icon") == 0) {
3868                 Evas_Object *icon = NULL;
3869                 char icon_name[1024+1] = { '\0', };
3870                 CAM_MENU_ITEM* menu_item  = NULL;
3871
3872                 menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
3873                 strncpy(icon_name, __get_icon_image_name(*menu_item, BUTTON_STATE_NORMAL), sizeof(icon_name));
3874                 icon = elm_image_add(obj);
3875                 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
3876                 return icon;
3877         }
3878
3879         return NULL;
3880 }
3881
3882 void __cam_setting_sub_gl_style_set()
3883 {
3884
3885         sub_itc.item_style = "camera/1text.2icon";
3886         sub_itc.func.text_get = __sub_menu_gl_text_get;
3887         sub_itc.func.content_get = __sub_menu_gl_icon_get;
3888         sub_itc.func.state_get = NULL;
3889         sub_itc.func.del = NULL;
3890 }
3891
3892 static void* __get_sub_menu_genlist_cb(const CAM_MENU_ITEM item)
3893 {
3894         switch(item){
3895                 case CAM_MENU_FLASH:
3896                         return __flash_selected_cb;
3897                 case CAM_MENU_SHOOTING_MODE:
3898                         return __shot_mode_selected_cb;
3899                 case CAM_MENU_RECORDING_MODE:
3900                         return __record_mode_selected_cb;
3901                 case CAM_MENU_SCENE_MODE:
3902                         return __scene_mode_selected_cb;
3903                 case CAM_MENU_FOCUS_MODE:
3904                         return __focus_mode_selected_cb;
3905                 case CAM_MENU_TIMER:
3906                         return __timer_popup_cb;
3907                 case CAM_MENU_EFFECTS:
3908                         return __effects_selected_cb;
3909                 case CAM_MENU_PHOTO_RESOLUTION:
3910                         return __photo_resolution_popup_cb;
3911                 case CAM_MENU_VIDEO_RESOLUTION:
3912                         return __video_resolution_popup_cb;
3913                 case CAM_MENU_WHITE_BALANCE:
3914                         return __wb_popup_cb;
3915                 case CAM_MENU_ISO:
3916                         return __iso_popup_cb;
3917                 case CAM_MENU_METERING:
3918                         return __metering_popup_cb;
3919                 case CAM_MENU_STORAGE:
3920                         return __storage_popup_cb;
3921                 case CAM_MENU_VOLUME_KEY:
3922                         return __volume_key_popup_cb;
3923                 default:
3924                         return NULL;
3925                 }
3926 }
3927
3928 static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata)
3929 {
3930         struct appdata *ad = (struct appdata *)fdata;
3931         cam_retv_if(ad == NULL, EINA_FALSE);
3932
3933         CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
3934         DEBUG_TRACE("item = %d", *item);
3935
3936         elm_genlist_item_append(ad->sub_genlist, &sub_itc, (void*)(ad->sub_menu_index),
3937                                                                 NULL, ELM_GENLIST_ITEM_NONE, __get_sub_menu_genlist_cb(ad->sub_menu_type), (void *)*item);
3938
3939         ad->sub_menu_index++;
3940         return EINA_TRUE;
3941 }
3942
3943 static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting)
3944 {
3945         DEBUG_TRACE("START");
3946
3947         struct appdata *ad = data;
3948         cam_retm_if(ad == NULL, "appdata is NULL");
3949
3950         Evas_Object *layout = NULL;
3951         int menu_bar_no = -1;
3952         int x, y;
3953
3954         setting_ctxpopup_create(ad, from_setting);
3955         layout = elm_layout_add(ad->setting_ctxpopup);
3956         elm_layout_file_set(layout, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout");
3957
3958         /* set text */
3959         edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text", _setting_gl_text_get((void*)menu_item, NULL, NULL));
3960
3961         if (ad->sub_menu_composer) {
3962                 cam_compose_free(ad->sub_menu_composer);
3963                 ad->sub_menu_composer = NULL;
3964         }
3965
3966         if (ad->sub_menu_composer == NULL) {
3967                 ad->sub_menu_composer = calloc(1, sizeof(cam_menu_composer));
3968                 cam_compose_list_menu((void*)ad, menu_item, ad->sub_menu_composer);
3969         }
3970
3971         int size = eina_array_count(ad->sub_menu_composer->array);
3972         int sub_menu_height = __get_sub_menu_height(size);
3973         evas_object_size_hint_min_set(layout,
3974                                         SUB_MENU_POPUP_WIDTH * elm_config_scale_get(),
3975                                         sub_menu_height * elm_config_scale_get());
3976
3977         ad->sub_menu_type = menu_item;
3978         ad->sub_menu_index = 0;
3979         ad->sub_genlist = elm_genlist_add(layout);
3980         ad->sub_menu_group = elm_radio_add(ad->sub_genlist);
3981
3982         __cam_setting_sub_gl_style_set();
3983         eina_array_foreach(ad->sub_menu_composer->array, __sub_menu_genlist_each_cb, ad);
3984
3985         evas_object_show(ad->sub_genlist);
3986         elm_object_part_content_set(layout, "elm.swallow.box", ad->sub_genlist);
3987         elm_object_content_set(ad->setting_ctxpopup, layout);
3988
3989         if (from_setting) {
3990                 __cam_get_ctxpopup_coord_in_setting_toolbar(ad->target_direction, setting_gl_y, &x, &y);
3991                 __cam_toolbar_move_sub_menu(ad->setting_ctxpopup, ad->target_direction, x, y);
3992         } else {
3993                 menu_bar_no = __get_menubar_no_by_index(ad, menu_item);
3994                 __get_option_coord_by_menubar_no(menu_bar_no, ad->target_direction, &x, &y);
3995                 __cam_toolbar_move_ctxpopup(ad->setting_ctxpopup, ad->target_direction, x, y);
3996         }
3997
3998         evas_object_show(ad->setting_ctxpopup);
3999         __setting_popup_timeout_checker_start(ad);
4000 }
4001
4002 static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info)
4003 {
4004         struct appdata *ad = (struct appdata *)cam_appdata_get();
4005         cam_retm_if(ad == NULL, "appdata is NULL");
4006         gboolean from_setting = FALSE;
4007         if (event_info) { /*call by setting*/
4008                 from_setting = TRUE;
4009         } else { /*call by click icon*/
4010                 from_setting = FALSE;
4011         }
4012         if (event_info) {
4013                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4014                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4015         }
4016
4017         ad->displayed_setting_popup = FALSE;
4018         toolbar_create_shortcuts_popup(ad);
4019 }
4020
4021 static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info)
4022 {
4023         DEBUG_TRACE("START");
4024
4025         struct appdata *ad = data;
4026         cam_retm_if(ad == NULL, "appdata is NULL");
4027
4028         gboolean from_setting = FALSE;
4029
4030         if (event_info) { /*call by setting*/
4031                 from_setting = TRUE;
4032                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4033                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4034         } else { /*call by click icon*/
4035                 from_setting = FALSE;
4036                 ad->displayed_setting_popup = DISPLAY_VOLUME_KEY_POPUP;
4037         }
4038
4039         __create_setting_listmenu(ad, CAM_MENU_VOLUME_KEY, from_setting);
4040 }
4041
4042 static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info)
4043 {
4044         struct appdata *ad = (struct appdata *)(data);
4045         cam_retm_if(ad == NULL, "appdata is NULL");
4046         CamAppData *camapp = ad->camapp_handle;
4047         cam_retm_if(camapp == NULL, "camapp is NULL");
4048
4049         if (!ad->enable_mode_change) {
4050                 DEBUG_TRACE("Can not change mode");
4051                 return;
4052         }
4053
4054         ad->enable_mode_change = FALSE;
4055
4056         cam_toolbar_setting_popup_destroy(ad);
4057         setting_ctxpopup_destroy(ad);
4058         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4059
4060         if (camapp->self_portrait == TRUE)
4061                 camapp->self_portrait = FALSE;
4062         else
4063                 camapp->self_portrait = TRUE;
4064
4065         GValue value = {0, };
4066         CAM_GVALUE_SET_BOOLEAN(value, camapp->self_portrait);
4067         cam_handle_value_set(ad, PROP_SELF_PORTRAIT, &value);
4068
4069         cam_toolbar_update(ad);
4070 }
4071
4072 static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info)
4073 {
4074         DEBUG_TRACE("START");
4075
4076         struct appdata *ad = (struct appdata *)data;
4077         cam_retm_if(ad == NULL, "appdata is NULL");
4078
4079         gboolean from_setting = FALSE;
4080
4081         if (event_info) { /*call by setting*/
4082                 from_setting = TRUE;
4083                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4084                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4085         } else { /*call by click icon*/
4086                 from_setting = FALSE;
4087                 ad->displayed_setting_popup = DISPLAY_FLASH_POPUP;
4088         }
4089
4090         __create_setting_listmenu(ad, CAM_MENU_FLASH, from_setting);
4091 }
4092
4093 static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info)
4094 {
4095         DEBUG_TRACE("START");
4096
4097         struct appdata *ad = (struct appdata *)data;
4098         cam_retm_if(ad == NULL, "appdata is NULL");
4099
4100         gboolean from_setting = FALSE;
4101
4102         if (event_info) { /*call by setting*/
4103                 from_setting = TRUE;
4104                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4105                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4106         } else { /*call by click icon*/
4107                 from_setting = FALSE;
4108                 ad->displayed_setting_popup = DISPLAY_SHOOTING_MODE_POPUP;
4109         }
4110
4111         __create_setting_listmenu(ad, CAM_MENU_SHOOTING_MODE, from_setting);
4112 }
4113
4114 static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info)
4115 {
4116         DEBUG_TRACE("START");
4117
4118         struct appdata *ad = data;
4119         cam_retm_if(ad == NULL, "appdata is NULL");
4120
4121         gboolean from_setting = FALSE;
4122
4123         if (event_info) { /*call by setting*/
4124                 from_setting = TRUE;
4125                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4126                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4127         } else { /*call by click icon*/
4128                 from_setting = FALSE;
4129                 ad->displayed_setting_popup = DISPLAY_RECORDING_MODE_POPUP;
4130         }
4131
4132         __create_setting_listmenu(ad, CAM_MENU_RECORDING_MODE, from_setting);
4133 }
4134
4135 static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info)
4136 {
4137         DEBUG_TRACE("START");
4138
4139         struct appdata *ad = data;
4140         cam_retm_if(ad == NULL, "appdata is NULL");
4141
4142         gboolean from_setting = FALSE;
4143
4144         if (event_info) { /*call by setting*/
4145                 from_setting = TRUE;
4146                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4147                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4148         } else { /*call by click icon*/
4149                 from_setting = FALSE;
4150                 ad->displayed_setting_popup = DISPLAY_SCENE_MODE_POPUP;
4151         }
4152
4153         __create_setting_listmenu(ad, CAM_MENU_SCENE_MODE, from_setting);
4154 }
4155
4156 static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info)
4157 {
4158         struct appdata *ad = (struct appdata *)cam_appdata_get();
4159         cam_retm_if(ad == NULL, "appdata is NULL");
4160         cam_retm_if(ad->camapp_handle == NULL, "ad->camapp_handle is NULL");
4161
4162         load_ev_edje(ad);
4163
4164         cam_toolbar_setting_popup_destroy(ad);
4165 }
4166
4167 static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info)
4168 {
4169         struct appdata *ad = (struct appdata *)cam_appdata_get();
4170         cam_retm_if(ad == NULL, "appdata is NULL");
4171         CamAppData *camapp = NULL;
4172         camapp = ad->camapp_handle;
4173         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4174
4175         DEBUG_TRACE("camapp->burst_shot = %d", camapp->burst_shot);
4176
4177         if (obj != ad->burst_shot_mode_radio) {
4178                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4179
4180                 if (camapp->burst_shot == TRUE) {
4181                         camapp->burst_shot = FALSE;
4182                         elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
4183                 } else {
4184                         camapp->burst_shot = TRUE;
4185                         elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
4186                 }
4187         } else {
4188                 /* to reset check button */
4189                 if (camapp->burst_shot == TRUE)
4190                         elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
4191                 else
4192                         elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
4193                 return;
4194         }
4195
4196         GValue value = {0, };
4197         CAM_GVALUE_SET_BOOLEAN(value, camapp->burst_shot);
4198         cam_handle_value_set(ad, PROP_BURST_SHOT, &value);
4199
4200
4201         __update_menubar_icon_by_index(ad, CAM_MENU_BURST_SHOT_MODE);
4202         __setting_popup_timeout_checker_start(ad);
4203 }
4204
4205 static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info)
4206 {
4207         DEBUG_TRACE("START");
4208
4209         struct appdata *ad = data;
4210         cam_retm_if(ad == NULL, "appdata is NULL");
4211
4212         gboolean from_setting = FALSE;
4213
4214         if (event_info) { /*call by setting*/
4215                 from_setting = TRUE;
4216                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4217                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4218         } else { /*call by click icon*/
4219                 from_setting = FALSE;
4220                 ad->displayed_setting_popup = DISPLAY_FOCUS_MODE_POPUP;
4221         }
4222
4223         __create_setting_listmenu(ad, CAM_MENU_FOCUS_MODE, from_setting);
4224 }
4225
4226 static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
4227 {
4228         DEBUG_TRACE("START");
4229
4230         struct appdata *ad = data;
4231         cam_retm_if(ad == NULL, "appdata is NULL");
4232
4233         gboolean from_setting = FALSE;
4234
4235         if (event_info) { /*call by setting*/
4236                 from_setting = TRUE;
4237                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4238                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4239         } else { /*call by click icon*/
4240                 from_setting = FALSE;
4241                 ad->displayed_setting_popup = DISPLAY_TIMER_POPUP;
4242         }
4243
4244         __create_setting_listmenu(ad, CAM_MENU_TIMER, from_setting);
4245 }
4246
4247 static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info)
4248 {
4249         DEBUG_TRACE("START");
4250
4251         struct appdata *ad = data;
4252         cam_retm_if(ad == NULL, "appdata is NULL");
4253
4254         gboolean from_setting = FALSE;
4255
4256         if (event_info) { /*call by setting*/
4257                 from_setting = TRUE;
4258                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4259                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4260         } else { /*call by click icon*/
4261                 from_setting = FALSE;
4262                 ad->displayed_setting_popup = DISPLAY_EFFECTS_POPUP;
4263         }
4264
4265         __create_setting_listmenu(ad, CAM_MENU_EFFECTS, from_setting);
4266 }
4267
4268 static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
4269 {
4270         DEBUG_TRACE("START");
4271
4272         struct appdata *ad = data;
4273         cam_retm_if(ad == NULL, "appdata is NULL");
4274
4275         gboolean from_setting = FALSE;
4276
4277         if (event_info) { /*call by setting*/
4278                 from_setting = TRUE;
4279                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4280                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4281         } else { /*call by click icon*/
4282                 from_setting = FALSE;
4283                 ad->displayed_setting_popup = DISPLAY_WHITE_BALANCE_POPUP;
4284         }
4285
4286         __create_setting_listmenu(ad, CAM_MENU_WHITE_BALANCE, from_setting);
4287 }
4288
4289 static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
4290 {
4291         DEBUG_TRACE("START");
4292
4293         struct appdata *ad = data;
4294         cam_retm_if(ad == NULL, "appdata is NULL");
4295
4296         gboolean from_setting = FALSE;
4297
4298         if (event_info) { /*call by setting*/
4299                 from_setting = TRUE;
4300                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4301                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4302         } else { /*call by click icon*/
4303                 from_setting = FALSE;
4304                 ad->displayed_setting_popup = DISPLAY_ISO_POPUP;
4305         }
4306
4307         __create_setting_listmenu(ad, CAM_MENU_ISO, from_setting);
4308 }
4309
4310 static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
4311 {
4312         DEBUG_TRACE("START");
4313
4314         struct appdata *ad = data;
4315         cam_retm_if(ad == NULL, "appdata is NULL");
4316
4317         gboolean from_setting = FALSE;
4318
4319         if (event_info) { /*call by setting*/
4320                 from_setting = TRUE;
4321                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4322                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4323         } else { /*call by click icon*/
4324                 from_setting = FALSE;
4325                 ad->displayed_setting_popup = DISPLAY_METERING_POPUP;
4326         }
4327
4328         __create_setting_listmenu(ad, CAM_MENU_METERING, from_setting);
4329 }
4330
4331 static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info)
4332 {
4333         struct appdata *ad = (struct appdata *)cam_appdata_get();
4334         cam_retm_if(ad == NULL, "appdata is NULL");
4335         CamAppData *camapp = NULL;
4336         camapp = ad->camapp_handle;
4337         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4338
4339         DEBUG_TRACE("camapp->anti_shake = %d", camapp->anti_shake);
4340
4341         if (obj != ad->antishake_radio) {
4342                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4343
4344                 if (camapp->anti_shake == TRUE) {
4345                         camapp->anti_shake = FALSE;
4346                         elm_check_state_set(ad->antishake_radio, EINA_FALSE);
4347                 } else {
4348                         camapp->anti_shake = TRUE;
4349                         elm_check_state_set(ad->antishake_radio, EINA_TRUE);
4350                 }
4351         } else {
4352                 /* to reset check button */
4353                 if (camapp->anti_shake == TRUE)
4354                         elm_check_state_set(ad->antishake_radio, EINA_TRUE);
4355                 else
4356                         elm_check_state_set(ad->antishake_radio, EINA_FALSE);
4357                 return;
4358         }
4359
4360         GValue value = {0, };
4361         CAM_GVALUE_SET_BOOLEAN(value, camapp->anti_shake);
4362         cam_handle_value_set(ad, PROP_AHS, &value);
4363
4364         __update_menubar_icon_by_index(ad, CAM_MENU_ANTI_SHAKE);
4365         __setting_popup_timeout_checker_start(ad);
4366 }
4367
4368 static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info)
4369 {
4370         struct appdata *ad = (struct appdata *)cam_appdata_get();
4371         cam_retm_if(ad == NULL, "appdata is NULL");
4372         CamAppData *camapp = NULL;
4373         camapp = ad->camapp_handle;
4374         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4375
4376         DEBUG_TRACE("camapp->outdoor_visibility = %d", camapp->outdoor_visibility);
4377
4378         if (obj != ad->outdoor_visibility_radio) {
4379                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4380
4381                 if (camapp->outdoor_visibility == TRUE) {
4382                         camapp->outdoor_visibility = FALSE;
4383                         elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
4384                 } else {
4385                         camapp->outdoor_visibility = TRUE;
4386                         elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
4387                 }
4388         } else {
4389                 /* to reset check button */
4390                 if (camapp->outdoor_visibility == TRUE)
4391                         elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
4392                 else
4393                         elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
4394                 return;
4395         }
4396
4397         GValue value = {0, };
4398         CAM_GVALUE_SET_BOOLEAN(value, camapp->outdoor_visibility);
4399         cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &value);
4400
4401         __update_menubar_icon_by_index(ad, CAM_MENU_OUTDOOR_VISIBILITY);
4402         __setting_popup_timeout_checker_start(ad);
4403 }
4404
4405 static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info)
4406 {
4407         cam_ret_if(obj == NULL);
4408         struct appdata *ad = (struct appdata *)cam_appdata_get();
4409         cam_retm_if(ad == NULL, "appdata is NULL");
4410         CamAppData *camapp = NULL;
4411         camapp = ad->camapp_handle;
4412         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4413
4414         DEBUG_TRACE("camapp->auto_contrast = %d", camapp->auto_contrast);
4415
4416         if (obj != ad->autocontrast_radio) {
4417                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4418
4419                 if (camapp->auto_contrast == TRUE) {
4420                         camapp->auto_contrast = FALSE;
4421                         elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
4422                 } else {
4423                         camapp->auto_contrast = TRUE;
4424                         elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
4425                 }
4426         } else {
4427                 /* to reset check button */
4428                 if (camapp->auto_contrast == TRUE)
4429                         elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
4430                 else
4431                         elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
4432                 return;
4433         }
4434
4435         GValue value = {0, };
4436         CAM_GVALUE_SET_BOOLEAN(value, camapp->auto_contrast);
4437         cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &value);
4438
4439         __update_menubar_icon_by_index(ad, CAM_MENU_AUTO_CONTRAST);
4440         __setting_popup_timeout_checker_start(ad);
4441 }
4442
4443
4444 void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info)
4445 {
4446         cam_ret_if(obj == NULL);
4447         struct appdata *ad = (struct appdata *)cam_appdata_get();
4448         cam_retm_if(ad == NULL, "appdata is NULL");
4449         CamAppData *camapp = NULL;
4450         camapp = ad->camapp_handle;
4451         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4452
4453         DEBUG_TRACE("camapp->guideline = %d", camapp->guideline);
4454
4455         if (obj != ad->guideline_radio) {
4456                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4457
4458                 if (camapp->guideline == TRUE) {
4459                         camapp->guideline = FALSE;
4460                         elm_check_state_set(ad->guideline_radio, EINA_FALSE);
4461                 } else {
4462                         camapp->guideline = TRUE;
4463                         elm_check_state_set(ad->guideline_radio, EINA_TRUE);
4464                 }
4465         } else {
4466                 /* to reset check button */
4467                 if (camapp->guideline == TRUE)
4468                         elm_check_state_set(ad->guideline_radio, EINA_TRUE);
4469                 else
4470                         elm_check_state_set(ad->guideline_radio, EINA_FALSE);
4471                 return;
4472         }
4473
4474         GValue value = {0, };
4475         CAM_GVALUE_SET_BOOLEAN(value, camapp->guideline);
4476         cam_handle_value_set(ad, PROP_GUIDELINE, &value);
4477
4478         settings_guideline_refresh(ad);
4479
4480         __update_menubar_icon_by_index(ad, CAM_MENU_GUIDELINES);
4481         __setting_popup_timeout_checker_start(ad);
4482 }
4483
4484
4485 static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info)
4486 {
4487         cam_ret_if(obj == NULL);
4488         struct appdata *ad = (struct appdata *)cam_appdata_get();
4489         cam_retm_if(ad == NULL, "appdata is NULL");
4490         CamAppData *camapp = NULL;
4491         camapp = ad->camapp_handle;
4492         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4493
4494         DEBUG_TRACE("camapp->save_as_flip = %d", camapp->save_as_flip);
4495
4496         if (obj != ad->save_as_flip_radio) {
4497                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4498
4499                 if (camapp->save_as_flip == TRUE) {
4500                         camapp->save_as_flip = FALSE;
4501                         elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
4502                 } else {
4503                         camapp->save_as_flip = TRUE;
4504                         elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
4505                 }
4506         } else {
4507                 /* to reset check button */
4508                 if (camapp->save_as_flip == TRUE)
4509                         elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
4510                 else
4511                         elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
4512                 return;
4513         }
4514
4515         GValue value = {0, };
4516         CAM_GVALUE_SET_BOOLEAN(value, camapp->save_as_flip);
4517         cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &value);
4518
4519         __update_menubar_icon_by_index(ad, CAM_MENU_SAVE_AS_FLIP);
4520         __setting_popup_timeout_checker_start(ad);
4521 }
4522
4523
4524 static void __voice_cmd_cb(CamVoiceCmdState state, void* data)
4525 {
4526         switch(state) {
4527         case CAM_VOICE_CMD_READY:
4528                 // do capture
4529                 {
4530                         char *emission = "release_shutter_sig";
4531                         char *source = "temp";
4532                         cam_toolbar_shutter_button_cb(data, NULL,
4533                                     emission, source);
4534                 }
4535                 break;
4536         case CAM_VOICE_CMD_REJECT:
4537                 // do action - after discuss with UX
4538                 break;
4539         case CAM_VOICE_CMD_ERROR:
4540                 //do action  - after discuss with UX
4541                 break;
4542         default:
4543                 break;
4544         }
4545 }
4546
4547 static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info)
4548 {
4549         cam_ret_if(obj == NULL);
4550         struct appdata *ad = (struct appdata *)cam_appdata_get();
4551         cam_retm_if(ad == NULL, "appdata is NULL");
4552         CamAppData *camapp = NULL;
4553         camapp = ad->camapp_handle;
4554         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4555
4556         DEBUG_TRACE("camapp->capture_by_voice = %d", camapp->capture_by_voice);
4557
4558         if (obj != ad->capture_by_voice_radio) {
4559                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4560
4561                 if (camapp->capture_by_voice == TRUE) {
4562                         camapp->capture_by_voice = FALSE;
4563                         elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
4564                 } else {
4565                         camapp->capture_by_voice = TRUE;
4566                         elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
4567                 }
4568         } else {
4569                 /* to reset check button */
4570                 if (camapp->capture_by_voice == TRUE)
4571                         elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
4572                 else
4573                         elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
4574                 return;
4575         }
4576
4577         if (camapp->capture_by_voice) {
4578                 if ( !cam_voice_cmd_create((cam_voice_cmd_cb)__voice_cmd_cb,ad)) {
4579                         cam_voice_cmd_destroy();
4580                         camapp->capture_by_voice = FALSE;
4581                         elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
4582                 }
4583
4584         } else cam_voice_cmd_destroy();
4585
4586         __update_menubar_icon_by_index(ad, CAM_MENU_CAPTURE_VOICE);
4587         __setting_popup_timeout_checker_start(ad);
4588 }
4589
4590 static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info)
4591 {
4592         cam_ret_if(obj == NULL);
4593         struct appdata *ad = (struct appdata *)cam_appdata_get();
4594         cam_retm_if(ad == NULL, "appdata is NULL");
4595         CamAppData *camapp = NULL;
4596         camapp = ad->camapp_handle;
4597         cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4598
4599         DEBUG_TRACE("camapp->gps = %d", camapp->gps);
4600
4601         if (obj != ad->gps_radio) {
4602                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4603
4604                 if (camapp->gps == TRUE) {
4605                         camapp->gps = FALSE;
4606                         elm_check_state_set(ad->gps_radio, EINA_FALSE);
4607                 } else {
4608                         camapp->gps = TRUE;
4609                         elm_check_state_set(ad->gps_radio, EINA_TRUE);
4610                 }
4611         } else {
4612                 /* to reset check button */
4613                 if (camapp->gps == TRUE)
4614                         elm_check_state_set(ad->gps_radio, EINA_TRUE);
4615                 else
4616                         elm_check_state_set(ad->gps_radio, EINA_FALSE);
4617                 return;
4618         }
4619
4620         GValue value = {0, };
4621         CAM_GVALUE_SET_BOOLEAN(value, camapp->gps);
4622         cam_handle_value_set(ad, PROP_GPS, &value);
4623
4624         __update_menubar_icon_by_index(ad, CAM_MENU_GPS_TAG);
4625         __setting_popup_timeout_checker_start(ad);
4626
4627         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4628         cam_toolbar_setting_popup_destroy(ad);
4629 }
4630
4631 static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info)
4632 {
4633         DEBUG_TRACE("START");
4634
4635         struct appdata *ad = data;
4636         cam_retm_if(ad == NULL, "appdata is NULL");
4637
4638         gboolean from_setting = FALSE;
4639
4640         if (event_info) { /*call by setting*/
4641                 from_setting = TRUE;
4642                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4643                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4644         } else { /*call by click icon*/
4645                 from_setting = FALSE;
4646                 ad->displayed_setting_popup = DISPLAY_STORAGE_POPUP;
4647         }
4648
4649         __create_setting_listmenu(ad, CAM_MENU_STORAGE, from_setting);
4650 }
4651
4652 static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
4653 {
4654         DEBUG_TRACE("START");
4655
4656         struct appdata *ad = data;
4657         cam_retm_if(ad == NULL, "appdata is NULL");
4658
4659         gboolean from_setting = FALSE;
4660
4661         if (event_info) { /*call by setting*/
4662                 from_setting = TRUE;
4663                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4664                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4665         } else { /*call by click icon*/
4666                 from_setting = FALSE;
4667                 ad->displayed_setting_popup = DISPLAY_PHOTO_RESOLUTION_POPUP;
4668         }
4669
4670         __create_setting_listmenu(ad, CAM_MENU_PHOTO_RESOLUTION, from_setting);
4671 }
4672
4673 static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
4674 {
4675         DEBUG_TRACE("START");
4676
4677         struct appdata *ad = data;
4678         cam_retm_if(ad == NULL, "appdata is NULL");
4679
4680         gboolean from_setting = FALSE;
4681
4682         if (event_info) { /*call by setting*/
4683                 from_setting = TRUE;
4684                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4685                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4686         } else { /*call by click icon*/
4687                 from_setting = FALSE;
4688                 ad->displayed_setting_popup = DISPLAY_VIDEO_RESOLUTION_POPUP;
4689         }
4690
4691         __create_setting_listmenu(ad, CAM_MENU_VIDEO_RESOLUTION, from_setting);
4692 }
4693
4694 static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info)
4695 {
4696         cam_ret_if(data == NULL);
4697         struct appdata *ad = (struct appdata *)(data);
4698         cam_retm_if(ad == NULL, " appdata is NULL");
4699         gboolean from_setting = FALSE;
4700         if (event_info) { /*call by setting*/
4701                 from_setting = TRUE;
4702         } else { /*call by click icon*/
4703                 from_setting = FALSE;
4704                 ad->displayed_setting_popup = DISPLAY_RESET_POPUP;
4705         }
4706         if (event_info) {
4707                 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4708                 ad->setting_select_item = (Elm_Object_Item *)event_info;
4709         }
4710
4711         DEL_EVAS_OBJECT(ad->confirm_popup);
4712
4713         ad->confirm_popup = elm_popup_add(ad->ug_base);
4714         evas_object_size_hint_weight_set(ad->confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4715         elm_popup_timeout_set(ad->confirm_popup, 9.0);
4716
4717
4718         char popup_str[1024 + 1] = { '\0',};
4719         snprintf(popup_str, 1024, "%s%s%s", _("<font=SLP:style=Roman><color=#000000><align=center>"),
4720                 dgettext(PACKAGE, "IDS_CAM_POP_RESET_SETTINGS_Q"), _("</align></color></font>"));
4721
4722         elm_object_text_set(ad->confirm_popup, popup_str);
4723         Evas_Object *btn1 = elm_button_add(ad->confirm_popup);
4724         elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
4725         elm_object_part_content_set(ad->confirm_popup, "button1", btn1);
4726         evas_object_smart_callback_add(btn1, "clicked", __restore_defaults_popup_cb_ok_cb, (void*)ad);
4727         Evas_Object *btn2 = elm_button_add(ad->confirm_popup);
4728         elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
4729         elm_object_part_content_set(ad->confirm_popup, "button2", btn2);
4730         evas_object_smart_callback_add(btn2, "clicked", __restore_defaults_popup_cb_cancel_cb, (void*)ad);
4731
4732         evas_object_show(ad->confirm_popup);
4733
4734         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4735         cam_toolbar_setting_popup_destroy(ad);
4736 }
4737
4738 void settings_guideline_refresh(struct appdata *ad)
4739 {
4740         cam_retm_if(ad == NULL, "appdata is NULL");
4741         CamAppData *camapp = ad->camapp_handle;
4742         cam_retm_if(camapp == NULL,"camapp is NULL");
4743         DEBUG_TRACE("ad->camapp_handle->guideline = %d" ,ad->camapp_handle->guideline);
4744
4745         if( ad->camapp_handle->guideline == TRUE) {
4746                 cam_guideline_create(ad);
4747
4748                 if (ad->guideline_edje && ad->toolbar_setting_popup) {
4749                         evas_object_hide(ad->guideline_edje);
4750                 } else {
4751                         if (ad->toolbar_edje)
4752                                 evas_object_raise(ad->toolbar_edje);
4753                 }
4754         } else {
4755                 DEL_EVAS_OBJECT(ad->guideline_edje);
4756         }
4757 }
4758
4759 static Eina_Bool __setting_popup_timeout_checker_cb(void *data)
4760 {
4761         struct appdata *ad = (struct appdata *)data;
4762         CamAppData *camapp = NULL;
4763         cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
4764         camapp = ad->camapp_handle;
4765         if (camapp == NULL) {
4766                 if (ad->setting_toolbar_hide_timer)
4767                         ad->setting_toolbar_hide_timer = NULL;
4768                 return ECORE_CALLBACK_CANCEL;
4769
4770         }
4771         if (ad->setting_toolbar_hide_timer)
4772                         ad->setting_toolbar_hide_timer = NULL;
4773         gdouble diff_time = 0.0;
4774         diff_time = _get_current_time() - camapp->start_time;
4775         if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
4776             && (diff_time >= CAM_SETTING_POPUP_TIMEOUT)) {
4777                 DEBUG_TRACE("destroy setting pupup");
4778                 if (ad->setting_toolbar_hide_timer) {
4779                         if (ad->setting_ctxpopup) {
4780                                 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4781                                 cam_toolbar_setting_popup_destroy(ad);
4782                                 if (ad->shot_mode_guide_popup)
4783                                         toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
4784                         } else if (ad->toolbar_setting_popup) {
4785                                 cam_toolbar_setting_popup_destroy(ad);
4786                         }
4787
4788                         if (ad->edit_shortcuts_popup_scroll) {
4789                                 toolbar_destroy_shortcuts_popup(ad);
4790                         }
4791                 }
4792         }
4793         return ECORE_CALLBACK_CANCEL;
4794 }
4795
4796 static gboolean __setting_popup_timeout_checker_start(struct appdata *ad)
4797 {
4798         DEBUG_TRACE("START");
4799         CamAppData *camapp = NULL;
4800         cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4801         camapp = ad->camapp_handle;
4802         cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4803         if (ad->setting_toolbar_hide_timer) {
4804                 ecore_timer_del(ad->setting_toolbar_hide_timer);
4805                 ad->setting_toolbar_hide_timer = NULL;
4806         }
4807         ad->setting_toolbar_hide_timer =
4808             ecore_timer_add(CAM_SETTING_POPUP_TIMEOUT, __setting_popup_timeout_checker_cb, ad);
4809         camapp->start_time = _get_current_time();
4810         DEBUG_TRACE("END");
4811         return TRUE;
4812 }
4813
4814 int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item)
4815 {
4816         int menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
4817         Evas_Object *icon = NULL;
4818         __get_menubar_shortcuts_info(ad, menu_item, &menu_bar_no, &icon);
4819         return menu_bar_no;
4820 }
4821
4822 /*note: output menu index, input display popup value*/
4823 int cam_toolbar_displaypopup_map_menu_value(int display_popup)
4824 {
4825         switch (display_popup) {
4826         case DISPLAY_NONE_POPUP:
4827                 return CAM_MENU_EMPTY;
4828                 break;
4829         case DISPLAY_EDIT_SHOTCUTS_POPUP:
4830                 return CAM_MENU_SHORTCUTS;
4831                 break;
4832         case DISPLAY_BURST_SHOT_MODE_POPUP:
4833                 return CAM_MENU_BURST_SHOT_MODE;
4834                 break;
4835         case DISPLAY_VOLUME_KEY_POPUP:
4836                 return CAM_MENU_VOLUME_KEY;
4837                 break;
4838         case DISPLAY_SELF_PORTRAIT_POPUP:
4839                 return CAM_MENU_SELF_PORTRAIT;
4840                 break;
4841         case DISPLAY_SCENE_MODE_POPUP:
4842                 return CAM_MENU_SCENE_MODE;
4843                 break;
4844         case DISPLAY_FOCUS_MODE_POPUP:
4845                 return CAM_MENU_FOCUS_MODE;
4846                 break;
4847         case DISPLAY_EFFECTS_POPUP:
4848                 return CAM_MENU_EFFECTS;
4849                 break;
4850         case DISPLAY_ANTI_SHAKE_POPUP:
4851                 return CAM_MENU_ANTI_SHAKE;
4852                 break;
4853         case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
4854                 return CAM_MENU_OUTDOOR_VISIBILITY;
4855                 break;
4856         case DISPLAY_AUTO_CONTRAST_POPUP:
4857                 return CAM_MENU_AUTO_CONTRAST;
4858                 break;
4859         case DISPLAY_GUIDELINES_POPUP:
4860                 return CAM_MENU_GUIDELINES;
4861                 break;
4862         case DISPLAY_CAPTURE_VOICE_POPUP:
4863                 return CAM_MENU_CAPTURE_VOICE;
4864                 break;
4865         case DISPLAY_GPS_TAG_POPUP:
4866                 return CAM_MENU_GPS_TAG;
4867                 break;
4868         case DISPLAY_STORAGE_POPUP:
4869                 return CAM_MENU_STORAGE;
4870                 break;
4871         case DISPLAY_RESET_POPUP:
4872                 return CAM_MENU_RESET;
4873                 break;
4874         case DISPLAY_SHOOTING_MODE_POPUP:
4875                 return CAM_MENU_SHOOTING_MODE;
4876                 break;
4877         case DISPLAY_RECORDING_MODE_POPUP:
4878                 return CAM_MENU_RECORDING_MODE;
4879                 break;
4880         case DISPLAY_VIDEO_RESOLUTION_POPUP:
4881                 return CAM_MENU_VIDEO_RESOLUTION;
4882                 break;
4883         case DISPLAY_PHOTO_RESOLUTION_POPUP:
4884                 return CAM_MENU_PHOTO_RESOLUTION;
4885                 break;
4886         case DISPLAY_ISO_POPUP:
4887                 return CAM_MENU_ISO;
4888                 break;
4889         case DISPLAY_METERING_POPUP:
4890                 return CAM_MENU_METERING;
4891                 break;
4892         case DISPLAY_WHITE_BALANCE_POPUP:
4893                 return CAM_MENU_WHITE_BALANCE;
4894                 break;
4895         case DISPLAY_FLASH_POPUP:
4896                 return CAM_MENU_FLASH;
4897                  break;
4898         case DISPLAY_TIMER_POPUP:
4899                 return CAM_MENU_TIMER;
4900                 break;
4901         case DISPLAY_SAVE_AS_FLIP:
4902                 return CAM_MENU_SAVE_AS_FLIP;
4903         default:
4904                 return CAM_MENU_EMPTY;
4905                 break;
4906         }
4907 }
4908
4909 Eina_Bool cam_show_setting_menu_option_popup(void *data)
4910 {
4911         struct appdata *ad = (struct appdata *)data;
4912         cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4913
4914         switch (ad->displayed_setting_popup) {
4915         case DISPLAY_NONE_POPUP:
4916                 break;
4917         case DISPLAY_EDIT_SHOTCUTS_POPUP:
4918                  __setting_edit_shortcut_popup_cb(ad, NULL, NULL);
4919                 break;
4920         case DISPLAY_VOLUME_KEY_POPUP:
4921                  __setting_volume_key_popup_cb(ad, NULL, NULL);
4922                 break;
4923         case DISPLAY_SELF_PORTRAIT_POPUP:
4924                  __setting_self_portrait_popup_cb(ad, NULL, NULL);
4925                 break;
4926         case DISPLAY_SCENE_MODE_POPUP:
4927                  __setting_scenemode_popup_cb(ad, NULL, NULL);
4928                 break;
4929         case DISPLAY_FOCUS_MODE_POPUP:
4930                  __setting_focus_mode_cb(ad, NULL, NULL);
4931                 break;
4932         case DISPLAY_EFFECTS_POPUP:
4933                  __setting_effects_popup_cb(ad, NULL, NULL);
4934                 break;
4935         case DISPLAY_ANTI_SHAKE_POPUP:
4936                  __setting_anti_shake_popup_cb(ad, NULL, NULL);
4937                 break;
4938         case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
4939                  __setting_outdoor_visibility_popup_cb(ad, NULL, NULL);
4940                 break;
4941         case DISPLAY_AUTO_CONTRAST_POPUP:
4942                  __setting_autocontrast_popup_cb(ad, NULL, NULL);
4943                 break;
4944         case DISPLAY_GUIDELINES_POPUP:
4945                  __setting_guideline_popup_cb(ad, NULL, NULL);
4946                 break;
4947         case DISPLAY_CAPTURE_VOICE_POPUP:
4948                  __setting_capture_by_voice_popup_cb(ad, NULL, NULL);
4949                 break;
4950         case DISPLAY_GPS_TAG_POPUP:
4951                  __setting_gps_popup_cb(ad, NULL, NULL);
4952                 break;
4953         case DISPLAY_STORAGE_POPUP:
4954                  __setting_storage_popup_cb(ad, NULL, NULL);
4955                 break;
4956         case DISPLAY_RESET_POPUP:
4957                 __setting_restore_defaults_popup_cb(ad, NULL, NULL);
4958                 break;
4959         case DISPLAY_SHOOTING_MODE_POPUP:
4960                  __setting_shot_mode_popup_cb(ad, NULL, NULL);
4961                 break;
4962         case DISPLAY_RECORDING_MODE_POPUP:
4963                 __setting_record_mode_popup(ad, NULL, NULL);
4964                 break;
4965         case DISPLAY_VIDEO_RESOLUTION_POPUP:
4966                 __setting_video_resolution_popup_cb(ad, NULL, NULL);
4967                 break;
4968         case DISPLAY_PHOTO_RESOLUTION_POPUP:
4969                  __setting_photo_resolution_popup_cb(ad, NULL, NULL);
4970                 break;
4971         case DISPLAY_ISO_POPUP:
4972                  __setting_iso_popup_cb(ad, NULL, NULL);
4973                 break;
4974         case DISPLAY_METERING_POPUP:
4975                  __setting_metering_popup_cb(ad, NULL, NULL);
4976                 break;
4977         case DISPLAY_WHITE_BALANCE_POPUP:
4978                  __setting_wb_popup_cb(ad, NULL, NULL);
4979                 break;
4980         case DISPLAY_FLASH_POPUP:
4981                  __setting_flash_popup(ad, NULL, NULL);
4982                  break;
4983         case DISPLAY_TIMER_POPUP:
4984                 __setting_timer_popup_cb(ad,NULL,NULL);
4985                 break;
4986         case DISPLAY_SAVE_AS_FLIP:
4987                 __setting_save_as_flip_popup_cb(ad, NULL, NULL);
4988                 break;
4989         default:
4990                 break;
4991         }
4992
4993         return ECORE_CALLBACK_CANCEL;
4994 }
4995
4996 Eina_Bool cam_show_setting_menu(void *data)
4997 {
4998         struct appdata *ad = (struct appdata *)data;
4999         cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
5000
5001         if (ad->show_setting_popup_after_rotate == TRUE) {
5002                 cam_toolbar_setting_popup_create(ad);
5003         } else if (ad->show_edit_shortcuts_popup_after_rotate == TRUE) {
5004                 toolbar_create_shortcuts_popup(ad);
5005         }
5006
5007         if (ad->displayed_setting_popup != DISPLAY_NONE_POPUP) {
5008                 ecore_idler_add(cam_show_setting_menu_option_popup, ad);
5009         }
5010
5011         ad->is_rotating = FALSE;
5012
5013         return ECORE_CALLBACK_CANCEL;
5014 }
5015
5016 void toolbar_destroy_shortcuts_popup(struct appdata *ad)
5017 {
5018         cam_retm_if(ad == NULL, "appdata is null");
5019         cam_retm_if(ad->toolbar_edje == NULL, "appdata is null");
5020         elm_object_part_content_unset(ad->toolbar_edje, "shortcuts_popup");
5021
5022         DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_scroll);
5023         DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
5024         ad->edit_shortcuts_popup_scroll = NULL;
5025         ad->edit_shortcuts_popup_ctx = NULL;
5026         ad->edit_shortcuts_popup = NULL;
5027
5028         /*clear eina_list*/
5029         __cam_toolbar_edit_shortcuts_data_clean();
5030
5031         destroy_menubar_shortcuts_mouse_event(ad, 0, TRUE);
5032         /*exit edit mode*/
5033                 /*show edit mode*/
5034         /*TODO: here should be rotate icon*/
5035
5036         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5037                                         "toolbar_1_icon,normal", "prog");
5038         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5039                                         "toolbar_2_icon,normal", "prog");
5040         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5041                                         "toolbar_3_icon,normal", "prog");
5042         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5043                                         "toolbar_4_icon,normal", "prog");
5044
5045         __set_show_state_preview_obj(ad, TRUE);
5046
5047         int i = 0;
5048         for (i = CAM_MENU_EMPTY + 1; i < CAM_MENU_MAX_NUMS; i++) {
5049                 __update_menubar_icon_by_index(ad, i);
5050         }
5051 }
5052
5053 void cam_toolbar_setting_popup_destroy(struct appdata *ad)
5054 {
5055         cam_retm_if(ad == NULL, "appdata is null");
5056         DEBUG_TRACE("");
5057
5058         if (ad->setting_ctxpopup)
5059                 setting_ctxpopup_destroy(ad);
5060
5061         if (ad->genlist) {
5062                 elm_genlist_clear(ad->genlist);
5063                 evas_object_del(ad->genlist);
5064                 ad->genlist = NULL;
5065         }
5066
5067         DEL_EVAS_OBJECT(ad->toolbar_setting_popup);
5068         ad->toolbar_setting_popup_area = NULL;
5069         ad->setting_select_item = NULL; /*select item*/
5070
5071         /*elm_all_flush();*/
5072         cam_elm_cache_flush();
5073
5074         __set_show_state_preview_obj(ad, TRUE);
5075 }
5076
5077 void cam_toolbar_setting_popup_update(struct appdata *ad)
5078 {
5079         cam_retm_if(ad == NULL, "appdata is null");
5080
5081         if (!ad->toolbar_setting_popup)
5082                 return;
5083
5084         if (ad->setting_ctxpopup)
5085                 setting_ctxpopup_destroy(ad);
5086
5087         __update_setting_popup(ad);
5088 }
5089
5090 static Evas_Object *_setting_gl_icon_get(void *data, Evas_Object *obj, const char *part)
5091 {
5092         struct appdata *ad = (struct appdata *)cam_appdata_get();
5093         cam_retvm_if(ad == NULL, NULL, "appdata is null");
5094
5095         int index = (int)data;
5096
5097         CamAppData *camapp = ad->camapp_handle;
5098         cam_retv_if(camapp == NULL, NULL);
5099         Evas_Object *icon = NULL;
5100
5101         switch(index) {
5102         case CAM_MENU_SHORTCUTS:
5103                 icon = NULL;
5104                 break;
5105         case CAM_MENU_BURST_SHOT_MODE:
5106                 {
5107                         icon = elm_check_add(obj);
5108
5109                         if (ad->camapp_handle->burst_shot) {
5110                                 elm_check_state_set(icon, EINA_TRUE);
5111                         } else {
5112                                 elm_check_state_set(icon, EINA_FALSE);
5113                         }
5114
5115                         elm_object_style_set(icon, "genlist/on&off");
5116                         evas_object_smart_callback_add(icon, "changed", __setting_burst_shot_popup_cb, (void*)ad);
5117                         ad->burst_shot_mode_radio = icon;
5118                 }
5119                 break;
5120         case CAM_MENU_VOLUME_KEY:
5121                 {
5122                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5123                         icon = elm_image_add(obj);
5124                         strncpy(icon_name, __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), BUTTON_STATE_NORMAL), sizeof(icon_name));
5125                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5126                 }
5127                 break;
5128         case CAM_MENU_SELF_PORTRAIT:
5129                 icon = elm_check_add(obj);
5130
5131                 if (camapp->self_portrait == FALSE) {
5132                         elm_check_state_set(icon, EINA_FALSE);
5133                 } else {
5134                         elm_check_state_set(icon, EINA_TRUE);
5135                 }
5136
5137                 elm_object_style_set(icon, "genlist/on&off");
5138                 break;
5139         case CAM_MENU_FLASH:
5140                 {
5141                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5142                         icon = elm_image_add(obj);
5143                         strncpy(icon_name, __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), BUTTON_STATE_NORMAL), sizeof(icon_name));
5144                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5145                 }
5146                 break;
5147         case CAM_MENU_SHOOTING_MODE:
5148                 {
5149                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5150                         icon = elm_image_add(obj);
5151                         strncpy(icon_name, __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5152                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5153                 }
5154                 break;
5155         case CAM_MENU_RECORDING_MODE:
5156                 {
5157                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5158                         icon = elm_image_add(obj);
5159                         strncpy(icon_name, __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5160                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5161                 }
5162                 break;
5163         case CAM_MENU_SCENE_MODE:
5164                 {
5165                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5166                         icon = elm_image_add(obj);
5167                         strncpy(icon_name, __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5168                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5169                 }
5170                 break;
5171         case CAM_MENU_EXPLOSURE_VALUE:
5172                 {
5173                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5174                         icon = elm_image_add(obj);
5175                         strncpy(icon_name, __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, BUTTON_STATE_NORMAL), sizeof(icon_name));
5176                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5177                 }
5178                 break;
5179         case CAM_MENU_FOCUS_MODE:
5180                 {
5181                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5182                         icon = elm_image_add(obj);
5183                         strncpy(icon_name, __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5184                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5185                 }
5186                 break;
5187         case CAM_MENU_TIMER:
5188                 {
5189                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5190                         icon = elm_image_add(obj);
5191                         strncpy(icon_name, __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), BUTTON_STATE_NORMAL), sizeof(icon_name));
5192                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5193                 }
5194                 break;
5195         case CAM_MENU_EFFECTS:
5196                 {
5197                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5198                         icon = elm_image_add(obj);
5199                         strncpy(icon_name, __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), BUTTON_STATE_NORMAL), sizeof(icon_name));
5200                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5201                 }
5202                 break;
5203         case CAM_MENU_PHOTO_RESOLUTION:
5204                 {
5205                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5206                         icon = elm_image_add(obj);
5207                         strncpy(icon_name, __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
5208                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5209                 }
5210                 break;
5211         case CAM_MENU_VIDEO_RESOLUTION:
5212                 {
5213                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5214                         icon = elm_image_add(obj);
5215                         strncpy(icon_name, __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
5216                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5217                 }
5218                 break;
5219         case CAM_MENU_WHITE_BALANCE:
5220                 {
5221                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5222                         icon = elm_image_add(obj);
5223                         strncpy(icon_name, __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), BUTTON_STATE_NORMAL), sizeof(icon_name));
5224                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5225                 }
5226                 break;
5227         case CAM_MENU_ISO:
5228                 {
5229                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5230                         icon = elm_image_add(obj);
5231                         strncpy(icon_name, __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), BUTTON_STATE_NORMAL), sizeof(icon_name));
5232                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5233                 }
5234                 break;
5235         case CAM_MENU_METERING:
5236                 {
5237                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5238                         icon = elm_image_add(obj);
5239                         strncpy(icon_name, __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), BUTTON_STATE_NORMAL), sizeof(icon_name));
5240                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5241                 }
5242                 break;
5243         case CAM_MENU_ANTI_SHAKE:
5244                 icon = elm_check_add(obj);
5245
5246                 if (ad->camapp_handle->anti_shake) {
5247                         elm_check_state_set(icon, EINA_TRUE);
5248                 } else {
5249                         elm_check_state_set(icon, EINA_FALSE);
5250                 }
5251
5252                 elm_object_style_set(icon, "genlist/on&off");
5253                 evas_object_smart_callback_add(icon, "changed", __setting_anti_shake_popup_cb, (void*)ad);
5254                 ad->antishake_radio = icon;
5255                 break;
5256         case CAM_MENU_OUTDOOR_VISIBILITY:/*TODO:is finding solution*/
5257                 icon = elm_check_add(obj);
5258
5259                 if (ad->camapp_handle->outdoor_visibility) {
5260                         elm_check_state_set(icon, EINA_TRUE);
5261                 } else {
5262                         elm_check_state_set(icon, EINA_FALSE);
5263                 }
5264
5265                 elm_object_style_set(icon, "genlist/on&off");
5266                 evas_object_smart_callback_add(icon, "changed", __setting_outdoor_visibility_popup_cb, (void*)ad);
5267                 ad->outdoor_visibility_radio = icon;
5268                 break;
5269         case CAM_MENU_AUTO_CONTRAST:
5270                 icon = elm_check_add(obj);
5271
5272                 if (ad->camapp_handle->auto_contrast) {
5273                         elm_check_state_set(icon, EINA_TRUE);
5274                 }
5275                 else {
5276                         elm_check_state_set(icon, EINA_FALSE);
5277                 }
5278                 elm_object_style_set(icon, "genlist/on&off");
5279                 evas_object_smart_callback_add(icon, "changed", __setting_autocontrast_popup_cb, (void*)ad);
5280                 ad->autocontrast_radio = icon;
5281                 break;
5282
5283         case CAM_MENU_GUIDELINES:
5284                 icon = elm_check_add(obj);
5285
5286                 if (ad->camapp_handle->guideline) {
5287                         elm_check_state_set(icon, EINA_TRUE);
5288                 } else {
5289                         elm_check_state_set(icon, EINA_FALSE);
5290                 }
5291
5292                 elm_object_style_set(icon, "genlist/on&off");
5293                 evas_object_smart_callback_add(icon, "changed", __setting_guideline_popup_cb, (void*)ad);
5294                 ad->guideline_radio = icon;
5295                 break;
5296         case CAM_MENU_CAPTURE_VOICE:/*TODO:now no relase solution to support it*/
5297                 icon = elm_check_add(obj);
5298
5299                 if (ad->camapp_handle->capture_by_voice) {
5300                         elm_check_state_set(icon, EINA_TRUE);
5301                 } else {
5302                         elm_check_state_set(icon, EINA_FALSE);
5303                 }
5304
5305                 elm_object_style_set(icon, "genlist/on&off");
5306                 evas_object_smart_callback_add(icon, "changed", __setting_capture_by_voice_popup_cb, (void*)ad);
5307                 ad->capture_by_voice_radio = icon;
5308                 break;
5309         case CAM_MENU_GPS_TAG:
5310                 icon = elm_check_add(obj);
5311
5312                 if (camapp->gps) {
5313                         elm_check_state_set(icon, EINA_TRUE);
5314                 } else {
5315                         elm_check_state_set(icon, EINA_FALSE);
5316                 }
5317
5318                 elm_object_style_set(icon, "genlist/on&off");
5319                 evas_object_smart_callback_add(icon, "changed", __setting_gps_popup_cb, (void*)ad);
5320                 ad->gps_radio = icon;
5321                 break;
5322         case CAM_MENU_SAVE_AS_FLIP:
5323                 icon = elm_check_add(obj);
5324
5325                 if (ad->camapp_handle->save_as_flip) {
5326                         elm_check_state_set(icon, EINA_TRUE);
5327                 } else {
5328                         elm_check_state_set(icon, EINA_FALSE);
5329                 }
5330
5331                 elm_object_style_set(icon, "genlist/on&off");
5332                 evas_object_smart_callback_add(icon, "changed", __setting_save_as_flip_popup_cb, (void*)ad);
5333                 ad->save_as_flip_radio = icon;
5334                 break;
5335         case CAM_MENU_STORAGE:
5336                 {
5337                         char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5338                         icon = elm_image_add(obj);
5339                         strncpy(icon_name, __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), BUTTON_STATE_NORMAL), sizeof(icon_name));
5340                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5341                 }
5342                 break;
5343         case CAM_MENU_RESET:
5344                 break;
5345         case CAM_MENU_MAX_NUMS:
5346                 DEBUG_TRACE("your array out, please check!");
5347                 break;
5348         default:
5349                 DEBUG_TRACE("Error occur!");
5350         }
5351         if (icon) {
5352                 /*evas_object_resize(icon, 86 , 84);
5353                 evas_object_size_hint_min_set(icon, 86, 84);
5354                 evas_object_size_hint_max_set(icon, 86, 84);*/
5355                 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
5356                 evas_object_size_hint_align_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
5357         }
5358         return icon;
5359 }
5360
5361 static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part)
5362 {
5363         int index = (int)data;
5364
5365         switch(index) {
5366         case CAM_MENU_SHORTCUTS:
5367                 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EDIT_SHORTCUTS"));
5368                 break;
5369         case CAM_MENU_BURST_SHOT_MODE:
5370                 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB"));
5371                 break;
5372         case CAM_MENU_VOLUME_KEY:
5373                 return strdup(dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"));
5374                 break;
5375         case CAM_MENU_SELF_PORTRAIT:
5376                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT"));
5377                 break;
5378         case CAM_MENU_FLASH:
5379                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FLASH"));
5380                 break;
5381         case CAM_MENU_SHOOTING_MODE:
5382                 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE"));
5383                 break;
5384         case CAM_MENU_RECORDING_MODE:
5385                 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE"));
5386                 break;
5387         case CAM_MENU_SCENE_MODE:
5388                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE"));
5389                 break;
5390         case CAM_MENU_EXPLOSURE_VALUE:
5391                 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE"));
5392                 break;
5393         case CAM_MENU_FOCUS_MODE:
5394                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE"));
5395                 break;
5396         case CAM_MENU_TIMER:
5397                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_TIMER"));
5398                 break;
5399         case CAM_MENU_EFFECTS:
5400                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS"));
5401                 break;
5402         case CAM_MENU_PHOTO_RESOLUTION:
5403                 return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"));
5404                 break;
5405         case CAM_MENU_VIDEO_RESOLUTION:
5406                 return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"));
5407                 break;
5408         case CAM_MENU_WHITE_BALANCE:
5409                 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB"));
5410                 break;
5411         case CAM_MENU_ISO:
5412                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ISO"));
5413                 break;
5414         case CAM_MENU_METERING:
5415                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_METERING"));
5416                 break;
5417         case CAM_MENU_ANTI_SHAKE:
5418                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE"));
5419                 break;
5420         case CAM_MENU_OUTDOOR_VISIBILITY:
5421                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY"));
5422                 break;
5423         case CAM_MENU_AUTO_CONTRAST:
5424                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST"));
5425                 break;
5426         case CAM_MENU_GUIDELINES:
5427                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE"));
5428                 break;
5429         case CAM_MENU_CAPTURE_VOICE:
5430                 return strdup("Capture with voice");
5431                 break;
5432         case CAM_MENU_GPS_TAG:
5433                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG"));
5434                 break;
5435         case CAM_MENU_SAVE_AS_FLIP:
5436                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED"));
5437                 break;
5438         case CAM_MENU_STORAGE:
5439                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE"));
5440                 break;
5441         case CAM_MENU_RESET:
5442                 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET"));
5443                 break;
5444         case CAM_MENU_MAX_NUMS:
5445                 DEBUG_TRACE("your array out, please check!");
5446                 break;
5447         default:
5448                 DEBUG_TRACE("Error occur!");
5449         }
5450         return strdup("test");
5451 }
5452
5453 static void __setting_gl_mouse_down(void *data, Evas * evas, Evas_Object *obj,
5454                             void *event_info){
5455
5456         struct appdata *ad = (struct appdata *)data;
5457         if (!ad) return;
5458         if (!event_info) return;
5459         if (ad->setting_ctxpopup) {
5460                 /*setting_ctxpopup_destroy(ad);*/
5461                 evas_object_hide(ad->setting_ctxpopup);
5462         }
5463         Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
5464         setting_gl_x = mu->canvas.x;
5465         setting_gl_y = mu->canvas.y;
5466         setting_gl_x = mu->output.x;
5467         setting_gl_y = mu->output.y;
5468         DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
5469         DEBUG_TRACE("mu->output.x = %d, mu->output.y = %d", mu->output.x, mu->output.y);
5470
5471         __setting_popup_timeout_checker_start(ad);
5472         cam_app_timeout_checker_update();
5473 }
5474
5475 /*mouse move func for setting popup*/
5476 static void __setting_gl_mouse_move(void *data, Evas * evas, Evas_Object *obj,
5477                             void *event_info){
5478
5479         struct appdata *ad = (struct appdata *)data;
5480         if (!ad) return;
5481         if (!event_info) return;
5482         if (ad->setting_ctxpopup) {
5483                 /*setting_ctxpopup_destroy(ad);*/
5484                 evas_object_hide(ad->setting_ctxpopup);
5485         }
5486         Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
5487         setting_gl_x = mu->cur.canvas.x;
5488         setting_gl_y = mu->cur.canvas.y;
5489         setting_gl_x = mu->cur.output.x;
5490         setting_gl_y = mu->cur.output.y;
5491         DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
5492         DEBUG_TRACE("mu->cur->canvas.x = %d, mu->cur->canvas.y = %d", mu->cur.canvas.x, mu->cur.canvas.y);
5493
5494         __setting_popup_timeout_checker_start(ad);
5495         cam_app_timeout_checker_update();
5496 }
5497
5498 static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj,
5499                             void *event_info){
5500
5501         struct appdata *ad = (struct appdata *)data;
5502         if (!ad) return;
5503         cam_app_timeout_checker_update();
5504         __setting_popup_timeout_checker_start(ad);
5505         if (!event_info) return;
5506         Evas_Coord x, y, w, h;
5507
5508         Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
5509         shortcuts_canvas_prev_x = mu->canvas.x;
5510         shortcuts_canvas_prev_y = mu->canvas.y;
5511         DEBUG_TRACE("x = %d, y = %d", shortcuts_canvas_prev_x, shortcuts_canvas_prev_y);
5512
5513         cam_long_press_trigger(LONG_PRESS_ID_EDIT, mu->canvas.x, mu->canvas.y);
5514
5515         evas_object_geometry_get(obj, &x, &y, &w, &h);
5516         Eina_List *l = NULL;
5517         ShortCutData *shortcuts_ele = NULL;
5518
5519         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
5520                 if (shortcuts_ele == NULL)
5521                         continue;
5522                 evas_object_geometry_get(shortcuts_ele->icon, &x, &y, &w, &h);
5523                 shortcuts_ele->x = x;
5524                 shortcuts_ele->y = y;
5525                 shortcuts_ele->w = w;
5526                 shortcuts_ele->h = h;
5527                 DEBUG_TRACE("x,%d y,%d w,%d h,%d index %d",x, y, w, h, shortcuts_ele->part_index);
5528
5529                 if (obj == shortcuts_ele->icon) {
5530                         ad->shortcut_data = shortcuts_ele;
5531                 }
5532         }
5533         if (!ad->shortcut_data) { /*not find shortcut data, so it will come from menubar*/
5534                 int menubar_no = -1;
5535                 if (check_if_shortcuts_from_menubar(ad, obj, &menubar_no)) {
5536                         /*get shortcuts data:*/
5537                         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
5538                                 if (shortcuts_ele == NULL)
5539                                         continue;
5540                                 if (shortcuts_ele->menu_bar_no == menubar_no) {
5541                                         ad->shortcut_data = shortcuts_ele;
5542                                 }
5543                         }
5544                 } else {
5545                         DEBUG_TRACE("error occur!");
5546                 }
5547         } else {
5548                 DEBUG_TRACE("find in the shortcuts panel");
5549         }
5550
5551         evas_object_raise(obj);
5552         evas_object_lower(evas_object_above_get(obj));
5553
5554 }
5555
5556 static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj,void *event_info)
5557 {
5558
5559         struct appdata *ad = (struct appdata *)data;
5560         if (!ad) return;
5561         if (!event_info) return;
5562         pthread_mutex_lock(&edit_shortcuts_move_mutex);
5563         ShortCutData *moving_ele = ad->shortcut_data;
5564         ShortCutData *swap_ele = ad->swap_data;
5565
5566         /*NOTE: reset opacity*/
5567         if (ad->swap_data) {
5568                 if (ad->swap_data->is_on_menu_bar) {
5569                         int r, g, b, a;
5570                         r = g = b = a = 0;
5571                         if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
5572                                 evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
5573                                 evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
5574                         }
5575                 } else {
5576                         int r, g, b, a;
5577                         r = g = b = a = 0;
5578                         if (ad->swap_data->icon) {
5579                                 evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
5580                                 evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
5581                         }
5582                 }
5583         }
5584
5585         /*TODO: SWAP:*/
5586         if (swap_ele && swap_ele->setting_type >= 0) {
5587                 if ((swap_ele->is_on_menu_bar & moving_ele->is_on_menu_bar) == TRUE) {/*note: both in menubar*/
5588                         __swap_menubar_shortcuts(ad, moving_ele, swap_ele);
5589                         cam_toolbar_menu_config_update((void *)ad);
5590                 } else if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
5591                         DEBUG_TRACE("do nothing in mouse up");
5592                 } else {/*note: one is in menubar, one is not*/
5593                         if (swap_ele->is_on_menu_bar == TRUE) {/*note: swap_ele is on menubar*/
5594                                 evas_object_event_callback_del(obj,
5595                                                 EVAS_CALLBACK_MOUSE_MOVE,
5596                                                 __setting_shortcuts_mouse_move);
5597                                 __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
5598                         } else {/*note: swap_ele is not on menubar*/
5599                                 moving_ele->is_on_menu_bar = FALSE;
5600                                 int tmp_menub_bar_no = moving_ele->menu_bar_no;
5601                                 moving_ele->menu_bar_no = -1;
5602                                 DEL_EVAS_OBJECT(obj);
5603                                 __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
5604                                 update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
5605                                 cam_toolbar_menu_config_update((void *)ad);
5606                                 destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
5607
5608                                 /*TODO: update part_index*/
5609                                 __edit_shortcuts_layout_shortcuts_insert(ad, swap_ele, moving_ele);
5610                         }
5611                 }
5612         }
5613         if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar)) {
5614         /*note: menu bar shortcuts move to the empty item in toolbar*/
5615                 if (moving_ele->is_on_menu_bar) {
5616                         __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
5617                 }
5618                 moving_ele->is_on_menu_bar = TRUE;
5619                 moving_ele->menu_bar_no = swap_ele->menu_bar_no;
5620                 moving_ele->part_index = -1;
5621                 ad->toolbar_menu_arrays[moving_ele->menu_bar_no].menu_type = moving_ele->setting_type;
5622                 cam_toolbar_menu_config_update((void *)ad);
5623                 update_menubar_shortcuts_mouse_event(ad, moving_ele->menu_bar_no, FALSE);
5624                 evas_object_hide(moving_ele->icon);
5625                 free(swap_ele);
5626                 swap_ele = NULL;
5627                 ad->swap_data = NULL;
5628         } else if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar == FALSE)) {
5629         /*note: case: menubar shortcuts move to the empty item in edit short panel: flash|empty(move to here)|empty*/
5630                 if (moving_ele->is_on_menu_bar) {
5631                         __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
5632                 }
5633                 moving_ele->is_on_menu_bar = FALSE;
5634                 moving_ele->menu_bar_no = -1;
5635                 moving_ele->part_index = swap_ele->part_index;
5636                 moving_ele->list_index = swap_ele->list_index;
5637                 cam_toolbar_menu_config_update((void *)ad);
5638                 evas_object_show(moving_ele->icon);
5639                 HIDE_EVAS_OBJECT(obj);
5640                 free(swap_ele);
5641                 swap_ele = NULL;
5642                 ad->swap_data = NULL;
5643                 __resort_edit_shortcuts_list_by_part_index();
5644         }
5645         ad->swap_data = NULL;
5646         cam_long_press_cancel(LONG_PRESS_ID_EDIT);
5647         pthread_mutex_unlock(&edit_shortcuts_move_mutex);
5648
5649 }
5650
5651 bool shortcuts_rect_check_intersect(Evas_Coord a_left, Evas_Coord a_top, Evas_Coord a_right, Evas_Coord a_bottom,
5652                                                 Evas_Coord b_left, Evas_Coord b_top, Evas_Coord b_right, Evas_Coord b_bottom)
5653 {
5654         if( (MIN(a_right, b_right) - MAX(a_left, b_left) > 60)
5655                 && (MIN(a_bottom, b_bottom) - MAX(a_top, b_top)> 30)) {
5656              return TRUE;
5657         }
5658         else {
5659              return FALSE;
5660         }
5661 }
5662
5663 /*note: parent_shortcuts is swap_ele, sub_shortcuts is cur_ele, if cur_ele is in swap_ele, not swap them*/
5664 gboolean __cam_toolbar_shortcuts_rect_contain_check(CAM_Edit_ShortCuts_Rect sub_shortcuts,
5665                                                                         CAM_Edit_ShortCuts_Rect parent_shortcuts,
5666                                                                         int correction_w,
5667                                                                         int correction_h)
5668 {
5669         int swap_rel1_x, swap_rel1_y, swap_w, swap_h;
5670         int cur_rel1_x, cur_rel1_y, cur_w, cur_h;
5671         cur_rel1_x = sub_shortcuts.x;
5672         cur_rel1_y = sub_shortcuts.y;
5673         cur_w = sub_shortcuts.w;
5674         cur_h = sub_shortcuts.h;
5675
5676         swap_rel1_x = parent_shortcuts.x;
5677         swap_rel1_y = parent_shortcuts.y;
5678         swap_w = parent_shortcuts.w;
5679         swap_h = parent_shortcuts.h;
5680
5681         return __shortcuts_rect_contain_check(swap_rel1_x, swap_rel1_y, swap_w, swap_h,
5682                                         cur_rel1_x, cur_rel1_y, cur_w, cur_h,
5683                                         correction_w, correction_h);
5684 }
5685
5686 static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
5687                                                         int swap_rel1_y,
5688                                                         int swap_w,
5689                                                         int swap_h,
5690                                                         int cur_rel1_x,
5691                                                         int cur_rel1_y,
5692                                                         int cur_w,
5693                                                         int cur_h,
5694                                                         int correction_w,
5695                                                         int correction_h)
5696 {
5697         int a_rel1_x = swap_rel1_x - correction_w;
5698         int a_rel1_y = swap_rel1_y - correction_h;
5699         int a_rel2_x;
5700         if (swap_w < cur_w)
5701                 a_rel2_x = swap_rel1_x + cur_w + correction_w;
5702         else
5703                 a_rel2_x = swap_rel1_x + swap_w + correction_w;
5704         int a_rel2_y;
5705         if (swap_h < cur_h)
5706                 a_rel2_y = swap_rel1_y + cur_h + correction_h;
5707         else
5708                 a_rel2_y = swap_rel1_y + swap_h + correction_h;
5709
5710         int b_rel1_x = cur_rel1_x;
5711         int b_rel1_y = cur_rel1_y;
5712         int b_rel2_x = cur_rel1_x + cur_w;
5713         int b_rel2_y = cur_rel1_y + cur_h;
5714
5715         if ((a_rel1_x < b_rel1_x)
5716                 &&(a_rel1_y < b_rel1_y)
5717                 &&(a_rel2_x > b_rel2_x)
5718                 &&(a_rel2_y > b_rel2_y)
5719                 ) {
5720                 return TRUE;
5721         } else {
5722
5723                 return FALSE;
5724         }
5725 }
5726
5727
5728 /*
5729 @item_1:pre
5730 @item_2:behind item_1
5731 */
5732 void shortcuts_swap(Eina_List **head, Eina_List * item_1, Eina_List * item_2)
5733 {
5734
5735         Eina_List *tmp_item_1_next = item_1->next;
5736         Eina_List *tmp_item_2_prev = item_2->prev;
5737         if(item_1->prev!=NULL)
5738                 item_1->prev->next = item_2;
5739         else
5740                 *head = item_2;
5741
5742         item_2->prev = item_1->prev;
5743
5744         item_1->next = item_2->next;
5745
5746         if(item_2->next!=NULL)
5747                 item_2->next->prev = item_1;
5748
5749         if (tmp_item_1_next == item_2) { /*item_1->item_2*/
5750                 item_2->next = item_1;
5751                 item_1->prev = item_2;
5752         } else {/*item_1->....->item_2*/
5753                 tmp_item_1_next->prev = item_2;
5754                 item_2->next = tmp_item_1_next;
5755                 tmp_item_2_prev->next = item_1;
5756                 item_1->prev = tmp_item_2_prev;
5757         }
5758 }
5759
5760 static void __swap_menubar_shortcuts_ctx(struct appdata *ad, ShortCutData *menu_ele, ShortCutData *cur_ele)
5761 {
5762         if (!cur_ele || !ad || !menu_ele)
5763                 return;
5764         cur_ele->is_on_menu_bar = TRUE;
5765         cur_ele->menu_bar_no = menu_ele->menu_bar_no;
5766         DEBUG_TRACE("cur_ele->menu_bar_no = %d", cur_ele->menu_bar_no);
5767         if (cur_ele->menu_bar_no > CAM_MENU_BAR_LEFT_4 || cur_ele->menu_bar_no < CAM_MENU_BAR_LEFT_0) {
5768                 cam_critical(LOG_UI, "menubar no error, check it ASAP");
5769                 return;
5770         }
5771
5772         /*do:ele_layout*/
5773         ad->toolbar_menu_arrays[cur_ele->menu_bar_no].menu_type = cur_ele->setting_type;
5774         update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
5775
5776         menu_ele->is_on_menu_bar = FALSE;
5777         menu_ele->menu_bar_no = -1;
5778         char buf[16] = { 0 };
5779         snprintf(buf, sizeof(buf),"row.%d", menu_ele->part_index);
5780         DEBUG_TRACE("PART:%s", buf);
5781         evas_object_show(menu_ele->icon);
5782         evas_object_hide(cur_ele->icon);
5783         snprintf(buf, sizeof(buf),"row.%d", cur_ele->part_index);
5784         DEBUG_TRACE("PART:%s", buf);
5785         cam_toolbar_menu_config_update((void *)ad);
5786
5787 }
5788
5789 static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect)
5790 {
5791         if (!rect) return;
5792         Evas_Coord x=0, y=0, w=0, h=0;
5793         if (shortcuts_icon)
5794                 evas_object_geometry_get(shortcuts_icon, &x, &y, &w, &h);
5795         rect->x = x;
5796         rect->y = y;
5797         rect->w = w;
5798         rect->h = h;
5799 }
5800
5801 static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no)
5802 {
5803         if (!ad) return;
5804         if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0)
5805                 return;
5806
5807         ad->toolbar_menu_arrays[menubar_no].menu_type = -1;
5808         Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
5809         edje_object_part_unswallow(_EDJ(ad->toolbar_edje), icon);
5810         DEL_EVAS_OBJECT(icon);
5811         icon = elm_image_add(ad->toolbar_edje);
5812         elm_image_file_set(icon, NULL, NULL);
5813         char buf[32+1] = {'\0',};
5814         snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
5815         edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
5816         ad->toolbar_menu_arrays[menubar_no].icon = icon;
5817 }
5818
5819 /*
5820   *     note: check moving shortcuts with possible empty shortcuts in menubar,
5821   *     if find, and moving shortcuts is in the empty shortcuts area, push this moving
5822   *     shortcuts in this empty shortcuts. and return true, else return false
5823   */
5824 gboolean check_with_menubar_empty_shortcuts(struct appdata *ad,  ShortCutData *moving_ele, Evas_Object *moving_obj)
5825 {
5826         if (!ad || !moving_ele ||!moving_obj)
5827                 return FALSE;
5828         CAM_Edit_ShortCuts_Rect sub_rect;
5829         ShortCutData *cur_ele = moving_ele;
5830         __get_shortcuts_rect(moving_obj, &sub_rect);
5831
5832         int i = 0;
5833         for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
5834                 int type = ad->toolbar_menu_arrays[i].menu_type;
5835                 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
5836                 if (type < 0) {
5837                         CAM_Edit_ShortCuts_Rect parent_rect;
5838                         __get_shortcuts_rect(icon, &parent_rect);
5839                         DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
5840                         gboolean sub_in_parent = FALSE;
5841                         sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
5842                                                                         parent_rect,
5843                                                                         sub_rect.w/4,
5844                                                                         sub_rect.w/4);
5845                         if (sub_in_parent) {
5846                                 if (cur_ele->is_on_menu_bar) {
5847                                         __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
5848                                 }
5849                                 cur_ele->is_on_menu_bar = TRUE;
5850                                 cur_ele->menu_bar_no = i;
5851                                 cur_ele->part_index = -1;
5852                                 ad->toolbar_menu_arrays[i].menu_type = cur_ele->setting_type;
5853                                 cam_toolbar_menu_config_update((void *)ad);
5854
5855                                 update_menubar_shortcuts_mouse_event(ad, i, FALSE);
5856
5857                                 evas_object_hide(cur_ele->icon);
5858                                 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
5859                                 return TRUE;
5860                         }
5861                 }
5862         }
5863
5864         return FALSE;
5865 }
5866
5867 gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no)
5868 {
5869         if (!obj || !ad || !menubar_no)
5870                 return FALSE;
5871         int i = 0;
5872         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
5873                 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
5874                 if (icon == obj) {
5875                         *menubar_no = i;
5876                         return TRUE;
5877                 }
5878         }
5879
5880         return FALSE;
5881 }
5882
5883 static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele)
5884 {
5885         Evas_Object *icon;
5886         Evas_Object_Event_Cb func;
5887         CAM_MENU_ITEM setting_type;
5888         char *icon_filepath;
5889         char *name;
5890         int menu_bar_no;
5891         gboolean is_on_menu_bar;
5892         Evas_Coord x, y, w, h;
5893         int part_index;
5894         int list_index;
5895         int row;
5896         int col;
5897
5898         icon = cur_ele->icon;
5899         func = cur_ele->func;
5900         setting_type = cur_ele->setting_type;
5901         icon_filepath = cur_ele->icon_filepath;
5902         name = cur_ele->name;
5903         menu_bar_no = cur_ele->menu_bar_no;
5904         is_on_menu_bar = cur_ele->is_on_menu_bar;
5905         x = cur_ele->x;
5906         y = cur_ele->y;
5907         w = cur_ele->w;
5908         h = cur_ele->h;
5909         part_index = cur_ele->part_index;
5910         list_index = cur_ele->list_index;
5911         row = cur_ele->row;
5912         col = cur_ele->col;
5913
5914         cur_ele->icon = swap_ele->icon;
5915         cur_ele->func = swap_ele->func;
5916         cur_ele->setting_type = swap_ele->setting_type;
5917         cur_ele->icon_filepath = swap_ele->icon_filepath;
5918         cur_ele->name = swap_ele->name;
5919         /*cur_ele->menu_bar_no = swap_ele->menu_bar_no;*/
5920         cur_ele->is_on_menu_bar = swap_ele->is_on_menu_bar;
5921         cur_ele->x = swap_ele->x;
5922         cur_ele->y = swap_ele->y;
5923         cur_ele->w = swap_ele->w;
5924         cur_ele->h = swap_ele->h;
5925         cur_ele->part_index = swap_ele->part_index;
5926         /*cur_ele->list_index = swap_ele->list_index;*/
5927         cur_ele->row = swap_ele->row;
5928         cur_ele->col = swap_ele->col;
5929
5930         swap_ele->icon = icon;
5931         swap_ele->func = func;
5932         swap_ele->setting_type = setting_type;
5933         swap_ele->icon_filepath = icon_filepath;
5934         swap_ele->name = name;
5935         /*swap_ele->menu_bar_no = menu_bar_no;*/
5936         swap_ele->is_on_menu_bar = is_on_menu_bar;
5937         swap_ele->x = x;
5938         swap_ele->y = y;
5939         swap_ele->w = w;
5940         swap_ele->h = h;
5941         swap_ele->part_index = part_index;
5942         /*swap_ele->list_index = swap_ele->list_index;*/
5943         swap_ele->row = row;
5944         swap_ele->col = col;
5945
5946 }
5947
5948 static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
5949                                                                                 int setting_type,
5950                                                                                 int menubar_no)
5951 {
5952         if (!ad) return;
5953         if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
5954
5955         ad->toolbar_menu_arrays[menubar_no].menu_type = setting_type;
5956         Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
5957         DEL_EVAS_OBJECT(icon);
5958         icon = elm_image_add(ad->toolbar_edje);
5959         char buf[32 + 1] = { '\0', };
5960         snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
5961         edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
5962          ad->toolbar_menu_arrays[menubar_no].icon = icon;
5963         __update_menubar_icon_by_index(ad, setting_type);
5964 }
5965
5966 static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele)
5967 {
5968         __shortcuts_data_swap(cur_ele, swap_ele);
5969         __update_menubar_shortcuts_by_menubar_no(ad, cur_ele->setting_type, cur_ele->menu_bar_no);
5970         __update_menubar_shortcuts_by_menubar_no(ad, swap_ele->setting_type, swap_ele->menu_bar_no);
5971         update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
5972         update_menubar_shortcuts_mouse_event(ad, swap_ele->menu_bar_no, FALSE);
5973 }
5974
5975 /*NOTE: moving shortcuts, is from menubar*/
5976 static gboolean __check_menubar_moving_shortcuts_swap(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
5977 {
5978         cam_retv_if(ad == NULL, FALSE);
5979         cam_retv_if(moving_ele == NULL, FALSE);
5980         cam_retv_if(moving_obj == NULL, FALSE);
5981         Eina_List *l;
5982         ShortCutData *shortcuts_ele;
5983         ShortCutData *cur_ele = moving_ele;
5984         CAM_Edit_ShortCuts_Rect sub_rect;
5985         __get_shortcuts_rect(moving_obj, &sub_rect);
5986
5987         ShortCutData *swap_ele = NULL;
5988         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
5989                 if (shortcuts_ele == NULL)
5990                         continue;
5991                 if (shortcuts_ele->icon == cur_ele->icon) {
5992                         DEBUG_TRACE("find self");
5993                         continue;
5994                 }
5995                 Evas_Object *parent_icon = NULL;
5996                 if (shortcuts_ele->is_on_menu_bar) {
5997                         parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
5998
5999                 } else {
6000                         parent_icon = shortcuts_ele->icon;
6001                 }
6002
6003                 CAM_Edit_ShortCuts_Rect parent_rect;
6004                 __get_shortcuts_rect(parent_icon, &parent_rect);
6005
6006                 gboolean sub_in_parent = FALSE;
6007                 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6008                                                                         parent_rect,
6009                                                                         sub_rect.w/4,
6010                                                                         sub_rect.w/4);
6011                 if (sub_in_parent) {
6012                         DEBUG_TRACE("find swap ele");
6013                         swap_ele = shortcuts_ele;
6014                         break;
6015                 }
6016         }
6017         if (!swap_ele) {
6018                 DEBUG_TRACE("not find, continue");
6019                 return FALSE;
6020                 /*evas_object_move(moving_obj, x , y);*/
6021         }
6022
6023         if (swap_ele->is_on_menu_bar) {/*TODO: support menubar shortcuts swap*/
6024                 __swap_menubar_shortcuts(ad, cur_ele, swap_ele);
6025                 cam_toolbar_menu_config_update((void *)ad);
6026                 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
6027                 return TRUE;
6028         } else {
6029                 cur_ele->is_on_menu_bar = FALSE;
6030                 int tmp_menub_bar_no = cur_ele->menu_bar_no;
6031                 cur_ele->menu_bar_no = -1;
6032                 DEL_EVAS_OBJECT(moving_obj);
6033
6034                 __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
6035                 update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
6036
6037                 cam_toolbar_menu_config_update((void *)ad);
6038
6039                 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
6040                 destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
6041                 return TRUE;
6042         }
6043
6044
6045 }
6046
6047 static void __edit_shortcuts_layout_shortcuts_move_prev(struct appdata *ad,
6048                                                                         ShortCutData *swap_ele,
6049                                                                         ShortCutData *cur_ele)
6050 {
6051         cam_ret_if(ad == NULL);
6052         cam_ret_if(swap_ele == NULL);
6053         cam_ret_if(cur_ele == NULL);
6054         Eina_List *l;
6055         ShortCutData *shortcuts_ele;
6056         Eina_List *cur_item = NULL;
6057         Eina_List *swap_item = NULL;
6058         cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
6059         swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6060
6061         /*
6062         *
6063         *       note: cur_item ->...->swap_item, should insert cur_item after swap_item, and
6064         *       move between cur_item ...swap_item items.
6065         *
6066         */
6067
6068
6069
6070         int temp_swap_ele_list_index = swap_ele->list_index;
6071         int temp_swap_ele_part_index = swap_ele->part_index;
6072         EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
6073                 if (shortcuts_ele == NULL)
6074                         continue;
6075                 if (shortcuts_ele == cur_ele) {
6076                         cur_ele->list_index = temp_swap_ele_list_index;
6077                         cur_ele->part_index = temp_swap_ele_part_index;
6078                         continue;
6079                 }
6080
6081                 if (!shortcuts_ele->is_on_menu_bar) {
6082                         /* TODO: for animator effect*/
6083                         char buf[32+1] = { '\0',};
6084                         snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
6085                         edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_PREV, buf);
6086                         edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
6087                         shortcuts_ele->part_index -= 1;
6088                 }
6089                 shortcuts_ele->list_index -= 1;
6090                 if (shortcuts_ele == swap_ele) {
6091                         break;
6092                 }
6093         }
6094         Eina_List *left = NULL;
6095         Eina_List *right = NULL;
6096         shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
6097
6098         left = eina_list_split_list(shortcuts_ele_list, swap_item, &right);
6099         left = eina_list_append(left, cur_ele);
6100         shortcuts_ele_list = eina_list_merge(left, right);
6101
6102
6103 }
6104
6105 /*note: insert insert_ele before cur_ele*/
6106 static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
6107                                                                         ShortCutData *cur_ele,
6108                                                                         ShortCutData *insert_ele)
6109 {
6110         cam_ret_if(ad == NULL);
6111         cam_ret_if(cur_ele == NULL);
6112         cam_ret_if(insert_ele == NULL);
6113         Eina_List *l = NULL;
6114         ShortCutData *shortcuts_ele = NULL;
6115         Eina_List *cur_item = NULL;
6116
6117         insert_ele->part_index = cur_ele->part_index;
6118         cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
6119         EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
6120                 if (shortcuts_ele == NULL)
6121                         continue;
6122                 if (!shortcuts_ele->is_on_menu_bar) {
6123                         char buf[32+1] = { '\0',};
6124                         snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
6125                         edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
6126                         edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
6127                         shortcuts_ele->part_index += 1;
6128                 }
6129         }
6130         __resort_edit_shortcuts_list_by_part_index();
6131
6132 }
6133
6134
6135 static void __edit_shortcuts_layout_shortcuts_move_next(struct appdata *ad,
6136                                                                         ShortCutData *swap_ele,
6137                                                                         ShortCutData *cur_ele)
6138 {
6139         cam_ret_if(ad == NULL);
6140         cam_ret_if(swap_ele == NULL);
6141         cam_ret_if(cur_ele == NULL);
6142         Eina_List *l;
6143         ShortCutData *shortcuts_ele;
6144         Eina_List *swap_item = NULL;
6145
6146         swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6147
6148         /*
6149         *
6150         *       note: swap_item ->...->cur_item, should insert cur_item before swap_item, and
6151         *       move between swap_item ...cur_item items.
6152         *
6153         */
6154
6155         int temp_swap_ele_list_index = swap_ele->list_index;
6156         int temp_swap_ele_part_index = swap_ele->part_index;
6157         EINA_LIST_FOREACH(swap_item, l, shortcuts_ele) {
6158                 if (shortcuts_ele == NULL)
6159                         continue;
6160                 if (shortcuts_ele == cur_ele) {
6161                         cur_ele->list_index = temp_swap_ele_list_index;
6162                         cur_ele->part_index = temp_swap_ele_part_index;
6163                         break;
6164                 }
6165                 if (!shortcuts_ele->is_on_menu_bar) {
6166                         /* TODO: for animator effect*/
6167                         char buf[32+1] = { '\0',};
6168                         snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
6169                         edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
6170                         edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
6171                         shortcuts_ele->part_index += 1;
6172                 }
6173                 shortcuts_ele->list_index += 1;
6174         }
6175         Eina_List *left = NULL;
6176         Eina_List *right = NULL;
6177         shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
6178         if (swap_item->prev) {
6179                 left = eina_list_split_list(shortcuts_ele_list, swap_item->prev, &right);
6180                 left = eina_list_append(left, cur_ele);
6181                 shortcuts_ele_list = eina_list_merge(left, right);
6182         } else {
6183                 shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, cur_ele);
6184         }
6185 }
6186
6187 static void __resort_edit_shortcuts(struct appdata *ad, Evas_Object *moving_obj)
6188 {
6189         cam_ret_if(ad == NULL);
6190         cam_ret_if(moving_obj == NULL);
6191         __resort_edit_shortcuts_list_by_part_index();
6192         Eina_List *l;
6193         ShortCutData *shortcuts_ele;
6194         char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
6195         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6196                 if (shortcuts_ele == NULL)
6197                         continue;
6198                 edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
6199         }
6200
6201
6202         int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
6203
6204         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6205                 if (shortcuts_ele == NULL)
6206                         continue;
6207                 snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
6208                 if (shortcuts_ele->part_index >=0
6209                         && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
6210
6211                         shortcuts_part_to_menu[shortcuts_ele->part_index] = shortcuts_ele->setting_type;
6212                 }
6213                 if (moving_obj == shortcuts_ele->icon) {
6214                         ad->shortcut_data = shortcuts_ele;
6215                         DEBUG_TRACE("PART:%s", buf);
6216                         continue;
6217                 }
6218                 DEBUG_TRACE("PART:%s", buf);
6219                 edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
6220         }
6221
6222         int index = 0;
6223         for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
6224                 cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
6225                                         edit_shortcuts_prop_array[index].prop_name,
6226                                         shortcuts_part_to_menu[index]);
6227         }
6228
6229 }
6230
6231 static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
6232                                                                         ShortCutData *swap_ele,
6233                                                                         ShortCutData *cur_ele)
6234 {
6235         cam_ret_if(ad == NULL);
6236         cam_ret_if(swap_ele == NULL);
6237         cam_ret_if(cur_ele == NULL);
6238         Eina_List *cur_item = NULL;
6239         Eina_List *prev_item = NULL;
6240         Eina_List *next_item = NULL;
6241         Evas_Coord prev_x=0, prev_y=0, prev_w=0, prev_h=0;
6242         Evas_Coord next_x=0, next_y=0, next_w=0, next_h=0;
6243
6244         cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
6245         if (!cur_item)
6246                 return;
6247         if (swap_ele->list_index > cur_ele->list_index) {
6248                 next_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6249                 if (NULL != next_item) {
6250                         evas_object_geometry_get(swap_ele->icon, &next_x, &next_y, &next_w, &next_h);
6251                         evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
6252                         cur_ele->x = next_x;
6253                         cur_ele->y = next_y;
6254                         cur_ele->w = next_w;
6255                         cur_ele->h = next_h;
6256                         int idx = swap_ele->part_index;
6257                         swap_ele->part_index = cur_ele->part_index;
6258                         cur_ele->part_index = idx;
6259
6260                         idx = swap_ele->list_index;
6261                         swap_ele->list_index = cur_ele->list_index;
6262                         cur_ele->list_index = idx;
6263                         if (swap_ele->is_on_menu_bar)
6264                                 __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
6265                         shortcuts_swap(&shortcuts_ele_list, cur_item, next_item);
6266                 }
6267         } else {
6268                 prev_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6269                 if(NULL != prev_item) {
6270                         evas_object_geometry_get(swap_ele->icon, &prev_x, &prev_y, &prev_w, &prev_h);
6271                         evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
6272                         cur_ele->x = prev_x;
6273                         cur_ele->y = prev_y;
6274                         cur_ele->w = prev_w;
6275                         cur_ele->h = prev_h;
6276                         int idx = swap_ele->part_index;
6277                         swap_ele->part_index = cur_ele->part_index;
6278                         cur_ele->part_index = idx;
6279
6280                         idx = swap_ele->list_index;
6281                         swap_ele->list_index = cur_ele->list_index;
6282                         cur_ele->list_index = idx;
6283                         if (swap_ele->is_on_menu_bar)
6284                                 __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
6285                         shortcuts_swap(&shortcuts_ele_list, prev_item, cur_item);
6286                 }
6287         }
6288 }
6289
6290 static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no)
6291 {
6292         if (!ad) return NULL;
6293         if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return NULL;
6294         return ad->toolbar_menu_arrays[menubar_no].icon;
6295 }
6296
6297 /*note: check with menu_no menubar shortcut*/
6298 static gboolean __check_with_menubar_shortcuts(struct appdata *ad, int menu_no, ShortCutData *moving_ele, Evas_Object *moving_obj)
6299 {
6300         if (!ad || !moving_ele ||!moving_obj)
6301                 return FALSE;
6302         CAM_Edit_ShortCuts_Rect sub_rect;
6303         ShortCutData *cur_ele = moving_ele;
6304         __get_shortcuts_rect(moving_obj, &sub_rect);
6305
6306         Evas_Object *toolbar_icon = __get_toolbar_shortcuts_evas_object(ad, menu_no);
6307
6308         /*check space menu*/
6309         CAM_Edit_ShortCuts_Rect parent_rect;
6310         __get_shortcuts_rect(toolbar_icon, &parent_rect);
6311         DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
6312         gboolean sub_in_parent = FALSE;
6313         sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6314                                                                 parent_rect,
6315                                                                 sub_rect.w/4,
6316                                                                 sub_rect.w/4);
6317         if (sub_in_parent) {
6318                 if (cur_ele->is_on_menu_bar) {
6319                         __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
6320                 }
6321                 cur_ele->is_on_menu_bar = TRUE;
6322                 cur_ele->menu_bar_no = menu_no;
6323                 cur_ele->part_index = -1;
6324                 ad->toolbar_menu_arrays[menu_no].menu_type = cur_ele->setting_type;
6325                 cam_toolbar_menu_config_update((void *)ad);
6326                 update_menubar_shortcuts_mouse_event(ad, menu_no, FALSE);
6327                 evas_object_hide(cur_ele->icon);
6328                 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
6329                 return TRUE;
6330
6331         }
6332         return FALSE;
6333
6334 }
6335
6336 /*note: get menubar_no now is covering*/
6337 static int __get_edit_shortcuts_swap_menubar_no(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
6338 {
6339         if (!ad || !moving_ele ||!moving_obj)
6340                 return FALSE;
6341         CAM_Edit_ShortCuts_Rect sub_rect;
6342
6343         __get_shortcuts_rect(moving_obj, &sub_rect);
6344
6345         int i = 0;
6346         for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6347                 int type = ad->toolbar_menu_arrays[i].menu_type;
6348                 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6349                 if (type < 0) {
6350                         CAM_Edit_ShortCuts_Rect parent_rect;
6351                         __get_shortcuts_rect(icon, &parent_rect);
6352                         DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
6353                         gboolean sub_in_parent = FALSE;
6354                         sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6355                                                                         parent_rect,
6356                                                                         sub_rect.w/4,
6357                                                                         sub_rect.w/4);
6358                         if (sub_in_parent) {
6359                                 return i;
6360                         }
6361                 }
6362         }
6363
6364         return CAM_MENU_BAR_LEFT_INVALID;
6365
6366 }
6367
6368 /*NOTE: TODO*/
6369 static gboolean __get_edit_shortcuts_swap_element(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj, ShortCutData **swap_ele)
6370 {
6371         if (swap_ele == NULL) return FALSE;
6372
6373         ShortCutData *cur_ele = moving_ele;
6374         CAM_Edit_ShortCuts_Rect sub_rect;
6375         __get_shortcuts_rect(moving_obj, &sub_rect);
6376
6377         Eina_List *l = NULL;
6378         ShortCutData *shortcuts_ele = NULL;
6379         int edit_shortcuts_item_count = -1;
6380         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6381                 if (shortcuts_ele == NULL)
6382                         continue;
6383                 if (shortcuts_ele->icon == cur_ele->icon) {
6384                         continue;
6385                 }
6386                 Evas_Object *parent_icon = NULL;
6387                 if (shortcuts_ele->is_on_menu_bar) {
6388                         parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
6389
6390                 } else {
6391                         parent_icon = shortcuts_ele->icon;
6392                         edit_shortcuts_item_count++;
6393                 }
6394
6395                 CAM_Edit_ShortCuts_Rect parent_rect;
6396                 __get_shortcuts_rect(parent_icon, &parent_rect);
6397
6398                 gboolean sub_in_parent = FALSE;
6399                 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6400                                                                         parent_rect,
6401                                                                         sub_rect.w/4,
6402                                                                         sub_rect.w/4);
6403                 if (sub_in_parent) {
6404                         DEBUG_TRACE("find swap ele");
6405                         *swap_ele = shortcuts_ele;
6406                         return TRUE;
6407                 }
6408         }
6409
6410         /*NOTE: case: moving shortcut is from menubar, and it is moving into the edit shortcuts the first empty panel*/
6411         char buf[16] = { 0 };
6412         snprintf(buf, sizeof(buf),"row.%d", (edit_shortcuts_item_count+1));
6413         Evas_Object *part_object = (Evas_Object *)
6414                             edje_object_part_object_get(_EDJ
6415                                                         (ad->edit_shortcuts_popup_ctx), buf);
6416         if (cur_ele->is_on_menu_bar) {
6417                 CAM_Edit_ShortCuts_Rect parent_rect;
6418                 __get_shortcuts_rect(part_object, &parent_rect);
6419
6420                 gboolean sub_in_parent = FALSE;
6421                 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6422                                                                         parent_rect,
6423                                                                         0,
6424                                                                         0);
6425                 if (sub_in_parent) {
6426                         ShortCutData *virtual_ele = NULL;
6427                         if (ad->swap_data) {
6428                                 if (ad->swap_data->is_virtual) {
6429                                         free(ad->swap_data);
6430                                         ad->swap_data = NULL;
6431                                 }
6432                         }
6433                         virtual_ele = calloc(1, sizeof(ShortCutData));
6434                         if (virtual_ele) {
6435                                 virtual_ele->is_virtual = TRUE;
6436                                 virtual_ele->setting_type = -1;
6437                                 virtual_ele->is_on_menu_bar = FALSE;
6438                                 virtual_ele->part_index= edit_shortcuts_item_count+1;
6439                         }
6440                         *swap_ele = virtual_ele;
6441                         return TRUE;
6442                 }
6443         }
6444         *swap_ele = NULL;
6445         return FALSE;
6446 }
6447
6448 /*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
6449 static void __resort_edit_shortcuts_list_by_part_index(void)
6450 {
6451         if (shortcuts_ele_list == NULL) return;
6452         shortcuts_ele_list = eina_list_sort(shortcuts_ele_list,
6453                                                 eina_list_count(shortcuts_ele_list),
6454                                                 __edit_shortcuts_list_sort_cb);
6455         Eina_List *l = NULL;
6456         ShortCutData *shortcuts_ele = NULL;
6457         int list_index = 0;
6458         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6459                 if (shortcuts_ele == NULL)
6460                         continue;
6461                 shortcuts_ele->list_index = list_index;
6462                 DEBUG_TRACE("part_index %d, list_index %d", shortcuts_ele->part_index, shortcuts_ele->list_index);
6463                 list_index++;
6464         }
6465
6466 }
6467
6468 /*NOTE: swap integer, we do not judge a, b wether null*/
6469 static void __swap_int_type_value(int *a, int *b)
6470 {
6471         int tmp = 0;
6472         tmp = *a;
6473         *a = *b;
6474         *b = tmp;
6475 }
6476
6477 static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info)
6478 {
6479         struct appdata *ad = (struct appdata *)data;
6480         if (!ad) return;
6481         if (!event_info) return;
6482         cam_app_timeout_checker_update();/*note: update check_timer*/
6483         __setting_popup_timeout_checker_start(ad);
6484
6485 /*note: check wether is long press*/
6486         Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
6487         cam_long_press_validate(LONG_PRESS_ID_EDIT, mu->cur.canvas.x, mu->cur.canvas.y);
6488         if (!cam_get_long_press_running_state(LONG_PRESS_ID_EDIT)) {
6489                 return;
6490         }
6491
6492 /*note: update coordinate*/
6493         Evas_Coord cur_x=0, cur_y=0, cur_w=0, cur_h=0;
6494         Evas_Coord x=0, y=0;
6495         Evas_Coord dx, dy;
6496         evas_object_geometry_get(obj, &cur_x, &cur_y, &cur_w, &cur_h);
6497         x = cur_x + (mu->cur.canvas.x - shortcuts_canvas_prev_x);
6498         y = cur_y + (mu->cur.canvas.y - shortcuts_canvas_prev_y);
6499         dx = mu->cur.canvas.x - shortcuts_canvas_prev_x;
6500         dy = mu->cur.canvas.y - shortcuts_canvas_prev_y;
6501         shortcuts_canvas_prev_x = mu->cur.canvas.x;
6502         shortcuts_canvas_prev_y = mu->cur.canvas.y;
6503
6504
6505 /*note: check swap elements*/
6506         pthread_mutex_lock(&edit_shortcuts_move_mutex);
6507         ShortCutData *moving_ele = ad->shortcut_data;
6508         ShortCutData *swap_ele = NULL;
6509         gboolean swap_condition = __get_edit_shortcuts_swap_element(ad, moving_ele, obj, &swap_ele);
6510         DEBUG_TRACE("%d", swap_condition);
6511
6512         if (swap_condition) {
6513                 ad->swap_data = swap_ele;
6514                 if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
6515                         if (ABS(moving_ele->part_index - swap_ele->part_index) == 1) {
6516                                 __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
6517                         } else if (moving_ele->list_index > swap_ele->list_index) {
6518                                 __edit_shortcuts_layout_shortcuts_move_next(ad, swap_ele, moving_ele);
6519                         } else {
6520                                 __edit_shortcuts_layout_shortcuts_move_prev(ad, swap_ele, moving_ele);
6521                         }
6522                         __resort_edit_shortcuts(ad, obj);
6523                         evas_object_move(obj, x , y);
6524                         goto EXIT_MOVE;
6525                 } else {
6526                         if (swap_ele->is_on_menu_bar) {
6527                                 int r, g, b, a;
6528                                 r = g = b = a = 0;
6529                                 if (ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon) {
6530                                         evas_object_color_get(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, &r, &g, &b, &a);
6531                                         evas_object_color_set(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, r, g, b, 30);
6532                                 }
6533                         } else {
6534                                 /*todo: */
6535                                 if (swap_ele->setting_type == -1) {/*note: swap_ele is empty part in edit shortcuts panel*/
6536                                         DEBUG_TRACE("swap_ele is empty part in edit shortcuts panel");
6537                                 }
6538
6539
6540                                 int r, g, b, a;
6541                                 r = g = b = a = 0;
6542                                 if (swap_ele->icon) {
6543                                         evas_object_color_get(swap_ele->icon, &r, &g, &b, &a);
6544                                         evas_object_color_set(swap_ele->icon, r, g, b, 30);
6545                                 }
6546                         }
6547                 }
6548                 evas_object_move(obj, x , y);
6549                 goto EXIT_MOVE;
6550         } else {
6551                 if (ad->swap_data) {
6552                         if (ad->swap_data->is_on_menu_bar) {
6553                                 int r, g, b, a;
6554                                 r = g = b = a = 0;
6555                                 if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
6556                                         evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
6557                                         evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
6558                                 }
6559                         } else {
6560                                 int r, g, b, a;
6561                                 r = g = b = a = 0;
6562                                 if (ad->swap_data->icon) {
6563                                         evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
6564                                         evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
6565                                 }
6566                         }
6567                 }
6568                 ad->swap_data = NULL;
6569         }
6570
6571         int menu_no = __get_edit_shortcuts_swap_menubar_no(ad, moving_ele, obj);
6572         /*TODO: for mouse up swap, we could to record a virtual shortcut element*/
6573         if (menu_no != CAM_MENU_BAR_LEFT_INVALID) {
6574                 ShortCutData *virtual_ele = NULL;
6575                 virtual_ele = calloc(1, sizeof(ShortCutData));
6576                 if (virtual_ele) {
6577                         virtual_ele->is_virtual = TRUE;
6578                         virtual_ele->setting_type = -1;
6579                         virtual_ele->menu_bar_no = menu_no;
6580                         virtual_ele->is_on_menu_bar = TRUE;
6581                 }
6582                 ad->swap_data = virtual_ele;
6583
6584                 /*TODO: set swap_ele style*/
6585         }
6586
6587         evas_object_move(obj, x , y);
6588 EXIT_MOVE:
6589         pthread_mutex_unlock(&edit_shortcuts_move_mutex);
6590
6591 }
6592
6593 void cam_setting_gl_style_set(void)
6594 {
6595         itc.item_style = "camera/1text.1icon";
6596         itc.func.text_get = _setting_gl_text_get;
6597         itc.func.content_get = _setting_gl_icon_get;
6598         itc.func.state_get = NULL;
6599         itc.func.del = NULL;
6600 }
6601
6602 static void __cam_toolbar_display_shortcuts_editmode(void *data)
6603 {
6604         struct appdata *ad = (struct appdata *)data;
6605         cam_ret_if(ad == NULL);
6606
6607         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6608                                         "toolbar_1_icon,edit", "prog");
6609         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6610                                         "toolbar_2_icon,edit", "prog");
6611         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6612                                         "toolbar_3_icon,edit", "prog");
6613         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6614                                         "toolbar_4_icon,edit", "prog");
6615 }
6616
6617 static void __cam_toolbar_exit_shortcuts_editmode(void *data)
6618 {
6619         struct appdata *ad = (struct appdata *)data;
6620         cam_ret_if(ad == NULL);
6621
6622         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6623                                         "toolbar_1_icon,normal", "prog");
6624         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6625                                         "toolbar_2_icon,normal", "prog");
6626         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6627                                         "toolbar_3_icon,normal", "prog");
6628         edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6629                                         "toolbar_4_icon,normal", "prog");
6630 }
6631
6632 /*init shortcuts*/
6633 static int __cam_long_press_editmode_cb(void *data, int x, int y)
6634 {
6635         struct appdata *ad = (struct appdata *)data;
6636         cam_retv_if(ad == NULL, -1);
6637         CamAppData *camapp = ad->camapp_handle;
6638         cam_retv_if(camapp == NULL, -1);
6639         DEBUG_TRACE();
6640
6641         int err = 0;
6642         err = pthread_mutex_init(&edit_shortcuts_move_mutex, NULL);
6643         if (err != 0) {
6644                 cam_critical(LOG_CAM, "Create px inst mutex failed");
6645                 return FALSE;
6646         }
6647
6648         if (ad->shortcut_data) {
6649                 edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), ad->shortcut_data->icon);
6650                 evas_object_event_callback_add(ad->shortcut_data->icon,
6651                                                 EVAS_CALLBACK_MOUSE_MOVE,
6652                                                 __setting_shortcuts_mouse_move,
6653                                                 (void *)ad);
6654         }
6655         evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, TRUE);
6656
6657         return 0;
6658 }
6659
6660 static int __cam_long_press_exit_editmode_cb(void *data, int x, int y)
6661 {
6662         struct appdata *ad = (struct appdata *)data;
6663         cam_retv_if(ad == NULL, -1);
6664         CamAppData *camapp = ad->camapp_handle;
6665         cam_retv_if(camapp == NULL, -1);
6666         DEBUG_TRACE();
6667
6668         /*re-sort sortcuts element list*/
6669         int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
6670
6671         ShortCutData *shortcuts_ele = NULL;
6672         Eina_List *l = NULL;
6673         int temp_index = 0;
6674         int temp_list_index = 0;
6675         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6676                 if (shortcuts_ele == NULL)
6677                         continue;
6678                 shortcuts_ele->list_index = temp_list_index;
6679                 temp_list_index++;
6680                 if (shortcuts_ele->is_on_menu_bar) {
6681                         shortcuts_ele->part_index = -1;
6682                         continue;
6683                 }
6684                 shortcuts_ele->part_index = temp_index;
6685                 shortcuts_part_to_menu[temp_index] = shortcuts_ele->setting_type;
6686                 temp_index++;
6687                 DEBUG_TRACE("shortcuts_ele->index %d" , shortcuts_ele->part_index);
6688         }
6689
6690         /*re-set menubar shortcuts*/
6691         int i = 0;
6692         for (i = CAM_MENU_SHORTCUTS; i < CAM_MENU_MAX_NUMS; i++) {
6693                 __update_menubar_icon_by_index(ad, i);
6694         }
6695
6696         /*menu bar shortcut update*/
6697         for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6698                 __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
6699         }
6700
6701         /* shortcut panel update*/
6702         char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
6703
6704         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6705                 if (shortcuts_ele == NULL)
6706                         continue;
6707                 edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
6708
6709         }
6710         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6711                 if (shortcuts_ele == NULL)
6712                         continue;
6713                 if (shortcuts_ele->part_index <  0 ||
6714                         shortcuts_ele->part_index >19) {
6715                         continue;
6716                 }
6717                 snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
6718                 DEBUG_TRACE("PART:%s", buf);
6719                 edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
6720         }
6721
6722         int index = 0;
6723         for (index = CAM_EDIT_SHORTCUTS_INDEX_1; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
6724                 cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
6725                                         edit_shortcuts_prop_array[index].prop_name,
6726                                         shortcuts_part_to_menu[index]);
6727         }
6728
6729         __cam_toolbar_display_shortcuts_editmode(ad);
6730         __toolbar_dim_setting_shortcuts(ad);
6731         if (ad->shortcut_data) {
6732                 if (ad->shortcut_data->icon) {
6733                         evas_object_event_callback_del(ad->shortcut_data->icon,
6734                                                         EVAS_CALLBACK_MOUSE_MOVE,
6735                                                         __setting_shortcuts_mouse_move);
6736                 }
6737         }
6738
6739         ad->shortcut_data = NULL;
6740         ad->swap_data = NULL;
6741         evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, FALSE);
6742         pthread_mutex_destroy(&edit_shortcuts_move_mutex);
6743         return 0;
6744 }
6745
6746 static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon)
6747 {
6748         if (!ad) {
6749                 *icon = NULL;
6750                 *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
6751                 return;
6752         }
6753
6754         int i = 0;
6755         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6756                 if (index == ad->toolbar_menu_arrays[i].menu_type) {
6757                         *menu_bar_no = i;
6758                         *icon = ad->toolbar_menu_arrays[i].icon;
6759                         return;
6760                 }
6761         }
6762
6763         *icon = NULL;
6764         *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
6765
6766         return;
6767 }
6768
6769 void create_menubar_shortcuts_mouse_event(struct appdata *ad)
6770 {
6771         if (!ad)
6772                 return;
6773         int i = 0;
6774         /*note: CAM_MENU_BAR_LEFT_0: do not need register*/
6775         for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6776                 int type = ad->toolbar_menu_arrays[i].menu_type;
6777                 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6778                 if (type >= 0) {
6779                         evas_object_event_callback_del(icon,
6780                                                         EVAS_CALLBACK_MOUSE_DOWN,
6781                                                         __setting_shortcuts_mouse_down);
6782                         evas_object_event_callback_add(icon,
6783                                                 EVAS_CALLBACK_MOUSE_DOWN,
6784                                                 __setting_shortcuts_mouse_down,
6785                                                 (void *)ad);
6786                         evas_object_event_callback_del(icon,
6787                                                         EVAS_CALLBACK_MOUSE_MOVE,
6788                                                         __setting_shortcuts_mouse_move);
6789                         evas_object_event_callback_add(icon,
6790                                                         EVAS_CALLBACK_MOUSE_MOVE,
6791                                                         __setting_shortcuts_mouse_move,
6792                                                         (void *)ad);
6793                         evas_object_event_callback_del(icon,
6794                                                         EVAS_CALLBACK_MOUSE_UP,
6795                                                         __setting_shortcuts_mouse_up);
6796                         evas_object_event_callback_add(icon,
6797                                                         EVAS_CALLBACK_MOUSE_UP,
6798                                                         __setting_shortcuts_mouse_up,
6799                                                         (void *)ad);
6800                 }
6801         }
6802
6803 }
6804
6805 void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
6806 {
6807         if (!ad)
6808                 return;
6809         int i = 0;
6810         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6811                 int type = ad->toolbar_menu_arrays[i].menu_type;
6812                 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6813                 if (i == menubar_no || all_menubar) {
6814                         if (type < 0) {
6815                                 evas_object_event_callback_del(icon,
6816                                                         EVAS_CALLBACK_MOUSE_DOWN,
6817                                                         __setting_shortcuts_mouse_down);
6818                                 evas_object_event_callback_del(icon,
6819                                                         EVAS_CALLBACK_MOUSE_MOVE,
6820                                                         __setting_shortcuts_mouse_move);
6821                                 evas_object_event_callback_del(icon,
6822                                                         EVAS_CALLBACK_MOUSE_UP,
6823                                                         __setting_shortcuts_mouse_up);
6824                         } else {
6825                                 evas_object_event_callback_del(icon,
6826                                                         EVAS_CALLBACK_MOUSE_DOWN,
6827                                                         __setting_shortcuts_mouse_down);
6828                                 evas_object_event_callback_add(icon,
6829                                                         EVAS_CALLBACK_MOUSE_DOWN,
6830                                                         __setting_shortcuts_mouse_down,
6831                                                         (void *)ad);
6832                                 evas_object_event_callback_del(icon,
6833                                                                 EVAS_CALLBACK_MOUSE_MOVE,
6834                                                                 __setting_shortcuts_mouse_move);
6835                                 evas_object_event_callback_add(icon,
6836                                                                 EVAS_CALLBACK_MOUSE_MOVE,
6837                                                                 __setting_shortcuts_mouse_move,
6838                                                                 (void *)ad);
6839                                 evas_object_event_callback_del(icon,
6840                                                                 EVAS_CALLBACK_MOUSE_UP,
6841                                                                 __setting_shortcuts_mouse_up);
6842                                 evas_object_event_callback_add(icon,
6843                                                                 EVAS_CALLBACK_MOUSE_UP,
6844                                                                 __setting_shortcuts_mouse_up,
6845                                                                 (void *)ad);
6846                         }
6847                 }
6848
6849         }
6850 }
6851
6852
6853 void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
6854 {
6855         if (!ad)
6856                 return;
6857         int i = 0;
6858         for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6859                 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6860                 if (i == menubar_no || all_menubar) {
6861                         evas_object_event_callback_del(icon,
6862                                                 EVAS_CALLBACK_MOUSE_DOWN,
6863                                                 __setting_shortcuts_mouse_down);
6864                         evas_object_event_callback_del(icon,
6865                                                 EVAS_CALLBACK_MOUSE_MOVE,
6866                                                 __setting_shortcuts_mouse_move);
6867                         evas_object_event_callback_del(icon,
6868                                                 EVAS_CALLBACK_MOUSE_UP,
6869                                                 __setting_shortcuts_mouse_up);
6870                 }
6871
6872         }
6873
6874 }
6875
6876 /*free all memory for shortcuts*/
6877 static void __cam_toolbar_edit_shortcuts_data_clean()
6878 {
6879         /*clear eina_list*/
6880         if (NULL != shortcuts_ele_list) {
6881                 eina_list_free(shortcuts_ele_list);
6882                 shortcuts_ele_list = NULL;
6883         }
6884 }
6885
6886 static void __toolbar_edit_shortcuts_mouse_down_cb (void *data,
6887                                                                         Evas *e,
6888                                                                         Evas_Object *obj,
6889                                                                         void *event_info)
6890 {
6891         DEBUG_TRACE();
6892         /*struct appdata *ad = (struct appdata *)data;
6893         cam_long_press_register(LONG_PRESS_ID_EDIT,
6894                                 LONG_PRESS_TIME,
6895                                 __cam_long_press_editmode_cb,
6896                                 __cam_long_press_exit_editmode_cb,
6897                                 (void*)ad);*/
6898 }
6899
6900
6901 static void __toolbar_edit_shortcuts_mouse_move_cb (void *data,
6902                                                                         Evas *e,
6903                                                                         Evas_Object *obj,
6904                                                                         void *event_info)
6905 {
6906         DEBUG_TRACE();
6907         /*struct appdata *ad = (struct appdata *)data;*/
6908         ShortCutData *shortcuts_ele = NULL;
6909         Eina_List *l = NULL;
6910 /**     TODO: find solution to distinguish the scroll move
6911         cam_long_press_unregister(LONG_PRESS_ID_EDIT);
6912         */
6913         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6914                 if (shortcuts_ele) {
6915                         if (shortcuts_ele->icon) {
6916                                 evas_object_freeze_events_set(shortcuts_ele->icon, TRUE);
6917                          }
6918                 }
6919         }
6920
6921 }
6922
6923 static void __toolbar_edit_shortcuts_mouse_up_cb (void *data,
6924                                                                         Evas *e,
6925                                                                         Evas_Object *obj,
6926                                                                         void *event_info)
6927 {
6928         DEBUG_TRACE();
6929
6930         struct appdata *ad = (struct appdata *)data;
6931         cam_ret_if(ad == NULL);
6932         ShortCutData *shortcuts_ele = NULL;
6933         Eina_List *l = NULL;
6934         EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6935                 if (shortcuts_ele) {
6936                         if (shortcuts_ele->icon) {
6937                                 evas_object_freeze_events_set(shortcuts_ele->icon, FALSE);
6938                          }
6939                 }
6940         }
6941 }
6942
6943 static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2)
6944 {
6945         ShortCutData *ele_0 = (ShortCutData *)data1;
6946         ShortCutData *ele_1 = (ShortCutData *)data2;
6947         int part_index_0 = ele_0->part_index;
6948         int part_index_1 = ele_1->part_index;
6949         DEBUG_TRACE("part_index_0 %d", part_index_0);
6950         DEBUG_TRACE("part_index_1 %d", part_index_1);
6951         if (part_index_0 > part_index_1)
6952                 return 1;
6953         else if (part_index_0 < part_index_1)
6954                 return -1;
6955         else
6956                 return 0;
6957 }
6958
6959 static void __edit_shortcuts_create_empty_menubar_shortcut(struct appdata *ad,
6960                                                                                 int menu_no,
6961                                                                                 ShortCutData **shortcuts_ele)
6962 {
6963         if (menu_no > CAM_MENU_BAR_LEFT_4 || menu_no < CAM_MENU_BAR_LEFT_0) return;
6964         ShortCutData *sd = (ShortCutData *)malloc(sizeof(ShortCutData));
6965         if (sd) {
6966                 memset(sd, '\0', sizeof(ShortCutData));
6967                 sd->icon = ad->toolbar_menu_arrays[menu_no].icon;
6968                 sd->list_index = -1;
6969                 sd->part_index = -1;
6970                 sd->setting_type = -1;
6971                 sd->menu_bar_no = menu_no;
6972                 sd->is_on_menu_bar = TRUE;
6973         }
6974         *shortcuts_ele = sd;
6975
6976 }
6977
6978 static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no)
6979 {
6980         if (!ad) return;
6981         if (menu_no > CAM_MENU_BAR_LEFT_4 || CAM_MENU_BAR_LEFT_1) return; /*note: CAM_MENU_BAR_LEFT_0, do not update*/
6982         ShortCutData *shortcuts_ele = NULL;
6983         /*note: add empty menubar shortcuts to list*/
6984         if (ad->toolbar_menu_arrays[menu_no].menu_type < 0) {
6985                 __edit_shortcuts_create_empty_menubar_shortcut(ad, CAM_MENU_BAR_LEFT_1, &shortcuts_ele);
6986                 shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, shortcuts_ele);
6987         }
6988 }
6989
6990 static void __toolbar_dim_setting_shortcuts(struct appdata *ad)
6991 {
6992         cam_ret_if(ad == NULL);
6993         Evas_Object *setting_icon = NULL;
6994         Evas_Object_Event_Cb func = NULL;
6995         int type = -1;
6996         setting_icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
6997         type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].menu_type;
6998         __toolbar_menu_type_update(setting_icon, type, ad, BUTTON_STATE_DIM, &func);
6999 }
7000
7001 int toolbar_create_shortcuts_popup(struct appdata *ad)
7002 {
7003         cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
7004         CamAppData *cam_handle = ad->camapp_handle;
7005         cam_retv_if(cam_handle == NULL, -1);
7006
7007         gboolean init_state = FALSE;
7008         init_state = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7009                                                 PROP_SHORTCUTS_INIT_PART_INDEX,
7010                                                 FALSE);
7011         if (!init_state) {
7012                 cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7013                                                 PROP_SHORTCUTS_INIT_PART_INDEX,
7014                                                 TRUE);
7015         }
7016
7017         if (ad->edit_shortcuts_popup_scroll) {
7018                 toolbar_destroy_shortcuts_popup(ad);
7019         }
7020         ad->show_edit_shortcuts_popup_after_rotate = FALSE;
7021
7022         __toolbar_dim_setting_shortcuts(ad);
7023
7024         int index = 0;
7025         Evas_Object *icon = NULL;
7026         Evas_Object *setting_popup = NULL;
7027         Evas_Object *ele_layout = NULL;
7028
7029         cam_long_press_register(LONG_PRESS_ID_EDIT,
7030                                 LONG_PRESS_TIME,
7031                                 __cam_long_press_editmode_cb,
7032                                 __cam_long_press_exit_editmode_cb,
7033                                 (void*)ad);
7034
7035         setting_shortcuts_popup_create(ad);
7036
7037         setting_popup = elm_layout_add(ad->edit_shortcuts_popup);
7038         elm_layout_file_set(setting_popup, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/layout");
7039
7040         /* set text */
7041         Evas_Object *scroller = elm_scroller_add(ad->edit_shortcuts_popup);
7042         elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
7043         elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
7044
7045         char *icon_name = NULL;
7046         char *text = NULL;
7047         char part_name[16] = { '\0', };
7048         ShortCutData *shortcuts_ele = NULL;
7049         Evas_Object_Event_Cb callback = NULL;
7050         int part_index = 0;
7051         int list_index = 0;
7052         gboolean is_on_toolbar = FALSE;
7053         int menu_bar_no = -1;
7054
7055         /*create edit callback in the menubar*/
7056         create_menubar_shortcuts_mouse_event(ad);
7057
7058         /*clear eina_list*/
7059         __cam_toolbar_edit_shortcuts_data_clean();
7060
7061         if( ad->setting_menu_composer == NULL){
7062                 cam_critical(LOG_UI,"ad->setting_menu_composer is null");
7063                 return -1;
7064         }
7065
7066         int shortcuts_menu_to_part[CAM_MENU_RESET + 1] = { -1,};
7067         if (init_state) {
7068                 for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
7069                         int item = cam_config_get_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7070                                                 edit_shortcuts_prop_array[index].prop_name,
7071                                                 -1);
7072                         shortcuts_menu_to_part[item] = index;
7073                         DEBUG_TRACE("item %d index %d", item, index);
7074                 }
7075         }
7076
7077         CAM_MENU_ITEM* menu_item  = NULL;
7078         int size = eina_array_count(ad->setting_menu_composer->array);
7079
7080         for (index = 0; index < size; index++) {
7081                 menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->setting_menu_composer->array, index);
7082
7083                 if (*menu_item == CAM_MENU_EFFECTS
7084                         || *menu_item == CAM_MENU_ANTI_SHAKE
7085                         || *menu_item == CAM_MENU_CAPTURE_VOICE
7086                         || *menu_item == CAM_MENU_GPS_TAG
7087                         || *menu_item == CAM_MENU_STORAGE
7088                         || *menu_item == CAM_MENU_RESET) {
7089                         DEBUG_TRACE("Do not add menu in shortcut");
7090                         continue;
7091                 }
7092
7093                 Evas_Object *menubar_obj = NULL;
7094                 __get_menubar_shortcuts_info(ad, *menu_item, &menu_bar_no, &menubar_obj);
7095                 is_on_toolbar = ((menu_bar_no == CAM_MENU_BAR_LEFT_INVALID) ? FALSE : TRUE);
7096                 __get_toolbar_shortcuts_file_func((void *)ad, *menu_item, BUTTON_STATE_NORMAL, &icon_name, &text, &callback);
7097
7098                 if (icon_name) {
7099                         /*create layout for element*/
7100                         ele_layout = elm_layout_add(setting_popup);
7101                         elm_layout_file_set(ele_layout, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/ele");
7102                         icon = elm_image_add(ele_layout);
7103                         elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
7104                 } else {
7105                         DEBUG_TRACE("index = %d, no icon file path or file path error, please check!", index);
7106
7107                         if (text)
7108                                 free(text);
7109                         text = NULL;
7110                         continue;
7111                 }
7112
7113                 if (text) {
7114                         edje_object_part_text_set(elm_layout_edje_get(ele_layout), "ele.txt", text);
7115                         DEBUG_TRACE("text %s", text);
7116                 }
7117
7118                 edje_object_part_swallow(_EDJ(ele_layout), "ele.icon", icon);
7119                 evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_DOWN, __setting_shortcuts_mouse_down, (void *)ad);
7120                 evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_UP, __setting_shortcuts_mouse_up, (void *)ad);
7121
7122                 evas_object_show(ele_layout);
7123
7124                 shortcuts_ele = (ShortCutData *)malloc(sizeof(ShortCutData));
7125                 shortcuts_ele->icon = ele_layout;
7126                 shortcuts_ele->list_index = list_index;
7127                 shortcuts_ele->setting_type = *menu_item;
7128                 shortcuts_ele->icon_filepath = icon_name;
7129                 shortcuts_ele->name = text;
7130                 shortcuts_ele->func = callback;
7131                 shortcuts_ele->menu_bar_no = menu_bar_no;
7132                 shortcuts_ele->is_on_menu_bar = is_on_toolbar;
7133
7134                 if (is_on_toolbar) {
7135                         shortcuts_ele->part_index = -1;
7136                         evas_object_hide(ele_layout);
7137                 } else {
7138                         if (!init_state) { /*note: if there is no init value in config file, init now*/
7139                                 shortcuts_ele->part_index = part_index;
7140                                 cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7141                                                 edit_shortcuts_prop_array[part_index].prop_name,
7142                                                 *menu_item);
7143                                 shortcuts_menu_to_part[*menu_item] = part_index;
7144                         } else { /*note: if there is init value in config file, read value from init*/
7145                                 shortcuts_ele->part_index = shortcuts_menu_to_part[*menu_item];
7146                         }
7147                 }
7148                 if (shortcuts_ele->part_index > CAM_EDIT_SHORTCUTS_INDEX_INVALID
7149                         && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
7150                         snprintf(part_name, sizeof(part_name),"row.%d",(shortcuts_ele->part_index));
7151                         edje_object_part_swallow(_EDJ(setting_popup), part_name, ele_layout);
7152                 }
7153
7154                 shortcuts_ele_list = eina_list_append(shortcuts_ele_list, shortcuts_ele);
7155                 if (shortcuts_ele_list == NULL) {
7156                         continue;
7157                 }
7158                 list_index++;
7159                 if (is_on_toolbar)
7160                         continue;
7161                 part_index++;
7162         }
7163
7164         /*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
7165         __resort_edit_shortcuts_list_by_part_index();
7166
7167         elm_object_content_set(scroller, setting_popup);
7168         /*elm_object_part_content_set(edit_shortcuts_layout, "swallow.items", setting_popup);*/
7169         elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup", scroller);
7170         elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup_description", ad->edit_shortcuts_popup_description);
7171
7172
7173         __cam_toolbar_display_shortcuts_editmode(ad);
7174 #if 0 /*TODO: TODO: find solution to distinguish the scroll move*/
7175         evas_object_event_callback_del(scroller,
7176                                         EVAS_CALLBACK_MOUSE_DOWN,
7177                                         __toolbar_edit_shortcuts_mouse_down_cb);
7178
7179         evas_object_event_callback_del(scroller,
7180                                         EVAS_CALLBACK_MOUSE_MOVE,
7181                                         __toolbar_edit_shortcuts_mouse_move_cb);
7182         evas_object_event_callback_del(scroller,
7183                                         EVAS_CALLBACK_MOUSE_UP,
7184                                         __toolbar_edit_shortcuts_mouse_up_cb);
7185         evas_object_event_callback_add(scroller,
7186                                         EVAS_CALLBACK_MOUSE_DOWN,
7187                                         __toolbar_edit_shortcuts_mouse_down_cb,
7188                                         (void *)ad);
7189         evas_object_event_callback_add(scroller,
7190                                         EVAS_CALLBACK_MOUSE_MOVE,
7191                                         __toolbar_edit_shortcuts_mouse_move_cb,
7192                                         (void *)ad);
7193         evas_object_event_callback_add(scroller,
7194                                         EVAS_CALLBACK_MOUSE_UP,
7195                                         __toolbar_edit_shortcuts_mouse_up_cb,
7196                                         (void *)ad);
7197
7198 #endif
7199
7200         ad->edit_shortcuts_popup_ctx = setting_popup;
7201         ad->edit_shortcuts_popup_scroll = scroller;
7202
7203         evas_object_show(ad->toolbar_edje);
7204         __setting_popup_timeout_checker_start(ad);
7205         /*note: set destroy operation after display to avoid bs*/
7206         if (ad->toolbar_setting_popup) {
7207                 cam_toolbar_setting_popup_destroy(ad);
7208         }
7209
7210         __set_show_state_preview_obj(ad, FALSE);
7211
7212         return EXIT_SUCCESS;
7213 }
7214
7215 void* __get_genlist_cb(const CAM_MENU_ITEM item)
7216 {
7217         switch(item){
7218                 case CAM_MENU_SHORTCUTS:
7219                         return __setting_edit_shortcut_popup_cb;
7220                 case CAM_MENU_BURST_SHOT_MODE:
7221                         return __setting_burst_shot_popup_cb;
7222                 case CAM_MENU_VOLUME_KEY:
7223                         return __setting_volume_key_popup_cb;
7224                 case CAM_MENU_SELF_PORTRAIT:
7225                         return __setting_self_portrait_popup_cb;
7226                 case CAM_MENU_FLASH:
7227                         return __setting_flash_popup;
7228                 case CAM_MENU_SHOOTING_MODE:
7229                         return __setting_shot_mode_popup_cb;
7230                 case CAM_MENU_RECORDING_MODE:
7231                         return __setting_record_mode_popup;
7232                 case CAM_MENU_SCENE_MODE:
7233                         return __setting_scenemode_popup_cb;
7234                 case CAM_MENU_EXPLOSURE_VALUE:
7235                         return __setting_ev_popup_cb;
7236                 case CAM_MENU_FOCUS_MODE:
7237                         return __setting_focus_mode_cb;
7238                 case CAM_MENU_TIMER:
7239                         return __setting_timer_popup_cb;
7240                 case CAM_MENU_EFFECTS:
7241                         return __setting_effects_popup_cb;
7242                 case CAM_MENU_PHOTO_RESOLUTION:
7243                         return __setting_photo_resolution_popup_cb;
7244                 case CAM_MENU_VIDEO_RESOLUTION:
7245                         return __setting_video_resolution_popup_cb;
7246                 case CAM_MENU_WHITE_BALANCE:
7247                         return __setting_wb_popup_cb;
7248                 case CAM_MENU_ISO:
7249                         return __setting_iso_popup_cb;
7250                 case CAM_MENU_METERING:
7251                         return __setting_metering_popup_cb;
7252                 case CAM_MENU_ANTI_SHAKE:
7253                         return __setting_anti_shake_popup_cb;
7254                 case CAM_MENU_OUTDOOR_VISIBILITY:
7255                         return __setting_outdoor_visibility_popup_cb;
7256                 case CAM_MENU_AUTO_CONTRAST:
7257                         return __setting_autocontrast_popup_cb;
7258                 case CAM_MENU_GUIDELINES:
7259                         return __setting_guideline_popup_cb;
7260                 case CAM_MENU_CAPTURE_VOICE:
7261                         return __setting_capture_by_voice_popup_cb;
7262                 case CAM_MENU_GPS_TAG:
7263                         return __setting_gps_popup_cb;
7264                 case CAM_MENU_SAVE_AS_FLIP:
7265                         return __setting_save_as_flip_popup_cb;
7266                 case CAM_MENU_STORAGE:
7267                         return __setting_storage_popup_cb;
7268                 case CAM_MENU_RESET:
7269                         return __setting_restore_defaults_popup_cb;
7270                 default:
7271                         return NULL;
7272                 }
7273 }
7274
7275 static Eina_Bool __genlist_each_cb(const void *container, void *data, void *fdata)
7276 {
7277         struct appdata *ad = (struct appdata *)fdata;
7278         cam_retv_if(ad == NULL, EINA_FALSE);
7279
7280         CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
7281         Elm_Object_Item *object_item = NULL;
7282         object_item = elm_genlist_item_append(ad->genlist,
7283                         &itc,
7284                         (void*)*item,
7285                         NULL,
7286                         ELM_GENLIST_ITEM_NONE,
7287                         __get_genlist_cb(*item),
7288                         (void*)ad);
7289
7290         if(!cam_is_enabled_menu(ad,*item))
7291                 elm_object_item_disabled_set(object_item, TRUE);
7292
7293         return EINA_TRUE;
7294 }
7295
7296 int cam_toolbar_setting_popup_create(struct appdata *ad)
7297 {
7298         cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
7299         CamAppData *cam_handle = ad->camapp_handle;
7300         cam_retv_if(cam_handle == NULL, -1);
7301
7302         if (ad->toolbar_setting_popup) {
7303                 cam_toolbar_setting_popup_destroy(ad);
7304         }
7305         if (ad->edit_shortcuts_popup_scroll) {
7306                 toolbar_destroy_shortcuts_popup(ad);
7307         }
7308
7309         ad->show_setting_popup_after_rotate = FALSE;
7310
7311         Evas_Object *setting_popup = NULL;
7312
7313         setting_toolbar_popup_create(ad);
7314
7315         setting_popup = elm_layout_add(ad->toolbar_setting_popup);
7316         elm_layout_file_set(setting_popup, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout/setting");
7317
7318         /* set text */
7319         edje_object_part_text_set(elm_layout_edje_get(setting_popup), "elm.text", dgettext(PACKAGE, "IDS_CAM_BODY_SETTINGS"));
7320
7321         evas_object_size_hint_min_set(setting_popup,
7322                                         SETTING_POPUP_WIDTH * elm_config_scale_get(),
7323                                         SETTING_POPUP_HEIGHT * elm_config_scale_get());
7324
7325         ad->genlist = elm_genlist_add(setting_popup);
7326         evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_DOWN, __setting_gl_mouse_down, (void *)ad);
7327         evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_MOVE, __setting_gl_mouse_move, (void *)ad);
7328
7329         cam_setting_gl_style_set();
7330
7331         if( ad->setting_menu_composer != NULL)
7332                 eina_array_foreach(ad->setting_menu_composer->array, __genlist_each_cb, ad);
7333
7334         evas_object_show(ad->genlist);
7335         elm_object_part_content_set(setting_popup, "elm.swallow.box", ad->genlist);
7336         elm_object_content_set(ad->toolbar_setting_popup, setting_popup);
7337
7338         int x, y ;
7339         x = y = 0;
7340         DEBUG_TRACE("ad->target_direction = %d", ad->target_direction);
7341         __get_option_coord_by_menubar_no(CAM_MENU_BAR_LEFT_0, ad->target_direction, &x, &y);
7342         DEBUG_TRACE("x = %d y = %d", x, y);
7343         __cam_toolbar_move_ctxpopup(ad->toolbar_setting_popup, ad->target_direction, x, y);
7344
7345         evas_object_show(ad->toolbar_setting_popup);
7346         __setting_popup_timeout_checker_start(ad);
7347
7348         __set_show_state_preview_obj(ad, FALSE);
7349
7350         return EXIT_SUCCESS;
7351 }
7352
7353 int toolbar_shot_guide_popup_create(struct appdata *ad, int shot_mode)
7354 {
7355         cam_retvm_if(ad == NULL, -1, "appdata is NULL");
7356         CamAppData *cam_handle = ad->camapp_handle;
7357         cam_retv_if(cam_handle == NULL, -1);
7358
7359         int str_num1 = 0;
7360         int str_num2 = 0;
7361         char *str = NULL;
7362
7363         if (ad->shot_mode_guide_popup) {
7364                 toolbar_shot_guide_popup_destory(ad);
7365         }
7366
7367         elm_object_part_content_unset(ad->ug_base, "shot_guide_popup_layout");
7368
7369         if ((cam_handle->shooting_mode == CAM_SINGLE_MODE)
7370                         || (cam_handle->shooting_mode == CAM_SELF_SINGLE_MODE))
7371                 return EXIT_SUCCESS;
7372
7373         switch (ad->target_direction) {
7374         case CAM_TARGET_DIRECTION_LANDSCAPE:
7375         case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
7376                 ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_landscape");
7377                 break;
7378         case CAM_TARGET_DIRECTION_PORTRAIT:
7379         case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
7380                 ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_potrait");
7381                 break;
7382         default:
7383                 DEBUG_TRACE("Invalid direction type!!!");
7384         }
7385
7386         cam_retvm_if(ad->shot_mode_guide_popup == NULL, -1, "shot_mode_guide_popup is NULL");
7387         elm_object_part_content_set(ad->ug_base, "shot_guide_popup_layout", ad->shot_mode_guide_popup);
7388
7389         char popup_str[1024 + 1] = { '\0',};
7390         snprintf(popup_str, 1024, "%s", dgettext(PACKAGE, "IDS_CAM_POP_PRESS_SHUTTER"));
7391         edje_object_part_text_set(_EDJ(ad->shot_mode_guide_popup), "text", popup_str);
7392
7393         evas_object_show(ad->shot_mode_guide_popup);
7394
7395         return EXIT_SUCCESS;
7396 }
7397
7398 int toolbar_shot_guide_popup_destory(struct appdata *ad)
7399 {
7400         cam_retv_if(ad == NULL, -1);
7401         UI_TEST_LOG("Guide popup destory");
7402
7403         if (ad->shot_mode_guide_popup) {
7404                 evas_object_del(ad->shot_mode_guide_popup);
7405                 ad->shot_mode_guide_popup = NULL;
7406         }
7407
7408         return 0;
7409 }
7410
7411 int toolbar_shot_guide_popup_move(struct appdata *ad)
7412 {
7413         cam_retv_if(ad == NULL, -1);
7414
7415         int x = 0, y = 0;
7416
7417         if (ad->shot_mode_guide_popup) {
7418                 Eina_Bool setting_ctxpopup_is_visible = false;
7419                 ecore_x_window_size_get(ad->main_xid, &x, &y);
7420
7421                 if (ad->setting_ctxpopup)
7422                         setting_ctxpopup_is_visible = evas_object_visible_get(ad->setting_ctxpopup);
7423
7424                 cam_debug(LOG_UI, "evas_object_visible_get(ad->setting_ctxpopup) =%d", setting_ctxpopup_is_visible);
7425
7426                 if (ad->toolbar_setting_popup) {
7427                         __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
7428                         toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
7429                 } else {
7430                         __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
7431                         toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
7432                 }
7433
7434                 cam_critical(LOG_UI, "x = %d, y= %d", x, y);
7435         }
7436
7437         return 0;
7438 }
7439
7440 static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state)
7441 {
7442         struct appdata *ad = (struct appdata *)cam_appdata_get();
7443         cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
7444         CamAppData *camapp = ad->camapp_handle;
7445         cam_retvm_if(camapp == NULL, NULL, "camapp is NULL");
7446
7447         char *icon_name = NULL;
7448         int exposure_value = 0;
7449
7450         switch(item){
7451         case CAM_MENU_SCENE_AUTO:
7452                 if (state == BUTTON_STATE_PRESS)
7453                         icon_name = SCENE_MODE_AUTO_PRESS_ICON;
7454                 else
7455                         icon_name = SCENE_MODE_AUTO_NORMAL_ICON;
7456                 break;
7457         case CAM_MENU_SCENE_PORTRAIT:
7458                 if (state == BUTTON_STATE_PRESS)
7459                         icon_name = SCENE_MODE_PORTRAIT_PRESS_ICON;
7460                 else
7461                         icon_name = SCENE_MODE_PORTRAIT_NORMAL_ICON;
7462                 break;
7463         case CAM_MENU_SCENE_LANDSCAPE:
7464                 if (state == BUTTON_STATE_PRESS)
7465                         icon_name = SCENE_MODE_LANDSCAPE_PRESS_ICON;
7466                 else
7467                         icon_name = SCENE_MODE_LANDSCAPE_NORMAL_ICON;
7468                 break;
7469         case CAM_MENU_SCENE_NIGHT:
7470                 if (state == BUTTON_STATE_PRESS)
7471                         icon_name = SCENE_MODE_NIGHT_PRESS_ICON;
7472                 else
7473                         icon_name = SCENE_MODE_NIGHT_NORMAL_ICON;
7474                 break;
7475         case CAM_MENU_SCENE_SPORTS:
7476                 if (state == BUTTON_STATE_PRESS)
7477                         icon_name = SCENE_MODE_SPORTS_PRESS_ICON;
7478                 else
7479                         icon_name = SCENE_MODE_SPORTS_NORMAL_ICON;
7480                 break;
7481         case CAM_MENU_SCENE_PARTY:
7482                 if (state == BUTTON_STATE_PRESS)
7483                         icon_name = SCENE_MODE_PARTY_PRESS_ICON;
7484                 else
7485                         icon_name = SCENE_MODE_PARTY_NORMAL_ICON;
7486                 break;
7487         case CAM_MENU_SCENE_BEACHSNOW:
7488                 if (state == BUTTON_STATE_PRESS)
7489                         icon_name = SCENE_MODE_BEACHSNOW_PRESS_ICON;
7490                 else
7491                         icon_name = SCENE_MODE_BEACHSNOW_NORMAL_ICON;
7492                 break;
7493         case CAM_MENU_SCENE_SUNSET:
7494                 if (state == BUTTON_STATE_PRESS)
7495                         icon_name = SCENE_MODE_SUNSET_PRESS_ICON;
7496                 else
7497                         icon_name = SCENE_MODE_SUNSET_NORMAL_ICON;
7498                 break;
7499         case CAM_MENU_SCENE_DUSKDAWN:
7500                 if (state == BUTTON_STATE_PRESS)
7501                         icon_name = SCENE_MODE_DUSKDAWN_PRESS_ICON;
7502                 else
7503                         icon_name = SCENE_MODE_DUSKDAWN_NORMAL_ICON;
7504                 break;
7505         case CAM_MENU_SCENE_FALL:
7506                 if (state == BUTTON_STATE_PRESS)
7507                         icon_name = SCENE_MODE_FALL_PRESS_ICON;
7508                 else
7509                         icon_name = SCENE_MODE_FALL_NORMAL_ICON;
7510                 break;
7511         case CAM_MENU_SCENE_FIREWORK:
7512                 if (state == BUTTON_STATE_PRESS)
7513                         icon_name = SCENE_MODE_FIREWORK_PRESS_ICON;
7514                 else
7515                         icon_name = SCENE_MODE_FIREWORK_NORMAL_ICON;
7516                 break;
7517         case CAM_MENU_SCENE_TEXT:
7518                 if (state == BUTTON_STATE_PRESS)
7519                         icon_name = SCENE_MODE_TEXT_PRESS_ICON;
7520                 else
7521                         icon_name = SCENE_MODE_TEXT_NORMAL_ICON;
7522                 break;
7523         case CAM_MENU_SCENE_CANDLELIGHT:
7524                 if (state == BUTTON_STATE_PRESS)
7525                         icon_name = SCENE_MODE_CANDLELIGHT_PRESS_ICON;
7526                 else
7527                         icon_name = SCENE_MODE_CANDLELIGHT_NORMAL_ICON;
7528                 break;
7529         case CAM_MENU_SCENE_BACKLIGHT:
7530                 if (state == BUTTON_STATE_PRESS)
7531                         icon_name = SCENE_MODE_BACKLIGHT_PRESS_ICON;
7532                 else
7533                         icon_name = SCENE_MODE_BACKLIGHT_NORMAL_ICON;
7534                 break;
7535         case CAM_MENU_SHOOTING_SINGLE:
7536         case CAM_MENU_SHOOTING_SELF_SINGLE:
7537                 if (state == BUTTON_STATE_PRESS)
7538                         icon_name = SHOOTING_MODE_SINGLE_PRESS_ICON;
7539                 else
7540                         icon_name = SHOOTING_MODE_SINGLE_NORMAL_ICON;
7541                 break;
7542         case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
7543                 if (state == BUTTON_STATE_PRESS)
7544                         icon_name = CAM_RESOLUTION_8M_PRESS_ICON;
7545                 else
7546                         icon_name = CAM_RESOLUTION_8M_NORMAL_ICON;
7547                 break;
7548
7549         case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
7550                 if (state == BUTTON_STATE_PRESS)
7551                         icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
7552                 else
7553                         icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
7554                 break;
7555         case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
7556                 if (state == BUTTON_STATE_PRESS)
7557                         icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
7558                 else
7559                         icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
7560                 break;
7561         case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
7562                 if (state == BUTTON_STATE_PRESS)
7563                         icon_name = CAM_RESOLUTION_W5_7M_PRESS_ICON;
7564                 else
7565                         icon_name = CAM_RESOLUTION_W5_7M_NORMAL_ICON;
7566                 break;
7567         case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
7568                 if (state == BUTTON_STATE_PRESS)
7569                         icon_name = CAM_RESOLUTION_5M_PRESS_ICON;
7570                 else
7571                         icon_name = CAM_RESOLUTION_5M_NORMAL_ICON;
7572                 break;
7573         case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
7574                 if (state == BUTTON_STATE_PRESS)
7575                         icon_name = NULL;
7576                 else
7577                         icon_name = NULL;
7578                 break;
7579         case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
7580                 if (state == BUTTON_STATE_PRESS)
7581                         icon_name = CAM_RESOLUTION_3_2M_PRESS_ICON;
7582                 else
7583                         icon_name = CAM_RESOLUTION_3_2M_NORMAL_ICON;
7584                 break;
7585         case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
7586                 if (state == BUTTON_STATE_PRESS)
7587                         icon_name = CAM_RESOLUTION_W2_4M_PRESS_ICON;
7588                 else
7589                         icon_name = CAM_RESOLUTION_W2_4M_NORMAL_ICON;
7590                 break;
7591         case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
7592                 if (state == BUTTON_STATE_PRESS)
7593                         icon_name = CAM_RESOLUTION_W2M_PRESS_ICON;
7594                 else
7595                         icon_name = CAM_RESOLUTION_W2M_NORMAL_ICON;
7596                 break;
7597         case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
7598                 if (state == BUTTON_STATE_PRESS)
7599                         icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
7600                 else
7601                         icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
7602                 break;
7603         case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
7604                 if (state == BUTTON_STATE_PRESS)
7605                         icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
7606                 else
7607                         icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
7608                 break;
7609         case CAM_MENU_PHOTO_RESOLUTION_1280x960:
7610                 if (state == BUTTON_STATE_PRESS)
7611                         icon_name = CAM_RESOLUTION_1_3M_PRESS_ICON;
7612                 else
7613                         icon_name = CAM_RESOLUTION_1_3M_NORMAL_ICON;
7614                 break;
7615         case CAM_MENU_PHOTO_RESOLUTION_1280x720:
7616                 if (state == BUTTON_STATE_PRESS)
7617                         icon_name = CAM_RESOLUTION_W0_9M_PRESS_ICON;
7618                 else
7619                         icon_name = CAM_RESOLUTION_W0_9M_NORMAL_ICON;
7620                 break;
7621         case CAM_MENU_PHOTO_RESOLUTION_640x480:
7622                 if (state == BUTTON_STATE_PRESS)
7623                         icon_name = CAM_RESOLUTION_0_3M_PRESS_ICON;
7624                 else
7625                         icon_name = CAM_RESOLUTION_0_3M_NORMAL_ICON;
7626                 break;
7627         case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
7628                 if (state == BUTTON_STATE_PRESS)
7629                         icon_name = REC_RESOLUTION_FULLHD_PRESS_ICON;
7630                 else
7631                         icon_name = REC_RESOLUTION_FULLHD_NORMAL_ICON;
7632                 break;
7633         case CAM_MENU_VIDEO_RESOLUTION_HD:
7634                 if (state == BUTTON_STATE_PRESS)
7635                         icon_name = REC_RESOLUTION_HD_PRESS_ICON;
7636                 else
7637                         icon_name = REC_RESOLUTION_HD_NORMAL_ICON;
7638                 break;
7639         case CAM_MENU_VIDEO_RESOLUTION_WVGA:
7640                 if (state == BUTTON_STATE_PRESS)
7641                         icon_name = REC_RESOLUTION_WVGA_PRESS_ICON;
7642                 else
7643                         icon_name = REC_RESOLUTION_WVGA_NORMAL_ICON;
7644                 break;
7645         case CAM_MENU_VIDEO_RESOLUTION_VGA:
7646                 if (state == BUTTON_STATE_PRESS)
7647                         icon_name = REC_RESOLUTION_VGA_PRESS_ICON;
7648                 else
7649                         icon_name = REC_RESOLUTION_VGA_NORMAL_ICON;
7650                 break;
7651         case CAM_MENU_VIDEO_RESOLUTION_QVGA:
7652                 if (state == BUTTON_STATE_PRESS)
7653                         icon_name = REC_RESOLUTION_QVGA_PRESS_ICON;
7654                 else
7655                         icon_name = REC_RESOLUTION_QVGA_NORMAL_ICON;
7656                 break;
7657         case CAM_MENU_VIDEO_RESOLUTION_QCIF:
7658                 if (state == BUTTON_STATE_PRESS)
7659                         icon_name = REC_RESOLUTION_QCIF_PRESS_ICON;
7660                 else
7661                         icon_name = REC_RESOLUTION_QCIF_NORMAL_ICON;
7662                 break;
7663         case CAM_MENU_WB_AWB:
7664                 if (state == BUTTON_STATE_PRESS)
7665                         icon_name = WHITE_BALANCE_AUTO_PRESS_ICON;
7666                 else
7667                         icon_name = WHITE_BALANCE_AUTO_NORMAL_ICON;
7668                 break;
7669         case CAM_MENU_WB_INCANDESCENT:
7670                 if (state == BUTTON_STATE_PRESS)
7671                         icon_name = WHITE_BALANCE_INCANDESCENT_PRESS_ICON;
7672                 else
7673                         icon_name = WHITE_BALANCE_INCANDESCENT_NORMAL_ICON;
7674                 break;
7675         case CAM_MENU_WB_FLUORESCENT:
7676                 if (state == BUTTON_STATE_PRESS)
7677                         icon_name = WHITE_BALANCE_FLUORESCENT_PRESS_ICON;
7678                 else
7679                         icon_name = WHITE_BALANCE_FLUORESCENT_NORMAL_ICON;
7680                 break;
7681         case CAM_MENU_WB_DAYLIGHT:
7682                 if (state == BUTTON_STATE_PRESS)
7683                         icon_name = WHITE_BALANCE_DAYLIGHT_PRESS_ICON;
7684                 else
7685                         icon_name = WHITE_BALANCE_DAYLIGHT_NORMAL_ICON;
7686                 break;
7687         case CAM_MENU_WB_CLOUDY:
7688                 if (state == BUTTON_STATE_PRESS)
7689                         icon_name = WHITE_BALANCE_CLOUDY_PRESS_ICON;
7690                 else
7691                         icon_name = WHITE_BALANCE_CLOUDY_NORMAL_ICON;
7692                 break;
7693         case CAM_MENU_WB_SHADE:
7694                 if (state == BUTTON_STATE_PRESS)
7695                         icon_name = WHITE_BALANCE_SHADE_PRESS_ICON;
7696                 else
7697                         icon_name = WHITE_BALANCE_SHADE_NORMAL_ICON;
7698                 break;
7699         case CAM_MENU_WB_HORIZON:
7700                 if (state == BUTTON_STATE_PRESS)
7701                         icon_name = WHITE_BALANCE_HORIZON_PRESS_ICON;
7702                 else
7703                         icon_name = WHITE_BALANCE_HORIZON_NORMAL_ICON;
7704                 break;
7705         case CAM_MENU_WB_FLASH:
7706                 if (state == BUTTON_STATE_PRESS)
7707                         icon_name = NULL;
7708                 else
7709                         icon_name = NULL;
7710                 break;
7711         case CAM_MENU_WB_CUSTOM:
7712                 if (state == BUTTON_STATE_PRESS)
7713                         icon_name = NULL;
7714                 else
7715                         icon_name = NULL;
7716                 break;
7717         case CAM_MENU_EFFECT_NONE:
7718                 if (state == BUTTON_STATE_PRESS)
7719                         icon_name = EFFECTS_NONE_PRESS_ICON;
7720                 else
7721                         icon_name = EFFECTS_NONE_NORMAL_ICON;
7722                 break;
7723         case CAM_MENU_EFFECT_NEGATIVE:
7724                 if (state == BUTTON_STATE_PRESS)
7725                         icon_name = EFFECTS_NEGATIVE_PRESS_ICON;
7726                 else
7727                         icon_name = EFFECTS_NEGATIVE_NORMAL_ICON;
7728                 break;
7729         case CAM_MENU_EFFECT_BLACKANDWHITE:
7730                 if (state == BUTTON_STATE_PRESS)
7731                         icon_name = EFFECTS_BLACKANDWHITE_PRESS_ICON;
7732                 else
7733                         icon_name = EFFECTS_BLACKANDWHITE_NORMAL_ICON;
7734                 break;
7735         case CAM_MENU_EFFECT_SEPIA:
7736                 if (state == BUTTON_STATE_PRESS)
7737                         icon_name = EFFECTS_SEPIA_PRESS_ICON;
7738                 else
7739                         icon_name = EFFECTS_SEPIA_NORMAL_ICON;
7740                 break;
7741         case CAM_MENU_FOCUS_AUTO:
7742                 if (state == BUTTON_STATE_PRESS)
7743                         icon_name = FOCUS_MODE_AUTO_PRESS_ICON;
7744                 else
7745                         icon_name = FOCUS_MODE_AUTO_NORMAL_ICON;
7746                 break;
7747         case CAM_MENU_FOCUS_MACRO:
7748                 if (state == BUTTON_STATE_PRESS)
7749                         icon_name = FOCUS_MODE_MACRO_PRESS_ICON;
7750                 else
7751                         icon_name = FOCUS_MODE_MACRO_NORMAL_ICON;
7752                 break;
7753         case CAM_MENU_FOCUS_FACE_DETECTION:
7754                 if (state == BUTTON_STATE_PRESS)
7755                         icon_name = FOCUS_MODE_FACE_DETECTION_PRESS_ICON;
7756                 else
7757                         icon_name = FOCUS_MODE_FACE_DETECTION_NORMAL_ICON;
7758                 break;
7759         case CAM_MENU_RECORDING_MODE_NORMAL:
7760         case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
7761                 if (state == BUTTON_STATE_PRESS)
7762                         icon_name = RECORDING_MODE_NORMAL_PRESS_ICON;
7763                 else
7764                         icon_name = RECORDING_MODE_NORMAL_NORMAL_ICON;
7765                 break;
7766         case CAM_MENU_RECORDING_MODE_LIMIT:
7767         case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
7768                 if (state == BUTTON_STATE_PRESS)
7769                         icon_name = RECORDING_MODE_LIMIT_MMS_PRESS_ICON;
7770                 else
7771                         icon_name = RECORDING_MODE_LIMIT_MMS_NORMAL_ICON;
7772                 break;
7773         case CAM_MENU_RECORDING_MODE_SLOW:
7774                 if (state == BUTTON_STATE_PRESS)
7775                         icon_name = RECORDING_MODE_SLOW_MOTION_PRESS_ICON;
7776                 else
7777                         icon_name = RECORDING_MODE_SLOW_MOTION_NORMAL_ICON;
7778                 break;
7779         case CAM_MENU_RECORDING_MODE_FAST:
7780                 if (state == BUTTON_STATE_PRESS)
7781                         icon_name = RECORDING_MODE_FAST_MOTION_PRESS_ICON;
7782                 else
7783                         icon_name = RECORDING_MODE_FAST_MOTION_NORMAL_ICON;
7784                 break;
7785         case CAM_MENU_FLASH_OFF:
7786                 if (state == BUTTON_STATE_PRESS)
7787                         icon_name = FLASH_OFF_PRESS_ICON;
7788                 else
7789                         icon_name = FLASH_OFF_NORMAL_ICON;
7790                 break;
7791         case CAM_MENU_FLASH_ON:
7792                 if (state == BUTTON_STATE_PRESS)
7793                         icon_name = FLASH_ON_PRESS_ICON;
7794                 else
7795                         icon_name = FLASH_ON_NORMAL_ICON;
7796                 break;
7797         case CAM_MENU_FLASH_AUTO:
7798                 if (state == BUTTON_STATE_PRESS)
7799                         icon_name = FLASH_AUTO_PRESS_ICON;
7800                 else
7801                         icon_name = FLASH_AUTO_NORMAL_ICON;
7802                 break;
7803         case CAM_MENU_METERING_MATRIX:
7804                 if (state == BUTTON_STATE_PRESS)
7805                         icon_name = METERING_MATRIX_PRESS_ICON;
7806                 else
7807                         icon_name = METERING_MATRIX_NORMAL_ICON;
7808                 break;
7809         case CAM_MENU_METERING_CENTER_WEIGHTED:
7810                 if (state == BUTTON_STATE_PRESS)
7811                         icon_name = METERING_CENTER_WEIGHTED_PRESS_ICON;
7812                 else
7813                         icon_name = METERING_CENTER_WEIGHTED_NORMAL_ICON;
7814                 break;
7815         case CAM_MENU_METERING_SPOT:
7816                 if (state == BUTTON_STATE_PRESS)
7817                         icon_name = METERING_SPOT_PRESS_ICON;
7818                 else
7819                         icon_name = METERING_SPOT_NORMAL_ICON;
7820                 break;
7821         case CAM_MENU_ISO_AUTO:
7822                 if (state == BUTTON_STATE_PRESS)
7823                         icon_name = ISO_AUTO_PRESS_ICON;
7824                 else
7825                         icon_name = ISO_AUTO_NORMAL_ICON;
7826                 break;
7827         case CAM_MENU_ISO_50:
7828                 if (state == BUTTON_STATE_PRESS)
7829                         icon_name = ISO_50_PRESS_ICON;
7830                 else
7831                         icon_name = ISO_50_NORMAL_ICON;
7832                 break;
7833         case CAM_MENU_ISO_100:
7834                 if (state == BUTTON_STATE_PRESS)
7835                         icon_name = ISO_100_PRESS_ICON;
7836                 else
7837                         icon_name = ISO_100_NORMAL_ICON;
7838                 break;
7839         case CAM_MENU_ISO_200:
7840                 if (state == BUTTON_STATE_PRESS)
7841                         icon_name = ISO_200_PRESS_ICON;
7842                 else
7843                         icon_name = ISO_200_NORMAL_ICON;
7844                 break;
7845         case CAM_MENU_ISO_400:
7846                 if (state == BUTTON_STATE_PRESS)
7847                         icon_name = ISO_400_PRESS_ICON;
7848                 else
7849                         icon_name = ISO_400_NORMAL_ICON;
7850                 break;
7851         case CAM_MENU_ISO_80O:
7852                 if (state == BUTTON_STATE_PRESS)
7853                         icon_name = ISO_800_PRESS_ICON;
7854                 else
7855                         icon_name = ISO_800_NORMAL_ICON;
7856                 break;
7857         case CAM_MENU_ISO_1600:
7858                 if (state == BUTTON_STATE_PRESS)
7859                         icon_name = NULL;
7860                 else
7861                         icon_name = NULL;
7862                 break;
7863         case CAM_MENU_ISO_320O:
7864                 if (state == BUTTON_STATE_PRESS)
7865                         icon_name = NULL;
7866                 else
7867                         icon_name = NULL;
7868                 break;
7869         case CAM_MENU_STORAGE_PHONE:
7870                 if (state == BUTTON_STATE_PRESS)
7871                         icon_name = STORAGE_MYDEVICE_PRESS_ICON;
7872                 else
7873                         icon_name = STORAGE_MYDEVICE_NORMAL_ICON;
7874                 break;
7875         case CAM_MENU_STORAGE_MMC:
7876                 if (state == BUTTON_STATE_PRESS)
7877                         icon_name = STORAGE_CARD_PRESS_ICON;
7878                 else
7879                         icon_name = STORAGE_CARD_NORMAL_ICON;
7880                 break;
7881         case CAM_MENU_TIMER_OFF:
7882                 if (state == BUTTON_STATE_PRESS)
7883                         icon_name = TIMER_OFF_PRESS_ICON;
7884                 else
7885                         icon_name = TIMER_OFF_NORMAL_ICON;
7886                 break;
7887         case CAM_MENU_TIMER_2SEC:
7888                 if (state == BUTTON_STATE_PRESS)
7889                         icon_name = TIMER_2SEC_PRESS_ICON;
7890                 else
7891                         icon_name = TIMER_2SEC_NORMAL_ICON;
7892                 break;
7893         case CAM_MENU_TIMER_5SEC:
7894                 if (state == BUTTON_STATE_PRESS)
7895                         icon_name = TIMER_5SEC_PRESS_ICON;
7896                 else
7897                         icon_name = TIMER_5SEC_NORMAL_ICON;
7898                 break;
7899         case CAM_MENU_TIMER_10SEC:
7900                 if (state == BUTTON_STATE_PRESS)
7901                         icon_name = TIMER_10SEC_PRESS_ICON;
7902                 else
7903                         icon_name = TIMER_10SEC_NORMAL_ICON;
7904                 break;
7905         case CAM_MENU_VOLUME_KEY_ZOOM:
7906                 if (state == BUTTON_STATE_PRESS)
7907                         icon_name = VOLUME_KEY_AS_ZOOM_PRESS_ICON;
7908                 else
7909                         icon_name = VOLUME_KEY_AS_ZOOM_NORMAL_ICON;
7910                 break;
7911         case CAM_MENU_VOLUME_KEY_SHUTTER:
7912                 if (state == BUTTON_STATE_PRESS)
7913                         icon_name = VOLUME_KEY_AS_SHUTTER_PRESS_ICON;
7914                 else
7915                         icon_name = VOLUME_KEY_AS_SHUTTER_NORMAL_ICON;
7916                 break;
7917         case CAM_MENU_EXPLOSURE_VALUE:
7918                 if (camapp->self_portrait == FALSE)
7919                         exposure_value = camapp->brightness;
7920                 else
7921                         exposure_value = camapp->brightness + 4;
7922
7923                 if (exposure_value == 0) {
7924                         if (state == BUTTON_STATE_PRESS)
7925                                 icon_name = EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON;
7926                         else
7927                                 icon_name = EXPOSURE_VALUE_MINUS_2_0_ICON;
7928                 } else if (exposure_value == 1) {
7929                         if (state == BUTTON_STATE_PRESS)
7930                                 icon_name = EXPOSURE_VALUE_MINUS_1_5_PRESS_ICON;
7931                         else
7932                                 icon_name = EXPOSURE_VALUE_MINUS_1_5_ICON;
7933                 } else if (exposure_value == 2) {
7934                         if (state == BUTTON_STATE_PRESS)
7935                                 icon_name = EXPOSURE_VALUE_MINUS_1_0_PRESS_ICON;
7936                         else
7937                                 icon_name = EXPOSURE_VALUE_MINUS_1_0_ICON;
7938                 } else if (exposure_value == 3) {
7939                         if (state == BUTTON_STATE_PRESS)
7940                                 icon_name = EXPOSURE_VALUE_MINUS_0_5_PRESS_ICON;
7941                         else
7942                                 icon_name = EXPOSURE_VALUE_MINUS_0_5_ICON;
7943                 } else if (exposure_value == 4) {
7944                         if (state == BUTTON_STATE_PRESS)
7945                                 icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
7946                         else
7947                                 icon_name = EXPOSURE_VALUE_0_ICON;
7948                 } else if (exposure_value == 5) {
7949                         if (state == BUTTON_STATE_PRESS)
7950                                 icon_name = EXPOSURE_VALUE_PLUS_0_5_PRESS_ICON;
7951                         else
7952                                 icon_name = EXPOSURE_VALUE_PLUS_0_5_ICON;
7953                 } else if (exposure_value == 6) {
7954                         if (state == BUTTON_STATE_PRESS)
7955                                 icon_name = EXPOSURE_VALUE_PLUS_1_0_PRESS_ICON;
7956                         else
7957                                 icon_name = EXPOSURE_VALUE_PLUS_1_0_ICON;
7958                 } else if (exposure_value == 7) {
7959                         if (state == BUTTON_STATE_PRESS)
7960                                 icon_name = EXPOSURE_VALUE_PLUS_1_5_PRESS_ICON;
7961                         else
7962                                 icon_name = EXPOSURE_VALUE_PLUS_1_5_ICON;
7963                 } else if (exposure_value == 8) {
7964                         if (state == BUTTON_STATE_PRESS)
7965                                 icon_name = EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON;
7966                         else
7967                                 icon_name = EXPOSURE_VALUE_PLUS_2_0_ICON;
7968                 } else {
7969                         if (state == BUTTON_STATE_PRESS)
7970                                 icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
7971                         else
7972                                 icon_name = EXPOSURE_VALUE_0_ICON;
7973                 }
7974                 break;
7975         default:
7976                 icon_name = NULL;
7977         }
7978
7979         return icon_name;
7980 }
7981
7982 static const char* __get_text_name(CAM_MENU_ITEM item)
7983 {
7984         switch(item){
7985         case CAM_MENU_SCENE_AUTO:
7986                 return "IDS_CAM_BODY_NONE";
7987         case CAM_MENU_SCENE_PORTRAIT:
7988                 return "IDS_CAM_OPT_SCENE_PORTRAIT";
7989         case CAM_MENU_SCENE_LANDSCAPE:
7990                 return "IDS_CAM_OPT_SCENE_LANDSCAPE";
7991         case CAM_MENU_SCENE_NIGHT:
7992                 return "IDS_CAM_OPT_SCENEMODE_NIGHT";
7993         case CAM_MENU_SCENE_SPORTS:
7994                 return "IDS_CAM_OPT_SCENE_SPORTS";
7995         case CAM_MENU_SCENE_PARTY:
7996                 return "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR";
7997         case CAM_MENU_SCENE_BEACHSNOW:
7998                 return "IDS_CAM_OPT_BEACH_SNOW";
7999         case CAM_MENU_SCENE_SUNSET:
8000                 return "IDS_CAM_OPT_SCENEMODE_SUNSET";
8001         case CAM_MENU_SCENE_DUSKDAWN:
8002                 return "IDS_CAM_OPT_SCENE_DAWN";
8003         case CAM_MENU_SCENE_FALL:
8004                 return "IDS_CAM_OPT_AUTUMN_COLOUR";
8005         case CAM_MENU_SCENE_FIREWORK:
8006                 return "IDS_CAM_BODY_SCENEMODE_FIREWORK";
8007         case CAM_MENU_SCENE_TEXT:
8008                 return "IDS_CAM_BODY_SCENEMODE_TEXT";
8009         case CAM_MENU_SCENE_CANDLELIGHT:
8010                 return "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT";
8011         case CAM_MENU_SCENE_BACKLIGHT:
8012                 return "IDS_CAM_OPT_SCENE_BACKLIGHT";
8013         case CAM_MENU_SHOOTING_SINGLE:
8014         case CAM_MENU_SHOOTING_SELF_SINGLE:
8015                 return "IDS_CAM_BODY_SINGLE";
8016         case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
8017                 return "3264x2448";
8018         case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
8019                 return "3264x1960";
8020         case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
8021                 return "3264x1836";
8022         case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
8023                 return "2800x1920";
8024         case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
8025                 return "2560x1920";
8026         case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
8027                 return "2560x1440";
8028         case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
8029                 return "2048x1536";
8030         case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
8031                 return "2048x1152";
8032         case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
8033                 return "1920x1080";
8034         case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
8035                 return "1600x1200";
8036         case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
8037                 return "1392x1392";
8038         case CAM_MENU_PHOTO_RESOLUTION_1280x960:
8039                 return "1280x960";
8040         case CAM_MENU_PHOTO_RESOLUTION_1280x720:
8041                 return "1280x720";
8042         case CAM_MENU_PHOTO_RESOLUTION_640x480:
8043                 return "640x480";
8044         case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
8045                 return "1920x1080";
8046         case CAM_MENU_VIDEO_RESOLUTION_HD:
8047                 return "1280x720";
8048         case CAM_MENU_VIDEO_RESOLUTION_WVGA:
8049                 return "720X480";
8050         case CAM_MENU_VIDEO_RESOLUTION_VGA:
8051                 return "640x480";
8052         case CAM_MENU_VIDEO_RESOLUTION_QVGA:
8053                 return "320x240";
8054         case CAM_MENU_VIDEO_RESOLUTION_QCIF:
8055                 return "176x144";
8056         case CAM_MENU_WB_AWB:
8057                 return "IDS_CAM_BODY_AUTO";
8058         case CAM_MENU_WB_INCANDESCENT:
8059                 return "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT";
8060         case CAM_MENU_WB_FLUORESCENT:
8061                 return "IDS_CAM_BODY_FLUORESCENT";
8062         case CAM_MENU_WB_DAYLIGHT:
8063                 return "IDS_CAM_BODY_DAYLIGHT";
8064         case CAM_MENU_WB_CLOUDY:
8065                 return "IDS_CAM_BODY_CLOUDY";
8066         case CAM_MENU_WB_SHADE:
8067                 return "IDS_CAM_BODY_SHADE";
8068         case CAM_MENU_WB_HORIZON:
8069                 return "IDS_CAM_BODY_HORIZON";
8070         case CAM_MENU_WB_FLASH:
8071                 return "IDS_CAM_OPT_FLASH";
8072         case CAM_MENU_WB_CUSTOM:
8073                 return "IDS_CAM_BODY_CUSTOM";
8074         case CAM_MENU_EFFECT_NONE:
8075                 return "IDS_CAM_BODY_NONE";
8076         case CAM_MENU_EFFECT_NEGATIVE:
8077                 return "IDS_CAM_BODY_NEGATIVE";
8078         case CAM_MENU_EFFECT_BLACKANDWHITE:
8079                 return "IDS_CAM_BODY_BLACK_AND_WHITE";
8080         case CAM_MENU_EFFECT_SEPIA:
8081                 return "IDS_CAM_BODY_SEPIA";
8082         case CAM_MENU_FOCUS_AUTO:
8083                 return "IDS_CAM_OPT_AUTO_FOCUS";
8084         case CAM_MENU_FOCUS_MACRO:
8085                 return "IDS_CAM_BODY_MACRO";
8086         case CAM_MENU_FOCUS_FACE_DETECTION:
8087                 return "IDS_CAM_OPT_FACE_DETECTION";
8088         case CAM_MENU_RECORDING_MODE_NORMAL:
8089                 return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
8090         case CAM_MENU_RECORDING_MODE_LIMIT:
8091                 return "IDS_CAM_OPT_MESSAGE_LIMIT";
8092         case CAM_MENU_RECORDING_MODE_SLOW:
8093                 return "IDS_CAM_OPT_SLOW_MOTION";
8094         case CAM_MENU_RECORDING_MODE_FAST:
8095                 return "IDS_CAM_BODY_FAST_MOTION";
8096         case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
8097                 return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
8098         case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
8099                 return "IDS_CAM_OPT_MESSAGE_LIMIT";
8100         case CAM_MENU_FLASH_OFF:
8101                 return "IDS_CAM_BODY_OFF";
8102         case CAM_MENU_FLASH_ON:
8103                 return "IDS_CAM_BODY_ON";
8104         case CAM_MENU_FLASH_AUTO:
8105                 return "IDS_CAM_BODY_AUTO";
8106         case CAM_MENU_METERING_MATRIX:
8107                 return "IDS_CAM_BODY_MATRIX";
8108         case CAM_MENU_METERING_CENTER_WEIGHTED:
8109                 return "IDS_CAM_BODY_CENTER_WEIGHTED";
8110         case CAM_MENU_METERING_SPOT:
8111                 return "IDS_CAM_BODY_SPOT";
8112         case CAM_MENU_ISO_AUTO:
8113                 return "IDS_CAM_BODY_AUTO";
8114         case CAM_MENU_ISO_50:
8115                 return "50";
8116         case CAM_MENU_ISO_100:
8117                 return "100";
8118         case CAM_MENU_ISO_200:
8119                 return "200";
8120         case CAM_MENU_ISO_400:
8121                 return "400";
8122         case CAM_MENU_ISO_80O:
8123                 return "800";
8124         case CAM_MENU_ISO_1600:
8125                 return "1600";
8126         case CAM_MENU_ISO_320O:
8127                 return "3200";
8128         case CAM_MENU_STORAGE_PHONE:
8129                 return "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY";
8130         case CAM_MENU_STORAGE_MMC:
8131                 return "IDS_CAM_OPT_MEMORY_CARD";
8132         case CAM_MENU_TIMER_OFF:
8133                 return "IDS_CAM_BODY_OFF";
8134         case CAM_MENU_TIMER_2SEC:
8135                 return "IDS_CAM_BODY_2_SEC";
8136         case CAM_MENU_TIMER_5SEC:
8137                 return "IDS_CAM_BODY_5_SEC";
8138         case CAM_MENU_TIMER_10SEC:
8139                 return "IDS_CAM_BODY_10_SEC";
8140         case CAM_MENU_VOLUME_KEY_ZOOM:
8141                 return "IDS_CAM_MBODY_THE_ZOOM_KEY";
8142         case CAM_MENU_VOLUME_KEY_SHUTTER:
8143                 return "IDS_CAM_MBODY_THE_CAMERA_KEY";
8144         default:
8145                 return NULL;
8146         }
8147 }
8148
8149 #define SUB_MENU_MAX_COUNT (5)
8150 #define SUB_MENU_2_COUNT_GAP (35)
8151 #define SUB_MENU_3_COUNT_GAP (30)
8152 #define SUB_MENU_4_COUNT_GAP (25)
8153 #define SUB_MENU_5_COUNT_GAP (15)
8154
8155 static int __get_sub_menu_height(int count)
8156 {
8157         int height  = 0;
8158         if (count > 5)
8159                 height = SUB_MENU_POPUP_HEIGHT;
8160         else {
8161                 height = (int)(SUB_MENU_POPUP_HEIGHT * count/SUB_MENU_MAX_COUNT);
8162                 switch (count) {
8163                 case 2:
8164                         height += SUB_MENU_2_COUNT_GAP;
8165                         break;
8166                 case 3:
8167                         height += SUB_MENU_3_COUNT_GAP;
8168                         break;
8169                 case 4:
8170                         height += SUB_MENU_4_COUNT_GAP;
8171                         break;
8172                 case 5:
8173                         height += SUB_MENU_5_COUNT_GAP;
8174                         break;
8175                 }
8176         }
8177         return height;
8178 }
8179
8180 static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
8181 {
8182         cam_retm_if(obj == NULL, "obj is NULL");
8183         struct appdata *ad = (struct appdata *)cam_appdata_get();
8184         cam_retm_if(ad == NULL, "appdata is NULL");
8185         CamAppData *camapp = ad->camapp_handle;
8186         cam_retm_if(camapp == NULL, "camapp is NULL");
8187
8188         DEBUG_TRACE("");
8189
8190         int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
8191
8192         /* set resolution value */
8193         if (camapp->photo_resolution != resolution) {
8194                 GValue value = {0};
8195                 CAM_GVALUE_SET_INT(value, resolution);
8196                 if (!cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &value)) {
8197                         DEBUG_TRACE("set photo resolution failed!");
8198                 }
8199         }
8200
8201         __update_menubar_icon_by_index(ad, CAM_MENU_PHOTO_RESOLUTION);
8202         if (ad->setting_select_item)
8203                 elm_genlist_item_update(ad->setting_select_item);
8204
8205         setting_ctxpopup_destroy(ad);
8206         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
8207 }
8208
8209 static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
8210 {
8211         cam_retm_if(obj == NULL, "obj is NULL");
8212         struct appdata *ad = (struct appdata *)cam_appdata_get();
8213         cam_retm_if(ad == NULL, "appdata is NULL");
8214         CamAppData *camapp = ad->camapp_handle;
8215         cam_retm_if(camapp == NULL, "camapp is NULL");
8216
8217         DEBUG_TRACE("");
8218
8219         int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
8220
8221         /* set resolution value */
8222         if (camapp->video_resolution != resolution) {
8223                 GValue value = {0};
8224                 CAM_GVALUE_SET_INT(value, resolution);
8225                 if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
8226                         DEBUG_TRACE("set video resolution failed!");
8227                 }
8228         }
8229
8230         __update_menubar_icon_by_index(ad, CAM_MENU_VIDEO_RESOLUTION);
8231         if (ad->setting_select_item)
8232                 elm_genlist_item_update(ad->setting_select_item);
8233
8234         setting_ctxpopup_destroy(ad);
8235         ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
8236 }
8237
8238 void cam_toolbar_show_cafbutton(struct appdata *ad, gboolean show)
8239 {
8240         cam_retm_if(ad == NULL, "appdata is NULL");
8241
8242         if (show) {
8243                 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
8244         }
8245         else {
8246                 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
8247         }
8248 }
8249
8250 static void __update_setting_popup(void* data)
8251 {
8252
8253         struct appdata *ad = data;
8254         cam_retm_if(ad == NULL, "appdata is NULL");
8255
8256         Elm_Object_Item *it = NULL;
8257         it = elm_genlist_first_item_get(ad->genlist);
8258
8259         while (it) {
8260                 CAM_MENU_ITEM item  = (CAM_MENU_ITEM)elm_object_item_data_get(it);
8261                 gboolean cap_enable = cam_is_enabled_menu(ad,item);
8262                 gboolean cur_state = elm_object_item_disabled_get(it);
8263                 DEBUG_TRACE("cap_enable %d", cap_enable);
8264                 DEBUG_TRACE("cur_state %d", cap_enable);
8265                 if(cap_enable == cur_state) {
8266                         DEBUG_TRACE("cur_state|cap_enable %d", cap_enable|cur_state);
8267                         elm_object_item_disabled_set(it, !cap_enable);
8268                         elm_genlist_item_update(it);
8269                  }
8270
8271                 it = elm_genlist_item_next_get(it);
8272
8273         }
8274
8275 }
8276
8277 static void __set_show_state_preview_obj(void *data, gboolean show)
8278 {
8279         struct appdata *ad = data;
8280         cam_retm_if(ad == NULL, "appdata is NULL");
8281
8282         if (show) {
8283                 cam_app_focus_guide_update(ad);
8284                 cam_indicator_set_show_state(ad, TRUE);
8285
8286                 if (ad->guideline_edje)
8287                         evas_object_show(ad->guideline_edje);
8288
8289                 if (ad->shot_mode_guide_popup)
8290                         evas_object_show(ad->shot_mode_guide_popup);
8291         } else {
8292                 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
8293                 cam_indicator_set_show_state(ad, FALSE);
8294
8295                 if (ad->guideline_edje)
8296                         evas_object_hide(ad->guideline_edje);
8297
8298                 if (ad->shot_mode_guide_popup)
8299                         evas_object_hide(ad->shot_mode_guide_popup);
8300         }
8301 }
8302
8303 //end file