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