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