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