2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
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.
21 #include "camera_utils.h"
24 #include "edc_string.h"
25 #include "edc_image_name.h"
27 #include "cam_config.h"
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"
44 #define SHUTTER_LONG_TAP_TIME 0.5 /*latency time of AF function*/
45 #define CAM_SHOTCUTS_NUMS 22
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;
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;
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
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)
81 #define OPTION_POPUP_X 107
82 #define OPTION_POPUP_Y 613
83 #define SHOT_MODE_POPUP 203
85 #define TIMER_POPUP 472
87 #define RESOLUTION_POPUP 610
89 #define METERING_POPUP 743
91 #define MORE_POPUP 1067
93 #define SETTING_HOR_CTX_POPUP_X 554
94 #define SETTING_VER_CTX_POPUP_X 152
95 #define SCENE_MODE_POPUP_WIDTH 400
97 #define SUB_MENU_POPUP_WIDTH 502
98 #define SUB_MENU_POPUP_HEIGHT 580
100 #define SETTING_POPUP_WIDTH 550
101 #define SETTING_POPUP_HEIGHT 661
103 #define SHOT_GUIDE_POPUP_WIDTH 600
104 #define SHOT_GUIDE_POPUP_HEIGHT 72
106 static Shortcuts_List_Prop edit_shortcuts_prop_array[CAM_EDIT_SHORTCUTS_INDEX_MAX]
109 {CAM_EDIT_SHORTCUTS_INDEX_0, PROP_SHORTCUTS_PART_INDEX_0},
110 {CAM_EDIT_SHORTCUTS_INDEX_1, PROP_SHORTCUTS_PART_INDEX_1},
111 {CAM_EDIT_SHORTCUTS_INDEX_2, PROP_SHORTCUTS_PART_INDEX_2},
112 {CAM_EDIT_SHORTCUTS_INDEX_3, PROP_SHORTCUTS_PART_INDEX_3},
114 {CAM_EDIT_SHORTCUTS_INDEX_4, PROP_SHORTCUTS_PART_INDEX_4},
115 {CAM_EDIT_SHORTCUTS_INDEX_5, PROP_SHORTCUTS_PART_INDEX_5},
116 {CAM_EDIT_SHORTCUTS_INDEX_6, PROP_SHORTCUTS_PART_INDEX_6},
117 {CAM_EDIT_SHORTCUTS_INDEX_7, PROP_SHORTCUTS_PART_INDEX_7},
119 {CAM_EDIT_SHORTCUTS_INDEX_8, PROP_SHORTCUTS_PART_INDEX_8},
120 {CAM_EDIT_SHORTCUTS_INDEX_9, PROP_SHORTCUTS_PART_INDEX_9},
121 {CAM_EDIT_SHORTCUTS_INDEX_10, PROP_SHORTCUTS_PART_INDEX_10},
122 {CAM_EDIT_SHORTCUTS_INDEX_11, PROP_SHORTCUTS_PART_INDEX_11},
124 {CAM_EDIT_SHORTCUTS_INDEX_12, PROP_SHORTCUTS_PART_INDEX_12},
125 {CAM_EDIT_SHORTCUTS_INDEX_13, PROP_SHORTCUTS_PART_INDEX_13},
126 {CAM_EDIT_SHORTCUTS_INDEX_14, PROP_SHORTCUTS_PART_INDEX_14},
127 {CAM_EDIT_SHORTCUTS_INDEX_15, PROP_SHORTCUTS_PART_INDEX_15},
129 {CAM_EDIT_SHORTCUTS_INDEX_16, PROP_SHORTCUTS_PART_INDEX_16},
130 {CAM_EDIT_SHORTCUTS_INDEX_17, PROP_SHORTCUTS_PART_INDEX_17},
131 {CAM_EDIT_SHORTCUTS_INDEX_18, PROP_SHORTCUTS_PART_INDEX_18},
132 {CAM_EDIT_SHORTCUTS_INDEX_19, PROP_SHORTCUTS_PART_INDEX_19},
135 static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
136 char **file_path, char **text, Evas_Object_Event_Cb *func);
137 static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon);
139 void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
140 void create_menubar_shortcuts_mouse_event(struct appdata *ad);
141 void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
142 gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no);
143 int toolbar_create_shortcuts_popup(struct appdata *ad);
145 static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow);
146 static void setting_ctxpopup_destroy(struct appdata *ad);
148 static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y);
150 static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y);
151 static int __get_menubar_no_by_index(struct appdata *ad, int index);
153 static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj, void *event_info);
154 static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info);
155 static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj, void *event_info);
156 static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info);
157 static void __update_menubar_icon_by_index(struct appdata *ad, int index);
158 static void __cam_toolbar_edit_shortcuts_data_clean();
159 static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y);
160 static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y);
162 static void __toolbar_menu_type_update(Evas_Object *toolbar_icon, int type, void *data, ButtonState state, Evas_Object_Event_Cb *func);
163 static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction, int mouse_point, int *x, int *y);
165 /* Setting list callback*/
166 static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting);
167 static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info);
168 static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info);
169 static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info);
170 static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info);
171 static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info);
172 static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info);
173 static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info);
174 static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info);
175 static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info);
176 static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info);
177 static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info);
178 static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info);
179 static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info);
180 static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info);
181 static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info);
182 static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info);
183 static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info);
184 static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info);
185 static void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info);
186 static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info);
187 static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info);
188 static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info);
189 static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info);
190 static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
191 static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
192 static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info);
194 /* Toolbar functions */
195 static void __toolbar_menu_icon_update(struct appdata *ad);
196 static int __toolbar_menu_item_create(struct appdata *ad);
197 static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state);
198 static void __toolbar_menu_item_reset(struct appdata *ad);
199 static int __toolbar_shutter_button_create(struct appdata *ad);
200 static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state);
201 static int __toolbar_recording_button_create(struct appdata *ad);
202 static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state);
203 static int __toolbar_quickview_item_create(struct appdata *ad);
204 static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state);
205 static int __toolbar_backbutton_create(struct appdata *ad);
206 static void __toolbar_backbutton_destroy(struct appdata *ad);
207 static int __toolbar_cafbutton_create(struct appdata *ad);
208 static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state);
209 static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state);;
211 static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state);
212 static const char* __get_text_name(CAM_MENU_ITEM item);
214 static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
215 static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
216 static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect);
217 static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
227 static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
228 ShortCutData *swap_ele,
229 ShortCutData *cur_ele);
231 static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no);
232 static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata);
233 static void __cam_setting_sub_gl_style_set();
234 static int __get_sub_menu_height(int count);
235 int cam_toolbar_displaypopup_map_menu_value(int display_popup);
236 int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item);
237 static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2);
238 static void __resort_edit_shortcuts_list_by_part_index(void);
239 static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele);
240 static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no);
242 static void __update_setting_popup(void* data);
243 static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele);
244 static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
247 static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no);
248 static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
249 ShortCutData *cur_ele,
250 ShortCutData *insert_ele);
252 static void __set_show_state_preview_obj(void *data, gboolean show);
253 static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part);
255 static Eina_Bool __setting_popup_timeout_checker_cb(void *data);
256 static gboolean __setting_popup_timeout_checker_start(struct appdata *ad);
257 static void __cam_toolbar_display_shortcuts_editmode(void *data);
259 static void __cam_toolbar_exit_shortcuts_editmode(void *data);
260 static void __toolbar_dim_setting_shortcuts(struct appdata *ad);
263 static void cam_popup_warning_response_cb(void *data, Evas_Object *obj, void *event_info)
266 evas_object_del(obj);
270 static void cam_storage_warning_popup()
272 struct appdata *ad = (struct appdata *)cam_appdata_get();
273 cam_retm_if(ad == NULL, " appdata is NULL");
275 popup = elm_popup_add(ad->ug_base);
276 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
277 elm_object_text_set(popup, dgettext(PACKAGE, "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA"));
278 elm_popup_timeout_set(popup, 3.0);
279 evas_object_smart_callback_add(popup, "timeout", cam_popup_warning_response_cb, NULL);
280 evas_object_show(popup);
283 static Eina_Bool __toolbar_check_af_timer(void *data)
286 struct appdata *ad = (struct appdata *)data;
287 cam_retv_if(ad == NULL, 0);
288 CamAppData *camapp = ad->camapp_handle;
289 if (camapp == NULL) {
290 if (ad->check_af_timer)
291 ad->check_af_timer = NULL;
292 return ECORE_CALLBACK_CANCEL;
295 if(camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
296 || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
297 || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
298 ad->emit_continuous_shutter = TRUE;
299 cam_mm_stop_focusing();
300 if (!cam_do_capture(ad)) {
301 cam_warning(LOG_UI, "cam_do_capture failed");
302 camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
303 ad->emit_continuous_shutter = FALSE;
306 if (ad->check_af_timer)
307 ad->check_af_timer = NULL;
309 return ECORE_CALLBACK_CANCEL;
312 return ECORE_CALLBACK_RENEW;
314 static Eina_Bool __toolbar_continuous_shot_timer(void *data)
317 struct appdata *ad = (struct appdata *)data;
318 cam_retv_if(ad == NULL, 0);
319 CamAppData *camapp = ad->camapp_handle;
320 if (camapp == NULL) {
321 if (ad->continuous_shot_timer)
322 ad->continuous_shot_timer = NULL;
323 return ECORE_CALLBACK_CANCEL;
326 DEBUG_TRACE("camapp->burst_shot is %d", camapp->burst_shot);
327 if (camapp->burst_shot) {// burst shot mode 'on'
328 camapp->default_capture_mode = CAM_CAPTURE_BURST;
329 ad->emit_continuous_shutter = TRUE;
330 if (camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
331 || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
332 || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
333 REMOVE_TIMER(ad->continuous_af_timer);
334 cam_mm_stop_focusing();
336 if (!cam_do_capture(ad)) {
337 cam_warning(LOG_UI, "cam_do_capture failed");
338 camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
341 cam_debug(LOG_UI, "Not focused");
343 REMOVE_TIMER(ad->check_af_timer);
344 ad->check_af_timer = ecore_timer_add(0.2, __toolbar_check_af_timer, ad);
348 if (ad->continuous_shot_timer)
349 ad->continuous_shot_timer = NULL;
350 return ECORE_CALLBACK_CANCEL;
353 /* start AF after SHUTTER_LONG_TAP_TIME */
354 static Eina_Bool __toolbar_shutter_long_tap_af_timer(void *data)
356 struct appdata *ad = (struct appdata *)data;
357 cam_retv_if(ad == NULL, 0);
358 CamAppData *camapp = ad->camapp_handle;
359 if (camapp == NULL) {
360 if (ad->shutter_long_tap_timer)
361 ad->shutter_long_tap_timer = NULL;
362 return ECORE_CALLBACK_CANCEL;
365 if (!camapp->key_lock) {
366 camapp->key_lock = TRUE;
367 camapp->focus_mode = CAM_FOCUS_MODE_HALFSHUTTER;
368 camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
369 if (!cam_camera_key_half_press(ad)) {
370 cam_warning(LOG_UI, "cam_camera_key_half_press failed");
372 camapp->key_lock = FALSE;
375 if (ad->shutter_long_tap_timer)
376 ad->shutter_long_tap_timer = NULL;
377 return ECORE_CALLBACK_CANCEL;
380 static void __shutter_button_focus_out_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
382 DEBUG_TRACE("START");
384 struct appdata *ad = (struct appdata *)data;
385 cam_retm_if(ad == NULL, "appdata is NULL");
386 CamAppData *camapp = ad->camapp_handle;
387 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
389 if (ad->is_processing) {
393 cam_mm_stop_focusing();
394 cam_reset_focus_mode(ad);
397 void cam_toolbar_shutter_button_cb(void *data, Evas_Object *o,
398 const char *emission, const char *source)
400 DEBUG_TRACE("START");
402 struct appdata *ad = (struct appdata *)data;
403 cam_retm_if(ad == NULL, "appdata is NULL");
404 cam_app_timeout_checker_update();
405 if (ad->is_rotating) return;/*note: now is rotating*/
406 CamAppData *camapp = ad->camapp_handle;;
407 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
409 cam_retm_if(emission == NULL, "emission is NULL");
410 cam_retm_if(source == NULL, "source is NULL");
411 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
413 if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
416 unload_zoom_edje(ad);
421 if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
422 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
423 cam_toolbar_setting_popup_destroy(ad);
426 if (ad->edit_shortcuts_popup)
427 toolbar_destroy_shortcuts_popup(ad);
429 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
430 cam_debug(LOG_UI, "do not capture");
434 if (strcmp(emission, "press_shutter_sig") == 0) {
435 if ((camapp->continuous_shot_data && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING )
437 cam_critical(LOG_SYS, " capture is skipped because of CAM_CONTI_SHOT_STATUS_CAPTURING");
441 ad->emit_continuous_shutter = FALSE;
442 if (camapp->camera_mode == CAM_CAMERA_MODE) {
443 evas_object_event_callback_add(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb, (void *)ad);
445 if (camapp->af_mode == CAM_FOCUS_FACE) { /*note: face focus mode, if start capture,stop draw rect*/
446 cam_app_stop_video_stream();
448 REMOVE_TIMER(ad->continuous_shot_timer);
449 camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
451 if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) && (camapp->burst_shot == TRUE)) {
452 if (strcmp(source, "hard_key") == 0) {
453 if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
454 ad->continuous_shot_by_hard_key = TRUE;
455 __toolbar_continuous_shot_timer(ad);
457 if (!cam_do_capture(ad))
458 cam_warning(LOG_UI, "cam_do_capture failed");
461 if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
462 ad->continuous_shot_by_hard_key = FALSE;
463 ad->continuous_shot_timer = ecore_timer_add(0.5, __toolbar_continuous_shot_timer, ad);
467 ad->stop_continuous_shot = FALSE;
469 if (strcmp(source, "hard_key") == 0) {
470 if (!cam_do_capture(ad))
471 cam_warning(LOG_UI, "cam_do_capture failed");
473 if (cam_is_enabled_menu((void*)ad, CAM_MENU_FOCUS_MODE)){
474 REMOVE_TIMER(ad->continuous_af_timer);
475 ad->shutter_long_tap_timer = ecore_timer_add(SHUTTER_LONG_TAP_TIME, __toolbar_shutter_long_tap_af_timer, ad);
480 if (strcmp(source, "hard_key") == 0) {
481 if (!cam_do_capture(ad))
482 cam_warning(LOG_UI, "cam_do_capture failed");
486 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
487 } else if (strcmp(emission, "release_shutter_sig") == 0) {
488 if (camapp->camera_mode == CAM_CAMERA_MODE) {
489 evas_object_event_callback_del(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb);
490 REMOVE_TIMER(ad->shutter_long_tap_timer);
491 REMOVE_TIMER(ad->continuous_shot_timer);
492 REMOVE_TIMER(ad->check_af_timer);
494 if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE)
495 && camapp->burst_shot == TRUE
496 && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
497 DEBUG_TRACE("burst capture mode");
498 if (((strcmp(source, "hard_key") == 0) && (ad->continuous_shot_by_hard_key == FALSE))
499 || ((strcmp(source, "toolbar_signal") == 0) && (ad->continuous_shot_by_hard_key == TRUE))) {
500 DEBUG_TRACE("ignore this event");
503 ad->stop_continuous_shot = TRUE;
504 ad->emit_continuous_shutter = FALSE;
505 ad->continuous_shot_by_hard_key = FALSE;
509 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
510 } else if ( strcmp(emission, "click_shutter_sig") == 0){
512 if (ad->emit_continuous_shutter == TRUE ) {
513 ad->emit_continuous_shutter = FALSE;
517 if (camapp->default_capture_mode == CAM_CAPTURE_SINGLE) {
518 if (!cam_do_capture(ad))
519 cam_warning(LOG_UI, "cam_do_capture failed");
524 void cam_toolbar_recording_button_cb(void *data, Evas_Object *o,
525 const char *emission, const char *source)
527 DEBUG_TRACE("START");
529 struct appdata *ad = (struct appdata *)data;
530 cam_retm_if(ad == NULL, "appdata is NULL");
531 cam_app_timeout_checker_update();
532 if (ad->is_rotating) return;/*note: now is rotating*/
533 CamAppData *camapp = ad->camapp_handle;;
534 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
536 cam_retm_if(emission == NULL, "emission is NULL");
537 cam_retm_if(source == NULL, "source is NULL");
538 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
540 if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
543 unload_zoom_edje(ad);
548 if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
549 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
550 cam_toolbar_setting_popup_destroy(ad);
553 if (ad->edit_shortcuts_popup)
554 toolbar_destroy_shortcuts_popup(ad);
556 int mm_state = cam_mm_get_state();
558 if ((camapp->camera_mode == CAM_CAMERA_MODE)
559 && (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)) {
560 cam_debug(LOG_UI, "do not record");
564 if (strcmp(emission, "press_shutter_sig") == 0) {
565 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
566 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,press", "prog");
568 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,press", "prog");
569 } else if (strcmp(emission, "release_shutter_sig") == 0) {
570 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
571 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
573 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
574 } else if (strcmp(emission, "click_shutter_sig") == 0) {
576 if (camapp->camera_mode == CAM_CAMERA_MODE) {
577 if (mm_state != CAMERA_STATE_PREVIEW) {
578 cam_critical(LOG_UI, "Cannot start recording in capturing state");
583 if (!ad->is_recording) {
584 // change to camcorder mode
585 GValue value = {0, };
586 if (camapp->camera_mode == CAM_CAMERA_MODE) {
587 CAM_GVALUE_SET_INT(value, CAM_CAMCORDER_MODE);
588 if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
593 if (!camapp->key_lock) {
594 camapp->key_lock = TRUE;
596 if (!cam_do_record(ad))
597 cam_warning(LOG_UI, "cam_do_record failed");
599 camapp->key_lock = FALSE;
602 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING)) {
603 if (!cam_video_record_pause(ad))
604 cam_warning(LOG_UI, "cam_video_record_pause failed");
606 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
607 } else if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_PAUSED)) {
608 if (!cam_video_record_resume(ad))
609 cam_warning(LOG_UI, "cam_video_record_resume failed");
611 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
617 void cam_toolbar_recording_stop_button_cb(void *data, Evas_Object *o,
618 const char *emission, const char *source)
620 DEBUG_TRACE("START");
622 struct appdata *ad = (struct appdata *)data;
623 cam_retm_if(ad == NULL, "appdata is NULL");
624 cam_app_timeout_checker_update();
625 if (ad->is_rotating) return;/*note: now is rotating*/
626 CamAppData *camapp = ad->camapp_handle;;
627 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
629 cam_retm_if(emission == NULL, "emission is NULL");
630 cam_retm_if(source == NULL, "source is NULL");
631 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
636 unload_zoom_edje(ad);
637 HIDE_EVAS_OBJECT(ad->indicator_edje);
638 DEL_EVAS_OBJECT(ad->recording_edje);
640 if (strcmp(emission, "press_shutter_sig") == 0) {
641 edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,press", "prog");
642 } else if (strcmp(emission, "release_shutter_sig") == 0) {
643 edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
644 } else if (strcmp(emission, "click_shutter_sig") == 0) {
645 state = cam_mm_get_state();
647 if ((state == RECORDER_STATE_RECORDING)
648 || (state == RECORDER_STATE_PAUSED)) {
649 camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
650 if (!cam_video_record_stop(ad))
651 cam_warning(LOG_UI, "cam_video_record_stop failed");
653 cam_debug(LOG_UI, "error, not recording or pause state");
658 static void __toolbar_backbutton_cb(void *data, Evas_Object *o,
659 const char *emission, const char *source)
661 DEBUG_TRACE("START");
663 struct appdata *ad = (struct appdata *)data;
664 cam_retm_if(ad == NULL, "appdata is NULL");
665 if (ad->is_rotating) return;/*note: now is rotating*/
666 CamAppData *camapp = ad->camapp_handle;;
667 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
669 cam_retm_if(emission == NULL, "emission is NULL");
670 cam_retm_if(source == NULL, "source is NULL");
671 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
673 if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
675 if (ad->timer_activated) {
676 cam_app_cancel_timer(ad);
677 if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
678 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
679 if (ad->ug_state != CAM_UG_PAUSE_STATE) {
680 GValue value = {0, };
681 CAM_GVALUE_SET_INT(value, CAM_CAMERA_MODE);
682 if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
690 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
691 if (ad->is_recording) {
692 if (!camapp->key_lock) {
693 camapp->key_lock = TRUE;
695 if (!cam_video_record_cancel(ad))
696 cam_warning(LOG_UI, "failed");
698 camapp->key_lock = FALSE;
705 cam_tip_popup_destroy(ad);
707 } else if (ad->toolbar_setting_popup) {
708 if (ad->setting_ctxpopup) {
709 setting_ctxpopup_destroy(ad);
710 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
712 cam_toolbar_setting_popup_destroy(ad);
715 } else if (ad->setting_ctxpopup) {
716 setting_ctxpopup_destroy(ad);
717 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
719 } else if (ad->edit_shortcuts_popup) {
720 toolbar_destroy_shortcuts_popup(ad);
722 } else if (ad->ev_edje) {
725 } else if (ad->zoom_edje) {
726 unload_zoom_edje(ad);
731 if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)
734 elm_win_lower(ug_get_window());
740 static void __toolbar_cafbutton_cb(void *data, Evas_Object *o,
741 const char *emission, const char *source)
743 DEBUG_TRACE("START");
745 struct appdata *ad = (struct appdata *)data;
746 cam_retm_if(ad == NULL, "appdata is NULL");
747 CamAppData *camapp = ad->camapp_handle;;
748 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
750 cam_retm_if(emission == NULL, "emission is NULL");
751 cam_retm_if(source == NULL, "source is NULL");
752 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
757 cam_reset_focus_mode(ad);
760 static Ecore_Idler *run_image_view_idler = NULL;
761 static Eina_Bool __cam_toolbar_run_image_viewer_idler(void *data)
763 struct appdata *ad = (struct appdata *)data;
764 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
765 CamAppData *camapp = ad->camapp_handle;
766 cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
768 if (run_image_view_idler) {
769 ecore_idler_del(run_image_view_idler);
770 run_image_view_idler = NULL;
773 if (ad->ug_is_deleting_process == TRUE)
774 return ECORE_CALLBACK_CANCEL;
776 if (!cam_app_run_media_browser(ad, camapp->filename)) {
777 DEBUG_TRACE("cam_app_run_media_browser failed");
780 return ECORE_CALLBACK_CANCEL;
783 static void __toolbar_quickview_cb(void *data, Evas_Object *o,
784 const char *emission, const char *source)
786 cam_ret_if(data == NULL);
787 struct appdata *ad = (struct appdata *)data;
788 cam_retm_if(ad == NULL, "appdata is NULL");
789 cam_app_timeout_checker_update();
790 if (ad->is_rotating) return;/*note: now is rotating*/
791 CamAppData *camapp = ad->camapp_handle;
792 cam_ret_if(camapp == NULL);
793 cam_ret_if(emission == NULL);
794 cam_ret_if(source == NULL);
795 if (ad->ug_is_deleting_process == TRUE)
799 unload_zoom_edje(ad);
804 if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
805 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
806 cam_toolbar_setting_popup_destroy(ad);
809 if (ad->edit_shortcuts_popup)
810 toolbar_destroy_shortcuts_popup(ad);
812 if (ad->imageviewer_ug) {
815 if (emission && source)
816 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
818 if (strcmp(emission, "portrait,quickview,release") == 0
819 || strcmp(emission, "landscape,quickview,release") == 0) {
820 pthread_mutex_lock(&ad->file_reg_mutex);
821 cam_debug(LOG_SYS, " lock file_reg_mutex");
822 pthread_mutex_unlock(&ad->file_reg_mutex);
823 run_image_view_idler = ecore_idler_add(__cam_toolbar_run_image_viewer_idler, (void *)ad);
827 #if 0 /*block it temporary*/
828 static void __shotcus_edit_shotcuts_popup_cb(void *data, Evas * evas, Evas_Object *obj,
832 __setting_edit_shortcut_popup_cb(data, obj, event_info);
836 static void __shortcuts_burst_shot_popup_cb(void *data, Evas * evas, Evas_Object *obj,
840 __setting_burst_shot_popup_cb(data, obj, event_info);
843 static void __shortcuts_volume_key_popup_cb(void *data, Evas * evas, Evas_Object *obj,
847 __setting_volume_key_popup_cb(data, obj, event_info);
850 static void __shortcuts_self_portrait_popup_cb(void *data, Evas * evas, Evas_Object *obj,
854 __setting_self_portrait_popup_cb(data, obj, event_info);
857 static void __shortcuts_setting_flash_popup_cb(void *data, Evas * evas, Evas_Object *obj,
861 __setting_flash_popup(data, obj, event_info);
864 static void __shortcuts_shooting_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
868 __setting_shot_mode_popup_cb(data, obj, event_info);
871 static void __shortcuts_record_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
875 __setting_record_mode_popup(data, obj, event_info);
878 static void __shortcuts_scene_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
882 __setting_scenemode_popup_cb(data, obj, event_info);
885 static void __shortcuts_exposure_popup_cb(void *data, Evas * evas, Evas_Object *obj,
889 __setting_ev_popup_cb(data, obj, event_info);
892 static void __shortcuts_focus_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
896 __setting_focus_mode_cb(data, obj, event_info);
899 static void __shortcuts_setting_timer_popup_cb(void *data, Evas * evas, Evas_Object *obj,
903 __setting_timer_popup_cb(data, obj, event_info);
906 static void __shortcuts_effects_popup_cb(void *data, Evas * evas, Evas_Object *obj,
910 __setting_effects_popup_cb(data, obj, event_info);
913 static void __shortcuts_photo_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
917 __setting_photo_resolution_popup_cb(data, obj, event_info);
920 static void __shortcuts_video_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
924 __setting_video_resolution_popup_cb(data, obj, event_info);
928 static void __shortcuts_white_banlance_popup_cb(void *data, Evas * evas, Evas_Object *obj,
932 __setting_wb_popup_cb(data, obj, event_info);
935 static void __shortcuts_setting_iso_popup_cb(void *data, Evas * evas, Evas_Object *obj,
939 __setting_iso_popup_cb(data, obj, event_info);
942 static void __shortcuts_setting_metering_popup_cb(void *data, Evas * evas, Evas_Object *obj,
946 __setting_metering_popup_cb(data, obj, event_info);
949 static void __shortcuts_anti_shake_popup_cb(void *data, Evas * evas, Evas_Object *obj,
953 __setting_anti_shake_popup_cb(data, obj, event_info);
956 static void __shortcuts_outdoor_visibility_popup_cb(void *data, Evas * evas, Evas_Object *obj,
960 __setting_outdoor_visibility_popup_cb(data, obj, event_info);
963 static void __shortcuts_auto_contrast_popup_cb(void *data, Evas * evas, Evas_Object *obj,
967 __setting_autocontrast_popup_cb(data, obj, event_info);
970 static void __shortcuts_guideline_popup_cb(void *data, Evas * evas, Evas_Object *obj,
974 __setting_guideline_popup_cb(data, obj, event_info);
977 static void __shortcuts_capture_voice_popup_cb(void *data, Evas * evas, Evas_Object *obj,
981 __setting_capture_by_voice_popup_cb(data, obj, event_info);
984 static void __shortcuts_gps_tag_popup_cb(void *data, Evas * evas, Evas_Object *obj,
988 __setting_gps_popup_cb(data, obj, event_info);
991 static void __shortcuts_storage_popup_cb(void *data, Evas * evas, Evas_Object *obj,
995 __setting_storage_popup_cb(data, obj, event_info);
998 static void __shortcuts_reset_popup_cb(void *data, Evas * evas, Evas_Object *obj,
1002 __setting_restore_defaults_popup_cb(data, obj, event_info);
1005 static void __shortcuts_save_as_flip_cb(void *data, Evas * evas, Evas_Object *obj,
1009 __setting_save_as_flip_popup_cb(data, obj, event_info);
1013 static void __update_menu_bar_shortcuts_state_by_index(struct appdata *ad, int index, ToolbarItemState state)
1015 cam_ret_if(ad == NULL);
1016 int menubar_no = __get_menubar_no_by_index(ad, index);
1017 switch(menubar_no) {
1018 case CAM_MENU_BAR_LEFT_0:
1019 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1020 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1021 "toolbar_0_icon,normal", "prog");
1022 else if (TOOLBAR_ITEM_STATE_DIM == state)
1023 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1024 "toolbar_0_icon,dim", "prog");
1026 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1027 "toolbar_0_icon,invisible", "prog");
1029 case CAM_MENU_BAR_LEFT_1:
1030 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1031 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1032 "toolbar_1_icon,normal", "prog");
1033 else if (TOOLBAR_ITEM_STATE_DIM == state)
1034 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1035 "toolbar_1_icon,dim", "prog");
1037 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1038 "toolbar_1_icon,invisible", "prog");
1040 case CAM_MENU_BAR_LEFT_2:
1041 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1042 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1043 "toolbar_2_icon,normal", "prog");
1044 else if (TOOLBAR_ITEM_STATE_DIM == state)
1045 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1046 "toolbar_2_icon,dim", "prog");
1048 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1049 "toolbar_2_icon,invisible", "prog");
1051 case CAM_MENU_BAR_LEFT_3:
1052 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1053 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1054 "toolbar_3_icon,normal", "prog");
1055 else if (TOOLBAR_ITEM_STATE_DIM == state)
1056 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1057 "toolbar_3_icon,dim", "prog");
1059 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1060 "toolbar_3_icon,invisible", "prog");
1062 case CAM_MENU_BAR_LEFT_4:
1063 if (TOOLBAR_ITEM_STATE_NORMAL == state)
1064 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1065 "toolbar_4_icon,normal", "prog");
1066 else if (TOOLBAR_ITEM_STATE_DIM == state)
1067 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1068 "toolbar_4_icon,dim", "prog");
1070 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
1071 "toolbar_4_icon,invisible", "prog");
1074 DEBUG_TRACE("not in menubar");
1079 static void __toolbar_menu_type_update(Evas_Object *toolbar_icon,
1080 int type, void *data, ButtonState state, Evas_Object_Event_Cb *func)
1082 struct appdata *ad = (struct appdata *)data;
1083 cam_ret_if(ad == NULL);
1084 CamAppData *camapp = ad->camapp_handle;
1085 cam_ret_if(camapp == NULL);
1087 char *icon_name = NULL;
1090 ButtonState button_state = state;
1091 ToolbarItemState item_state = TOOLBAR_ITEM_STATE_NORMAL;
1093 if (!cam_is_enabled_menu(ad, type)) {
1094 button_state = BUTTON_STATE_DIM;
1095 item_state = TOOLBAR_ITEM_STATE_DIM;
1098 __get_toolbar_shortcuts_file_func(ad, type, button_state, &icon_name, &text, func);
1101 elm_image_file_set(toolbar_icon, CAM_IMAGE_EDJ_NAME, icon_name);
1103 cam_critical(LOG_UI, "icon_name is NULL");
1105 __update_menu_bar_shortcuts_state_by_index(ad, type, item_state);
1107 if (button_state == BUTTON_STATE_DIM)
1108 evas_object_color_set(toolbar_icon, 255, 255, 255, 77); /*opacity 30% for dim menu */
1110 evas_object_color_set(toolbar_icon, 255, 255, 255, 255);
1113 static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
1114 char **file_path, char **text, Evas_Object_Event_Cb *func)
1116 struct appdata *ad = (struct appdata *)data;
1117 cam_ret_if(ad == NULL);
1118 CamAppData *camapp = ad->camapp_handle;
1119 cam_ret_if(camapp == NULL);
1126 case CAM_MENU_EMPTY:
1127 case CAM_MENU_SHORTCUTS:
1129 case CAM_MENU_BURST_SHOT_MODE: {
1130 if (camapp->burst_shot) {
1131 if (state == BUTTON_STATE_PRESS)
1132 *file_path = BURST_SHOT_MODE_ON_PRESS_ICON;
1134 *file_path = BURST_SHOT_MODE_ON_NORMAL_ICON;
1137 if (state == BUTTON_STATE_PRESS)
1138 *file_path = BURST_SHOT_MODE_OFF_PRESS_ICON;
1140 *file_path = BURST_SHOT_MODE_OFF_NORMAL_ICON;
1143 *text = dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB");
1145 if (state != BUTTON_STATE_DIM)
1146 *func = __shortcuts_burst_shot_popup_cb;
1149 case CAM_MENU_VOLUME_KEY: {
1150 *file_path = __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), state);
1151 *text = dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS");
1153 if (state != BUTTON_STATE_DIM)
1154 *func = __shortcuts_volume_key_popup_cb;
1157 case CAM_MENU_SELF_PORTRAIT: {
1158 if (state == BUTTON_STATE_PRESS)
1159 *file_path = CAMERA_SELF_PORTRAIT_PRESS_ICON;
1161 *file_path = CAMERA_SELF_PORTRAIT_NORMAL_ICON;
1163 *text = dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT");
1165 if (state != BUTTON_STATE_DIM)
1166 *func = __shortcuts_self_portrait_popup_cb;
1169 case CAM_MENU_FLASH: {
1170 *file_path = __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), state);
1171 *text = dgettext(PACKAGE, "IDS_CAM_BODY_FLASH");
1173 if (state != BUTTON_STATE_DIM)
1174 *func = __shortcuts_setting_flash_popup_cb;
1177 case CAM_MENU_SHOOTING_MODE: {
1178 *file_path = __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), state);
1179 *text = dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE");
1181 if (state != BUTTON_STATE_DIM)
1182 *func = __shortcuts_shooting_mode_popup_cb;
1185 case CAM_MENU_RECORDING_MODE: {
1186 *file_path = __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), state);
1187 *text = dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE");
1189 if (state != BUTTON_STATE_DIM)
1190 *func = __shortcuts_record_mode_popup_cb;
1193 case CAM_MENU_SCENE_MODE: {
1194 *file_path = __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), state);
1195 *text = dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE");
1197 if (state != BUTTON_STATE_DIM)
1198 *func = __shortcuts_scene_mode_popup_cb;
1201 case CAM_MENU_EXPLOSURE_VALUE: {
1202 *file_path = __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, state);
1203 *text = dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE");
1205 if (state != BUTTON_STATE_DIM)
1206 *func = __shortcuts_exposure_popup_cb;
1209 case CAM_MENU_FOCUS_MODE: {
1210 *file_path = __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), state);
1211 *text = dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE");
1213 if (state != BUTTON_STATE_DIM)
1214 *func = __shortcuts_focus_mode_popup_cb;
1217 case CAM_MENU_TIMER: {
1218 *file_path = __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), state);
1219 *text = dgettext(PACKAGE, "IDS_CAM_BODY_TIMER");
1221 if (state != BUTTON_STATE_DIM)
1222 *func = __shortcuts_setting_timer_popup_cb;
1226 case CAM_MENU_EFFECTS: {
1227 *file_path = __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), state);
1228 *text = dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS");
1230 if (state != BUTTON_STATE_DIM)
1231 *func = __shortcuts_effects_popup_cb;
1234 case CAM_MENU_PHOTO_RESOLUTION: {
1235 *file_path = __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), state);
1236 *text = dgettext(PACKAGE, "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB");
1238 if (state != BUTTON_STATE_DIM)
1239 *func = __shortcuts_photo_resolution_popup_cb;
1242 case CAM_MENU_VIDEO_RESOLUTION: {
1243 *file_path = __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), state);
1244 *text = dgettext(PACKAGE, "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB");
1246 if (state != BUTTON_STATE_DIM)
1247 *func = __shortcuts_video_resolution_popup_cb;
1251 case CAM_MENU_WHITE_BALANCE: {
1252 *file_path = __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), state);
1253 *text = dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB");
1255 if (state != BUTTON_STATE_DIM)
1256 *func = __shortcuts_white_banlance_popup_cb;
1259 case CAM_MENU_ISO: {
1260 *file_path = __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), state);
1261 *text = dgettext(PACKAGE, "IDS_CAM_BODY_ISO");
1263 if (state != BUTTON_STATE_DIM)
1264 *func = __shortcuts_setting_iso_popup_cb;
1267 case CAM_MENU_METERING: {
1268 *file_path = __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), state);
1269 *text = dgettext(PACKAGE, "IDS_CAM_BODY_METERING");
1271 if (state != BUTTON_STATE_DIM)
1272 *func = __shortcuts_setting_metering_popup_cb;
1275 case CAM_MENU_ANTI_SHAKE: {
1276 if (ad->camapp_handle->anti_shake) {
1277 if (state == BUTTON_STATE_PRESS)
1278 *file_path = ANTISHAKE_ON_PRESS_ICON;
1280 *file_path = ANTISHAKE_ON_NORMAL_ICON;
1283 if (state == BUTTON_STATE_PRESS)
1284 *file_path = ANTISHAKE_OFF_PRESS_ICON;
1286 *file_path = ANTISHAKE_OFF_NORMAL_ICON;
1289 *text = dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE");
1291 if (state != BUTTON_STATE_DIM)
1292 *func = __shortcuts_anti_shake_popup_cb;
1295 case CAM_MENU_OUTDOOR_VISIBILITY: {
1296 if (ad->camapp_handle->outdoor_visibility) {
1297 if (state == BUTTON_STATE_PRESS)
1298 *file_path = OUTDOOR_VISIBILITY_ON_PRESS_ICON;
1300 *file_path = OUTDOOR_VISIBILITY_ON_NORMAL_ICON;
1303 if (state == BUTTON_STATE_PRESS)
1304 *file_path = OUTDOOR_VISIBILITY_OFF_PRESS_ICON;
1306 *file_path = OUTDOOR_VISIBILITY_OFF_NORMAL_ICON;
1309 *text = dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY");
1311 if (state != BUTTON_STATE_DIM)
1312 *func = __shortcuts_outdoor_visibility_popup_cb;
1315 case CAM_MENU_AUTO_CONTRAST: {
1316 if (ad->camapp_handle->auto_contrast) {
1317 if (state == BUTTON_STATE_PRESS)
1318 *file_path = AUTO_CONTRAST_ON_PRESS_ICON;
1320 *file_path = AUTO_CONTRAST_ON_NORMAL_ICON;
1323 if (state == BUTTON_STATE_PRESS)
1324 *file_path = AUTO_CONTRAST_OFF_PRESS_ICON;
1326 *file_path = AUTO_CONTRAST_OFF_NORMAL_ICON;
1329 *text = dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST");
1331 if (state != BUTTON_STATE_DIM)
1332 *func = __shortcuts_auto_contrast_popup_cb;
1335 case CAM_MENU_GUIDELINES: {
1336 if (ad->camapp_handle->guideline) {
1337 if (state == BUTTON_STATE_PRESS)
1338 *file_path = GUIDELINE_ON_PRESS_ICON;
1340 *file_path = GUIDELINE_ON_NORMAL_ICON;
1343 if (state == BUTTON_STATE_PRESS)
1344 *file_path = GUIDELINE_OFF_PRESS_ICON;
1346 *file_path = GUIDELINE_OFF_NORMAL_ICON;
1349 *text = dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE");
1351 if (state != BUTTON_STATE_DIM)
1352 *func = __shortcuts_guideline_popup_cb;
1355 case CAM_MENU_CAPTURE_VOICE: {
1356 if (ad->camapp_handle->capture_by_voice) {
1357 if (state == BUTTON_STATE_PRESS)
1358 *file_path = CAPTURE_WITH_VOICE_ON_PRESS_ICON;
1360 *file_path = CAPTURE_WITH_VOICE_ON_NORMAL_ICON;
1363 if (state == BUTTON_STATE_PRESS)
1364 *file_path = CAPTURE_WITH_VOICE_OFF_PRESS_ICON;
1366 *file_path = CAPTURE_WITH_VOICE_OFF_NORMAL_ICON;
1369 *text = "Capture with voice";
1371 if (state != BUTTON_STATE_DIM)
1372 *func = __shortcuts_capture_voice_popup_cb;
1375 case CAM_MENU_GPS_TAG: {
1376 if (ad->camapp_handle->gps) {
1377 if (state == BUTTON_STATE_PRESS)
1378 *file_path = GPS_ON_PRESS_ICON;
1380 *file_path = GPS_ON_NORMAL_ICON;
1383 if (state == BUTTON_STATE_PRESS)
1384 *file_path = GPS_OFF_PRESS_ICON;
1386 *file_path = GPS_OFF_NORMAL_ICON;
1389 *text = dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG");
1391 if (state != BUTTON_STATE_DIM)
1392 *func = __shortcuts_gps_tag_popup_cb;
1395 case CAM_MENU_SAVE_AS_FLIP: {
1396 if (ad->camapp_handle->save_as_flip) {
1397 if (state == BUTTON_STATE_PRESS)
1398 *file_path = SAVE_AS_FLIP_ON_PRESS_ICON;
1400 *file_path = SAVE_AS_FLIP_ON_NORMAL_ICON;
1403 if (state == BUTTON_STATE_PRESS)
1404 *file_path = SAVE_AS_FLIP_OFF_PRESS_ICON;
1406 *file_path = SAVE_AS_FLIP_OFF_NORMAL_ICON;
1409 *text = dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED");
1411 if (state != BUTTON_STATE_DIM)
1412 *func = __shortcuts_save_as_flip_cb;
1415 case CAM_MENU_STORAGE: {
1416 *file_path = __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), state);
1417 *text = dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE");
1419 if (state != BUTTON_STATE_DIM)
1420 *func = __shortcuts_storage_popup_cb;
1423 case CAM_MENU_RESET: {
1424 if (state == BUTTON_STATE_PRESS)
1425 *file_path = RESET_SETTING_PRESS_ICON;
1427 *file_path = RESET_SETTING_NORMAL_ICON;
1429 *text = dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET");
1431 if (state != BUTTON_STATE_DIM)
1432 *func = __shortcuts_reset_popup_cb;
1440 static void __toolbar_menu_icon_update(struct appdata *ad)
1442 cam_ret_if(ad == NULL);
1444 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1445 __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
1449 static void __toolbar_menu_item_unswallow(struct appdata *ad)
1451 cam_ret_if(ad == NULL);
1452 cam_ret_if(ad->toolbar_edje == NULL);
1455 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1456 char buf[32 + 1] = {'\0', };
1457 snprintf(buf, 32, "toolbar_%d_icon", i);
1458 elm_object_part_content_unset(ad->toolbar_edje, buf);
1462 static void __toolbar_menu_item_destroy(struct appdata *ad)
1464 cam_ret_if(ad == NULL);
1465 __toolbar_menu_item_unswallow(ad);
1466 Evas_Object *icon = NULL;
1468 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1469 icon = ad->toolbar_menu_arrays[i].icon;
1470 DEL_EVAS_OBJECT(icon);
1471 ad->toolbar_menu_arrays[i].icon = NULL;
1475 static void __toolbar_menu_item_swallow(struct appdata *ad)
1477 cam_ret_if(ad == NULL);
1478 cam_ret_if(ad->toolbar_edje == NULL);
1480 Evas_Object *icon = NULL;
1482 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1483 icon = ad->toolbar_menu_arrays[i].icon;
1484 char buf[32 + 1] = {'\0', };
1485 snprintf(buf, 32, "toolbar_%d_icon", i);
1486 elm_object_part_content_set(ad->toolbar_edje, buf, icon);
1491 static int __toolbar_menu_item_create(struct appdata *ad)
1494 cam_retv_if(ad == NULL, -1);
1495 CamAppData *camapp = ad->camapp_handle;
1496 cam_retv_if(camapp == NULL, -1);
1498 Evas_Object *icon = NULL;
1499 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
1502 icon = elm_image_add(ad->toolbar_edje);
1503 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
1505 elm_object_part_content_set(ad->toolbar_edje, "toolbar_0_icon", icon);
1506 ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon = icon;
1510 for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1511 icon = ad->toolbar_menu_arrays[i].icon;
1513 icon = elm_image_add(ad->toolbar_edje);
1515 char buf[32 + 1] = {'\0', };
1516 snprintf(buf, 32, "toolbar_%d_icon", i);
1517 elm_object_part_content_set(ad->toolbar_edje, buf, icon);
1518 ad->toolbar_menu_arrays[i].icon = icon;
1523 static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state)
1525 cam_retm_if(ad == NULL, "appdata is null");
1527 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
1528 __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_menu_arrays[i].menu_type, state);
1530 if(state == TOOLBAR_ITEM_STATE_DIM) { //it don't make dimming in edje
1531 Evas_Object *icon = NULL;
1532 int menubar_no = __get_menubar_no_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
1533 cam_retm_if(menubar_no == CAM_MENU_BAR_LEFT_INVALID, "invalid menubar no");
1535 icon = ad->toolbar_menu_arrays[menubar_no].icon;
1538 evas_object_color_set(icon, 255, 255, 255, 77); // set opacity 30%
1543 static void __toolbar_menu_item_reset(struct appdata *ad)
1545 cam_retm_if(ad == NULL, "appdata is null");
1547 __toolbar_menu_item_destroy(ad);
1548 __toolbar_menu_item_create(ad);
1550 ad->toolbar_menu_arrays[1].menu_type = CAM_MENU_EMPTY;
1551 ad->toolbar_menu_arrays[2].menu_type = CAM_MENU_EMPTY;
1553 if (cam_mm_is_support_front_camera() == TRUE)
1554 ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_SELF_PORTRAIT;
1556 ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_EMPTY;
1558 #ifdef CAMERA_MACHINE_I686
1559 ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_EMPTY;
1561 ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_FLASH;
1564 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
1566 cam_toolbar_menu_config_update(ad);
1569 static void __toolbar_shutter_button_unset(struct appdata *ad)
1571 cam_ret_if(ad == NULL);
1572 cam_ret_if(ad->toolbar_edje == NULL);
1574 elm_object_part_content_unset(ad->toolbar_edje, "shutter_button");
1577 static void __toolbar_shutter_button_destroy(struct appdata *ad)
1579 cam_ret_if(ad == NULL);
1581 if (ad->shutterbtn) {
1582 __toolbar_shutter_button_unset(ad);
1583 if (ad->shutterbtn_camera_icon) {
1584 elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
1585 DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
1587 DEL_EVAS_OBJECT(ad->shutterbtn)
1591 static void __toolbar_shutter_button_set(struct appdata *ad)
1593 cam_ret_if(ad == NULL);
1594 cam_ret_if(ad->toolbar_edje == NULL);
1595 cam_ret_if(ad->shutterbtn == NULL);
1597 elm_object_part_content_set(ad->toolbar_edje, "shutter_button", ad->shutterbtn);
1600 static int __toolbar_shutter_button_create(struct appdata *ad)
1603 cam_retv_if(ad == NULL, -1);
1604 Evas_Object *edje = NULL;
1605 if (ad->shutterbtn) {
1606 if (ad->shutterbtn_camera_icon) {
1607 elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
1608 DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
1610 DEL_EVAS_OBJECT(ad->shutterbtn)
1612 ad->shutterbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "shutter_button");
1613 edje = ad->shutterbtn;
1614 cam_retv_if(edje == NULL, -1);
1616 ad->shutterbtn_camera_icon = elm_image_add(edje);
1617 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
1618 elm_object_part_content_set(edje, "camera_icon", ad->shutterbtn_camera_icon);
1620 edje_object_signal_callback_del(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb);
1621 edje_object_signal_callback_add(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb, ad);
1623 elm_object_part_content_set(ad->toolbar_edje, "shutter_button", edje);
1624 evas_object_show(edje);
1627 return EXIT_SUCCESS;
1630 void cam_toolbar_update_shutter_button(struct appdata *ad, ToolbarItemState state)
1632 __toolbar_shutter_button_update(ad, state);
1635 static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state)
1637 cam_ret_if(ad == NULL);
1638 CamAppData *camapp = ad->camapp_handle;
1639 cam_ret_if(camapp == NULL);
1641 if (state == TOOLBAR_ITEM_STATE_NORMAL) {
1642 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
1643 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
1644 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
1645 } else if (state == TOOLBAR_ITEM_STATE_PRESS) {
1646 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
1647 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
1648 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
1649 } else if (state == TOOLBAR_ITEM_STATE_DIM) {
1650 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,dim", "prog");
1651 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,dim", "prog");
1652 elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON_DIM);
1653 } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1654 edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,invisible", "prog");
1655 edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,invisible", "prog");
1657 DEBUG_TRACE("Invalid state for shutter button");
1661 static void __toolbar_recording_button_unset(struct appdata *ad)
1663 cam_ret_if(ad == NULL);
1664 cam_ret_if(ad->toolbar_edje == NULL);
1666 elm_object_part_content_unset(ad->toolbar_edje, "recording_button");
1669 static void __toolbar_recording_button_destroy(struct appdata *ad)
1671 cam_ret_if(ad == NULL);
1673 __toolbar_recording_button_unset(ad);
1674 DEL_EVAS_OBJECT(ad->recordingbtn);
1677 static void __toolbar_recording_button_set(struct appdata *ad)
1679 cam_ret_if(ad == NULL);
1680 cam_ret_if(ad->toolbar_edje == NULL);
1681 cam_ret_if(ad->recordingbtn == NULL);
1683 elm_object_part_content_set(ad->toolbar_edje, "recording_button", ad->recordingbtn);
1686 static int __toolbar_recording_button_create(struct appdata *ad)
1689 cam_retv_if(ad == NULL, -1);
1690 Evas_Object *edje = NULL;
1691 DEL_EVAS_OBJECT(ad->recordingbtn);
1692 ad->recordingbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_button");
1693 edje = ad->recordingbtn;
1694 cam_retv_if(edje == NULL, -1);
1696 edje_object_signal_callback_del(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb);
1697 edje_object_signal_callback_add(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb, ad);
1698 elm_object_part_content_set(ad->toolbar_edje, "recording_button", edje);
1699 evas_object_show(edje);
1702 return EXIT_SUCCESS;
1705 static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state)
1707 cam_ret_if(ad == NULL);
1708 CamAppData *camapp = ad->camapp_handle;
1709 cam_ret_if(camapp == NULL);
1710 cam_ret_if(ad->recordingbtn == NULL);
1712 int recording_state = 0;
1714 if (state == TOOLBAR_ITEM_STATE_NORMAL) {
1715 recording_state = cam_mm_get_state();
1717 if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (recording_state == RECORDER_STATE_RECORDING)) {
1718 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
1719 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
1721 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
1722 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,invisible", "prog");
1725 } else if (state == TOOLBAR_ITEM_STATE_DIM) {
1726 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,dim", "prog");
1727 } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1728 edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
1730 DEBUG_TRACE("Invalid state for recording button");
1734 static void __toolbar_recording_stop_button_unset(struct appdata *ad)
1736 cam_ret_if(ad == NULL);
1737 cam_ret_if(ad->toolbar_edje == NULL);
1739 elm_object_part_content_unset(ad->toolbar_edje, "recording_stop_button");
1742 static void __toolbar_recording_stop_button_destroy(struct appdata *ad)
1744 cam_ret_if(ad == NULL);
1746 __toolbar_recording_stop_button_unset(ad);
1747 DEL_EVAS_OBJECT(ad->recording_stop_btn);
1750 static void __toolbar_recording_stop_button_set(struct appdata *ad)
1752 cam_ret_if(ad == NULL);
1753 cam_ret_if(ad->toolbar_edje == NULL);
1754 cam_ret_if(ad->recording_stop_btn == NULL);
1756 elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", ad->recording_stop_btn);
1759 static int __toolbar_recording_stop_button_create(struct appdata *ad)
1762 cam_retv_if(ad == NULL, -1);
1763 Evas_Object *edje = NULL;
1764 DEL_EVAS_OBJECT(ad->recording_stop_btn);
1765 ad->recording_stop_btn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_stop_button");
1766 edje = ad->recording_stop_btn;
1767 cam_retv_if(edje == NULL, -1);
1769 edje_object_signal_callback_del(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb);
1770 edje_object_signal_callback_add(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb, ad);
1771 elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", edje);
1772 edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
1773 evas_object_show(edje);
1776 return EXIT_SUCCESS;
1779 static void __toolbar_quickview_item_unset(struct appdata *ad)
1781 cam_ret_if(ad == NULL);
1782 cam_ret_if(ad->toolbar_edje == NULL);
1784 elm_object_part_content_unset(ad->toolbar_edje, "quickview_item");
1787 static void __toolbar_quickview_item_destroy(struct appdata *ad)
1789 cam_ret_if(ad == NULL);
1791 __toolbar_quickview_item_unset(ad);
1792 DEL_EVAS_OBJECT(ad->toolbar.quickview_item.edje);
1795 static void __toolbar_quickview_item_set(struct appdata *ad)
1797 cam_ret_if(ad == NULL);
1798 cam_ret_if(ad->toolbar_edje == NULL);
1799 cam_ret_if(ad->toolbar.quickview_item.edje == NULL);
1801 elm_object_part_content_set(ad->toolbar_edje, "quickview_item", ad->toolbar.quickview_item.edje);
1804 static int __toolbar_quickview_item_create(struct appdata *ad)
1807 cam_retv_if(ad == NULL, -1);
1808 Evas_Object *edje = NULL;
1810 if (ad->toolbar.quickview_item.edje == NULL) {
1811 ad->toolbar.quickview_item.edje =
1812 cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_quickview_item");
1813 edje_object_signal_callback_del(_EDJ(ad->toolbar.quickview_item.edje),
1814 "*", "toolbar_signal", __toolbar_quickview_cb);
1815 edje_object_signal_callback_add(_EDJ(ad->toolbar.quickview_item.edje),
1816 "*", "toolbar_signal", __toolbar_quickview_cb, ad);
1818 edje = ad->toolbar.quickview_item.edje;
1820 cam_retv_if(edje == NULL, -1);
1821 elm_object_part_content_set(ad->toolbar_edje, "quickview_item", edje);
1822 evas_object_show(edje);
1824 return EXIT_SUCCESS;
1827 static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state)
1829 cam_ret_if(ad == NULL);
1831 Evas_Object *edje = NULL;
1832 edje = ad->toolbar.quickview_item.edje;
1834 if (state == TOOLBAR_ITEM_STATE_NORMAL) {
1835 edje_object_signal_emit(_EDJ(edje), "SET_DEFAULT", "prog");
1836 } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1837 edje_object_signal_emit(_EDJ(edje), "SET_INVISIBLE", "prog");
1839 DEBUG_TRACE("Invalid state for quickview button");
1843 static int __toolbar_backbutton_create(struct appdata *ad)
1845 DEBUG_TRACE("START");
1846 cam_retv_if(ad == NULL, -1);
1847 Evas_Object *edje = NULL;
1848 if (ad->backbtn == NULL) {
1849 ad->backbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_backbutton_item");
1850 edje_object_signal_callback_del(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb);
1851 edje_object_signal_callback_add(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb, ad);
1855 cam_retv_if(edje == NULL, -1);
1856 elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", edje);
1857 evas_object_show(edje);
1859 return EXIT_SUCCESS;
1862 static void __toolbar_backbutton_unset(struct appdata *ad)
1864 cam_ret_if(ad == NULL);
1865 cam_ret_if(ad->toolbar_edje == NULL);
1867 elm_object_part_content_unset(ad->toolbar_edje, "backbutton_item");
1870 static void __toolbar_backbutton_destroy(struct appdata *ad)
1872 cam_ret_if(ad == NULL);
1874 __toolbar_backbutton_unset(ad);
1875 DEL_EVAS_OBJECT(ad->backbtn);
1878 static void __toolbar_backbutton_set(struct appdata *ad)
1880 cam_ret_if(ad == NULL);
1881 cam_ret_if(ad->toolbar_edje == NULL);
1882 cam_ret_if(ad->backbtn == NULL);
1884 elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", ad->backbtn);
1888 static void __toolbar_cafbutton_unset(struct appdata *ad)
1890 cam_ret_if(ad == NULL);
1891 cam_ret_if(ad->toolbar_edje == NULL);
1893 elm_object_part_content_unset(ad->toolbar_edje, "cafbutton_item");
1896 static void __toolbar_cafbutton_destroy(struct appdata *ad)
1898 cam_ret_if(ad == NULL);
1899 __toolbar_cafbutton_unset(ad);
1900 DEL_EVAS_OBJECT(ad->caf_button);
1903 static void __toolbar_cafbutton_set(struct appdata *ad)
1905 cam_ret_if(ad == NULL);
1906 cam_ret_if(ad->toolbar_edje == NULL);
1907 cam_ret_if(ad->caf_button == NULL);
1909 elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
1912 static int __toolbar_cafbutton_create(struct appdata *ad)
1914 DEBUG_TRACE("START");
1915 cam_retvm_if(ad == NULL, -1, "appdata is null");
1916 if (ad->caf_button == NULL) {
1917 ad->caf_button = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_cafbutton_item");
1919 cam_retvm_if(ad->caf_button == NULL, -1, "ad->caf_button is null");
1921 edje_object_signal_callback_del(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb);
1922 edje_object_signal_callback_add(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb, ad);
1924 elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
1925 evas_object_show(ad->caf_button);
1927 return EXIT_SUCCESS;
1930 static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state)
1932 cam_retm_if(ad == NULL, "appdata is null");
1933 cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
1935 if (state == TOOLBAR_ITEM_STATE_NORMAL) {
1936 show_caf_button = TRUE;
1937 edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,normal", "prog");
1938 } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1939 show_caf_button = FALSE;
1940 edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,invisible", "prog");
1942 show_caf_button = FALSE;
1943 DEBUG_TRACE("Invalid state for caf_button");
1947 static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state)
1949 cam_retm_if(ad == NULL, "appdata is null");
1950 cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
1952 if (state == TOOLBAR_ITEM_STATE_NORMAL) {
1953 edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,show", "prog");
1954 } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
1955 edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,hide", "prog");
1957 DEBUG_TRACE("Invalid state for caf_button");
1961 #define SETTING_SHORTCUTS_HOLD_TIME (0.5)
1962 static Ecore_Timer *edit_shortcuts_timer = NULL;
1963 static Eina_Bool __toolbar_show_edit_shortcuts_timer_cb(void *data)
1965 struct appdata *ad = (struct appdata *)data;
1966 cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
1967 if (edit_shortcuts_timer) {
1968 edit_shortcuts_timer = NULL;
1970 toolbar_create_shortcuts_popup(ad);
1971 return ECORE_CALLBACK_CANCEL;
1974 static void __toolbar_create_show_edit_shortcuts_timer(void *data)
1976 struct appdata *ad = (struct appdata *)data;
1977 cam_ret_if(ad == NULL);
1978 if (edit_shortcuts_timer) {
1979 ecore_timer_del(edit_shortcuts_timer);
1980 edit_shortcuts_timer = NULL;
1982 edit_shortcuts_timer = ecore_timer_add(SETTING_SHORTCUTS_HOLD_TIME,
1983 __toolbar_show_edit_shortcuts_timer_cb,
1987 static void __toolbar_destroy_show_edit_shortcuts_timer(void)
1989 if (edit_shortcuts_timer) {
1990 ecore_timer_del(edit_shortcuts_timer);
1991 edit_shortcuts_timer = NULL;
1995 static void __toolbar_edje_signal_cb(void *data, Evas_Object *o,
1996 const char *emission, const char *source)
1998 DEBUG_TRACE("_________________################____________________\n");
2000 struct appdata *ad = (struct appdata *)data;
2001 cam_ret_if(ad == NULL);
2002 cam_app_timeout_checker_update();
2003 DEBUG_TRACE("ad->is_rotating = %d", ad->is_rotating);
2004 if (ad->is_rotating == TRUE) {
2005 DEBUG_TRACE("now in rotating target, do not accept signal");
2008 CamAppData *camapp = ad->camapp_handle;
2009 cam_ret_if(camapp == NULL);
2010 cam_ret_if(emission == NULL);
2011 cam_ret_if(source == NULL);
2014 unload_zoom_edje(ad);
2020 cam_tip_popup_destroy(ad);
2022 if (ad->edit_shortcuts_popup) {
2023 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
2027 if(ad->battery_status == LOW_BATTERY_CRITICAL_STATUS)
2030 if (emission && source)
2031 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
2033 Evas_Object_Event_Cb func = NULL;
2035 if (strcmp(emission, "toolbar_0_press_sig") == 0) {
2036 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_PRESS_ICON);
2037 __toolbar_create_show_edit_shortcuts_timer(ad);
2038 } else if (strcmp(emission, "toolbar_0_release_sig") == 0) {
2039 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
2040 __toolbar_destroy_show_edit_shortcuts_timer();
2041 } else if (strcmp(emission, "toolbar_0_click_sig") == 0) {
2042 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2044 if (ad->toolbar_setting_popup) {
2045 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2046 cam_toolbar_setting_popup_destroy(ad);
2049 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2050 cam_toolbar_setting_popup_create(ad);
2051 elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
2052 } else if (strcmp(emission, "toolbar_1_press_sig") == 0) {
2053 Evas_Object *icon = NULL;
2055 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
2056 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
2057 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2058 __toolbar_create_show_edit_shortcuts_timer(ad);
2059 } else if (strcmp(emission, "toolbar_1_release_sig") == 0) {
2060 Evas_Object *icon = NULL;
2062 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
2063 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
2064 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2065 __toolbar_destroy_show_edit_shortcuts_timer();
2066 } else if (strcmp(emission, "toolbar_1_click_sig") == 0) {
2067 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2069 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2070 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2071 if (menu_bar_no == CAM_MENU_BAR_LEFT_1) {
2072 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2073 cam_toolbar_setting_popup_destroy(ad);
2076 if (ad->toolbar_setting_popup) {
2077 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2078 cam_toolbar_setting_popup_destroy(ad);
2081 Evas_Object *icon = NULL;
2083 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
2084 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
2085 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2087 (*func)((void *)ad, NULL, o, NULL);
2089 } else if (strcmp(emission, "toolbar_2_press_sig") == 0) {
2090 Evas_Object *icon = NULL;
2092 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
2093 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
2094 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2095 __toolbar_create_show_edit_shortcuts_timer(ad);
2096 } else if (strcmp(emission, "toolbar_2_release_sig") == 0) {
2097 Evas_Object *icon = NULL;
2099 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
2100 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
2101 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2102 __toolbar_destroy_show_edit_shortcuts_timer();
2103 } else if (strcmp(emission, "toolbar_2_click_sig") == 0) {
2104 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2106 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2107 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2108 if (menu_bar_no == CAM_MENU_BAR_LEFT_2) {
2109 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2110 cam_toolbar_setting_popup_destroy(ad);
2113 if (ad->toolbar_setting_popup) {
2114 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2115 cam_toolbar_setting_popup_destroy(ad);
2117 Evas_Object *icon = NULL;
2119 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
2120 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
2121 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2123 (*func)((void *)ad, NULL, o, NULL);
2125 } else if (strcmp(emission, "toolbar_3_press_sig") == 0) {
2126 Evas_Object *icon = NULL;
2128 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
2129 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
2130 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2131 __toolbar_create_show_edit_shortcuts_timer(ad);
2132 } else if (strcmp(emission, "toolbar_3_release_sig") == 0) {
2133 Evas_Object *icon = NULL;
2135 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
2136 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
2137 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2138 __toolbar_destroy_show_edit_shortcuts_timer();
2139 } else if (strcmp(emission, "toolbar_3_click_sig") == 0) {
2140 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2142 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2143 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2144 if (menu_bar_no == CAM_MENU_BAR_LEFT_3) {
2145 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2146 cam_toolbar_setting_popup_destroy(ad);
2149 if (ad->toolbar_setting_popup) {
2150 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2151 cam_toolbar_setting_popup_destroy(ad);
2153 Evas_Object *icon = NULL;
2155 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
2156 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
2157 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2159 (*func)((void *)ad, NULL, o, NULL);
2161 } else if (strcmp(emission, "toolbar_4_press_sig") == 0) {
2162 Evas_Object *icon = NULL;
2164 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
2165 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
2166 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
2167 __toolbar_create_show_edit_shortcuts_timer(ad);
2168 } else if (strcmp(emission, "toolbar_4_release_sig") == 0) {
2169 Evas_Object *icon = NULL;
2171 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
2172 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
2173 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2174 __toolbar_destroy_show_edit_shortcuts_timer();
2175 } else if (strcmp(emission, "toolbar_4_click_sig") == 0) {
2176 if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
2178 int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
2179 int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
2180 if (menu_bar_no == CAM_MENU_BAR_LEFT_4) {
2181 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2182 cam_toolbar_setting_popup_destroy(ad);
2185 if (ad->toolbar_setting_popup) {
2186 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2187 cam_toolbar_setting_popup_destroy(ad);
2189 Evas_Object *icon = NULL;
2191 icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
2192 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
2193 __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
2195 (*func)((void *)ad, NULL, o, NULL);
2198 DEBUG_TRACE("invalid signal");
2202 int cam_toolbar_create(struct appdata *ad)
2205 cam_retv_if(ad == NULL, -1);
2206 CamAppData *cam_handle = ad->camapp_handle;
2207 cam_retv_if(cam_handle == NULL, -1);
2209 elm_object_part_content_unset(ad->ug_base, "toolbar_layout");
2211 /*note: create layout*/
2212 switch (ad->target_direction) {
2213 case CAM_TARGET_DIRECTION_LANDSCAPE:
2214 if (ad->toolbar_edje_landscape == NULL) {
2215 ad->toolbar_edje_landscape = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2216 cam_retv_if(ad->toolbar_edje_landscape == NULL, -1);
2218 ad->toolbar_edje = ad->toolbar_edje_landscape;
2220 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2221 if (ad->toolbar_edje_landscape_inverse == NULL) {
2222 ad->toolbar_edje_landscape_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2223 cam_retv_if(ad->toolbar_edje_landscape_inverse == NULL, -1);
2225 ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
2227 case CAM_TARGET_DIRECTION_PORTRAIT:
2228 if (ad->toolbar_edje_portrait == NULL) {
2229 ad->toolbar_edje_portrait = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2230 cam_retv_if(ad->toolbar_edje_portrait == NULL, -1);
2232 ad->toolbar_edje = ad->toolbar_edje_portrait;
2234 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2235 if (ad->toolbar_edje_portrait_inverse == NULL) {
2236 ad->toolbar_edje_portrait_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
2237 cam_retv_if(ad->toolbar_edje_portrait_inverse == NULL, -1);
2239 ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
2242 DEBUG_TRACE("note: run into un-reached codes");
2244 cam_retv_if(ad->toolbar_edje == NULL, -1);
2246 elm_object_part_content_set(ad->ug_base, "toolbar_layout", ad->toolbar_edje);
2248 __toolbar_menu_item_create(ad);
2250 elm_object_signal_callback_del(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb);
2251 elm_object_signal_callback_add(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb, ad);
2253 __toolbar_shutter_button_create(ad);
2254 __toolbar_recording_button_create(ad);
2256 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL)
2257 __toolbar_quickview_item_create(ad);
2259 __toolbar_backbutton_create(ad);
2260 __toolbar_cafbutton_create(ad);
2262 cam_toolbar_update(ad);
2264 return EXIT_SUCCESS;
2267 void cam_toolbar_content_destroy(struct appdata *ad)
2269 cam_retm_if(ad == NULL, "appdata is NULL");
2270 __toolbar_menu_item_destroy(ad);
2271 __toolbar_shutter_button_destroy(ad);
2272 __toolbar_recording_button_destroy(ad);
2273 __toolbar_recording_stop_button_destroy(ad);
2274 __toolbar_quickview_item_destroy(ad);
2275 __toolbar_backbutton_destroy(ad);
2276 __toolbar_cafbutton_destroy(ad);
2279 void cam_toolbar_destroy(struct appdata *ad)
2281 cam_retm_if(ad == NULL, "appdata is NULL");
2282 cam_toolbar_content_destroy(ad);
2283 /*NOTE: all sub obj of toolbar will be deleted auto while toolar is deleted*/
2284 edje_object_signal_callback_del(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb);
2285 DEL_EVAS_OBJECT(ad->toolbar_edje_landscape);
2286 DEL_EVAS_OBJECT(ad->toolbar_edje_landscape_inverse);
2287 DEL_EVAS_OBJECT(ad->toolbar_edje_portrait);
2288 DEL_EVAS_OBJECT(ad->toolbar_edje_portrait_inverse);
2290 ad->toolbar_edje = NULL;
2292 REMOVE_TIMER(ad->setting_toolbar_hide_timer);
2294 /*elm_all_flush();*/
2295 cam_elm_cache_flush();
2298 void cam_toolbar_update(struct appdata *ad)
2301 cam_retm_if(ad == NULL, "appdata is NULL");
2302 CamAppData *camapp = ad->camapp_handle;
2303 cam_retm_if(camapp == NULL, "camapp is NULL");
2304 CamShotMode shotmode = camapp->shooting_mode;
2306 __toolbar_menu_icon_update(ad);
2308 if (ad->timer_activated) {
2309 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2310 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2312 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2313 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2314 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2316 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2317 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2320 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2321 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2324 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2326 case CAM_SINGLE_MODE:
2327 case CAM_SELF_SINGLE_MODE:
2328 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2330 if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
2331 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2332 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2333 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2335 if (cam_is_enabled_menu(ad, CAM_MENU_BURST_SHOT_MODE)
2336 && camapp->continuous_shot_data
2337 && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING) {
2338 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_DIM);
2339 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_PRESS);
2340 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2342 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2343 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2344 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2347 __toolbar_recording_stop_button_destroy(ad);
2349 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2350 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2355 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2356 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2357 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2358 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2359 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2360 __toolbar_recording_stop_button_destroy(ad);
2361 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2365 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2367 if (ad->is_recording) {
2368 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2369 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2371 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2373 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2374 __toolbar_recording_stop_button_create(ad);
2376 if (show_caf_button)
2377 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2379 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2380 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2383 __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2384 __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2386 if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
2387 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
2389 __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2392 __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2393 __toolbar_recording_stop_button_destroy(ad);
2395 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
2397 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
2398 __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
2405 int cam_toolbar_rotate(struct appdata *ad)
2408 cam_retv_if(ad == NULL, -1);
2409 CamAppData *cam_handle = ad->camapp_handle;
2410 cam_retv_if(cam_handle == NULL, -1);
2411 cam_toolbar_setting_popup_destroy(ad);
2412 cam_toolbar_destroy(ad);
2414 switch (ad->target_direction) {
2415 case CAM_TARGET_DIRECTION_LANDSCAPE:
2416 if (ad->toolbar_edje_landscape == NULL) {
2417 cam_toolbar_create(ad);
2419 ad->toolbar_edje = ad->toolbar_edje_landscape;
2421 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2422 if (ad->toolbar_edje_landscape_inverse == NULL) {
2423 cam_toolbar_create(ad);
2425 ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
2427 case CAM_TARGET_DIRECTION_PORTRAIT:
2428 if (ad->toolbar_edje_portrait == NULL) {
2429 cam_toolbar_create(ad);
2431 ad->toolbar_edje = ad->toolbar_edje_portrait;
2433 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2434 if (ad->toolbar_edje_portrait_inverse == NULL) {
2435 cam_toolbar_create(ad);
2437 ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
2440 DEBUG_TRACE("note: run into un-reached codes");
2443 evas_object_show(ad->toolbar_edje);
2445 return EXIT_SUCCESS;
2448 int show_toolbar_edje(struct appdata *ad)
2450 cam_retv_if(ad == NULL, -1);
2451 if (ad->toolbar_edje == NULL) {
2454 if (!ad->toolbar_hided) {
2455 cam_toolbar_update(ad);
2456 evas_object_show(ad->toolbar_edje);
2458 hide_toolbar_edje(ad);
2461 return EXIT_SUCCESS;
2464 int hide_toolbar_edje(struct appdata *ad)
2466 cam_retv_if(ad == NULL, -1);
2467 evas_object_hide(ad->toolbar_edje);
2468 return EXIT_SUCCESS;
2471 gboolean toolbar_update_quickview_thumbnail_no_animation(struct appdata *ad)
2473 cam_retv_if(ad == NULL, FALSE);
2474 CamAppData *camapp = ad->camapp_handle;
2475 cam_retv_if(camapp == NULL, FALSE);
2476 DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
2477 DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
2479 if (camapp->thumbnail_name != NULL) {
2480 ad->toolbar.quickview_item.thumbnail_image = elm_bg_add(ad->toolbar.quickview_item.edje);
2481 cam_retv_if(ad->toolbar.quickview_item.thumbnail_image == NULL, FALSE);
2482 elm_bg_file_set(ad->toolbar.quickview_item.thumbnail_image, camapp->thumbnail_name, NULL);
2484 Evas_Object *layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
2485 Evas_Object *thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout, "thumbnail_area");
2486 cam_retv_if(thumbnail_area == NULL, FALSE);
2487 Evas_Coord x = 0, y = 0, w = 0, h = 0;
2488 evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
2489 evas_object_resize(ad->toolbar.quickview_item.thumbnail_image, w, h);
2490 DEBUG_TRACE("%d %d %d %d", x, y, w, h);
2492 if (ad->toolbar.quickview_item.edje) {
2493 elm_object_part_content_set(ad->toolbar.quickview_item.edje,
2494 "thumbnail", ad->toolbar.quickview_item.thumbnail_image);
2495 evas_object_show(ad->toolbar.quickview_item.edje);
2503 gboolean toolbar_update_quickview_thumbnail(struct appdata *ad)
2505 cam_retv_if(ad == NULL, FALSE);
2506 CamAppData *camapp = ad->camapp_handle;
2507 cam_retv_if(camapp == NULL, FALSE);
2508 cam_retv_if(ad->evas == NULL, FALSE);
2510 cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
2511 DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
2513 cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL);
2518 static void setting_ctxpopup_destroy(struct appdata *ad)
2520 cam_retm_if(ad == NULL, "appdata is NULL");
2522 DEL_EVAS_OBJECT(ad->sub_menu_group);
2524 if (ad->sub_genlist != NULL) {
2525 elm_genlist_clear(ad->sub_genlist);
2526 evas_object_del(ad->sub_genlist);
2527 ad->sub_genlist = NULL;
2530 DEL_EVAS_OBJECT(ad->setting_ctxpopup);
2531 ad->ctxpopup_area = NULL;
2532 ad->sub_menu_type = CAM_MENU_EMPTY;
2534 if (ad->toolbar_setting_popup == NULL)
2535 __set_show_state_preview_obj(ad, TRUE);
2538 static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow)
2540 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
2542 if (ad->setting_ctxpopup)
2543 setting_ctxpopup_destroy(ad);
2545 if (ad->toolbar_edje == NULL)
2546 DEBUG_TRACE("error occur");
2548 __set_show_state_preview_obj(ad, FALSE);
2550 ad->ctxpopup_area = (Evas_Object *)
2551 edje_object_part_object_get(elm_layout_edje_get
2552 (ad->toolbar_edje), "popup_area");
2553 ad->setting_ctxpopup = elm_ctxpopup_add(ad->ctxpopup_area);
2554 elm_object_scroll_hold_push(ad->setting_ctxpopup);
2556 elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera");
2558 elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera_no_arrow");
2559 /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
2560 return EXIT_SUCCESS;
2563 static int setting_toolbar_popup_create(struct appdata *ad)
2565 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
2567 if (ad->setting_ctxpopup)
2568 setting_ctxpopup_destroy(ad);
2570 if (ad->toolbar_edje == NULL)
2571 DEBUG_TRACE("error occur");
2573 ad->toolbar_setting_popup_area = (Evas_Object *)
2574 edje_object_part_object_get(elm_layout_edje_get
2575 (ad->toolbar_edje), "setting_popup");
2576 ad->toolbar_setting_popup = elm_ctxpopup_add(ad->toolbar_setting_popup_area);
2577 elm_object_scroll_hold_push(ad->toolbar_setting_popup);
2578 elm_object_style_set(ad->toolbar_setting_popup, "beat_winset_test/camera");
2579 /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
2580 return EXIT_SUCCESS;
2583 static int setting_shortcuts_popup_create(struct appdata *ad)
2585 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
2587 if (ad->setting_ctxpopup)
2588 setting_ctxpopup_destroy(ad);
2590 if (ad->toolbar_edje == NULL)
2591 DEBUG_TRACE("error occur");
2593 ad->edit_shortcuts_popup = (Evas_Object *)
2594 edje_object_part_object_get(elm_layout_edje_get
2595 (ad->toolbar_edje), "shortcuts_popup");
2597 DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
2598 ad->edit_shortcuts_popup_description =
2599 cam_app_load_edj(ad->toolbar_edje, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME,
2600 "camera/shortcuts/layout/description");
2602 /*TODO: need id: IDS_CAM_POP_TAP_AND_HOLD_AN_ICON_AND_MOVE_TO_EDIT_SHORTCUTS*/
2603 edje_object_part_text_set(_EDJ(ad->edit_shortcuts_popup_description), "description.txtblock", dgettext(PACKAGE, "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"));
2604 elm_object_scroll_hold_push(ad->edit_shortcuts_popup);
2605 return EXIT_SUCCESS;
2608 int cam_guideline_create(struct appdata *ad)
2610 cam_retv_if(ad == NULL, -1);
2611 cam_retv_if(ad->camapp_handle == NULL, -1);
2613 DEL_EVAS_OBJECT(ad->guideline_edje);
2614 elm_object_part_content_unset(ad->ug_base, "guideline_layout");
2616 if (ad->guideline_edje == NULL) {
2617 ad->guideline_edje = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, "guideline");
2620 cam_retv_if(ad->guideline_edje == NULL, -1);
2621 elm_object_part_content_set(ad->ug_base, "guideline_layout", ad->guideline_edje);
2623 gboolean wide_mode = FALSE;
2628 ret = cam_mm_get_video_size(&p_width, &p_height);
2631 DEBUG_TRACE("Middle Ware error occur!");
2635 DEBUG_TRACE("p_width == %d ,p_height = %d" ,p_width , p_height);
2636 if (ad->camapp_handle->camera_mode == CAM_CAMERA_MODE) {
2637 wide_mode = cam_utils_check_wide_resolution(p_width, p_height);
2638 } else if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
2639 if ( p_width > PREVIEW_W ) {
2646 if (p_width == 1392 && p_height == 1392) {
2647 switch (ad->target_direction) {
2648 case CAM_TARGET_DIRECTION_LANDSCAPE:
2649 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2650 DEBUG_TRACE("landscape");
2651 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2652 "guide_line,1,2,normal", "prog_guideline");
2653 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2654 "guide_line,3,4,square", "prog_guideline");
2656 case CAM_TARGET_DIRECTION_PORTRAIT:
2657 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2658 DEBUG_TRACE("portrait");
2659 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2660 "guide_line,1,2,vertical,square", "prog_guideline");
2661 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2662 "guide_line,3,4,vertical,normal", "prog_guideline");
2667 DEBUG_TRACE("hor,wide_mode");
2668 switch (ad->target_direction) {
2669 case CAM_TARGET_DIRECTION_LANDSCAPE:
2670 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2671 DEBUG_TRACE("landscape");
2672 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2673 "guide_line,1,2,normal", "prog_guideline");
2674 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2675 "guide_line,3,4,wide", "prog_guideline");
2677 case CAM_TARGET_DIRECTION_PORTRAIT:
2678 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2679 DEBUG_TRACE("portrait");
2680 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2681 "guide_line,1,2,vertical,wide", "prog_guideline");
2682 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2683 "guide_line,3,4,vertical,normal", "prog_guideline");
2688 DEBUG_TRACE("hor,normal mode");
2689 switch (ad->target_direction) {
2690 case CAM_TARGET_DIRECTION_LANDSCAPE:
2691 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2692 DEBUG_TRACE("landscape");
2693 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2694 "guide_line,1,2,normal", "prog_guideline");
2695 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2696 "guide_line,3,4,normal", "prog_guideline");
2698 case CAM_TARGET_DIRECTION_PORTRAIT:
2699 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2700 DEBUG_TRACE("portrait");
2701 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2702 "guide_line,1,2,vertical,normal", "prog_guideline");
2703 edje_object_signal_emit(_EDJ(ad->guideline_edje),
2704 "guide_line,3,4,vertical,normal", "prog_guideline");
2710 /*evas_object_lower(ad->guideline_edje);*/
2711 evas_object_show(ad->guideline_edje);
2713 DEBUG_TRACE("over");
2717 static void __volume_key_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
2719 cam_retm_if(obj == NULL, "obj is NULL");
2720 struct appdata *ad = (struct appdata *)cam_appdata_get();
2721 cam_retm_if(ad == NULL, "appdata is NULL");
2728 case CAM_MENU_VOLUME_KEY_ZOOM:
2730 CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_ZOOM);
2731 cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
2734 case CAM_MENU_VOLUME_KEY_SHUTTER:
2736 CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_SHUTTER);
2737 cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
2744 evas_object_show(ad->toolbar_setting_popup);
2745 if (ad->setting_select_item)
2746 elm_genlist_item_update(ad->setting_select_item);
2747 __update_menubar_icon_by_index(ad, CAM_MENU_VOLUME_KEY);
2749 setting_ctxpopup_destroy(ad);
2750 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2753 static void __storage_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
2755 cam_retm_if(obj == NULL, "obj is NULL");
2756 struct appdata *ad = (struct appdata *)cam_appdata_get();
2757 cam_retm_if(ad == NULL, "appdata is NULL");
2765 case CAM_MENU_STORAGE_PHONE:
2767 CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
2768 cam_handle_value_set(ad, PROP_STORAGE, &value);
2771 case CAM_MENU_STORAGE_MMC:
2773 if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
2774 if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED) {
2778 CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
2779 cam_handle_value_set(ad, PROP_STORAGE, &value);
2780 cam_info(LOG_UI, "MMC card is removed");
2781 cam_storage_warning_popup();
2783 CAM_GVALUE_SET_INT(value, CAM_STORAGE_EXTERNAL);
2784 cam_handle_value_set(ad, PROP_STORAGE, &value);
2793 evas_object_show(ad->toolbar_setting_popup);
2794 if (ad->setting_select_item)
2795 elm_genlist_item_update(ad->setting_select_item);
2796 __update_menubar_icon_by_index(ad, CAM_MENU_STORAGE);
2798 setting_ctxpopup_destroy(ad);
2799 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2802 static void __wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
2804 cam_retm_if(obj == NULL, "obj is NULL");
2805 struct appdata *ad = (struct appdata *)cam_appdata_get();
2806 cam_retm_if(ad == NULL, "appdata is NULL");
2810 int wb = cam_convert_menu_item_to_mmfw_value((int)data);
2813 if (ad->camapp_handle->white_balance != wb) {
2815 CAM_GVALUE_SET_INT(value, wb);
2816 cam_handle_value_set(ad, PROP_WB, &value);
2818 evas_object_show(ad->toolbar_setting_popup);
2819 if (ad->setting_select_item)
2820 elm_genlist_item_update(ad->setting_select_item);
2821 __update_menubar_icon_by_index(ad, CAM_MENU_WHITE_BALANCE);
2823 setting_ctxpopup_destroy(ad);
2824 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2827 static void __iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
2829 cam_retm_if(obj == NULL, "obj is NULL");
2830 struct appdata *ad = (struct appdata *)cam_appdata_get();
2831 cam_retm_if(ad == NULL, "appdata is NULL");
2835 int iso = cam_convert_menu_item_to_mmfw_value((int)data);
2838 if (ad->camapp_handle->iso != iso) {
2840 CAM_GVALUE_SET_INT(value, iso);
2841 cam_handle_value_set(ad, PROP_ISO, &value);
2843 evas_object_show(ad->toolbar_setting_popup);
2844 if (ad->setting_select_item)
2845 elm_genlist_item_update(ad->setting_select_item);
2846 __update_menubar_icon_by_index(ad, CAM_MENU_ISO);
2848 setting_ctxpopup_destroy(ad);
2849 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2851 static void __metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
2853 cam_retm_if(obj == NULL, "obj is NULL");
2854 struct appdata *ad = (struct appdata *)cam_appdata_get();
2855 cam_retm_if(ad == NULL, "appdata is NULL");
2859 int metering = cam_convert_menu_item_to_mmfw_value((int)data);
2861 /* set metering value */
2862 if (ad->camapp_handle->auto_exposure != metering) {
2864 CAM_GVALUE_SET_INT(value, metering);
2865 cam_handle_value_set(ad, PROP_METERING, &value);
2867 evas_object_show(ad->toolbar_setting_popup);
2868 if (ad->setting_select_item)
2869 elm_genlist_item_update(ad->setting_select_item);
2870 __update_menubar_icon_by_index(ad, CAM_MENU_METERING);
2872 setting_ctxpopup_destroy(ad);
2873 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2876 static void __timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
2878 cam_retm_if(obj == NULL, "obj is NULL");
2879 struct appdata *ad = (struct appdata *)cam_appdata_get();
2880 cam_retm_if(ad == NULL, "appdata is NULL");
2884 int index = (int)data - CAM_MENU_TIMER_OFF;
2885 DEBUG_TRACE("index : [%d]", index);
2886 cam_ret_if(index < 0 || index >= CAM_SETTINGS_TIMER_NUMS);
2888 /* set timer value */
2889 if (ad->camapp_handle->timer != index) {
2891 CAM_GVALUE_SET_INT(value, index);
2892 cam_handle_value_set(ad, PROP_TIMER, &value);/*set ad->camapp_handle->timer*/
2893 evas_object_show(ad->toolbar_setting_popup);
2894 if (ad->setting_select_item)
2895 elm_genlist_item_update(ad->setting_select_item);
2896 __update_menubar_icon_by_index(ad, CAM_MENU_TIMER);
2899 setting_ctxpopup_destroy(ad);
2900 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
2903 static void __reset_settings_launch(void)
2905 GValue i_value = { 0, };
2906 GValue b_value = { 0, };
2907 struct appdata *ad = (struct appdata *)cam_appdata_get();
2908 CamAppData *camapp = NULL;
2910 cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
2912 cam_retm_if(ad == NULL, " appdata is NULL");
2913 camapp = ad->camapp_handle;
2914 cam_retm_if(camapp == NULL, " cam_handle is NULL");
2916 g_value_init(&i_value, G_TYPE_INT);
2917 g_value_init(&b_value, G_TYPE_BOOLEAN);
2919 camapp->device_type = CAM_DEVICE_MEGA;
2922 g_value_set_int(&i_value, SHOTMODE_DEFAULT);
2923 cam_handle_value_set(ad, PROP_SHOT_MODE, &i_value);
2926 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
2927 && ad->exe_args->size_limit > 0) {
2928 g_value_set_int(&i_value, CAM_RECORD_MMS);
2930 g_value_set_int(&i_value, RECMODE_DEFAULT);
2932 cam_handle_value_set(ad, PROP_REC_MODE, &i_value);
2935 g_value_set_int(&i_value, PG_MODE_DEFAULT);
2936 cam_handle_value_set(ad, PROP_SCENE_MODE, &i_value);
2939 g_value_set_int(&i_value, AF_DEFAULT);
2940 cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
2943 g_value_set_int(&i_value, TIMER_DEFAULT);
2944 cam_handle_value_set(ad, PROP_TIMER, &i_value);
2947 g_value_set_int(&i_value, WB_DEFAULT);
2948 cam_handle_value_set(ad, PROP_WB, &i_value);
2951 g_value_set_int(&i_value, EFFECT_DEFAULT);
2952 cam_handle_value_set(ad, PROP_EFFECT, &i_value);
2955 g_value_set_int(&i_value, ISO_DEFAULT);
2956 cam_handle_value_set(ad, PROP_ISO, &i_value);
2959 g_value_set_int(&i_value, AE_DEFAULT);
2960 cam_handle_value_set(ad, PROP_METERING, &i_value);
2963 g_value_set_int(&i_value, AHS_DEFAULT);
2964 cam_handle_value_set(ad, PROP_AHS, &i_value);
2966 /* wild dynamic range */
2967 g_value_set_int(&i_value, WDR_DEFAULT);
2968 cam_handle_value_set(ad, PROP_WDR, &i_value);
2971 g_value_set_int(&i_value, QUALITY_DEFAULT);
2972 cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
2975 g_value_set_int(&i_value, QUALITY_DEFAULT);
2976 cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
2979 g_value_set_int(&i_value, FALSE);
2980 cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &i_value);
2983 g_value_set_boolean(&b_value, GUIDE_LINE_DEFAULT);
2984 cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
2985 settings_guideline_refresh(ad);
2988 g_value_set_boolean(&b_value, FALSE);
2989 cam_handle_value_set(ad, PROP_REVIEW, &b_value);
2992 g_value_set_boolean(&b_value, FALSE);
2993 cam_handle_value_set(ad, PROP_GPS, &b_value);
2996 g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
2997 cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
3000 cam_mm_set_shutter_sound(SOUND_DEFAULT);
3001 ad->camapp_handle->shutter_sound = SHUTTER_SOUND_DEFAULT;
3003 /* audio recording */
3004 g_value_set_boolean(&b_value, TRUE);
3005 cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
3008 g_value_set_int(&i_value, STORAGE_DEFAULT);
3009 cam_handle_value_set(ad, PROP_STORAGE, &i_value);
3012 g_value_set_int(&i_value, BRIGHTNESS_DEFAULT);
3013 cam_handle_value_set(ad, PROP_BRIGHTNESS, &i_value);
3016 g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
3017 cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &i_value);
3019 g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
3020 cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &i_value);
3022 if (ad->indicator_edje) {
3023 /* delete indicator */
3024 evas_object_hide(ad->indicator_edje);
3025 cam_indicator_destory(ad);
3027 cam_indicator_create(ad);
3030 if (camapp->camera_mode == CAM_CAMERA_MODE) {
3031 g_value_set_int(&i_value, FLASH_DEFAULT);
3033 g_value_set_int(&i_value, REC_FLASH_DEFAULT);
3035 cam_handle_value_set(ad, PROP_FLASH, &i_value);
3037 /* Outdoor visibility */
3038 g_value_set_boolean(&b_value, FALSE);
3039 cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &b_value);
3042 g_value_set_boolean(&b_value, FALSE);
3043 cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &b_value);
3047 g_value_set_int(&i_value, ZOOM_DEFAULT);
3048 cam_handle_value_set(ad, PROP_ZOOM, &i_value);
3050 /* Size limit type */
3051 g_value_set_int(&i_value, CAM_MM_SIZE_LIMIT_TYPE_BYTE);
3052 cam_handle_value_set(ad, PROP_SIZE_LIMIT_TYPE, &i_value);
3055 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
3056 && ad->exe_args->size_limit > 0) {
3057 g_value_set_int(&i_value, CAM_REC_MMS_MAX_SIZE);
3059 g_value_set_int(&i_value, REC_SIZE_LIMIT_DEFAULT);
3061 cam_handle_value_set(ad, PROP_SIZE_LIMIT, &i_value);
3064 g_value_set_int(&i_value, TIMER_DEFAULT);
3065 cam_handle_value_set(ad, PROP_TIMER, &i_value);
3068 g_value_set_int(&i_value, IMAGE_COUNT_DEFAULT);
3069 cam_handle_value_set(ad, PROP_IMAGE_COUNT, &i_value);
3071 CAM_GVALUE_SET_INT(i_value, CAM_VOLUME_KEY_ZOOM);
3072 cam_handle_value_set(ad, PROP_VOLUME_KEY, &i_value);
3074 camapp->continuous_shot_data = NULL;
3075 camapp->enable_touch_af = TRUE;
3076 camapp->burst_shot = TRUE;
3079 cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
3081 TRUE);/*note: set show pop tip flag*/
3082 cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
3083 PROP_SHORTCUTS_INIT_PART_INDEX,
3084 FALSE);/*note: set shorcuts init flag*/
3087 static void __restore_defaults_popup_cb_ok_cb(void *data, Evas_Object *obj, void *event_info)
3089 struct appdata *ad = (struct appdata *)cam_appdata_get();
3090 cam_retm_if(ad == NULL, " appdata is NULL");
3091 cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
3093 DEL_EVAS_OBJECT(ad->confirm_popup);
3095 hide_toolbar_edje(ad);
3096 cam_app_preview_stop();
3098 __reset_settings_launch();
3099 __toolbar_menu_item_reset(ad);
3103 show_toolbar_edje(ad);
3105 if (!cam_app_preview_start(ad)) {
3106 cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
3111 static void __restore_defaults_popup_cb_cancel_cb(void *data, Evas_Object *obj, void *event_info)
3113 struct appdata *ad = (struct appdata *)cam_appdata_get();
3114 cam_retm_if(ad == NULL, " appdata is NULL");
3115 cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
3117 DEL_EVAS_OBJECT(ad->confirm_popup);
3120 static void __effects_selected_cb(void *data, Evas_Object *obj, void *event_info)
3122 cam_retm_if(obj == NULL, "obj is NULL");
3123 struct appdata *ad = (struct appdata *)cam_appdata_get();
3124 cam_retm_if(ad == NULL, "appdata is NULL");
3129 int effect = CAM_SCENE_NONE;
3130 switch ((int)data) {
3131 case CAM_MENU_EFFECT_NONE:
3132 effect = CAMERA_ATTR_EFFECT_NONE;
3134 case CAM_MENU_EFFECT_NEGATIVE:
3135 effect = CAMERA_ATTR_EFFECT_NEGATIVE;
3137 case CAM_MENU_EFFECT_BLACKANDWHITE:
3138 effect = CAMERA_ATTR_EFFECT_MONO;
3140 case CAM_MENU_EFFECT_SEPIA:
3141 effect = CAMERA_ATTR_EFFECT_SEPIA;
3147 if (ad->camapp_handle->effect != effect) {
3148 CAM_GVALUE_SET_INT(value, effect);
3149 cam_handle_value_set(ad, PROP_EFFECT, &value);
3152 if (ad->setting_select_item)
3153 elm_genlist_item_update(ad->setting_select_item);
3154 __update_menubar_icon_by_index(ad, CAM_MENU_EFFECTS);
3156 setting_ctxpopup_destroy(ad);
3157 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3160 static void __shot_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3162 cam_retm_if(obj == NULL, "obj is NULL");
3163 struct appdata *ad = (struct appdata *)cam_appdata_get();
3164 cam_retm_if(ad == NULL, "appdata is NULL");
3168 switch ((int)data) {
3169 case CAM_MENU_SHOOTING_SINGLE:
3170 shot_mode_set(ad, CAM_SINGLE_MODE);
3172 case CAM_MENU_SHOOTING_SELF_SINGLE:
3173 shot_mode_set(ad, CAM_SELF_SINGLE_MODE);
3179 evas_object_show(ad->toolbar_setting_popup);
3180 if (ad->setting_select_item) {
3181 elm_genlist_item_update(ad->setting_select_item);
3184 __toolbar_menu_icon_update(ad);
3186 setting_ctxpopup_destroy(ad);
3187 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3188 cam_toolbar_setting_popup_destroy(ad);
3191 static void __scene_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3193 cam_retm_if(obj == NULL, "obj is NULL");
3194 struct appdata *ad = (struct appdata *)cam_appdata_get();
3195 cam_retm_if(ad == NULL, "appdata is NULL");
3201 int scene = CAM_MENU_SCENE_AUTO;
3202 switch ((int)data) {
3203 case CAM_MENU_SCENE_AUTO:
3204 scene = CAM_SCENE_NONE;
3206 case CAM_MENU_SCENE_PORTRAIT:
3207 scene = CAM_SCENE_PORTRAIT;
3209 case CAM_MENU_SCENE_LANDSCAPE:
3210 scene = CAM_SCENE_LANDSCAPE;
3212 case CAM_MENU_SCENE_NIGHT:
3213 scene = CAM_SCENE_NIGHT;
3215 case CAM_MENU_SCENE_SPORTS:
3216 scene = CAM_SCENE_SPORTS;
3218 case CAM_MENU_SCENE_PARTY:
3219 scene = CAM_SCENE_PARTY;
3221 case CAM_MENU_SCENE_BEACHSNOW:
3222 scene = CAM_SCENE_BEACHSNOW;
3224 case CAM_MENU_SCENE_SUNSET:
3225 scene = CAM_SCENE_SUNSET;
3227 case CAM_MENU_SCENE_DUSKDAWN:
3228 scene = CAM_SCENE_DUSKDAWN;
3230 case CAM_MENU_SCENE_FALL:
3231 scene = CAM_SCENE_FALL;
3233 case CAM_MENU_SCENE_FIREWORK:
3234 scene = CAM_SCENE_FIREWORK;
3236 case CAM_MENU_SCENE_TEXT:
3237 scene = CAM_SCENE_TEXT;
3239 case CAM_MENU_SCENE_CANDLELIGHT:
3240 scene = CAM_SCENE_CANDLELIGHT;
3242 case CAM_MENU_SCENE_BACKLIGHT:
3243 scene = CAM_SCENE_BACKLIGHT;
3245 case CAM_MENU_SCENE_SHOW_WINDOW:
3246 scene = CAM_SCENE_SHOW_WINDOW;
3252 if (ad->camapp_handle->scene_mode != scene) {
3253 CAM_GVALUE_SET_INT(value, scene);
3254 cam_handle_value_set(ad, PROP_SCENE_MODE, &value);
3257 if (ad->setting_select_item)
3258 elm_genlist_item_update(ad->setting_select_item);
3260 __toolbar_menu_icon_update(ad);
3262 setting_ctxpopup_destroy(ad);
3263 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3264 __update_setting_popup(ad);
3267 static void __focus_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3269 cam_retm_if(obj == NULL, "obj is NULL");
3270 struct appdata *ad = (struct appdata *)cam_appdata_get();
3271 cam_retm_if(ad == NULL, "appdata is NULL");
3276 int focus_mode = CAM_FOCUS_AUTO;
3277 switch ((int)data) {
3278 case CAM_MENU_FOCUS_AUTO:
3279 focus_mode = CAM_FOCUS_AUTO;
3281 case CAM_MENU_FOCUS_MACRO:
3282 focus_mode = CAM_FOCUS_MACRO;
3284 case CAM_MENU_FOCUS_FACE_DETECTION:
3285 focus_mode = CAM_FOCUS_FACE;
3291 CAM_GVALUE_SET_INT(value, focus_mode);
3292 cam_handle_value_set(ad, PROP_AF_MODE, &value);
3294 if (ad->setting_select_item)
3295 elm_genlist_item_update(ad->setting_select_item);
3296 __update_menubar_icon_by_index(ad, CAM_MENU_FOCUS_MODE);
3298 setting_ctxpopup_destroy(ad);
3299 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3300 __update_setting_popup(ad);
3303 static void __record_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
3305 cam_retm_if(obj == NULL, "obj is NULL");
3306 struct appdata *ad = (struct appdata *)cam_appdata_get();
3307 cam_retm_if(ad == NULL, "appdata is NULL");
3312 int record_mode = CAM_RECORD_NORMAL;
3313 switch ((int)data) {
3314 case CAM_MENU_RECORDING_MODE_NORMAL:
3315 record_mode = CAM_RECORD_NORMAL;
3317 case CAM_MENU_RECORDING_MODE_LIMIT:
3318 record_mode = CAM_RECORD_MMS;
3320 case CAM_MENU_RECORDING_MODE_SLOW:
3321 record_mode = CAM_RECORD_SLOW;
3323 case CAM_MENU_RECORDING_MODE_FAST:
3324 record_mode = CAM_RECORD_FAST;
3326 case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
3327 record_mode = CAM_RECORD_SELF;
3329 case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
3330 record_mode = CAM_RECORD_SELF_MMS;
3336 if (ad->camapp_handle->recording_mode != record_mode) {
3337 CAM_GVALUE_SET_INT(value, record_mode);
3338 cam_handle_value_set(ad, PROP_REC_MODE, &value);
3341 evas_object_show(ad->toolbar_setting_popup);
3342 if (ad->setting_select_item) {
3343 elm_genlist_item_update(ad->setting_select_item);
3346 __toolbar_menu_icon_update(ad);
3348 setting_ctxpopup_destroy(ad);
3349 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3350 cam_toolbar_setting_popup_destroy(ad);
3353 static void __update_menubar_icon_by_index(struct appdata *ad, int index)
3355 Evas_Object_Event_Cb func = NULL;
3356 int menubar_no = -1;
3357 menubar_no = __get_menubar_no_by_index(ad, index);
3358 if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
3359 Evas_Object *icon = NULL;
3360 icon = ad->toolbar_menu_arrays[menubar_no].icon;
3362 __toolbar_menu_type_update(icon, index, ad, BUTTON_STATE_NORMAL, &func);
3365 static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info)
3367 cam_retm_if(obj == NULL, "obj is NULL");
3368 struct appdata *ad = (struct appdata *)cam_appdata_get();
3369 cam_retm_if(ad == NULL, "appdata is NULL");
3373 int flash_value = 0;
3375 switch ((int)data) {
3376 case CAM_MENU_FLASH_OFF:
3377 flash_value = CAM_FLASH_OFF;
3379 case CAM_MENU_FLASH_ON:
3380 flash_value = CAM_FLASH_ON;
3382 case CAM_MENU_FLASH_AUTO:
3383 flash_value = CAM_FLASH_AUTO;
3386 flash_value = CAM_FLASH_OFF;
3389 CAM_GVALUE_SET_INT(value, flash_value);
3390 cam_handle_value_set(ad, PROP_FLASH, &value);
3391 __update_menubar_icon_by_index(ad, CAM_MENU_FLASH);
3392 if (ad->setting_select_item)
3393 elm_genlist_item_update(ad->setting_select_item);
3395 setting_ctxpopup_destroy(ad);
3396 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3399 static void toolbar_move_with_scale(Evas_Object *eo, double x, double y)
3401 DEBUG_TRACE("x = %f, y = %f" , x, y);
3402 DEBUG_TRACE("elm_config_scale_get() = %f" , elm_config_scale_get());
3403 evas_object_move(eo, x * elm_config_scale_get(), y * elm_config_scale_get());
3406 /*note: @mouse_point is the coordinate of mouse click, output is scaled*/
3407 static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction,
3412 int ver_x, ver_y, h_x, h_y;
3413 ver_x = ver_y = h_x = h_y = 0;
3414 switch (target_direction) {
3415 case CAM_TARGET_DIRECTION_LANDSCAPE:
3416 *x = (int)(SETTING_HOR_CTX_POPUP_X * elm_config_scale_get());
3419 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3420 *x = (int)((1280 - SETTING_HOR_CTX_POPUP_X) * elm_config_scale_get());
3423 case CAM_TARGET_DIRECTION_PORTRAIT:
3424 *x = (int)(SETTING_VER_CTX_POPUP_X * elm_config_scale_get());;
3427 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3428 *x = (int)((720 - SETTING_VER_CTX_POPUP_X) * elm_config_scale_get());
3432 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3437 static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y)
3439 switch (target_direction) {
3440 case CAM_TARGET_DIRECTION_LANDSCAPE:
3441 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3442 *out_x = (int)((MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
3443 *out_y = (int)(0.9*MAIN_H);
3445 case CAM_TARGET_DIRECTION_PORTRAIT:
3446 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3447 *out_x = (int)((VER_MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
3448 *out_y = (int)(0.8*VER_MAIN_H);
3451 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3455 /*note: in this func, all coordinate is not scale*/
3456 static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y)
3458 int menu_bar_no = menubar_no;
3459 int ver_x, ver_y, hor_x, hor_y;
3460 ver_x = ver_y = hor_x = hor_y = 0;
3462 switch (menu_bar_no) {
3463 case CAM_MENU_BAR_LEFT_0:
3469 case CAM_MENU_BAR_LEFT_1:
3475 case CAM_MENU_BAR_LEFT_2:
3481 case CAM_MENU_BAR_LEFT_3:
3487 case CAM_MENU_BAR_LEFT_4:
3494 DEBUG_TRACE("input para,error!");
3498 switch (target_direction) {
3499 case CAM_TARGET_DIRECTION_LANDSCAPE:
3503 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3507 case CAM_TARGET_DIRECTION_PORTRAIT:
3511 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3516 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3521 static int __get_menubar_no_by_index(struct appdata *ad, int index)
3525 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
3526 if (index == ad->toolbar_menu_arrays[i].menu_type) {
3530 return CAM_MENU_BAR_LEFT_INVALID;
3533 static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y)
3536 switch (target_direction) {
3537 case CAM_TARGET_DIRECTION_LANDSCAPE:
3538 elm_ctxpopup_direction_priority_set(obj,
3539 ELM_CTXPOPUP_DIRECTION_RIGHT,
3540 ELM_CTXPOPUP_DIRECTION_UP,
3541 ELM_CTXPOPUP_DIRECTION_LEFT,
3542 ELM_CTXPOPUP_DIRECTION_DOWN);
3545 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3546 elm_ctxpopup_direction_priority_set(obj,
3547 ELM_CTXPOPUP_DIRECTION_LEFT,
3548 ELM_CTXPOPUP_DIRECTION_DOWN,
3549 ELM_CTXPOPUP_DIRECTION_RIGHT,
3550 ELM_CTXPOPUP_DIRECTION_UP);
3552 case CAM_TARGET_DIRECTION_PORTRAIT:
3553 elm_ctxpopup_direction_priority_set(obj,
3554 ELM_CTXPOPUP_DIRECTION_DOWN,
3555 ELM_CTXPOPUP_DIRECTION_RIGHT,
3556 ELM_CTXPOPUP_DIRECTION_UP,
3557 ELM_CTXPOPUP_DIRECTION_LEFT);
3559 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3560 elm_ctxpopup_direction_priority_set(obj,
3561 ELM_CTXPOPUP_DIRECTION_UP,
3562 ELM_CTXPOPUP_DIRECTION_LEFT,
3563 ELM_CTXPOPUP_DIRECTION_DOWN,
3564 ELM_CTXPOPUP_DIRECTION_RIGHT);
3567 DEBUG_TRACE("wow, check it, reached un-able reached codes");
3570 toolbar_move_with_scale(obj, x, y);
3573 static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y)
3576 switch (target_direction) {
3577 case CAM_TARGET_DIRECTION_LANDSCAPE:
3578 case CAM_TARGET_DIRECTION_PORTRAIT:
3579 elm_ctxpopup_direction_priority_set(obj,
3580 ELM_CTXPOPUP_DIRECTION_RIGHT,
3581 ELM_CTXPOPUP_DIRECTION_UP,
3582 ELM_CTXPOPUP_DIRECTION_LEFT,
3583 ELM_CTXPOPUP_DIRECTION_DOWN);
3585 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3586 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3587 elm_ctxpopup_direction_priority_set(obj,
3588 ELM_CTXPOPUP_DIRECTION_LEFT,
3589 ELM_CTXPOPUP_DIRECTION_DOWN,
3590 ELM_CTXPOPUP_DIRECTION_RIGHT,
3591 ELM_CTXPOPUP_DIRECTION_UP);
3594 DEBUG_TRACE("wow, check it, reached un-able reached codes");
3597 evas_object_move(obj, x, y);
3600 static void __tip_popup_check_cb(void *data, Evas_Object *obj, void *event_info)
3602 struct appdata *ad = (struct appdata *)cam_appdata_get();
3603 cam_retm_if(ad == NULL, "appdata is NULL");
3604 gboolean pop_tip = FALSE;
3605 pop_tip = elm_check_state_get(obj);
3606 DEBUG_TRACE("do_not_ask_again = %d", pop_tip);
3607 cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, !pop_tip);
3611 static void __tip_popup_button_selected_cb(void *data, Evas_Object * obj, void *event_info)
3614 struct appdata *ad = (struct appdata *)cam_appdata_get();
3615 cam_retm_if(ad == NULL, "appdata is NULL");
3617 cam_tip_popup_destroy(ad);
3620 /*note: input x,y should be landscape mode coordinate*/
3621 static void __get_tip_popup_coord(int target_direction, int *out_x, int *out_y)
3623 switch (target_direction) {
3624 case CAM_TARGET_DIRECTION_LANDSCAPE:
3625 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
3626 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
3628 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
3629 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
3630 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
3632 case CAM_TARGET_DIRECTION_PORTRAIT:
3633 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
3634 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
3636 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
3637 *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
3638 *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
3641 DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
3645 void cam_tip_popup_create(struct appdata *ad, const CamTipPopupType type)
3647 cam_retm_if(ad == NULL, "appdata is NULL");
3649 if (ad->toolbar_setting_popup) {
3650 cam_toolbar_setting_popup_destroy(ad);
3653 if (ad->edit_shortcuts_popup_scroll) {
3654 toolbar_destroy_shortcuts_popup(ad);
3657 if (ad->tip_popup) {
3658 cam_tip_popup_destroy(ad);
3661 /*hide focus guide*/
3662 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
3664 elm_object_part_content_unset(ad->ug_base, "tip_popup_layout");
3666 ad->tip_popup = cam_app_load_edj(ad->ug_base, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/help");
3668 cam_retm_if(ad->tip_popup == NULL, "tip_popup is NULL");
3669 elm_object_part_content_set(ad->ug_base, "tip_popup_layout", ad->tip_popup);
3671 Evas_Object *check = elm_check_add(ad->tip_popup);
3672 evas_object_smart_callback_add(check, "changed", __tip_popup_check_cb, (void*)ad);
3673 evas_object_show(check);
3674 elm_object_part_content_set(ad->tip_popup, "content.help.check.swallow", check);
3676 gboolean show_popup_tip = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, POP_TIP_DEFAULT);
3678 elm_check_state_set(check, EINA_FALSE);
3680 elm_check_state_set(check, EINA_TRUE);
3682 Evas_Object *btn = elm_button_add(ad->tip_popup);
3683 elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_SK_OK"));
3684 evas_object_smart_callback_add(btn, "unpressed", __tip_popup_button_selected_cb, (void *)ad);
3685 evas_object_show(btn);
3686 elm_object_part_content_set(ad->tip_popup, "button.swallow", btn);
3688 Evas_Object *image = elm_image_add(ad->tip_popup);
3689 elm_object_part_content_set(ad->tip_popup, "content.help.image", image);
3691 if (ad->tip_popup) {
3692 evas_object_show(ad->tip_popup);
3693 evas_object_size_hint_min_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
3694 evas_object_size_hint_max_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
3695 evas_object_resize(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
3697 edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.check.txt", dgettext(PACKAGE, "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"));
3698 edje_object_part_text_set(_EDJ(ad->tip_popup), "tips.txt", dgettext(PACKAGE, "IDS_CAM_HEADER_TIPS"));
3701 case CAM_TIP_POPUP_BURSTSHOT_HELP:
3702 ad->tip_popup_type = CAM_TIP_POPUP_BURSTSHOT_HELP;
3703 edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
3704 dgettext(PACKAGE, "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"));
3705 elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_BURSTSHOT_HELP_IMAGE);
3707 case CAM_TIP_POPUP_VOLUMEKEY_HELP:
3708 ad->tip_popup_type = CAM_TIP_POPUP_VOLUMEKEY_HELP;
3709 edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
3710 dgettext(PACKAGE, "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"));
3711 elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_VOLUMEKEY_HELP_IMAGE);
3714 DEBUG_TRACE("invalid tip-popup type");
3718 evas_object_show(ad->tip_popup);
3720 int output_x, output_y;
3721 output_x = output_y = 0;
3722 __get_tip_popup_coord(ad->target_direction, &output_x, &output_y);
3723 evas_object_move(ad->tip_popup, output_x, output_y);/*landscape*/
3727 void cam_tip_popup_destroy(struct appdata *ad)
3729 cam_retm_if(ad == NULL, "appdata is NULL");
3731 DEL_EVAS_OBJECT(ad->tip_popup);
3732 ad->tip_popup_type = CAM_TIP_POPUP_NONE;
3735 void cam_tip_popup_rotate(struct appdata *ad)
3737 cam_retm_if(ad == NULL, "appdata is NULL");
3739 DEL_EVAS_OBJECT(ad->tip_popup);
3740 cam_tip_popup_create(ad, ad->tip_popup_type);
3743 static char *__sub_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
3745 int index = (int)data;
3747 struct appdata *ad = (struct appdata *)cam_appdata_get();
3748 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3750 CAM_MENU_ITEM* menu_item = NULL;
3751 menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
3752 return strdup(dgettext(PACKAGE, __get_text_name(*menu_item)));
3755 static Evas_Object *__sub_menu_gl_icon_get(void *data, Evas_Object *obj, const char *part)
3757 struct appdata *ad = (struct appdata *)cam_appdata_get();
3758 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3760 CamAppData *camapp = ad->camapp_handle;
3761 cam_retvm_if(camapp == NULL, NULL, "camapp_handle is NULL");
3763 int index = (int)data;
3764 int value_index = 0;
3766 if (strcmp(part, "elm.radio") == 0) {
3767 Evas_Object* radio = elm_radio_add(obj);
3769 elm_object_style_set(radio, "beat_winset_test/camera");
3770 elm_radio_state_value_set(radio, index);
3771 elm_radio_group_add(radio, ad->sub_menu_group);
3773 switch (ad->sub_menu_type) {
3774 case CAM_MENU_FLASH:
3775 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FLASH, camapp->flash);
3776 if (index == value_index) {
3777 elm_radio_value_set(radio, value_index);
3780 case CAM_MENU_SHOOTING_MODE:
3781 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SHOOTING_MODE, camapp->shooting_mode);
3782 if (index == value_index) {
3783 elm_radio_value_set(radio, value_index);
3786 case CAM_MENU_RECORDING_MODE:
3787 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_RECORDING_MODE, camapp->recording_mode);
3788 if (index == value_index) {
3789 elm_radio_value_set(radio, value_index);
3792 case CAM_MENU_SCENE_MODE:
3793 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SCENE_MODE, camapp->scene_mode);
3794 if (index == value_index) {
3795 elm_radio_value_set(radio, value_index);
3798 case CAM_MENU_FOCUS_MODE:
3799 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FOCUS_MODE, camapp->af_mode);
3800 if (index == value_index) {
3801 elm_radio_value_set(radio, value_index);
3804 case CAM_MENU_TIMER:
3805 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_TIMER, camapp->timer);
3806 if (index == value_index) {
3807 elm_radio_value_set(radio, value_index);
3810 case CAM_MENU_EFFECTS:
3811 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_EFFECTS, camapp->effect);
3812 if (index == value_index) {
3813 elm_radio_value_set(radio, value_index);
3816 case CAM_MENU_PHOTO_RESOLUTION:
3817 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_PHOTO_RESOLUTION, camapp->photo_resolution);
3818 if (index == value_index) {
3819 elm_radio_value_set(radio, value_index);
3822 case CAM_MENU_VIDEO_RESOLUTION:
3823 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VIDEO_RESOLUTION, camapp->video_resolution);
3824 if (index == value_index) {
3825 elm_radio_value_set(radio, value_index);
3828 case CAM_MENU_WHITE_BALANCE:
3829 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_WHITE_BALANCE, camapp->white_balance);
3830 if (index == value_index) {
3831 elm_radio_value_set(radio, value_index);
3835 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_ISO, camapp->iso);
3836 if (index == value_index) {
3837 elm_radio_value_set(radio, value_index);
3840 case CAM_MENU_METERING:
3841 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_METERING, camapp->auto_exposure);
3842 if (index == value_index) {
3843 elm_radio_value_set(radio, value_index);
3846 case CAM_MENU_STORAGE:
3847 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_STORAGE, camapp->storage);
3848 if (index == value_index) {
3849 elm_radio_value_set(radio, value_index);
3852 case CAM_MENU_VOLUME_KEY:
3853 value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VOLUME_KEY, camapp->volume_key);
3854 if (index == value_index) {
3855 elm_radio_value_set(radio, value_index);
3861 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
3862 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
3865 } else if (strcmp(part, "elm.icon") == 0) {
3866 Evas_Object *icon = NULL;
3867 char icon_name[1024+1] = { '\0', };
3868 CAM_MENU_ITEM* menu_item = NULL;
3870 menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
3871 strncpy(icon_name, __get_icon_image_name(*menu_item, BUTTON_STATE_NORMAL), sizeof(icon_name));
3872 icon = elm_image_add(obj);
3873 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
3880 void __cam_setting_sub_gl_style_set()
3883 sub_itc.item_style = "camera/1text.2icon";
3884 sub_itc.func.text_get = __sub_menu_gl_text_get;
3885 sub_itc.func.content_get = __sub_menu_gl_icon_get;
3886 sub_itc.func.state_get = NULL;
3887 sub_itc.func.del = NULL;
3890 static void* __get_sub_menu_genlist_cb(const CAM_MENU_ITEM item)
3893 case CAM_MENU_FLASH:
3894 return __flash_selected_cb;
3895 case CAM_MENU_SHOOTING_MODE:
3896 return __shot_mode_selected_cb;
3897 case CAM_MENU_RECORDING_MODE:
3898 return __record_mode_selected_cb;
3899 case CAM_MENU_SCENE_MODE:
3900 return __scene_mode_selected_cb;
3901 case CAM_MENU_FOCUS_MODE:
3902 return __focus_mode_selected_cb;
3903 case CAM_MENU_TIMER:
3904 return __timer_popup_cb;
3905 case CAM_MENU_EFFECTS:
3906 return __effects_selected_cb;
3907 case CAM_MENU_PHOTO_RESOLUTION:
3908 return __photo_resolution_popup_cb;
3909 case CAM_MENU_VIDEO_RESOLUTION:
3910 return __video_resolution_popup_cb;
3911 case CAM_MENU_WHITE_BALANCE:
3912 return __wb_popup_cb;
3914 return __iso_popup_cb;
3915 case CAM_MENU_METERING:
3916 return __metering_popup_cb;
3917 case CAM_MENU_STORAGE:
3918 return __storage_popup_cb;
3919 case CAM_MENU_VOLUME_KEY:
3920 return __volume_key_popup_cb;
3926 static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata)
3928 struct appdata *ad = (struct appdata *)fdata;
3929 cam_retv_if(ad == NULL, EINA_FALSE);
3931 CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
3932 DEBUG_TRACE("item = %d", *item);
3934 elm_genlist_item_append(ad->sub_genlist, &sub_itc, (void*)(ad->sub_menu_index),
3935 NULL, ELM_GENLIST_ITEM_NONE, __get_sub_menu_genlist_cb(ad->sub_menu_type), (void *)*item);
3937 ad->sub_menu_index++;
3941 static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting)
3943 DEBUG_TRACE("START");
3945 struct appdata *ad = data;
3946 cam_retm_if(ad == NULL, "appdata is NULL");
3948 Evas_Object *layout = NULL;
3949 int menu_bar_no = -1;
3952 setting_ctxpopup_create(ad, from_setting);
3953 layout = elm_layout_add(ad->setting_ctxpopup);
3954 elm_layout_file_set(layout, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout");
3957 edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text", _setting_gl_text_get((void*)menu_item, NULL, NULL));
3959 if (ad->sub_menu_composer) {
3960 cam_compose_free(ad->sub_menu_composer);
3961 ad->sub_menu_composer = NULL;
3964 if (ad->sub_menu_composer == NULL) {
3965 ad->sub_menu_composer = calloc(1, sizeof(cam_menu_composer));
3966 cam_compose_list_menu((void*)ad, menu_item, ad->sub_menu_composer);
3969 int size = eina_array_count(ad->sub_menu_composer->array);
3970 int sub_menu_height = __get_sub_menu_height(size);
3971 evas_object_size_hint_min_set(layout,
3972 SUB_MENU_POPUP_WIDTH * elm_config_scale_get(),
3973 sub_menu_height * elm_config_scale_get());
3975 ad->sub_menu_type = menu_item;
3976 ad->sub_menu_index = 0;
3977 ad->sub_genlist = elm_genlist_add(layout);
3978 ad->sub_menu_group = elm_radio_add(ad->sub_genlist);
3980 __cam_setting_sub_gl_style_set();
3981 eina_array_foreach(ad->sub_menu_composer->array, __sub_menu_genlist_each_cb, ad);
3983 evas_object_show(ad->sub_genlist);
3984 elm_object_part_content_set(layout, "elm.swallow.box", ad->sub_genlist);
3985 elm_object_content_set(ad->setting_ctxpopup, layout);
3988 __cam_get_ctxpopup_coord_in_setting_toolbar(ad->target_direction, setting_gl_y, &x, &y);
3989 __cam_toolbar_move_sub_menu(ad->setting_ctxpopup, ad->target_direction, x, y);
3991 menu_bar_no = __get_menubar_no_by_index(ad, menu_item);
3992 __get_option_coord_by_menubar_no(menu_bar_no, ad->target_direction, &x, &y);
3993 __cam_toolbar_move_ctxpopup(ad->setting_ctxpopup, ad->target_direction, x, y);
3996 evas_object_show(ad->setting_ctxpopup);
3997 __setting_popup_timeout_checker_start(ad);
4000 static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info)
4002 struct appdata *ad = (struct appdata *)cam_appdata_get();
4003 cam_retm_if(ad == NULL, "appdata is NULL");
4004 gboolean from_setting = FALSE;
4005 if (event_info) { /*call by setting*/
4006 from_setting = TRUE;
4007 } else { /*call by click icon*/
4008 from_setting = FALSE;
4011 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4012 ad->setting_select_item = (Elm_Object_Item *)event_info;
4015 ad->displayed_setting_popup = FALSE;
4016 toolbar_create_shortcuts_popup(ad);
4019 static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info)
4021 DEBUG_TRACE("START");
4023 struct appdata *ad = data;
4024 cam_retm_if(ad == NULL, "appdata is NULL");
4026 gboolean from_setting = FALSE;
4028 if (event_info) { /*call by setting*/
4029 from_setting = TRUE;
4030 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4031 ad->setting_select_item = (Elm_Object_Item *)event_info;
4032 } else { /*call by click icon*/
4033 from_setting = FALSE;
4034 ad->displayed_setting_popup = DISPLAY_VOLUME_KEY_POPUP;
4037 __create_setting_listmenu(ad, CAM_MENU_VOLUME_KEY, from_setting);
4040 static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info)
4042 struct appdata *ad = (struct appdata *)(data);
4043 cam_retm_if(ad == NULL, "appdata is NULL");
4044 CamAppData *camapp = ad->camapp_handle;
4045 cam_retm_if(camapp == NULL, "camapp is NULL");
4047 if (!ad->enable_mode_change) {
4048 DEBUG_TRACE("Can not change mode");
4052 ad->enable_mode_change = FALSE;
4054 cam_toolbar_setting_popup_destroy(ad);
4055 setting_ctxpopup_destroy(ad);
4056 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4058 if (camapp->self_portrait == TRUE)
4059 camapp->self_portrait = FALSE;
4061 camapp->self_portrait = TRUE;
4063 GValue value = {0, };
4064 CAM_GVALUE_SET_BOOLEAN(value, camapp->self_portrait);
4065 cam_handle_value_set(ad, PROP_SELF_PORTRAIT, &value);
4067 cam_toolbar_update(ad);
4070 static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info)
4072 DEBUG_TRACE("START");
4074 struct appdata *ad = (struct appdata *)data;
4075 cam_retm_if(ad == NULL, "appdata is NULL");
4077 gboolean from_setting = FALSE;
4079 if (event_info) { /*call by setting*/
4080 from_setting = TRUE;
4081 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4082 ad->setting_select_item = (Elm_Object_Item *)event_info;
4083 } else { /*call by click icon*/
4084 from_setting = FALSE;
4085 ad->displayed_setting_popup = DISPLAY_FLASH_POPUP;
4088 __create_setting_listmenu(ad, CAM_MENU_FLASH, from_setting);
4091 static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info)
4093 DEBUG_TRACE("START");
4095 struct appdata *ad = (struct appdata *)data;
4096 cam_retm_if(ad == NULL, "appdata is NULL");
4098 gboolean from_setting = FALSE;
4100 if (event_info) { /*call by setting*/
4101 from_setting = TRUE;
4102 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4103 ad->setting_select_item = (Elm_Object_Item *)event_info;
4104 } else { /*call by click icon*/
4105 from_setting = FALSE;
4106 ad->displayed_setting_popup = DISPLAY_SHOOTING_MODE_POPUP;
4109 __create_setting_listmenu(ad, CAM_MENU_SHOOTING_MODE, from_setting);
4112 static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info)
4114 DEBUG_TRACE("START");
4116 struct appdata *ad = data;
4117 cam_retm_if(ad == NULL, "appdata is NULL");
4119 gboolean from_setting = FALSE;
4121 if (event_info) { /*call by setting*/
4122 from_setting = TRUE;
4123 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4124 ad->setting_select_item = (Elm_Object_Item *)event_info;
4125 } else { /*call by click icon*/
4126 from_setting = FALSE;
4127 ad->displayed_setting_popup = DISPLAY_RECORDING_MODE_POPUP;
4130 __create_setting_listmenu(ad, CAM_MENU_RECORDING_MODE, from_setting);
4133 static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info)
4135 DEBUG_TRACE("START");
4137 struct appdata *ad = data;
4138 cam_retm_if(ad == NULL, "appdata is NULL");
4140 gboolean from_setting = FALSE;
4142 if (event_info) { /*call by setting*/
4143 from_setting = TRUE;
4144 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4145 ad->setting_select_item = (Elm_Object_Item *)event_info;
4146 } else { /*call by click icon*/
4147 from_setting = FALSE;
4148 ad->displayed_setting_popup = DISPLAY_SCENE_MODE_POPUP;
4151 __create_setting_listmenu(ad, CAM_MENU_SCENE_MODE, from_setting);
4154 static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info)
4156 struct appdata *ad = (struct appdata *)cam_appdata_get();
4157 cam_retm_if(ad == NULL, "appdata is NULL");
4158 cam_retm_if(ad->camapp_handle == NULL, "ad->camapp_handle is NULL");
4162 cam_toolbar_setting_popup_destroy(ad);
4165 static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info)
4167 struct appdata *ad = (struct appdata *)cam_appdata_get();
4168 cam_retm_if(ad == NULL, "appdata is NULL");
4169 CamAppData *camapp = NULL;
4170 camapp = ad->camapp_handle;
4171 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4173 DEBUG_TRACE("camapp->burst_shot = %d", camapp->burst_shot);
4175 if (obj != ad->burst_shot_mode_radio) {
4176 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4178 if (camapp->burst_shot == TRUE) {
4179 camapp->burst_shot = FALSE;
4180 elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
4182 camapp->burst_shot = TRUE;
4183 elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
4186 /* to reset check button */
4187 if (camapp->burst_shot == TRUE)
4188 elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
4190 elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
4194 GValue value = {0, };
4195 CAM_GVALUE_SET_BOOLEAN(value, camapp->burst_shot);
4196 cam_handle_value_set(ad, PROP_BURST_SHOT, &value);
4199 __update_menubar_icon_by_index(ad, CAM_MENU_BURST_SHOT_MODE);
4200 __setting_popup_timeout_checker_start(ad);
4203 static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info)
4205 DEBUG_TRACE("START");
4207 struct appdata *ad = data;
4208 cam_retm_if(ad == NULL, "appdata is NULL");
4210 gboolean from_setting = FALSE;
4212 if (event_info) { /*call by setting*/
4213 from_setting = TRUE;
4214 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4215 ad->setting_select_item = (Elm_Object_Item *)event_info;
4216 } else { /*call by click icon*/
4217 from_setting = FALSE;
4218 ad->displayed_setting_popup = DISPLAY_FOCUS_MODE_POPUP;
4221 __create_setting_listmenu(ad, CAM_MENU_FOCUS_MODE, from_setting);
4224 static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
4226 DEBUG_TRACE("START");
4228 struct appdata *ad = data;
4229 cam_retm_if(ad == NULL, "appdata is NULL");
4231 gboolean from_setting = FALSE;
4233 if (event_info) { /*call by setting*/
4234 from_setting = TRUE;
4235 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4236 ad->setting_select_item = (Elm_Object_Item *)event_info;
4237 } else { /*call by click icon*/
4238 from_setting = FALSE;
4239 ad->displayed_setting_popup = DISPLAY_TIMER_POPUP;
4242 __create_setting_listmenu(ad, CAM_MENU_TIMER, from_setting);
4245 static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info)
4247 DEBUG_TRACE("START");
4249 struct appdata *ad = data;
4250 cam_retm_if(ad == NULL, "appdata is NULL");
4252 gboolean from_setting = FALSE;
4254 if (event_info) { /*call by setting*/
4255 from_setting = TRUE;
4256 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4257 ad->setting_select_item = (Elm_Object_Item *)event_info;
4258 } else { /*call by click icon*/
4259 from_setting = FALSE;
4260 ad->displayed_setting_popup = DISPLAY_EFFECTS_POPUP;
4263 __create_setting_listmenu(ad, CAM_MENU_EFFECTS, from_setting);
4266 static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
4268 DEBUG_TRACE("START");
4270 struct appdata *ad = data;
4271 cam_retm_if(ad == NULL, "appdata is NULL");
4273 gboolean from_setting = FALSE;
4275 if (event_info) { /*call by setting*/
4276 from_setting = TRUE;
4277 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4278 ad->setting_select_item = (Elm_Object_Item *)event_info;
4279 } else { /*call by click icon*/
4280 from_setting = FALSE;
4281 ad->displayed_setting_popup = DISPLAY_WHITE_BALANCE_POPUP;
4284 __create_setting_listmenu(ad, CAM_MENU_WHITE_BALANCE, from_setting);
4287 static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
4289 DEBUG_TRACE("START");
4291 struct appdata *ad = data;
4292 cam_retm_if(ad == NULL, "appdata is NULL");
4294 gboolean from_setting = FALSE;
4296 if (event_info) { /*call by setting*/
4297 from_setting = TRUE;
4298 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4299 ad->setting_select_item = (Elm_Object_Item *)event_info;
4300 } else { /*call by click icon*/
4301 from_setting = FALSE;
4302 ad->displayed_setting_popup = DISPLAY_ISO_POPUP;
4305 __create_setting_listmenu(ad, CAM_MENU_ISO, from_setting);
4308 static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
4310 DEBUG_TRACE("START");
4312 struct appdata *ad = data;
4313 cam_retm_if(ad == NULL, "appdata is NULL");
4315 gboolean from_setting = FALSE;
4317 if (event_info) { /*call by setting*/
4318 from_setting = TRUE;
4319 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4320 ad->setting_select_item = (Elm_Object_Item *)event_info;
4321 } else { /*call by click icon*/
4322 from_setting = FALSE;
4323 ad->displayed_setting_popup = DISPLAY_METERING_POPUP;
4326 __create_setting_listmenu(ad, CAM_MENU_METERING, from_setting);
4329 static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info)
4331 struct appdata *ad = (struct appdata *)cam_appdata_get();
4332 cam_retm_if(ad == NULL, "appdata is NULL");
4333 CamAppData *camapp = NULL;
4334 camapp = ad->camapp_handle;
4335 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4337 DEBUG_TRACE("camapp->anti_shake = %d", camapp->anti_shake);
4339 if (obj != ad->antishake_radio) {
4340 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4342 if (camapp->anti_shake == TRUE) {
4343 camapp->anti_shake = FALSE;
4344 elm_check_state_set(ad->antishake_radio, EINA_FALSE);
4346 camapp->anti_shake = TRUE;
4347 elm_check_state_set(ad->antishake_radio, EINA_TRUE);
4350 /* to reset check button */
4351 if (camapp->anti_shake == TRUE)
4352 elm_check_state_set(ad->antishake_radio, EINA_TRUE);
4354 elm_check_state_set(ad->antishake_radio, EINA_FALSE);
4358 GValue value = {0, };
4359 CAM_GVALUE_SET_BOOLEAN(value, camapp->anti_shake);
4360 cam_handle_value_set(ad, PROP_AHS, &value);
4362 __update_menubar_icon_by_index(ad, CAM_MENU_ANTI_SHAKE);
4363 __setting_popup_timeout_checker_start(ad);
4366 static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info)
4368 struct appdata *ad = (struct appdata *)cam_appdata_get();
4369 cam_retm_if(ad == NULL, "appdata is NULL");
4370 CamAppData *camapp = NULL;
4371 camapp = ad->camapp_handle;
4372 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4374 DEBUG_TRACE("camapp->outdoor_visibility = %d", camapp->outdoor_visibility);
4376 if (obj != ad->outdoor_visibility_radio) {
4377 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4379 if (camapp->outdoor_visibility == TRUE) {
4380 camapp->outdoor_visibility = FALSE;
4381 elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
4383 camapp->outdoor_visibility = TRUE;
4384 elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
4387 /* to reset check button */
4388 if (camapp->outdoor_visibility == TRUE)
4389 elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
4391 elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
4395 GValue value = {0, };
4396 CAM_GVALUE_SET_BOOLEAN(value, camapp->outdoor_visibility);
4397 cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &value);
4399 __update_menubar_icon_by_index(ad, CAM_MENU_OUTDOOR_VISIBILITY);
4400 __setting_popup_timeout_checker_start(ad);
4403 static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info)
4405 cam_ret_if(obj == NULL);
4406 struct appdata *ad = (struct appdata *)cam_appdata_get();
4407 cam_retm_if(ad == NULL, "appdata is NULL");
4408 CamAppData *camapp = NULL;
4409 camapp = ad->camapp_handle;
4410 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4412 DEBUG_TRACE("camapp->auto_contrast = %d", camapp->auto_contrast);
4414 if (obj != ad->autocontrast_radio) {
4415 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4417 if (camapp->auto_contrast == TRUE) {
4418 camapp->auto_contrast = FALSE;
4419 elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
4421 camapp->auto_contrast = TRUE;
4422 elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
4425 /* to reset check button */
4426 if (camapp->auto_contrast == TRUE)
4427 elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
4429 elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
4433 GValue value = {0, };
4434 CAM_GVALUE_SET_BOOLEAN(value, camapp->auto_contrast);
4435 cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &value);
4437 __update_menubar_icon_by_index(ad, CAM_MENU_AUTO_CONTRAST);
4438 __setting_popup_timeout_checker_start(ad);
4442 void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info)
4444 cam_ret_if(obj == NULL);
4445 struct appdata *ad = (struct appdata *)cam_appdata_get();
4446 cam_retm_if(ad == NULL, "appdata is NULL");
4447 CamAppData *camapp = NULL;
4448 camapp = ad->camapp_handle;
4449 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4451 DEBUG_TRACE("camapp->guideline = %d", camapp->guideline);
4453 if (obj != ad->guideline_radio) {
4454 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4456 if (camapp->guideline == TRUE) {
4457 camapp->guideline = FALSE;
4458 elm_check_state_set(ad->guideline_radio, EINA_FALSE);
4460 camapp->guideline = TRUE;
4461 elm_check_state_set(ad->guideline_radio, EINA_TRUE);
4464 /* to reset check button */
4465 if (camapp->guideline == TRUE)
4466 elm_check_state_set(ad->guideline_radio, EINA_TRUE);
4468 elm_check_state_set(ad->guideline_radio, EINA_FALSE);
4472 GValue value = {0, };
4473 CAM_GVALUE_SET_BOOLEAN(value, camapp->guideline);
4474 cam_handle_value_set(ad, PROP_GUIDELINE, &value);
4476 settings_guideline_refresh(ad);
4478 __update_menubar_icon_by_index(ad, CAM_MENU_GUIDELINES);
4479 __setting_popup_timeout_checker_start(ad);
4483 static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info)
4485 cam_ret_if(obj == NULL);
4486 struct appdata *ad = (struct appdata *)cam_appdata_get();
4487 cam_retm_if(ad == NULL, "appdata is NULL");
4488 CamAppData *camapp = NULL;
4489 camapp = ad->camapp_handle;
4490 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4492 DEBUG_TRACE("camapp->save_as_flip = %d", camapp->save_as_flip);
4494 if (obj != ad->save_as_flip_radio) {
4495 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4497 if (camapp->save_as_flip == TRUE) {
4498 camapp->save_as_flip = FALSE;
4499 elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
4501 camapp->save_as_flip = TRUE;
4502 elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
4505 /* to reset check button */
4506 if (camapp->save_as_flip == TRUE)
4507 elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
4509 elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
4513 GValue value = {0, };
4514 CAM_GVALUE_SET_BOOLEAN(value, camapp->save_as_flip);
4515 cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &value);
4517 __update_menubar_icon_by_index(ad, CAM_MENU_SAVE_AS_FLIP);
4518 __setting_popup_timeout_checker_start(ad);
4522 static void __voice_cmd_cb(CamVoiceCmdState state, void* data)
4525 case CAM_VOICE_CMD_READY:
4528 char *emission = "release_shutter_sig";
4529 char *source = "temp";
4530 cam_toolbar_shutter_button_cb(data, NULL,
4534 case CAM_VOICE_CMD_REJECT:
4535 // do action - after discuss with UX
4537 case CAM_VOICE_CMD_ERROR:
4538 //do action - after discuss with UX
4545 static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info)
4547 cam_ret_if(obj == NULL);
4548 struct appdata *ad = (struct appdata *)cam_appdata_get();
4549 cam_retm_if(ad == NULL, "appdata is NULL");
4550 CamAppData *camapp = NULL;
4551 camapp = ad->camapp_handle;
4552 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4554 DEBUG_TRACE("camapp->capture_by_voice = %d", camapp->capture_by_voice);
4556 if (obj != ad->capture_by_voice_radio) {
4557 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4559 if (camapp->capture_by_voice == TRUE) {
4560 camapp->capture_by_voice = FALSE;
4561 elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
4563 camapp->capture_by_voice = TRUE;
4564 elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
4567 /* to reset check button */
4568 if (camapp->capture_by_voice == TRUE)
4569 elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
4571 elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
4575 if (camapp->capture_by_voice) {
4576 if ( !cam_voice_cmd_create((cam_voice_cmd_cb)__voice_cmd_cb,ad)) {
4577 cam_voice_cmd_destroy();
4578 camapp->capture_by_voice = FALSE;
4579 elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
4582 } else cam_voice_cmd_destroy();
4584 __update_menubar_icon_by_index(ad, CAM_MENU_CAPTURE_VOICE);
4585 __setting_popup_timeout_checker_start(ad);
4588 static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info)
4590 cam_ret_if(obj == NULL);
4591 struct appdata *ad = (struct appdata *)cam_appdata_get();
4592 cam_retm_if(ad == NULL, "appdata is NULL");
4593 CamAppData *camapp = NULL;
4594 camapp = ad->camapp_handle;
4595 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
4597 DEBUG_TRACE("camapp->gps = %d", camapp->gps);
4599 if (obj != ad->gps_radio) {
4600 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4602 if (camapp->gps == TRUE) {
4603 camapp->gps = FALSE;
4604 elm_check_state_set(ad->gps_radio, EINA_FALSE);
4607 elm_check_state_set(ad->gps_radio, EINA_TRUE);
4610 /* to reset check button */
4611 if (camapp->gps == TRUE)
4612 elm_check_state_set(ad->gps_radio, EINA_TRUE);
4614 elm_check_state_set(ad->gps_radio, EINA_FALSE);
4618 GValue value = {0, };
4619 CAM_GVALUE_SET_BOOLEAN(value, camapp->gps);
4620 cam_handle_value_set(ad, PROP_GPS, &value);
4622 __update_menubar_icon_by_index(ad, CAM_MENU_GPS_TAG);
4623 __setting_popup_timeout_checker_start(ad);
4625 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4626 cam_toolbar_setting_popup_destroy(ad);
4629 static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info)
4631 DEBUG_TRACE("START");
4633 struct appdata *ad = data;
4634 cam_retm_if(ad == NULL, "appdata is NULL");
4636 gboolean from_setting = FALSE;
4638 if (event_info) { /*call by setting*/
4639 from_setting = TRUE;
4640 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4641 ad->setting_select_item = (Elm_Object_Item *)event_info;
4642 } else { /*call by click icon*/
4643 from_setting = FALSE;
4644 ad->displayed_setting_popup = DISPLAY_STORAGE_POPUP;
4647 __create_setting_listmenu(ad, CAM_MENU_STORAGE, from_setting);
4650 static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
4652 DEBUG_TRACE("START");
4654 struct appdata *ad = data;
4655 cam_retm_if(ad == NULL, "appdata is NULL");
4657 gboolean from_setting = FALSE;
4659 if (event_info) { /*call by setting*/
4660 from_setting = TRUE;
4661 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4662 ad->setting_select_item = (Elm_Object_Item *)event_info;
4663 } else { /*call by click icon*/
4664 from_setting = FALSE;
4665 ad->displayed_setting_popup = DISPLAY_PHOTO_RESOLUTION_POPUP;
4668 __create_setting_listmenu(ad, CAM_MENU_PHOTO_RESOLUTION, from_setting);
4671 static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
4673 DEBUG_TRACE("START");
4675 struct appdata *ad = data;
4676 cam_retm_if(ad == NULL, "appdata is NULL");
4678 gboolean from_setting = FALSE;
4680 if (event_info) { /*call by setting*/
4681 from_setting = TRUE;
4682 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4683 ad->setting_select_item = (Elm_Object_Item *)event_info;
4684 } else { /*call by click icon*/
4685 from_setting = FALSE;
4686 ad->displayed_setting_popup = DISPLAY_VIDEO_RESOLUTION_POPUP;
4689 __create_setting_listmenu(ad, CAM_MENU_VIDEO_RESOLUTION, from_setting);
4692 static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info)
4694 cam_ret_if(data == NULL);
4695 struct appdata *ad = (struct appdata *)(data);
4696 cam_retm_if(ad == NULL, " appdata is NULL");
4697 gboolean from_setting = FALSE;
4698 if (event_info) { /*call by setting*/
4699 from_setting = TRUE;
4700 } else { /*call by click icon*/
4701 from_setting = FALSE;
4702 ad->displayed_setting_popup = DISPLAY_RESET_POPUP;
4705 elm_genlist_item_selected_set(event_info, EINA_FALSE);
4706 ad->setting_select_item = (Elm_Object_Item *)event_info;
4709 DEL_EVAS_OBJECT(ad->confirm_popup);
4711 ad->confirm_popup = elm_popup_add(ad->ug_base);
4712 evas_object_size_hint_weight_set(ad->confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4713 elm_popup_timeout_set(ad->confirm_popup, 9.0);
4716 char popup_str[1024 + 1] = { '\0',};
4717 snprintf(popup_str, 1024, "%s%s%s", _("<font=SLP:style=Roman><color=#000000><align=center>"),
4718 dgettext(PACKAGE, "IDS_CAM_POP_RESET_SETTINGS_Q"), _("</align></color></font>"));
4720 elm_object_text_set(ad->confirm_popup, popup_str);
4721 Evas_Object *btn1 = elm_button_add(ad->confirm_popup);
4722 elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
4723 elm_object_part_content_set(ad->confirm_popup, "button1", btn1);
4724 evas_object_smart_callback_add(btn1, "clicked", __restore_defaults_popup_cb_ok_cb, (void*)ad);
4725 Evas_Object *btn2 = elm_button_add(ad->confirm_popup);
4726 elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
4727 elm_object_part_content_set(ad->confirm_popup, "button2", btn2);
4728 evas_object_smart_callback_add(btn2, "clicked", __restore_defaults_popup_cb_cancel_cb, (void*)ad);
4730 evas_object_show(ad->confirm_popup);
4732 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4733 cam_toolbar_setting_popup_destroy(ad);
4736 void settings_guideline_refresh(struct appdata *ad)
4738 cam_retm_if(ad == NULL, "appdata is NULL");
4739 CamAppData *camapp = ad->camapp_handle;
4740 cam_retm_if(camapp == NULL,"camapp is NULL");
4741 DEBUG_TRACE("ad->camapp_handle->guideline = %d" ,ad->camapp_handle->guideline);
4743 if( ad->camapp_handle->guideline == TRUE) {
4744 cam_guideline_create(ad);
4746 if (ad->guideline_edje && ad->toolbar_setting_popup) {
4747 evas_object_hide(ad->guideline_edje);
4749 if (ad->toolbar_edje)
4750 evas_object_raise(ad->toolbar_edje);
4753 DEL_EVAS_OBJECT(ad->guideline_edje);
4757 static Eina_Bool __setting_popup_timeout_checker_cb(void *data)
4759 struct appdata *ad = (struct appdata *)data;
4760 CamAppData *camapp = NULL;
4761 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
4762 camapp = ad->camapp_handle;
4763 if (camapp == NULL) {
4764 if (ad->setting_toolbar_hide_timer)
4765 ad->setting_toolbar_hide_timer = NULL;
4766 return ECORE_CALLBACK_CANCEL;
4769 if (ad->setting_toolbar_hide_timer)
4770 ad->setting_toolbar_hide_timer = NULL;
4771 gdouble diff_time = 0.0;
4772 diff_time = _get_current_time() - camapp->start_time;
4773 if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
4774 && (diff_time >= CAM_SETTING_POPUP_TIMEOUT)) {
4775 DEBUG_TRACE("destroy setting pupup");
4776 if (ad->setting_toolbar_hide_timer) {
4777 if (ad->setting_ctxpopup) {
4778 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
4779 cam_toolbar_setting_popup_destroy(ad);
4780 if (ad->shot_mode_guide_popup)
4781 toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
4782 } else if (ad->toolbar_setting_popup) {
4783 cam_toolbar_setting_popup_destroy(ad);
4786 if (ad->edit_shortcuts_popup_scroll) {
4787 toolbar_destroy_shortcuts_popup(ad);
4791 return ECORE_CALLBACK_CANCEL;
4794 static gboolean __setting_popup_timeout_checker_start(struct appdata *ad)
4796 DEBUG_TRACE("START");
4797 CamAppData *camapp = NULL;
4798 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4799 camapp = ad->camapp_handle;
4800 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4801 if (ad->setting_toolbar_hide_timer) {
4802 ecore_timer_del(ad->setting_toolbar_hide_timer);
4803 ad->setting_toolbar_hide_timer = NULL;
4805 ad->setting_toolbar_hide_timer =
4806 ecore_timer_add(CAM_SETTING_POPUP_TIMEOUT, __setting_popup_timeout_checker_cb, ad);
4807 camapp->start_time = _get_current_time();
4812 int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item)
4814 int menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
4815 Evas_Object *icon = NULL;
4816 __get_menubar_shortcuts_info(ad, menu_item, &menu_bar_no, &icon);
4820 /*note: output menu index, input display popup value*/
4821 int cam_toolbar_displaypopup_map_menu_value(int display_popup)
4823 switch (display_popup) {
4824 case DISPLAY_NONE_POPUP:
4825 return CAM_MENU_EMPTY;
4827 case DISPLAY_EDIT_SHOTCUTS_POPUP:
4828 return CAM_MENU_SHORTCUTS;
4830 case DISPLAY_BURST_SHOT_MODE_POPUP:
4831 return CAM_MENU_BURST_SHOT_MODE;
4833 case DISPLAY_VOLUME_KEY_POPUP:
4834 return CAM_MENU_VOLUME_KEY;
4836 case DISPLAY_SELF_PORTRAIT_POPUP:
4837 return CAM_MENU_SELF_PORTRAIT;
4839 case DISPLAY_SCENE_MODE_POPUP:
4840 return CAM_MENU_SCENE_MODE;
4842 case DISPLAY_FOCUS_MODE_POPUP:
4843 return CAM_MENU_FOCUS_MODE;
4845 case DISPLAY_EFFECTS_POPUP:
4846 return CAM_MENU_EFFECTS;
4848 case DISPLAY_ANTI_SHAKE_POPUP:
4849 return CAM_MENU_ANTI_SHAKE;
4851 case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
4852 return CAM_MENU_OUTDOOR_VISIBILITY;
4854 case DISPLAY_AUTO_CONTRAST_POPUP:
4855 return CAM_MENU_AUTO_CONTRAST;
4857 case DISPLAY_GUIDELINES_POPUP:
4858 return CAM_MENU_GUIDELINES;
4860 case DISPLAY_CAPTURE_VOICE_POPUP:
4861 return CAM_MENU_CAPTURE_VOICE;
4863 case DISPLAY_GPS_TAG_POPUP:
4864 return CAM_MENU_GPS_TAG;
4866 case DISPLAY_STORAGE_POPUP:
4867 return CAM_MENU_STORAGE;
4869 case DISPLAY_RESET_POPUP:
4870 return CAM_MENU_RESET;
4872 case DISPLAY_SHOOTING_MODE_POPUP:
4873 return CAM_MENU_SHOOTING_MODE;
4875 case DISPLAY_RECORDING_MODE_POPUP:
4876 return CAM_MENU_RECORDING_MODE;
4878 case DISPLAY_VIDEO_RESOLUTION_POPUP:
4879 return CAM_MENU_VIDEO_RESOLUTION;
4881 case DISPLAY_PHOTO_RESOLUTION_POPUP:
4882 return CAM_MENU_PHOTO_RESOLUTION;
4884 case DISPLAY_ISO_POPUP:
4885 return CAM_MENU_ISO;
4887 case DISPLAY_METERING_POPUP:
4888 return CAM_MENU_METERING;
4890 case DISPLAY_WHITE_BALANCE_POPUP:
4891 return CAM_MENU_WHITE_BALANCE;
4893 case DISPLAY_FLASH_POPUP:
4894 return CAM_MENU_FLASH;
4896 case DISPLAY_TIMER_POPUP:
4897 return CAM_MENU_TIMER;
4899 case DISPLAY_SAVE_AS_FLIP:
4900 return CAM_MENU_SAVE_AS_FLIP;
4902 return CAM_MENU_EMPTY;
4907 Eina_Bool cam_show_setting_menu_option_popup(void *data)
4909 struct appdata *ad = (struct appdata *)data;
4910 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4912 switch (ad->displayed_setting_popup) {
4913 case DISPLAY_NONE_POPUP:
4915 case DISPLAY_EDIT_SHOTCUTS_POPUP:
4916 __setting_edit_shortcut_popup_cb(ad, NULL, NULL);
4918 case DISPLAY_VOLUME_KEY_POPUP:
4919 __setting_volume_key_popup_cb(ad, NULL, NULL);
4921 case DISPLAY_SELF_PORTRAIT_POPUP:
4922 __setting_self_portrait_popup_cb(ad, NULL, NULL);
4924 case DISPLAY_SCENE_MODE_POPUP:
4925 __setting_scenemode_popup_cb(ad, NULL, NULL);
4927 case DISPLAY_FOCUS_MODE_POPUP:
4928 __setting_focus_mode_cb(ad, NULL, NULL);
4930 case DISPLAY_EFFECTS_POPUP:
4931 __setting_effects_popup_cb(ad, NULL, NULL);
4933 case DISPLAY_ANTI_SHAKE_POPUP:
4934 __setting_anti_shake_popup_cb(ad, NULL, NULL);
4936 case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
4937 __setting_outdoor_visibility_popup_cb(ad, NULL, NULL);
4939 case DISPLAY_AUTO_CONTRAST_POPUP:
4940 __setting_autocontrast_popup_cb(ad, NULL, NULL);
4942 case DISPLAY_GUIDELINES_POPUP:
4943 __setting_guideline_popup_cb(ad, NULL, NULL);
4945 case DISPLAY_CAPTURE_VOICE_POPUP:
4946 __setting_capture_by_voice_popup_cb(ad, NULL, NULL);
4948 case DISPLAY_GPS_TAG_POPUP:
4949 __setting_gps_popup_cb(ad, NULL, NULL);
4951 case DISPLAY_STORAGE_POPUP:
4952 __setting_storage_popup_cb(ad, NULL, NULL);
4954 case DISPLAY_RESET_POPUP:
4955 __setting_restore_defaults_popup_cb(ad, NULL, NULL);
4957 case DISPLAY_SHOOTING_MODE_POPUP:
4958 __setting_shot_mode_popup_cb(ad, NULL, NULL);
4960 case DISPLAY_RECORDING_MODE_POPUP:
4961 __setting_record_mode_popup(ad, NULL, NULL);
4963 case DISPLAY_VIDEO_RESOLUTION_POPUP:
4964 __setting_video_resolution_popup_cb(ad, NULL, NULL);
4966 case DISPLAY_PHOTO_RESOLUTION_POPUP:
4967 __setting_photo_resolution_popup_cb(ad, NULL, NULL);
4969 case DISPLAY_ISO_POPUP:
4970 __setting_iso_popup_cb(ad, NULL, NULL);
4972 case DISPLAY_METERING_POPUP:
4973 __setting_metering_popup_cb(ad, NULL, NULL);
4975 case DISPLAY_WHITE_BALANCE_POPUP:
4976 __setting_wb_popup_cb(ad, NULL, NULL);
4978 case DISPLAY_FLASH_POPUP:
4979 __setting_flash_popup(ad, NULL, NULL);
4981 case DISPLAY_TIMER_POPUP:
4982 __setting_timer_popup_cb(ad,NULL,NULL);
4984 case DISPLAY_SAVE_AS_FLIP:
4985 __setting_save_as_flip_popup_cb(ad, NULL, NULL);
4991 return ECORE_CALLBACK_CANCEL;
4994 Eina_Bool cam_show_setting_menu(void *data)
4996 struct appdata *ad = (struct appdata *)data;
4997 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
4999 if (ad->show_setting_popup_after_rotate == TRUE) {
5000 cam_toolbar_setting_popup_create(ad);
5001 } else if (ad->show_edit_shortcuts_popup_after_rotate == TRUE) {
5002 toolbar_create_shortcuts_popup(ad);
5005 if (ad->displayed_setting_popup != DISPLAY_NONE_POPUP) {
5006 ecore_idler_add(cam_show_setting_menu_option_popup, ad);
5009 ad->is_rotating = FALSE;
5011 return ECORE_CALLBACK_CANCEL;
5014 void toolbar_destroy_shortcuts_popup(struct appdata *ad)
5016 cam_retm_if(ad == NULL, "appdata is null");
5017 cam_retm_if(ad->toolbar_edje == NULL, "appdata is null");
5018 elm_object_part_content_unset(ad->toolbar_edje, "shortcuts_popup");
5020 DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_scroll);
5021 DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
5022 ad->edit_shortcuts_popup_scroll = NULL;
5023 ad->edit_shortcuts_popup_ctx = NULL;
5024 ad->edit_shortcuts_popup = NULL;
5027 __cam_toolbar_edit_shortcuts_data_clean();
5029 destroy_menubar_shortcuts_mouse_event(ad, 0, TRUE);
5032 /*TODO: here should be rotate icon*/
5034 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5035 "toolbar_1_icon,normal", "prog");
5036 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5037 "toolbar_2_icon,normal", "prog");
5038 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5039 "toolbar_3_icon,normal", "prog");
5040 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
5041 "toolbar_4_icon,normal", "prog");
5043 __set_show_state_preview_obj(ad, TRUE);
5046 for (i = CAM_MENU_EMPTY + 1; i < CAM_MENU_MAX_NUMS; i++) {
5047 __update_menubar_icon_by_index(ad, i);
5051 void cam_toolbar_setting_popup_destroy(struct appdata *ad)
5053 cam_retm_if(ad == NULL, "appdata is null");
5056 if (ad->setting_ctxpopup)
5057 setting_ctxpopup_destroy(ad);
5060 elm_genlist_clear(ad->genlist);
5061 evas_object_del(ad->genlist);
5065 DEL_EVAS_OBJECT(ad->toolbar_setting_popup);
5066 ad->toolbar_setting_popup_area = NULL;
5067 ad->setting_select_item = NULL; /*select item*/
5069 /*elm_all_flush();*/
5070 cam_elm_cache_flush();
5072 __set_show_state_preview_obj(ad, TRUE);
5075 void cam_toolbar_setting_popup_update(struct appdata *ad)
5077 cam_retm_if(ad == NULL, "appdata is null");
5079 if (!ad->toolbar_setting_popup)
5082 if (ad->setting_ctxpopup)
5083 setting_ctxpopup_destroy(ad);
5085 __update_setting_popup(ad);
5088 static Evas_Object *_setting_gl_icon_get(void *data, Evas_Object *obj, const char *part)
5090 struct appdata *ad = (struct appdata *)cam_appdata_get();
5091 cam_retvm_if(ad == NULL, NULL, "appdata is null");
5093 int index = (int)data;
5095 CamAppData *camapp = ad->camapp_handle;
5096 cam_retv_if(camapp == NULL, NULL);
5097 Evas_Object *icon = NULL;
5100 case CAM_MENU_SHORTCUTS:
5103 case CAM_MENU_BURST_SHOT_MODE:
5105 icon = elm_check_add(obj);
5107 if (ad->camapp_handle->burst_shot) {
5108 elm_check_state_set(icon, EINA_TRUE);
5110 elm_check_state_set(icon, EINA_FALSE);
5113 elm_object_style_set(icon, "genlist/on&off");
5114 evas_object_smart_callback_add(icon, "changed", __setting_burst_shot_popup_cb, (void*)ad);
5115 ad->burst_shot_mode_radio = icon;
5118 case CAM_MENU_VOLUME_KEY:
5120 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5121 icon = elm_image_add(obj);
5122 strncpy(icon_name, __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), BUTTON_STATE_NORMAL), sizeof(icon_name));
5123 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5126 case CAM_MENU_SELF_PORTRAIT:
5127 icon = elm_check_add(obj);
5129 if (camapp->self_portrait == FALSE) {
5130 elm_check_state_set(icon, EINA_FALSE);
5132 elm_check_state_set(icon, EINA_TRUE);
5135 elm_object_style_set(icon, "genlist/on&off");
5137 case CAM_MENU_FLASH:
5139 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5140 icon = elm_image_add(obj);
5141 strncpy(icon_name, __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), BUTTON_STATE_NORMAL), sizeof(icon_name));
5142 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5145 case CAM_MENU_SHOOTING_MODE:
5147 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5148 icon = elm_image_add(obj);
5149 strncpy(icon_name, __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5150 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5153 case CAM_MENU_RECORDING_MODE:
5155 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5156 icon = elm_image_add(obj);
5157 strncpy(icon_name, __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5158 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5161 case CAM_MENU_SCENE_MODE:
5163 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5164 icon = elm_image_add(obj);
5165 strncpy(icon_name, __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5166 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5169 case CAM_MENU_EXPLOSURE_VALUE:
5171 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5172 icon = elm_image_add(obj);
5173 strncpy(icon_name, __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, BUTTON_STATE_NORMAL), sizeof(icon_name));
5174 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5177 case CAM_MENU_FOCUS_MODE:
5179 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5180 icon = elm_image_add(obj);
5181 strncpy(icon_name, __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
5182 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5185 case CAM_MENU_TIMER:
5187 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5188 icon = elm_image_add(obj);
5189 strncpy(icon_name, __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), BUTTON_STATE_NORMAL), sizeof(icon_name));
5190 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5193 case CAM_MENU_EFFECTS:
5195 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5196 icon = elm_image_add(obj);
5197 strncpy(icon_name, __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), BUTTON_STATE_NORMAL), sizeof(icon_name));
5198 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5201 case CAM_MENU_PHOTO_RESOLUTION:
5203 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5204 icon = elm_image_add(obj);
5205 strncpy(icon_name, __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
5206 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5209 case CAM_MENU_VIDEO_RESOLUTION:
5211 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5212 icon = elm_image_add(obj);
5213 strncpy(icon_name, __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
5214 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5217 case CAM_MENU_WHITE_BALANCE:
5219 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5220 icon = elm_image_add(obj);
5221 strncpy(icon_name, __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), BUTTON_STATE_NORMAL), sizeof(icon_name));
5222 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5227 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5228 icon = elm_image_add(obj);
5229 strncpy(icon_name, __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), BUTTON_STATE_NORMAL), sizeof(icon_name));
5230 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5233 case CAM_MENU_METERING:
5235 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5236 icon = elm_image_add(obj);
5237 strncpy(icon_name, __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), BUTTON_STATE_NORMAL), sizeof(icon_name));
5238 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5241 case CAM_MENU_ANTI_SHAKE:
5242 icon = elm_check_add(obj);
5244 if (ad->camapp_handle->anti_shake) {
5245 elm_check_state_set(icon, EINA_TRUE);
5247 elm_check_state_set(icon, EINA_FALSE);
5250 elm_object_style_set(icon, "genlist/on&off");
5251 evas_object_smart_callback_add(icon, "changed", __setting_anti_shake_popup_cb, (void*)ad);
5252 ad->antishake_radio = icon;
5254 case CAM_MENU_OUTDOOR_VISIBILITY:/*TODO:is finding solution*/
5255 icon = elm_check_add(obj);
5257 if (ad->camapp_handle->outdoor_visibility) {
5258 elm_check_state_set(icon, EINA_TRUE);
5260 elm_check_state_set(icon, EINA_FALSE);
5263 elm_object_style_set(icon, "genlist/on&off");
5264 evas_object_smart_callback_add(icon, "changed", __setting_outdoor_visibility_popup_cb, (void*)ad);
5265 ad->outdoor_visibility_radio = icon;
5267 case CAM_MENU_AUTO_CONTRAST:
5268 icon = elm_check_add(obj);
5270 if (ad->camapp_handle->auto_contrast) {
5271 elm_check_state_set(icon, EINA_TRUE);
5274 elm_check_state_set(icon, EINA_FALSE);
5276 elm_object_style_set(icon, "genlist/on&off");
5277 evas_object_smart_callback_add(icon, "changed", __setting_autocontrast_popup_cb, (void*)ad);
5278 ad->autocontrast_radio = icon;
5281 case CAM_MENU_GUIDELINES:
5282 icon = elm_check_add(obj);
5284 if (ad->camapp_handle->guideline) {
5285 elm_check_state_set(icon, EINA_TRUE);
5287 elm_check_state_set(icon, EINA_FALSE);
5290 elm_object_style_set(icon, "genlist/on&off");
5291 evas_object_smart_callback_add(icon, "changed", __setting_guideline_popup_cb, (void*)ad);
5292 ad->guideline_radio = icon;
5294 case CAM_MENU_CAPTURE_VOICE:/*TODO:now no relase solution to support it*/
5295 icon = elm_check_add(obj);
5297 if (ad->camapp_handle->capture_by_voice) {
5298 elm_check_state_set(icon, EINA_TRUE);
5300 elm_check_state_set(icon, EINA_FALSE);
5303 elm_object_style_set(icon, "genlist/on&off");
5304 evas_object_smart_callback_add(icon, "changed", __setting_capture_by_voice_popup_cb, (void*)ad);
5305 ad->capture_by_voice_radio = icon;
5307 case CAM_MENU_GPS_TAG:
5308 icon = elm_check_add(obj);
5311 elm_check_state_set(icon, EINA_TRUE);
5313 elm_check_state_set(icon, EINA_FALSE);
5316 elm_object_style_set(icon, "genlist/on&off");
5317 evas_object_smart_callback_add(icon, "changed", __setting_gps_popup_cb, (void*)ad);
5318 ad->gps_radio = icon;
5320 case CAM_MENU_SAVE_AS_FLIP:
5321 icon = elm_check_add(obj);
5323 if (ad->camapp_handle->save_as_flip) {
5324 elm_check_state_set(icon, EINA_TRUE);
5326 elm_check_state_set(icon, EINA_FALSE);
5329 elm_object_style_set(icon, "genlist/on&off");
5330 evas_object_smart_callback_add(icon, "changed", __setting_save_as_flip_popup_cb, (void*)ad);
5331 ad->save_as_flip_radio = icon;
5333 case CAM_MENU_STORAGE:
5335 char icon_name[CAM_FILE_PATH_MAX] = { 0 };
5336 icon = elm_image_add(obj);
5337 strncpy(icon_name, __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), BUTTON_STATE_NORMAL), sizeof(icon_name));
5338 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
5341 case CAM_MENU_RESET:
5343 case CAM_MENU_MAX_NUMS:
5344 DEBUG_TRACE("your array out, please check!");
5347 DEBUG_TRACE("Error occur!");
5350 /*evas_object_resize(icon, 86 , 84);
5351 evas_object_size_hint_min_set(icon, 86, 84);
5352 evas_object_size_hint_max_set(icon, 86, 84);*/
5353 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
5354 evas_object_size_hint_align_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
5359 static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part)
5361 int index = (int)data;
5364 case CAM_MENU_SHORTCUTS:
5365 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EDIT_SHORTCUTS"));
5367 case CAM_MENU_BURST_SHOT_MODE:
5368 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB"));
5370 case CAM_MENU_VOLUME_KEY:
5371 return strdup(dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"));
5373 case CAM_MENU_SELF_PORTRAIT:
5374 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT"));
5376 case CAM_MENU_FLASH:
5377 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FLASH"));
5379 case CAM_MENU_SHOOTING_MODE:
5380 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE"));
5382 case CAM_MENU_RECORDING_MODE:
5383 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE"));
5385 case CAM_MENU_SCENE_MODE:
5386 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE"));
5388 case CAM_MENU_EXPLOSURE_VALUE:
5389 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE"));
5391 case CAM_MENU_FOCUS_MODE:
5392 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE"));
5394 case CAM_MENU_TIMER:
5395 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_TIMER"));
5397 case CAM_MENU_EFFECTS:
5398 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS"));
5400 case CAM_MENU_PHOTO_RESOLUTION:
5401 return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"));
5403 case CAM_MENU_VIDEO_RESOLUTION:
5404 return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"));
5406 case CAM_MENU_WHITE_BALANCE:
5407 return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB"));
5410 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ISO"));
5412 case CAM_MENU_METERING:
5413 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_METERING"));
5415 case CAM_MENU_ANTI_SHAKE:
5416 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE"));
5418 case CAM_MENU_OUTDOOR_VISIBILITY:
5419 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY"));
5421 case CAM_MENU_AUTO_CONTRAST:
5422 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST"));
5424 case CAM_MENU_GUIDELINES:
5425 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE"));
5427 case CAM_MENU_CAPTURE_VOICE:
5428 return strdup("Capture with voice");
5430 case CAM_MENU_GPS_TAG:
5431 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG"));
5433 case CAM_MENU_SAVE_AS_FLIP:
5434 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED"));
5436 case CAM_MENU_STORAGE:
5437 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE"));
5439 case CAM_MENU_RESET:
5440 return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET"));
5442 case CAM_MENU_MAX_NUMS:
5443 DEBUG_TRACE("your array out, please check!");
5446 DEBUG_TRACE("Error occur!");
5448 return strdup("test");
5451 static void __setting_gl_mouse_down(void *data, Evas * evas, Evas_Object *obj,
5454 struct appdata *ad = (struct appdata *)data;
5456 if (!event_info) return;
5457 if (ad->setting_ctxpopup) {
5458 /*setting_ctxpopup_destroy(ad);*/
5459 evas_object_hide(ad->setting_ctxpopup);
5461 Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
5462 setting_gl_x = mu->canvas.x;
5463 setting_gl_y = mu->canvas.y;
5464 setting_gl_x = mu->output.x;
5465 setting_gl_y = mu->output.y;
5466 DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
5467 DEBUG_TRACE("mu->output.x = %d, mu->output.y = %d", mu->output.x, mu->output.y);
5469 __setting_popup_timeout_checker_start(ad);
5470 cam_app_timeout_checker_update();
5473 /*mouse move func for setting popup*/
5474 static void __setting_gl_mouse_move(void *data, Evas * evas, Evas_Object *obj,
5477 struct appdata *ad = (struct appdata *)data;
5479 if (!event_info) return;
5480 if (ad->setting_ctxpopup) {
5481 /*setting_ctxpopup_destroy(ad);*/
5482 evas_object_hide(ad->setting_ctxpopup);
5484 Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
5485 setting_gl_x = mu->cur.canvas.x;
5486 setting_gl_y = mu->cur.canvas.y;
5487 setting_gl_x = mu->cur.output.x;
5488 setting_gl_y = mu->cur.output.y;
5489 DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
5490 DEBUG_TRACE("mu->cur->canvas.x = %d, mu->cur->canvas.y = %d", mu->cur.canvas.x, mu->cur.canvas.y);
5492 __setting_popup_timeout_checker_start(ad);
5493 cam_app_timeout_checker_update();
5496 static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj,
5499 struct appdata *ad = (struct appdata *)data;
5501 cam_app_timeout_checker_update();
5502 __setting_popup_timeout_checker_start(ad);
5503 if (!event_info) return;
5504 Evas_Coord x, y, w, h;
5506 Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
5507 shortcuts_canvas_prev_x = mu->canvas.x;
5508 shortcuts_canvas_prev_y = mu->canvas.y;
5509 DEBUG_TRACE("x = %d, y = %d", shortcuts_canvas_prev_x, shortcuts_canvas_prev_y);
5511 cam_long_press_trigger(LONG_PRESS_ID_EDIT, mu->canvas.x, mu->canvas.y);
5513 evas_object_geometry_get(obj, &x, &y, &w, &h);
5514 Eina_List *l = NULL;
5515 ShortCutData *shortcuts_ele = NULL;
5517 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
5518 if (shortcuts_ele == NULL)
5520 evas_object_geometry_get(shortcuts_ele->icon, &x, &y, &w, &h);
5521 shortcuts_ele->x = x;
5522 shortcuts_ele->y = y;
5523 shortcuts_ele->w = w;
5524 shortcuts_ele->h = h;
5525 DEBUG_TRACE("x,%d y,%d w,%d h,%d index %d",x, y, w, h, shortcuts_ele->part_index);
5527 if (obj == shortcuts_ele->icon) {
5528 ad->shortcut_data = shortcuts_ele;
5531 if (!ad->shortcut_data) { /*not find shortcut data, so it will come from menubar*/
5532 int menubar_no = -1;
5533 if (check_if_shortcuts_from_menubar(ad, obj, &menubar_no)) {
5534 /*get shortcuts data:*/
5535 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
5536 if (shortcuts_ele == NULL)
5538 if (shortcuts_ele->menu_bar_no == menubar_no) {
5539 ad->shortcut_data = shortcuts_ele;
5543 DEBUG_TRACE("error occur!");
5546 DEBUG_TRACE("find in the shortcuts panel");
5549 evas_object_raise(obj);
5550 evas_object_lower(evas_object_above_get(obj));
5554 static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj,void *event_info)
5557 struct appdata *ad = (struct appdata *)data;
5559 if (!event_info) return;
5560 pthread_mutex_lock(&edit_shortcuts_move_mutex);
5561 ShortCutData *moving_ele = ad->shortcut_data;
5562 ShortCutData *swap_ele = ad->swap_data;
5564 /*NOTE: reset opacity*/
5565 if (ad->swap_data) {
5566 if (ad->swap_data->is_on_menu_bar) {
5569 if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
5570 evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
5571 evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
5576 if (ad->swap_data->icon) {
5577 evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
5578 evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
5584 if (swap_ele && swap_ele->setting_type >= 0) {
5585 if ((swap_ele->is_on_menu_bar & moving_ele->is_on_menu_bar) == TRUE) {/*note: both in menubar*/
5586 __swap_menubar_shortcuts(ad, moving_ele, swap_ele);
5587 cam_toolbar_menu_config_update((void *)ad);
5588 } else if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
5589 DEBUG_TRACE("do nothing in mouse up");
5590 } else {/*note: one is in menubar, one is not*/
5591 if (swap_ele->is_on_menu_bar == TRUE) {/*note: swap_ele is on menubar*/
5592 evas_object_event_callback_del(obj,
5593 EVAS_CALLBACK_MOUSE_MOVE,
5594 __setting_shortcuts_mouse_move);
5595 __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
5596 } else {/*note: swap_ele is not on menubar*/
5597 moving_ele->is_on_menu_bar = FALSE;
5598 int tmp_menub_bar_no = moving_ele->menu_bar_no;
5599 moving_ele->menu_bar_no = -1;
5600 DEL_EVAS_OBJECT(obj);
5601 __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
5602 update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
5603 cam_toolbar_menu_config_update((void *)ad);
5604 destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
5606 /*TODO: update part_index*/
5607 __edit_shortcuts_layout_shortcuts_insert(ad, swap_ele, moving_ele);
5611 if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar)) {
5612 /*note: menu bar shortcuts move to the empty item in toolbar*/
5613 if (moving_ele->is_on_menu_bar) {
5614 __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
5616 moving_ele->is_on_menu_bar = TRUE;
5617 moving_ele->menu_bar_no = swap_ele->menu_bar_no;
5618 moving_ele->part_index = -1;
5619 ad->toolbar_menu_arrays[moving_ele->menu_bar_no].menu_type = moving_ele->setting_type;
5620 cam_toolbar_menu_config_update((void *)ad);
5621 update_menubar_shortcuts_mouse_event(ad, moving_ele->menu_bar_no, FALSE);
5622 evas_object_hide(moving_ele->icon);
5625 ad->swap_data = NULL;
5626 } else if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar == FALSE)) {
5627 /*note: case: menubar shortcuts move to the empty item in edit short panel: flash|empty(move to here)|empty*/
5628 if (moving_ele->is_on_menu_bar) {
5629 __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
5631 moving_ele->is_on_menu_bar = FALSE;
5632 moving_ele->menu_bar_no = -1;
5633 moving_ele->part_index = swap_ele->part_index;
5634 moving_ele->list_index = swap_ele->list_index;
5635 cam_toolbar_menu_config_update((void *)ad);
5636 evas_object_show(moving_ele->icon);
5637 HIDE_EVAS_OBJECT(obj);
5640 ad->swap_data = NULL;
5641 __resort_edit_shortcuts_list_by_part_index();
5643 ad->swap_data = NULL;
5644 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
5645 pthread_mutex_unlock(&edit_shortcuts_move_mutex);
5649 bool shortcuts_rect_check_intersect(Evas_Coord a_left, Evas_Coord a_top, Evas_Coord a_right, Evas_Coord a_bottom,
5650 Evas_Coord b_left, Evas_Coord b_top, Evas_Coord b_right, Evas_Coord b_bottom)
5652 if( (MIN(a_right, b_right) - MAX(a_left, b_left) > 60)
5653 && (MIN(a_bottom, b_bottom) - MAX(a_top, b_top)> 30)) {
5661 /*note: parent_shortcuts is swap_ele, sub_shortcuts is cur_ele, if cur_ele is in swap_ele, not swap them*/
5662 gboolean __cam_toolbar_shortcuts_rect_contain_check(CAM_Edit_ShortCuts_Rect sub_shortcuts,
5663 CAM_Edit_ShortCuts_Rect parent_shortcuts,
5667 int swap_rel1_x, swap_rel1_y, swap_w, swap_h;
5668 int cur_rel1_x, cur_rel1_y, cur_w, cur_h;
5669 cur_rel1_x = sub_shortcuts.x;
5670 cur_rel1_y = sub_shortcuts.y;
5671 cur_w = sub_shortcuts.w;
5672 cur_h = sub_shortcuts.h;
5674 swap_rel1_x = parent_shortcuts.x;
5675 swap_rel1_y = parent_shortcuts.y;
5676 swap_w = parent_shortcuts.w;
5677 swap_h = parent_shortcuts.h;
5679 return __shortcuts_rect_contain_check(swap_rel1_x, swap_rel1_y, swap_w, swap_h,
5680 cur_rel1_x, cur_rel1_y, cur_w, cur_h,
5681 correction_w, correction_h);
5684 static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
5695 int a_rel1_x = swap_rel1_x - correction_w;
5696 int a_rel1_y = swap_rel1_y - correction_h;
5699 a_rel2_x = swap_rel1_x + cur_w + correction_w;
5701 a_rel2_x = swap_rel1_x + swap_w + correction_w;
5704 a_rel2_y = swap_rel1_y + cur_h + correction_h;
5706 a_rel2_y = swap_rel1_y + swap_h + correction_h;
5708 int b_rel1_x = cur_rel1_x;
5709 int b_rel1_y = cur_rel1_y;
5710 int b_rel2_x = cur_rel1_x + cur_w;
5711 int b_rel2_y = cur_rel1_y + cur_h;
5713 if ((a_rel1_x < b_rel1_x)
5714 &&(a_rel1_y < b_rel1_y)
5715 &&(a_rel2_x > b_rel2_x)
5716 &&(a_rel2_y > b_rel2_y)
5728 @item_2:behind item_1
5730 void shortcuts_swap(Eina_List **head, Eina_List * item_1, Eina_List * item_2)
5733 Eina_List *tmp_item_1_next = item_1->next;
5734 Eina_List *tmp_item_2_prev = item_2->prev;
5735 if(item_1->prev!=NULL)
5736 item_1->prev->next = item_2;
5740 item_2->prev = item_1->prev;
5742 item_1->next = item_2->next;
5744 if(item_2->next!=NULL)
5745 item_2->next->prev = item_1;
5747 if (tmp_item_1_next == item_2) { /*item_1->item_2*/
5748 item_2->next = item_1;
5749 item_1->prev = item_2;
5750 } else {/*item_1->....->item_2*/
5751 tmp_item_1_next->prev = item_2;
5752 item_2->next = tmp_item_1_next;
5753 tmp_item_2_prev->next = item_1;
5754 item_1->prev = tmp_item_2_prev;
5758 static void __swap_menubar_shortcuts_ctx(struct appdata *ad, ShortCutData *menu_ele, ShortCutData *cur_ele)
5760 if (!cur_ele || !ad || !menu_ele)
5762 cur_ele->is_on_menu_bar = TRUE;
5763 cur_ele->menu_bar_no = menu_ele->menu_bar_no;
5764 DEBUG_TRACE("cur_ele->menu_bar_no = %d", cur_ele->menu_bar_no);
5765 if (cur_ele->menu_bar_no > CAM_MENU_BAR_LEFT_4 || cur_ele->menu_bar_no < CAM_MENU_BAR_LEFT_0) {
5766 cam_critical(LOG_UI, "menubar no error, check it ASAP");
5771 ad->toolbar_menu_arrays[cur_ele->menu_bar_no].menu_type = cur_ele->setting_type;
5772 update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
5774 menu_ele->is_on_menu_bar = FALSE;
5775 menu_ele->menu_bar_no = -1;
5776 char buf[16] = { 0 };
5777 snprintf(buf, sizeof(buf),"row.%d", menu_ele->part_index);
5778 DEBUG_TRACE("PART:%s", buf);
5779 evas_object_show(menu_ele->icon);
5780 evas_object_hide(cur_ele->icon);
5781 snprintf(buf, sizeof(buf),"row.%d", cur_ele->part_index);
5782 DEBUG_TRACE("PART:%s", buf);
5783 cam_toolbar_menu_config_update((void *)ad);
5787 static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect)
5790 Evas_Coord x=0, y=0, w=0, h=0;
5792 evas_object_geometry_get(shortcuts_icon, &x, &y, &w, &h);
5799 static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no)
5802 if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0)
5805 ad->toolbar_menu_arrays[menubar_no].menu_type = -1;
5806 Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
5807 edje_object_part_unswallow(_EDJ(ad->toolbar_edje), icon);
5808 DEL_EVAS_OBJECT(icon);
5809 icon = elm_image_add(ad->toolbar_edje);
5810 elm_image_file_set(icon, NULL, NULL);
5811 char buf[32+1] = {'\0',};
5812 snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
5813 edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
5814 ad->toolbar_menu_arrays[menubar_no].icon = icon;
5818 * note: check moving shortcuts with possible empty shortcuts in menubar,
5819 * if find, and moving shortcuts is in the empty shortcuts area, push this moving
5820 * shortcuts in this empty shortcuts. and return true, else return false
5822 gboolean check_with_menubar_empty_shortcuts(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
5824 if (!ad || !moving_ele ||!moving_obj)
5826 CAM_Edit_ShortCuts_Rect sub_rect;
5827 ShortCutData *cur_ele = moving_ele;
5828 __get_shortcuts_rect(moving_obj, &sub_rect);
5831 for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
5832 int type = ad->toolbar_menu_arrays[i].menu_type;
5833 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
5835 CAM_Edit_ShortCuts_Rect parent_rect;
5836 __get_shortcuts_rect(icon, &parent_rect);
5837 DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
5838 gboolean sub_in_parent = FALSE;
5839 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
5843 if (sub_in_parent) {
5844 if (cur_ele->is_on_menu_bar) {
5845 __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
5847 cur_ele->is_on_menu_bar = TRUE;
5848 cur_ele->menu_bar_no = i;
5849 cur_ele->part_index = -1;
5850 ad->toolbar_menu_arrays[i].menu_type = cur_ele->setting_type;
5851 cam_toolbar_menu_config_update((void *)ad);
5853 update_menubar_shortcuts_mouse_event(ad, i, FALSE);
5855 evas_object_hide(cur_ele->icon);
5856 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
5865 gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no)
5867 if (!obj || !ad || !menubar_no)
5870 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
5871 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
5881 static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele)
5884 Evas_Object_Event_Cb func;
5885 CAM_MENU_ITEM setting_type;
5886 char *icon_filepath;
5889 gboolean is_on_menu_bar;
5890 Evas_Coord x, y, w, h;
5896 icon = cur_ele->icon;
5897 func = cur_ele->func;
5898 setting_type = cur_ele->setting_type;
5899 icon_filepath = cur_ele->icon_filepath;
5900 name = cur_ele->name;
5901 menu_bar_no = cur_ele->menu_bar_no;
5902 is_on_menu_bar = cur_ele->is_on_menu_bar;
5907 part_index = cur_ele->part_index;
5908 list_index = cur_ele->list_index;
5912 cur_ele->icon = swap_ele->icon;
5913 cur_ele->func = swap_ele->func;
5914 cur_ele->setting_type = swap_ele->setting_type;
5915 cur_ele->icon_filepath = swap_ele->icon_filepath;
5916 cur_ele->name = swap_ele->name;
5917 /*cur_ele->menu_bar_no = swap_ele->menu_bar_no;*/
5918 cur_ele->is_on_menu_bar = swap_ele->is_on_menu_bar;
5919 cur_ele->x = swap_ele->x;
5920 cur_ele->y = swap_ele->y;
5921 cur_ele->w = swap_ele->w;
5922 cur_ele->h = swap_ele->h;
5923 cur_ele->part_index = swap_ele->part_index;
5924 /*cur_ele->list_index = swap_ele->list_index;*/
5925 cur_ele->row = swap_ele->row;
5926 cur_ele->col = swap_ele->col;
5928 swap_ele->icon = icon;
5929 swap_ele->func = func;
5930 swap_ele->setting_type = setting_type;
5931 swap_ele->icon_filepath = icon_filepath;
5932 swap_ele->name = name;
5933 /*swap_ele->menu_bar_no = menu_bar_no;*/
5934 swap_ele->is_on_menu_bar = is_on_menu_bar;
5939 swap_ele->part_index = part_index;
5940 /*swap_ele->list_index = swap_ele->list_index;*/
5941 swap_ele->row = row;
5942 swap_ele->col = col;
5946 static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
5951 if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
5953 ad->toolbar_menu_arrays[menubar_no].menu_type = setting_type;
5954 Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
5955 DEL_EVAS_OBJECT(icon);
5956 icon = elm_image_add(ad->toolbar_edje);
5957 char buf[32 + 1] = { '\0', };
5958 snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
5959 edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
5960 ad->toolbar_menu_arrays[menubar_no].icon = icon;
5961 __update_menubar_icon_by_index(ad, setting_type);
5964 static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele)
5966 __shortcuts_data_swap(cur_ele, swap_ele);
5967 __update_menubar_shortcuts_by_menubar_no(ad, cur_ele->setting_type, cur_ele->menu_bar_no);
5968 __update_menubar_shortcuts_by_menubar_no(ad, swap_ele->setting_type, swap_ele->menu_bar_no);
5969 update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
5970 update_menubar_shortcuts_mouse_event(ad, swap_ele->menu_bar_no, FALSE);
5973 /*NOTE: moving shortcuts, is from menubar*/
5974 static gboolean __check_menubar_moving_shortcuts_swap(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
5976 cam_retv_if(ad == NULL, FALSE);
5977 cam_retv_if(moving_ele == NULL, FALSE);
5978 cam_retv_if(moving_obj == NULL, FALSE);
5980 ShortCutData *shortcuts_ele;
5981 ShortCutData *cur_ele = moving_ele;
5982 CAM_Edit_ShortCuts_Rect sub_rect;
5983 __get_shortcuts_rect(moving_obj, &sub_rect);
5985 ShortCutData *swap_ele = NULL;
5986 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
5987 if (shortcuts_ele == NULL)
5989 if (shortcuts_ele->icon == cur_ele->icon) {
5990 DEBUG_TRACE("find self");
5993 Evas_Object *parent_icon = NULL;
5994 if (shortcuts_ele->is_on_menu_bar) {
5995 parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
5998 parent_icon = shortcuts_ele->icon;
6001 CAM_Edit_ShortCuts_Rect parent_rect;
6002 __get_shortcuts_rect(parent_icon, &parent_rect);
6004 gboolean sub_in_parent = FALSE;
6005 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6009 if (sub_in_parent) {
6010 DEBUG_TRACE("find swap ele");
6011 swap_ele = shortcuts_ele;
6016 DEBUG_TRACE("not find, continue");
6018 /*evas_object_move(moving_obj, x , y);*/
6021 if (swap_ele->is_on_menu_bar) {/*TODO: support menubar shortcuts swap*/
6022 __swap_menubar_shortcuts(ad, cur_ele, swap_ele);
6023 cam_toolbar_menu_config_update((void *)ad);
6024 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
6027 cur_ele->is_on_menu_bar = FALSE;
6028 int tmp_menub_bar_no = cur_ele->menu_bar_no;
6029 cur_ele->menu_bar_no = -1;
6030 DEL_EVAS_OBJECT(moving_obj);
6032 __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
6033 update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
6035 cam_toolbar_menu_config_update((void *)ad);
6037 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
6038 destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
6045 static void __edit_shortcuts_layout_shortcuts_move_prev(struct appdata *ad,
6046 ShortCutData *swap_ele,
6047 ShortCutData *cur_ele)
6049 cam_ret_if(ad == NULL);
6050 cam_ret_if(swap_ele == NULL);
6051 cam_ret_if(cur_ele == NULL);
6053 ShortCutData *shortcuts_ele;
6054 Eina_List *cur_item = NULL;
6055 Eina_List *swap_item = NULL;
6056 cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
6057 swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6061 * note: cur_item ->...->swap_item, should insert cur_item after swap_item, and
6062 * move between cur_item ...swap_item items.
6068 int temp_swap_ele_list_index = swap_ele->list_index;
6069 int temp_swap_ele_part_index = swap_ele->part_index;
6070 EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
6071 if (shortcuts_ele == NULL)
6073 if (shortcuts_ele == cur_ele) {
6074 cur_ele->list_index = temp_swap_ele_list_index;
6075 cur_ele->part_index = temp_swap_ele_part_index;
6079 if (!shortcuts_ele->is_on_menu_bar) {
6080 /* TODO: for animator effect*/
6081 char buf[32+1] = { '\0',};
6082 snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
6083 edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_PREV, buf);
6084 edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
6085 shortcuts_ele->part_index -= 1;
6087 shortcuts_ele->list_index -= 1;
6088 if (shortcuts_ele == swap_ele) {
6092 Eina_List *left = NULL;
6093 Eina_List *right = NULL;
6094 shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
6096 left = eina_list_split_list(shortcuts_ele_list, swap_item, &right);
6097 left = eina_list_append(left, cur_ele);
6098 shortcuts_ele_list = eina_list_merge(left, right);
6103 /*note: insert insert_ele before cur_ele*/
6104 static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
6105 ShortCutData *cur_ele,
6106 ShortCutData *insert_ele)
6108 cam_ret_if(ad == NULL);
6109 cam_ret_if(cur_ele == NULL);
6110 cam_ret_if(insert_ele == NULL);
6111 Eina_List *l = NULL;
6112 ShortCutData *shortcuts_ele = NULL;
6113 Eina_List *cur_item = NULL;
6115 insert_ele->part_index = cur_ele->part_index;
6116 cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
6117 EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
6118 if (shortcuts_ele == NULL)
6120 if (!shortcuts_ele->is_on_menu_bar) {
6121 char buf[32+1] = { '\0',};
6122 snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
6123 edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
6124 edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
6125 shortcuts_ele->part_index += 1;
6128 __resort_edit_shortcuts_list_by_part_index();
6133 static void __edit_shortcuts_layout_shortcuts_move_next(struct appdata *ad,
6134 ShortCutData *swap_ele,
6135 ShortCutData *cur_ele)
6137 cam_ret_if(ad == NULL);
6138 cam_ret_if(swap_ele == NULL);
6139 cam_ret_if(cur_ele == NULL);
6141 ShortCutData *shortcuts_ele;
6142 Eina_List *swap_item = NULL;
6144 swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6148 * note: swap_item ->...->cur_item, should insert cur_item before swap_item, and
6149 * move between swap_item ...cur_item items.
6153 int temp_swap_ele_list_index = swap_ele->list_index;
6154 int temp_swap_ele_part_index = swap_ele->part_index;
6155 EINA_LIST_FOREACH(swap_item, l, shortcuts_ele) {
6156 if (shortcuts_ele == NULL)
6158 if (shortcuts_ele == cur_ele) {
6159 cur_ele->list_index = temp_swap_ele_list_index;
6160 cur_ele->part_index = temp_swap_ele_part_index;
6163 if (!shortcuts_ele->is_on_menu_bar) {
6164 /* TODO: for animator effect*/
6165 char buf[32+1] = { '\0',};
6166 snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
6167 edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
6168 edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
6169 shortcuts_ele->part_index += 1;
6171 shortcuts_ele->list_index += 1;
6173 Eina_List *left = NULL;
6174 Eina_List *right = NULL;
6175 shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
6176 if (swap_item->prev) {
6177 left = eina_list_split_list(shortcuts_ele_list, swap_item->prev, &right);
6178 left = eina_list_append(left, cur_ele);
6179 shortcuts_ele_list = eina_list_merge(left, right);
6181 shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, cur_ele);
6185 static void __resort_edit_shortcuts(struct appdata *ad, Evas_Object *moving_obj)
6187 cam_ret_if(ad == NULL);
6188 cam_ret_if(moving_obj == NULL);
6189 __resort_edit_shortcuts_list_by_part_index();
6191 ShortCutData *shortcuts_ele;
6192 char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
6193 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6194 if (shortcuts_ele == NULL)
6196 edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
6200 int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
6202 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6203 if (shortcuts_ele == NULL)
6205 snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
6206 if (shortcuts_ele->part_index >=0
6207 && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
6209 shortcuts_part_to_menu[shortcuts_ele->part_index] = shortcuts_ele->setting_type;
6211 if (moving_obj == shortcuts_ele->icon) {
6212 ad->shortcut_data = shortcuts_ele;
6213 DEBUG_TRACE("PART:%s", buf);
6216 DEBUG_TRACE("PART:%s", buf);
6217 edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
6221 for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
6222 cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
6223 edit_shortcuts_prop_array[index].prop_name,
6224 shortcuts_part_to_menu[index]);
6229 static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
6230 ShortCutData *swap_ele,
6231 ShortCutData *cur_ele)
6233 cam_ret_if(ad == NULL);
6234 cam_ret_if(swap_ele == NULL);
6235 cam_ret_if(cur_ele == NULL);
6236 Eina_List *cur_item = NULL;
6237 Eina_List *prev_item = NULL;
6238 Eina_List *next_item = NULL;
6239 Evas_Coord prev_x=0, prev_y=0, prev_w=0, prev_h=0;
6240 Evas_Coord next_x=0, next_y=0, next_w=0, next_h=0;
6242 cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
6245 if (swap_ele->list_index > cur_ele->list_index) {
6246 next_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6247 if (NULL != next_item) {
6248 evas_object_geometry_get(swap_ele->icon, &next_x, &next_y, &next_w, &next_h);
6249 evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
6250 cur_ele->x = next_x;
6251 cur_ele->y = next_y;
6252 cur_ele->w = next_w;
6253 cur_ele->h = next_h;
6254 int idx = swap_ele->part_index;
6255 swap_ele->part_index = cur_ele->part_index;
6256 cur_ele->part_index = idx;
6258 idx = swap_ele->list_index;
6259 swap_ele->list_index = cur_ele->list_index;
6260 cur_ele->list_index = idx;
6261 if (swap_ele->is_on_menu_bar)
6262 __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
6263 shortcuts_swap(&shortcuts_ele_list, cur_item, next_item);
6266 prev_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
6267 if(NULL != prev_item) {
6268 evas_object_geometry_get(swap_ele->icon, &prev_x, &prev_y, &prev_w, &prev_h);
6269 evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
6270 cur_ele->x = prev_x;
6271 cur_ele->y = prev_y;
6272 cur_ele->w = prev_w;
6273 cur_ele->h = prev_h;
6274 int idx = swap_ele->part_index;
6275 swap_ele->part_index = cur_ele->part_index;
6276 cur_ele->part_index = idx;
6278 idx = swap_ele->list_index;
6279 swap_ele->list_index = cur_ele->list_index;
6280 cur_ele->list_index = idx;
6281 if (swap_ele->is_on_menu_bar)
6282 __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
6283 shortcuts_swap(&shortcuts_ele_list, prev_item, cur_item);
6288 static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no)
6290 if (!ad) return NULL;
6291 if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return NULL;
6292 return ad->toolbar_menu_arrays[menubar_no].icon;
6295 /*note: check with menu_no menubar shortcut*/
6296 static gboolean __check_with_menubar_shortcuts(struct appdata *ad, int menu_no, ShortCutData *moving_ele, Evas_Object *moving_obj)
6298 if (!ad || !moving_ele ||!moving_obj)
6300 CAM_Edit_ShortCuts_Rect sub_rect;
6301 ShortCutData *cur_ele = moving_ele;
6302 __get_shortcuts_rect(moving_obj, &sub_rect);
6304 Evas_Object *toolbar_icon = __get_toolbar_shortcuts_evas_object(ad, menu_no);
6306 /*check space menu*/
6307 CAM_Edit_ShortCuts_Rect parent_rect;
6308 __get_shortcuts_rect(toolbar_icon, &parent_rect);
6309 DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
6310 gboolean sub_in_parent = FALSE;
6311 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6315 if (sub_in_parent) {
6316 if (cur_ele->is_on_menu_bar) {
6317 __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
6319 cur_ele->is_on_menu_bar = TRUE;
6320 cur_ele->menu_bar_no = menu_no;
6321 cur_ele->part_index = -1;
6322 ad->toolbar_menu_arrays[menu_no].menu_type = cur_ele->setting_type;
6323 cam_toolbar_menu_config_update((void *)ad);
6324 update_menubar_shortcuts_mouse_event(ad, menu_no, FALSE);
6325 evas_object_hide(cur_ele->icon);
6326 cam_long_press_cancel(LONG_PRESS_ID_EDIT);
6334 /*note: get menubar_no now is covering*/
6335 static int __get_edit_shortcuts_swap_menubar_no(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
6337 if (!ad || !moving_ele ||!moving_obj)
6339 CAM_Edit_ShortCuts_Rect sub_rect;
6341 __get_shortcuts_rect(moving_obj, &sub_rect);
6344 for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6345 int type = ad->toolbar_menu_arrays[i].menu_type;
6346 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6348 CAM_Edit_ShortCuts_Rect parent_rect;
6349 __get_shortcuts_rect(icon, &parent_rect);
6350 DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
6351 gboolean sub_in_parent = FALSE;
6352 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6356 if (sub_in_parent) {
6362 return CAM_MENU_BAR_LEFT_INVALID;
6367 static gboolean __get_edit_shortcuts_swap_element(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj, ShortCutData **swap_ele)
6369 if (swap_ele == NULL) return FALSE;
6371 ShortCutData *cur_ele = moving_ele;
6372 CAM_Edit_ShortCuts_Rect sub_rect;
6373 __get_shortcuts_rect(moving_obj, &sub_rect);
6375 Eina_List *l = NULL;
6376 ShortCutData *shortcuts_ele = NULL;
6377 int edit_shortcuts_item_count = -1;
6378 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6379 if (shortcuts_ele == NULL)
6381 if (shortcuts_ele->icon == cur_ele->icon) {
6384 Evas_Object *parent_icon = NULL;
6385 if (shortcuts_ele->is_on_menu_bar) {
6386 parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
6389 parent_icon = shortcuts_ele->icon;
6390 edit_shortcuts_item_count++;
6393 CAM_Edit_ShortCuts_Rect parent_rect;
6394 __get_shortcuts_rect(parent_icon, &parent_rect);
6396 gboolean sub_in_parent = FALSE;
6397 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6401 if (sub_in_parent) {
6402 DEBUG_TRACE("find swap ele");
6403 *swap_ele = shortcuts_ele;
6408 /*NOTE: case: moving shortcut is from menubar, and it is moving into the edit shortcuts the first empty panel*/
6409 char buf[16] = { 0 };
6410 snprintf(buf, sizeof(buf),"row.%d", (edit_shortcuts_item_count+1));
6411 Evas_Object *part_object = (Evas_Object *)
6412 edje_object_part_object_get(_EDJ
6413 (ad->edit_shortcuts_popup_ctx), buf);
6414 if (cur_ele->is_on_menu_bar) {
6415 CAM_Edit_ShortCuts_Rect parent_rect;
6416 __get_shortcuts_rect(part_object, &parent_rect);
6418 gboolean sub_in_parent = FALSE;
6419 sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
6423 if (sub_in_parent) {
6424 ShortCutData *virtual_ele = NULL;
6425 if (ad->swap_data) {
6426 if (ad->swap_data->is_virtual) {
6427 free(ad->swap_data);
6428 ad->swap_data = NULL;
6431 virtual_ele = calloc(1, sizeof(ShortCutData));
6433 virtual_ele->is_virtual = TRUE;
6434 virtual_ele->setting_type = -1;
6435 virtual_ele->is_on_menu_bar = FALSE;
6436 virtual_ele->part_index= edit_shortcuts_item_count+1;
6438 *swap_ele = virtual_ele;
6446 /*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
6447 static void __resort_edit_shortcuts_list_by_part_index(void)
6449 if (shortcuts_ele_list == NULL) return;
6450 shortcuts_ele_list = eina_list_sort(shortcuts_ele_list,
6451 eina_list_count(shortcuts_ele_list),
6452 __edit_shortcuts_list_sort_cb);
6453 Eina_List *l = NULL;
6454 ShortCutData *shortcuts_ele = NULL;
6456 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6457 if (shortcuts_ele == NULL)
6459 shortcuts_ele->list_index = list_index;
6460 DEBUG_TRACE("part_index %d, list_index %d", shortcuts_ele->part_index, shortcuts_ele->list_index);
6466 /*NOTE: swap integer, we do not judge a, b wether null*/
6467 static void __swap_int_type_value(int *a, int *b)
6475 static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info)
6477 struct appdata *ad = (struct appdata *)data;
6479 if (!event_info) return;
6480 cam_app_timeout_checker_update();/*note: update check_timer*/
6481 __setting_popup_timeout_checker_start(ad);
6483 /*note: check wether is long press*/
6484 Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
6485 cam_long_press_validate(LONG_PRESS_ID_EDIT, mu->cur.canvas.x, mu->cur.canvas.y);
6486 if (!cam_get_long_press_running_state(LONG_PRESS_ID_EDIT)) {
6490 /*note: update coordinate*/
6491 Evas_Coord cur_x=0, cur_y=0, cur_w=0, cur_h=0;
6492 Evas_Coord x=0, y=0;
6494 evas_object_geometry_get(obj, &cur_x, &cur_y, &cur_w, &cur_h);
6495 x = cur_x + (mu->cur.canvas.x - shortcuts_canvas_prev_x);
6496 y = cur_y + (mu->cur.canvas.y - shortcuts_canvas_prev_y);
6497 dx = mu->cur.canvas.x - shortcuts_canvas_prev_x;
6498 dy = mu->cur.canvas.y - shortcuts_canvas_prev_y;
6499 shortcuts_canvas_prev_x = mu->cur.canvas.x;
6500 shortcuts_canvas_prev_y = mu->cur.canvas.y;
6503 /*note: check swap elements*/
6504 pthread_mutex_lock(&edit_shortcuts_move_mutex);
6505 ShortCutData *moving_ele = ad->shortcut_data;
6506 ShortCutData *swap_ele = NULL;
6507 gboolean swap_condition = __get_edit_shortcuts_swap_element(ad, moving_ele, obj, &swap_ele);
6508 DEBUG_TRACE("%d", swap_condition);
6510 if (swap_condition) {
6511 ad->swap_data = swap_ele;
6512 if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
6513 if (ABS(moving_ele->part_index - swap_ele->part_index) == 1) {
6514 __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
6515 } else if (moving_ele->list_index > swap_ele->list_index) {
6516 __edit_shortcuts_layout_shortcuts_move_next(ad, swap_ele, moving_ele);
6518 __edit_shortcuts_layout_shortcuts_move_prev(ad, swap_ele, moving_ele);
6520 __resort_edit_shortcuts(ad, obj);
6521 evas_object_move(obj, x , y);
6524 if (swap_ele->is_on_menu_bar) {
6527 if (ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon) {
6528 evas_object_color_get(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, &r, &g, &b, &a);
6529 evas_object_color_set(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, r, g, b, 30);
6533 if (swap_ele->setting_type == -1) {/*note: swap_ele is empty part in edit shortcuts panel*/
6534 DEBUG_TRACE("swap_ele is empty part in edit shortcuts panel");
6540 if (swap_ele->icon) {
6541 evas_object_color_get(swap_ele->icon, &r, &g, &b, &a);
6542 evas_object_color_set(swap_ele->icon, r, g, b, 30);
6546 evas_object_move(obj, x , y);
6549 if (ad->swap_data) {
6550 if (ad->swap_data->is_on_menu_bar) {
6553 if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
6554 evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
6555 evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
6560 if (ad->swap_data->icon) {
6561 evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
6562 evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
6566 ad->swap_data = NULL;
6569 int menu_no = __get_edit_shortcuts_swap_menubar_no(ad, moving_ele, obj);
6570 /*TODO: for mouse up swap, we could to record a virtual shortcut element*/
6571 if (menu_no != CAM_MENU_BAR_LEFT_INVALID) {
6572 ShortCutData *virtual_ele = NULL;
6573 virtual_ele = calloc(1, sizeof(ShortCutData));
6575 virtual_ele->is_virtual = TRUE;
6576 virtual_ele->setting_type = -1;
6577 virtual_ele->menu_bar_no = menu_no;
6578 virtual_ele->is_on_menu_bar = TRUE;
6580 ad->swap_data = virtual_ele;
6582 /*TODO: set swap_ele style*/
6585 evas_object_move(obj, x , y);
6587 pthread_mutex_unlock(&edit_shortcuts_move_mutex);
6591 void cam_setting_gl_style_set(void)
6593 itc.item_style = "camera/1text.1icon";
6594 itc.func.text_get = _setting_gl_text_get;
6595 itc.func.content_get = _setting_gl_icon_get;
6596 itc.func.state_get = NULL;
6597 itc.func.del = NULL;
6600 static void __cam_toolbar_display_shortcuts_editmode(void *data)
6602 struct appdata *ad = (struct appdata *)data;
6603 cam_ret_if(ad == NULL);
6605 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6606 "toolbar_1_icon,edit", "prog");
6607 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6608 "toolbar_2_icon,edit", "prog");
6609 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6610 "toolbar_3_icon,edit", "prog");
6611 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6612 "toolbar_4_icon,edit", "prog");
6615 static void __cam_toolbar_exit_shortcuts_editmode(void *data)
6617 struct appdata *ad = (struct appdata *)data;
6618 cam_ret_if(ad == NULL);
6620 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6621 "toolbar_1_icon,normal", "prog");
6622 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6623 "toolbar_2_icon,normal", "prog");
6624 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6625 "toolbar_3_icon,normal", "prog");
6626 edje_object_signal_emit(_EDJ(ad->toolbar_edje),
6627 "toolbar_4_icon,normal", "prog");
6631 static int __cam_long_press_editmode_cb(void *data, int x, int y)
6633 struct appdata *ad = (struct appdata *)data;
6634 cam_retv_if(ad == NULL, -1);
6635 CamAppData *camapp = ad->camapp_handle;
6636 cam_retv_if(camapp == NULL, -1);
6640 err = pthread_mutex_init(&edit_shortcuts_move_mutex, NULL);
6642 cam_critical(LOG_CAM, "Create px inst mutex failed");
6646 if (ad->shortcut_data) {
6647 edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), ad->shortcut_data->icon);
6648 evas_object_event_callback_add(ad->shortcut_data->icon,
6649 EVAS_CALLBACK_MOUSE_MOVE,
6650 __setting_shortcuts_mouse_move,
6653 evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, TRUE);
6658 static int __cam_long_press_exit_editmode_cb(void *data, int x, int y)
6660 struct appdata *ad = (struct appdata *)data;
6661 cam_retv_if(ad == NULL, -1);
6662 CamAppData *camapp = ad->camapp_handle;
6663 cam_retv_if(camapp == NULL, -1);
6666 /*re-sort sortcuts element list*/
6667 int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
6669 ShortCutData *shortcuts_ele = NULL;
6670 Eina_List *l = NULL;
6672 int temp_list_index = 0;
6673 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6674 if (shortcuts_ele == NULL)
6676 shortcuts_ele->list_index = temp_list_index;
6678 if (shortcuts_ele->is_on_menu_bar) {
6679 shortcuts_ele->part_index = -1;
6682 shortcuts_ele->part_index = temp_index;
6683 shortcuts_part_to_menu[temp_index] = shortcuts_ele->setting_type;
6685 DEBUG_TRACE("shortcuts_ele->index %d" , shortcuts_ele->part_index);
6688 /*re-set menubar shortcuts*/
6690 for (i = CAM_MENU_SHORTCUTS; i < CAM_MENU_MAX_NUMS; i++) {
6691 __update_menubar_icon_by_index(ad, i);
6694 /*menu bar shortcut update*/
6695 for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6696 __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
6699 /* shortcut panel update*/
6700 char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
6702 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6703 if (shortcuts_ele == NULL)
6705 edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
6708 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6709 if (shortcuts_ele == NULL)
6711 if (shortcuts_ele->part_index < 0 ||
6712 shortcuts_ele->part_index >19) {
6715 snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
6716 DEBUG_TRACE("PART:%s", buf);
6717 edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
6721 for (index = CAM_EDIT_SHORTCUTS_INDEX_1; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
6722 cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
6723 edit_shortcuts_prop_array[index].prop_name,
6724 shortcuts_part_to_menu[index]);
6727 __cam_toolbar_display_shortcuts_editmode(ad);
6728 __toolbar_dim_setting_shortcuts(ad);
6729 if (ad->shortcut_data) {
6730 if (ad->shortcut_data->icon) {
6731 evas_object_event_callback_del(ad->shortcut_data->icon,
6732 EVAS_CALLBACK_MOUSE_MOVE,
6733 __setting_shortcuts_mouse_move);
6737 ad->shortcut_data = NULL;
6738 ad->swap_data = NULL;
6739 evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, FALSE);
6740 pthread_mutex_destroy(&edit_shortcuts_move_mutex);
6744 static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon)
6748 *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
6753 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6754 if (index == ad->toolbar_menu_arrays[i].menu_type) {
6756 *icon = ad->toolbar_menu_arrays[i].icon;
6762 *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
6767 void create_menubar_shortcuts_mouse_event(struct appdata *ad)
6772 /*note: CAM_MENU_BAR_LEFT_0: do not need register*/
6773 for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6774 int type = ad->toolbar_menu_arrays[i].menu_type;
6775 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6777 evas_object_event_callback_del(icon,
6778 EVAS_CALLBACK_MOUSE_DOWN,
6779 __setting_shortcuts_mouse_down);
6780 evas_object_event_callback_add(icon,
6781 EVAS_CALLBACK_MOUSE_DOWN,
6782 __setting_shortcuts_mouse_down,
6784 evas_object_event_callback_del(icon,
6785 EVAS_CALLBACK_MOUSE_MOVE,
6786 __setting_shortcuts_mouse_move);
6787 evas_object_event_callback_add(icon,
6788 EVAS_CALLBACK_MOUSE_MOVE,
6789 __setting_shortcuts_mouse_move,
6791 evas_object_event_callback_del(icon,
6792 EVAS_CALLBACK_MOUSE_UP,
6793 __setting_shortcuts_mouse_up);
6794 evas_object_event_callback_add(icon,
6795 EVAS_CALLBACK_MOUSE_UP,
6796 __setting_shortcuts_mouse_up,
6803 void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
6808 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6809 int type = ad->toolbar_menu_arrays[i].menu_type;
6810 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6811 if (i == menubar_no || all_menubar) {
6813 evas_object_event_callback_del(icon,
6814 EVAS_CALLBACK_MOUSE_DOWN,
6815 __setting_shortcuts_mouse_down);
6816 evas_object_event_callback_del(icon,
6817 EVAS_CALLBACK_MOUSE_MOVE,
6818 __setting_shortcuts_mouse_move);
6819 evas_object_event_callback_del(icon,
6820 EVAS_CALLBACK_MOUSE_UP,
6821 __setting_shortcuts_mouse_up);
6823 evas_object_event_callback_del(icon,
6824 EVAS_CALLBACK_MOUSE_DOWN,
6825 __setting_shortcuts_mouse_down);
6826 evas_object_event_callback_add(icon,
6827 EVAS_CALLBACK_MOUSE_DOWN,
6828 __setting_shortcuts_mouse_down,
6830 evas_object_event_callback_del(icon,
6831 EVAS_CALLBACK_MOUSE_MOVE,
6832 __setting_shortcuts_mouse_move);
6833 evas_object_event_callback_add(icon,
6834 EVAS_CALLBACK_MOUSE_MOVE,
6835 __setting_shortcuts_mouse_move,
6837 evas_object_event_callback_del(icon,
6838 EVAS_CALLBACK_MOUSE_UP,
6839 __setting_shortcuts_mouse_up);
6840 evas_object_event_callback_add(icon,
6841 EVAS_CALLBACK_MOUSE_UP,
6842 __setting_shortcuts_mouse_up,
6851 void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
6856 for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
6857 Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
6858 if (i == menubar_no || all_menubar) {
6859 evas_object_event_callback_del(icon,
6860 EVAS_CALLBACK_MOUSE_DOWN,
6861 __setting_shortcuts_mouse_down);
6862 evas_object_event_callback_del(icon,
6863 EVAS_CALLBACK_MOUSE_MOVE,
6864 __setting_shortcuts_mouse_move);
6865 evas_object_event_callback_del(icon,
6866 EVAS_CALLBACK_MOUSE_UP,
6867 __setting_shortcuts_mouse_up);
6874 /*free all memory for shortcuts*/
6875 static void __cam_toolbar_edit_shortcuts_data_clean()
6878 if (NULL != shortcuts_ele_list) {
6879 eina_list_free(shortcuts_ele_list);
6880 shortcuts_ele_list = NULL;
6884 static void __toolbar_edit_shortcuts_mouse_down_cb (void *data,
6890 /*struct appdata *ad = (struct appdata *)data;
6891 cam_long_press_register(LONG_PRESS_ID_EDIT,
6893 __cam_long_press_editmode_cb,
6894 __cam_long_press_exit_editmode_cb,
6899 static void __toolbar_edit_shortcuts_mouse_move_cb (void *data,
6905 /*struct appdata *ad = (struct appdata *)data;*/
6906 ShortCutData *shortcuts_ele = NULL;
6907 Eina_List *l = NULL;
6908 /** TODO: find solution to distinguish the scroll move
6909 cam_long_press_unregister(LONG_PRESS_ID_EDIT);
6911 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6912 if (shortcuts_ele) {
6913 if (shortcuts_ele->icon) {
6914 evas_object_freeze_events_set(shortcuts_ele->icon, TRUE);
6921 static void __toolbar_edit_shortcuts_mouse_up_cb (void *data,
6928 struct appdata *ad = (struct appdata *)data;
6929 cam_ret_if(ad == NULL);
6930 ShortCutData *shortcuts_ele = NULL;
6931 Eina_List *l = NULL;
6932 EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
6933 if (shortcuts_ele) {
6934 if (shortcuts_ele->icon) {
6935 evas_object_freeze_events_set(shortcuts_ele->icon, FALSE);
6941 static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2)
6943 ShortCutData *ele_0 = (ShortCutData *)data1;
6944 ShortCutData *ele_1 = (ShortCutData *)data2;
6945 int part_index_0 = ele_0->part_index;
6946 int part_index_1 = ele_1->part_index;
6947 DEBUG_TRACE("part_index_0 %d", part_index_0);
6948 DEBUG_TRACE("part_index_1 %d", part_index_1);
6949 if (part_index_0 > part_index_1)
6951 else if (part_index_0 < part_index_1)
6957 static void __edit_shortcuts_create_empty_menubar_shortcut(struct appdata *ad,
6959 ShortCutData **shortcuts_ele)
6961 if (menu_no > CAM_MENU_BAR_LEFT_4 || menu_no < CAM_MENU_BAR_LEFT_0) return;
6962 ShortCutData *sd = (ShortCutData *)malloc(sizeof(ShortCutData));
6964 memset(sd, '\0', sizeof(ShortCutData));
6965 sd->icon = ad->toolbar_menu_arrays[menu_no].icon;
6966 sd->list_index = -1;
6967 sd->part_index = -1;
6968 sd->setting_type = -1;
6969 sd->menu_bar_no = menu_no;
6970 sd->is_on_menu_bar = TRUE;
6972 *shortcuts_ele = sd;
6976 static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no)
6979 if (menu_no > CAM_MENU_BAR_LEFT_4 || CAM_MENU_BAR_LEFT_1) return; /*note: CAM_MENU_BAR_LEFT_0, do not update*/
6980 ShortCutData *shortcuts_ele = NULL;
6981 /*note: add empty menubar shortcuts to list*/
6982 if (ad->toolbar_menu_arrays[menu_no].menu_type < 0) {
6983 __edit_shortcuts_create_empty_menubar_shortcut(ad, CAM_MENU_BAR_LEFT_1, &shortcuts_ele);
6984 shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, shortcuts_ele);
6988 static void __toolbar_dim_setting_shortcuts(struct appdata *ad)
6990 cam_ret_if(ad == NULL);
6991 Evas_Object *setting_icon = NULL;
6992 Evas_Object_Event_Cb func = NULL;
6994 setting_icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
6995 type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].menu_type;
6996 __toolbar_menu_type_update(setting_icon, type, ad, BUTTON_STATE_DIM, &func);
6999 int toolbar_create_shortcuts_popup(struct appdata *ad)
7001 cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
7002 CamAppData *cam_handle = ad->camapp_handle;
7003 cam_retv_if(cam_handle == NULL, -1);
7005 gboolean init_state = FALSE;
7006 init_state = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7007 PROP_SHORTCUTS_INIT_PART_INDEX,
7010 cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7011 PROP_SHORTCUTS_INIT_PART_INDEX,
7015 if (ad->edit_shortcuts_popup_scroll) {
7016 toolbar_destroy_shortcuts_popup(ad);
7018 ad->show_edit_shortcuts_popup_after_rotate = FALSE;
7020 __toolbar_dim_setting_shortcuts(ad);
7023 Evas_Object *icon = NULL;
7024 Evas_Object *setting_popup = NULL;
7025 Evas_Object *ele_layout = NULL;
7027 cam_long_press_register(LONG_PRESS_ID_EDIT,
7029 __cam_long_press_editmode_cb,
7030 __cam_long_press_exit_editmode_cb,
7033 setting_shortcuts_popup_create(ad);
7035 setting_popup = elm_layout_add(ad->edit_shortcuts_popup);
7036 elm_layout_file_set(setting_popup, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/layout");
7039 Evas_Object *scroller = elm_scroller_add(ad->edit_shortcuts_popup);
7040 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
7041 elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
7043 char *icon_name = NULL;
7045 char part_name[16] = { '\0', };
7046 ShortCutData *shortcuts_ele = NULL;
7047 Evas_Object_Event_Cb callback = NULL;
7050 gboolean is_on_toolbar = FALSE;
7051 int menu_bar_no = -1;
7053 /*create edit callback in the menubar*/
7054 create_menubar_shortcuts_mouse_event(ad);
7057 __cam_toolbar_edit_shortcuts_data_clean();
7059 if( ad->setting_menu_composer == NULL){
7060 cam_critical(LOG_UI,"ad->setting_menu_composer is null");
7064 int shortcuts_menu_to_part[CAM_MENU_RESET + 1] = { -1,};
7066 for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
7067 int item = cam_config_get_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7068 edit_shortcuts_prop_array[index].prop_name,
7070 shortcuts_menu_to_part[item] = index;
7071 DEBUG_TRACE("item %d index %d", item, index);
7075 CAM_MENU_ITEM* menu_item = NULL;
7076 int size = eina_array_count(ad->setting_menu_composer->array);
7078 for (index = 0; index < size; index++) {
7079 menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->setting_menu_composer->array, index);
7081 if (*menu_item == CAM_MENU_EFFECTS
7082 || *menu_item == CAM_MENU_ANTI_SHAKE
7083 || *menu_item == CAM_MENU_CAPTURE_VOICE
7084 || *menu_item == CAM_MENU_GPS_TAG
7085 || *menu_item == CAM_MENU_STORAGE
7086 || *menu_item == CAM_MENU_RESET) {
7087 DEBUG_TRACE("Do not add menu in shortcut");
7091 Evas_Object *menubar_obj = NULL;
7092 __get_menubar_shortcuts_info(ad, *menu_item, &menu_bar_no, &menubar_obj);
7093 is_on_toolbar = ((menu_bar_no == CAM_MENU_BAR_LEFT_INVALID) ? FALSE : TRUE);
7094 __get_toolbar_shortcuts_file_func((void *)ad, *menu_item, BUTTON_STATE_NORMAL, &icon_name, &text, &callback);
7097 /*create layout for element*/
7098 ele_layout = elm_layout_add(setting_popup);
7099 elm_layout_file_set(ele_layout, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/ele");
7100 icon = elm_image_add(ele_layout);
7101 elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
7103 DEBUG_TRACE("index = %d, no icon file path or file path error, please check!", index);
7112 edje_object_part_text_set(elm_layout_edje_get(ele_layout), "ele.txt", text);
7113 DEBUG_TRACE("text %s", text);
7116 edje_object_part_swallow(_EDJ(ele_layout), "ele.icon", icon);
7117 evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_DOWN, __setting_shortcuts_mouse_down, (void *)ad);
7118 evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_UP, __setting_shortcuts_mouse_up, (void *)ad);
7120 evas_object_show(ele_layout);
7122 shortcuts_ele = (ShortCutData *)malloc(sizeof(ShortCutData));
7123 shortcuts_ele->icon = ele_layout;
7124 shortcuts_ele->list_index = list_index;
7125 shortcuts_ele->setting_type = *menu_item;
7126 shortcuts_ele->icon_filepath = icon_name;
7127 shortcuts_ele->name = text;
7128 shortcuts_ele->func = callback;
7129 shortcuts_ele->menu_bar_no = menu_bar_no;
7130 shortcuts_ele->is_on_menu_bar = is_on_toolbar;
7132 if (is_on_toolbar) {
7133 shortcuts_ele->part_index = -1;
7134 evas_object_hide(ele_layout);
7136 if (!init_state) { /*note: if there is no init value in config file, init now*/
7137 shortcuts_ele->part_index = part_index;
7138 cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
7139 edit_shortcuts_prop_array[part_index].prop_name,
7141 shortcuts_menu_to_part[*menu_item] = part_index;
7142 } else { /*note: if there is init value in config file, read value from init*/
7143 shortcuts_ele->part_index = shortcuts_menu_to_part[*menu_item];
7146 if (shortcuts_ele->part_index > CAM_EDIT_SHORTCUTS_INDEX_INVALID
7147 && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
7148 snprintf(part_name, sizeof(part_name),"row.%d",(shortcuts_ele->part_index));
7149 edje_object_part_swallow(_EDJ(setting_popup), part_name, ele_layout);
7152 shortcuts_ele_list = eina_list_append(shortcuts_ele_list, shortcuts_ele);
7153 if (shortcuts_ele_list == NULL) {
7162 /*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
7163 __resort_edit_shortcuts_list_by_part_index();
7165 elm_object_content_set(scroller, setting_popup);
7166 /*elm_object_part_content_set(edit_shortcuts_layout, "swallow.items", setting_popup);*/
7167 elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup", scroller);
7168 elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup_description", ad->edit_shortcuts_popup_description);
7171 __cam_toolbar_display_shortcuts_editmode(ad);
7172 #if 0 /*TODO: TODO: find solution to distinguish the scroll move*/
7173 evas_object_event_callback_del(scroller,
7174 EVAS_CALLBACK_MOUSE_DOWN,
7175 __toolbar_edit_shortcuts_mouse_down_cb);
7177 evas_object_event_callback_del(scroller,
7178 EVAS_CALLBACK_MOUSE_MOVE,
7179 __toolbar_edit_shortcuts_mouse_move_cb);
7180 evas_object_event_callback_del(scroller,
7181 EVAS_CALLBACK_MOUSE_UP,
7182 __toolbar_edit_shortcuts_mouse_up_cb);
7183 evas_object_event_callback_add(scroller,
7184 EVAS_CALLBACK_MOUSE_DOWN,
7185 __toolbar_edit_shortcuts_mouse_down_cb,
7187 evas_object_event_callback_add(scroller,
7188 EVAS_CALLBACK_MOUSE_MOVE,
7189 __toolbar_edit_shortcuts_mouse_move_cb,
7191 evas_object_event_callback_add(scroller,
7192 EVAS_CALLBACK_MOUSE_UP,
7193 __toolbar_edit_shortcuts_mouse_up_cb,
7198 ad->edit_shortcuts_popup_ctx = setting_popup;
7199 ad->edit_shortcuts_popup_scroll = scroller;
7201 evas_object_show(ad->toolbar_edje);
7202 __setting_popup_timeout_checker_start(ad);
7203 /*note: set destroy operation after display to avoid bs*/
7204 if (ad->toolbar_setting_popup) {
7205 cam_toolbar_setting_popup_destroy(ad);
7208 __set_show_state_preview_obj(ad, FALSE);
7210 return EXIT_SUCCESS;
7213 void* __get_genlist_cb(const CAM_MENU_ITEM item)
7216 case CAM_MENU_SHORTCUTS:
7217 return __setting_edit_shortcut_popup_cb;
7218 case CAM_MENU_BURST_SHOT_MODE:
7219 return __setting_burst_shot_popup_cb;
7220 case CAM_MENU_VOLUME_KEY:
7221 return __setting_volume_key_popup_cb;
7222 case CAM_MENU_SELF_PORTRAIT:
7223 return __setting_self_portrait_popup_cb;
7224 case CAM_MENU_FLASH:
7225 return __setting_flash_popup;
7226 case CAM_MENU_SHOOTING_MODE:
7227 return __setting_shot_mode_popup_cb;
7228 case CAM_MENU_RECORDING_MODE:
7229 return __setting_record_mode_popup;
7230 case CAM_MENU_SCENE_MODE:
7231 return __setting_scenemode_popup_cb;
7232 case CAM_MENU_EXPLOSURE_VALUE:
7233 return __setting_ev_popup_cb;
7234 case CAM_MENU_FOCUS_MODE:
7235 return __setting_focus_mode_cb;
7236 case CAM_MENU_TIMER:
7237 return __setting_timer_popup_cb;
7238 case CAM_MENU_EFFECTS:
7239 return __setting_effects_popup_cb;
7240 case CAM_MENU_PHOTO_RESOLUTION:
7241 return __setting_photo_resolution_popup_cb;
7242 case CAM_MENU_VIDEO_RESOLUTION:
7243 return __setting_video_resolution_popup_cb;
7244 case CAM_MENU_WHITE_BALANCE:
7245 return __setting_wb_popup_cb;
7247 return __setting_iso_popup_cb;
7248 case CAM_MENU_METERING:
7249 return __setting_metering_popup_cb;
7250 case CAM_MENU_ANTI_SHAKE:
7251 return __setting_anti_shake_popup_cb;
7252 case CAM_MENU_OUTDOOR_VISIBILITY:
7253 return __setting_outdoor_visibility_popup_cb;
7254 case CAM_MENU_AUTO_CONTRAST:
7255 return __setting_autocontrast_popup_cb;
7256 case CAM_MENU_GUIDELINES:
7257 return __setting_guideline_popup_cb;
7258 case CAM_MENU_CAPTURE_VOICE:
7259 return __setting_capture_by_voice_popup_cb;
7260 case CAM_MENU_GPS_TAG:
7261 return __setting_gps_popup_cb;
7262 case CAM_MENU_SAVE_AS_FLIP:
7263 return __setting_save_as_flip_popup_cb;
7264 case CAM_MENU_STORAGE:
7265 return __setting_storage_popup_cb;
7266 case CAM_MENU_RESET:
7267 return __setting_restore_defaults_popup_cb;
7273 static Eina_Bool __genlist_each_cb(const void *container, void *data, void *fdata)
7275 struct appdata *ad = (struct appdata *)fdata;
7276 cam_retv_if(ad == NULL, EINA_FALSE);
7278 CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
7279 Elm_Object_Item *object_item = NULL;
7280 object_item = elm_genlist_item_append(ad->genlist,
7284 ELM_GENLIST_ITEM_NONE,
7285 __get_genlist_cb(*item),
7288 if(!cam_is_enabled_menu(ad,*item))
7289 elm_object_item_disabled_set(object_item, TRUE);
7294 int cam_toolbar_setting_popup_create(struct appdata *ad)
7296 cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
7297 CamAppData *cam_handle = ad->camapp_handle;
7298 cam_retv_if(cam_handle == NULL, -1);
7300 if (ad->toolbar_setting_popup) {
7301 cam_toolbar_setting_popup_destroy(ad);
7303 if (ad->edit_shortcuts_popup_scroll) {
7304 toolbar_destroy_shortcuts_popup(ad);
7307 ad->show_setting_popup_after_rotate = FALSE;
7309 Evas_Object *setting_popup = NULL;
7311 setting_toolbar_popup_create(ad);
7313 setting_popup = elm_layout_add(ad->toolbar_setting_popup);
7314 elm_layout_file_set(setting_popup, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout/setting");
7317 edje_object_part_text_set(elm_layout_edje_get(setting_popup), "elm.text", dgettext(PACKAGE, "IDS_CAM_BODY_SETTINGS"));
7319 evas_object_size_hint_min_set(setting_popup,
7320 SETTING_POPUP_WIDTH * elm_config_scale_get(),
7321 SETTING_POPUP_HEIGHT * elm_config_scale_get());
7323 ad->genlist = elm_genlist_add(setting_popup);
7324 evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_DOWN, __setting_gl_mouse_down, (void *)ad);
7325 evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_MOVE, __setting_gl_mouse_move, (void *)ad);
7327 cam_setting_gl_style_set();
7329 if( ad->setting_menu_composer != NULL)
7330 eina_array_foreach(ad->setting_menu_composer->array, __genlist_each_cb, ad);
7332 evas_object_show(ad->genlist);
7333 elm_object_part_content_set(setting_popup, "elm.swallow.box", ad->genlist);
7334 elm_object_content_set(ad->toolbar_setting_popup, setting_popup);
7338 DEBUG_TRACE("ad->target_direction = %d", ad->target_direction);
7339 __get_option_coord_by_menubar_no(CAM_MENU_BAR_LEFT_0, ad->target_direction, &x, &y);
7340 DEBUG_TRACE("x = %d y = %d", x, y);
7341 __cam_toolbar_move_ctxpopup(ad->toolbar_setting_popup, ad->target_direction, x, y);
7343 evas_object_show(ad->toolbar_setting_popup);
7344 __setting_popup_timeout_checker_start(ad);
7346 __set_show_state_preview_obj(ad, FALSE);
7348 return EXIT_SUCCESS;
7351 int toolbar_shot_guide_popup_create(struct appdata *ad, int shot_mode)
7353 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
7354 CamAppData *cam_handle = ad->camapp_handle;
7355 cam_retv_if(cam_handle == NULL, -1);
7361 if (ad->shot_mode_guide_popup) {
7362 toolbar_shot_guide_popup_destory(ad);
7365 elm_object_part_content_unset(ad->ug_base, "shot_guide_popup_layout");
7367 if ((cam_handle->shooting_mode == CAM_SINGLE_MODE)
7368 || (cam_handle->shooting_mode == CAM_SELF_SINGLE_MODE))
7369 return EXIT_SUCCESS;
7371 switch (ad->target_direction) {
7372 case CAM_TARGET_DIRECTION_LANDSCAPE:
7373 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
7374 ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_landscape");
7376 case CAM_TARGET_DIRECTION_PORTRAIT:
7377 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
7378 ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_potrait");
7381 DEBUG_TRACE("Invalid direction type!!!");
7384 cam_retvm_if(ad->shot_mode_guide_popup == NULL, -1, "shot_mode_guide_popup is NULL");
7385 elm_object_part_content_set(ad->ug_base, "shot_guide_popup_layout", ad->shot_mode_guide_popup);
7387 char popup_str[1024 + 1] = { '\0',};
7388 snprintf(popup_str, 1024, "%s", dgettext(PACKAGE, "IDS_CAM_POP_PRESS_SHUTTER"));
7389 edje_object_part_text_set(_EDJ(ad->shot_mode_guide_popup), "text", popup_str);
7391 evas_object_show(ad->shot_mode_guide_popup);
7393 return EXIT_SUCCESS;
7396 int toolbar_shot_guide_popup_destory(struct appdata *ad)
7398 cam_retv_if(ad == NULL, -1);
7399 UI_TEST_LOG("Guide popup destory");
7401 if (ad->shot_mode_guide_popup) {
7402 evas_object_del(ad->shot_mode_guide_popup);
7403 ad->shot_mode_guide_popup = NULL;
7409 int toolbar_shot_guide_popup_move(struct appdata *ad)
7411 cam_retv_if(ad == NULL, -1);
7415 if (ad->shot_mode_guide_popup) {
7416 Eina_Bool setting_ctxpopup_is_visible = false;
7417 ecore_x_window_size_get(ad->main_xid, &x, &y);
7419 if (ad->setting_ctxpopup)
7420 setting_ctxpopup_is_visible = evas_object_visible_get(ad->setting_ctxpopup);
7422 cam_debug(LOG_UI, "evas_object_visible_get(ad->setting_ctxpopup) =%d", setting_ctxpopup_is_visible);
7424 if (ad->toolbar_setting_popup) {
7425 __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
7426 toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
7428 __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
7429 toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
7432 cam_critical(LOG_UI, "x = %d, y= %d", x, y);
7438 static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state)
7440 struct appdata *ad = (struct appdata *)cam_appdata_get();
7441 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
7442 CamAppData *camapp = ad->camapp_handle;
7443 cam_retvm_if(camapp == NULL, NULL, "camapp is NULL");
7445 char *icon_name = NULL;
7446 int exposure_value = 0;
7449 case CAM_MENU_SCENE_AUTO:
7450 if (state == BUTTON_STATE_PRESS)
7451 icon_name = SCENE_MODE_AUTO_PRESS_ICON;
7453 icon_name = SCENE_MODE_AUTO_NORMAL_ICON;
7455 case CAM_MENU_SCENE_PORTRAIT:
7456 if (state == BUTTON_STATE_PRESS)
7457 icon_name = SCENE_MODE_PORTRAIT_PRESS_ICON;
7459 icon_name = SCENE_MODE_PORTRAIT_NORMAL_ICON;
7461 case CAM_MENU_SCENE_LANDSCAPE:
7462 if (state == BUTTON_STATE_PRESS)
7463 icon_name = SCENE_MODE_LANDSCAPE_PRESS_ICON;
7465 icon_name = SCENE_MODE_LANDSCAPE_NORMAL_ICON;
7467 case CAM_MENU_SCENE_NIGHT:
7468 if (state == BUTTON_STATE_PRESS)
7469 icon_name = SCENE_MODE_NIGHT_PRESS_ICON;
7471 icon_name = SCENE_MODE_NIGHT_NORMAL_ICON;
7473 case CAM_MENU_SCENE_SPORTS:
7474 if (state == BUTTON_STATE_PRESS)
7475 icon_name = SCENE_MODE_SPORTS_PRESS_ICON;
7477 icon_name = SCENE_MODE_SPORTS_NORMAL_ICON;
7479 case CAM_MENU_SCENE_PARTY:
7480 if (state == BUTTON_STATE_PRESS)
7481 icon_name = SCENE_MODE_PARTY_PRESS_ICON;
7483 icon_name = SCENE_MODE_PARTY_NORMAL_ICON;
7485 case CAM_MENU_SCENE_BEACHSNOW:
7486 if (state == BUTTON_STATE_PRESS)
7487 icon_name = SCENE_MODE_BEACHSNOW_PRESS_ICON;
7489 icon_name = SCENE_MODE_BEACHSNOW_NORMAL_ICON;
7491 case CAM_MENU_SCENE_SUNSET:
7492 if (state == BUTTON_STATE_PRESS)
7493 icon_name = SCENE_MODE_SUNSET_PRESS_ICON;
7495 icon_name = SCENE_MODE_SUNSET_NORMAL_ICON;
7497 case CAM_MENU_SCENE_DUSKDAWN:
7498 if (state == BUTTON_STATE_PRESS)
7499 icon_name = SCENE_MODE_DUSKDAWN_PRESS_ICON;
7501 icon_name = SCENE_MODE_DUSKDAWN_NORMAL_ICON;
7503 case CAM_MENU_SCENE_FALL:
7504 if (state == BUTTON_STATE_PRESS)
7505 icon_name = SCENE_MODE_FALL_PRESS_ICON;
7507 icon_name = SCENE_MODE_FALL_NORMAL_ICON;
7509 case CAM_MENU_SCENE_FIREWORK:
7510 if (state == BUTTON_STATE_PRESS)
7511 icon_name = SCENE_MODE_FIREWORK_PRESS_ICON;
7513 icon_name = SCENE_MODE_FIREWORK_NORMAL_ICON;
7515 case CAM_MENU_SCENE_TEXT:
7516 if (state == BUTTON_STATE_PRESS)
7517 icon_name = SCENE_MODE_TEXT_PRESS_ICON;
7519 icon_name = SCENE_MODE_TEXT_NORMAL_ICON;
7521 case CAM_MENU_SCENE_CANDLELIGHT:
7522 if (state == BUTTON_STATE_PRESS)
7523 icon_name = SCENE_MODE_CANDLELIGHT_PRESS_ICON;
7525 icon_name = SCENE_MODE_CANDLELIGHT_NORMAL_ICON;
7527 case CAM_MENU_SCENE_BACKLIGHT:
7528 if (state == BUTTON_STATE_PRESS)
7529 icon_name = SCENE_MODE_BACKLIGHT_PRESS_ICON;
7531 icon_name = SCENE_MODE_BACKLIGHT_NORMAL_ICON;
7533 case CAM_MENU_SHOOTING_SINGLE:
7534 case CAM_MENU_SHOOTING_SELF_SINGLE:
7535 if (state == BUTTON_STATE_PRESS)
7536 icon_name = SHOOTING_MODE_SINGLE_PRESS_ICON;
7538 icon_name = SHOOTING_MODE_SINGLE_NORMAL_ICON;
7540 case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
7541 if (state == BUTTON_STATE_PRESS)
7542 icon_name = CAM_RESOLUTION_8M_PRESS_ICON;
7544 icon_name = CAM_RESOLUTION_8M_NORMAL_ICON;
7547 case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
7548 if (state == BUTTON_STATE_PRESS)
7549 icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
7551 icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
7553 case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
7554 if (state == BUTTON_STATE_PRESS)
7555 icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
7557 icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
7559 case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
7560 if (state == BUTTON_STATE_PRESS)
7561 icon_name = CAM_RESOLUTION_W5_7M_PRESS_ICON;
7563 icon_name = CAM_RESOLUTION_W5_7M_NORMAL_ICON;
7565 case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
7566 if (state == BUTTON_STATE_PRESS)
7567 icon_name = CAM_RESOLUTION_5M_PRESS_ICON;
7569 icon_name = CAM_RESOLUTION_5M_NORMAL_ICON;
7571 case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
7572 if (state == BUTTON_STATE_PRESS)
7577 case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
7578 if (state == BUTTON_STATE_PRESS)
7579 icon_name = CAM_RESOLUTION_3_2M_PRESS_ICON;
7581 icon_name = CAM_RESOLUTION_3_2M_NORMAL_ICON;
7583 case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
7584 if (state == BUTTON_STATE_PRESS)
7585 icon_name = CAM_RESOLUTION_W2_4M_PRESS_ICON;
7587 icon_name = CAM_RESOLUTION_W2_4M_NORMAL_ICON;
7589 case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
7590 if (state == BUTTON_STATE_PRESS)
7591 icon_name = CAM_RESOLUTION_W2M_PRESS_ICON;
7593 icon_name = CAM_RESOLUTION_W2M_NORMAL_ICON;
7595 case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
7596 if (state == BUTTON_STATE_PRESS)
7597 icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
7599 icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
7601 case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
7602 if (state == BUTTON_STATE_PRESS)
7603 icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
7605 icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
7607 case CAM_MENU_PHOTO_RESOLUTION_1280x960:
7608 if (state == BUTTON_STATE_PRESS)
7609 icon_name = CAM_RESOLUTION_1_3M_PRESS_ICON;
7611 icon_name = CAM_RESOLUTION_1_3M_NORMAL_ICON;
7613 case CAM_MENU_PHOTO_RESOLUTION_1280x720:
7614 if (state == BUTTON_STATE_PRESS)
7615 icon_name = CAM_RESOLUTION_W0_9M_PRESS_ICON;
7617 icon_name = CAM_RESOLUTION_W0_9M_NORMAL_ICON;
7619 case CAM_MENU_PHOTO_RESOLUTION_640x480:
7620 if (state == BUTTON_STATE_PRESS)
7621 icon_name = CAM_RESOLUTION_0_3M_PRESS_ICON;
7623 icon_name = CAM_RESOLUTION_0_3M_NORMAL_ICON;
7625 case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
7626 if (state == BUTTON_STATE_PRESS)
7627 icon_name = REC_RESOLUTION_FULLHD_PRESS_ICON;
7629 icon_name = REC_RESOLUTION_FULLHD_NORMAL_ICON;
7631 case CAM_MENU_VIDEO_RESOLUTION_HD:
7632 if (state == BUTTON_STATE_PRESS)
7633 icon_name = REC_RESOLUTION_HD_PRESS_ICON;
7635 icon_name = REC_RESOLUTION_HD_NORMAL_ICON;
7637 case CAM_MENU_VIDEO_RESOLUTION_WVGA:
7638 if (state == BUTTON_STATE_PRESS)
7639 icon_name = REC_RESOLUTION_WVGA_PRESS_ICON;
7641 icon_name = REC_RESOLUTION_WVGA_NORMAL_ICON;
7643 case CAM_MENU_VIDEO_RESOLUTION_VGA:
7644 if (state == BUTTON_STATE_PRESS)
7645 icon_name = REC_RESOLUTION_VGA_PRESS_ICON;
7647 icon_name = REC_RESOLUTION_VGA_NORMAL_ICON;
7649 case CAM_MENU_VIDEO_RESOLUTION_QVGA:
7650 if (state == BUTTON_STATE_PRESS)
7651 icon_name = REC_RESOLUTION_QVGA_PRESS_ICON;
7653 icon_name = REC_RESOLUTION_QVGA_NORMAL_ICON;
7655 case CAM_MENU_VIDEO_RESOLUTION_QCIF:
7656 if (state == BUTTON_STATE_PRESS)
7657 icon_name = REC_RESOLUTION_QCIF_PRESS_ICON;
7659 icon_name = REC_RESOLUTION_QCIF_NORMAL_ICON;
7661 case CAM_MENU_WB_AWB:
7662 if (state == BUTTON_STATE_PRESS)
7663 icon_name = WHITE_BALANCE_AUTO_PRESS_ICON;
7665 icon_name = WHITE_BALANCE_AUTO_NORMAL_ICON;
7667 case CAM_MENU_WB_INCANDESCENT:
7668 if (state == BUTTON_STATE_PRESS)
7669 icon_name = WHITE_BALANCE_INCANDESCENT_PRESS_ICON;
7671 icon_name = WHITE_BALANCE_INCANDESCENT_NORMAL_ICON;
7673 case CAM_MENU_WB_FLUORESCENT:
7674 if (state == BUTTON_STATE_PRESS)
7675 icon_name = WHITE_BALANCE_FLUORESCENT_PRESS_ICON;
7677 icon_name = WHITE_BALANCE_FLUORESCENT_NORMAL_ICON;
7679 case CAM_MENU_WB_DAYLIGHT:
7680 if (state == BUTTON_STATE_PRESS)
7681 icon_name = WHITE_BALANCE_DAYLIGHT_PRESS_ICON;
7683 icon_name = WHITE_BALANCE_DAYLIGHT_NORMAL_ICON;
7685 case CAM_MENU_WB_CLOUDY:
7686 if (state == BUTTON_STATE_PRESS)
7687 icon_name = WHITE_BALANCE_CLOUDY_PRESS_ICON;
7689 icon_name = WHITE_BALANCE_CLOUDY_NORMAL_ICON;
7691 case CAM_MENU_WB_SHADE:
7692 if (state == BUTTON_STATE_PRESS)
7693 icon_name = WHITE_BALANCE_SHADE_PRESS_ICON;
7695 icon_name = WHITE_BALANCE_SHADE_NORMAL_ICON;
7697 case CAM_MENU_WB_HORIZON:
7698 if (state == BUTTON_STATE_PRESS)
7699 icon_name = WHITE_BALANCE_HORIZON_PRESS_ICON;
7701 icon_name = WHITE_BALANCE_HORIZON_NORMAL_ICON;
7703 case CAM_MENU_WB_FLASH:
7704 if (state == BUTTON_STATE_PRESS)
7709 case CAM_MENU_WB_CUSTOM:
7710 if (state == BUTTON_STATE_PRESS)
7715 case CAM_MENU_EFFECT_NONE:
7716 if (state == BUTTON_STATE_PRESS)
7717 icon_name = EFFECTS_NONE_PRESS_ICON;
7719 icon_name = EFFECTS_NONE_NORMAL_ICON;
7721 case CAM_MENU_EFFECT_NEGATIVE:
7722 if (state == BUTTON_STATE_PRESS)
7723 icon_name = EFFECTS_NEGATIVE_PRESS_ICON;
7725 icon_name = EFFECTS_NEGATIVE_NORMAL_ICON;
7727 case CAM_MENU_EFFECT_BLACKANDWHITE:
7728 if (state == BUTTON_STATE_PRESS)
7729 icon_name = EFFECTS_BLACKANDWHITE_PRESS_ICON;
7731 icon_name = EFFECTS_BLACKANDWHITE_NORMAL_ICON;
7733 case CAM_MENU_EFFECT_SEPIA:
7734 if (state == BUTTON_STATE_PRESS)
7735 icon_name = EFFECTS_SEPIA_PRESS_ICON;
7737 icon_name = EFFECTS_SEPIA_NORMAL_ICON;
7739 case CAM_MENU_FOCUS_AUTO:
7740 if (state == BUTTON_STATE_PRESS)
7741 icon_name = FOCUS_MODE_AUTO_PRESS_ICON;
7743 icon_name = FOCUS_MODE_AUTO_NORMAL_ICON;
7745 case CAM_MENU_FOCUS_MACRO:
7746 if (state == BUTTON_STATE_PRESS)
7747 icon_name = FOCUS_MODE_MACRO_PRESS_ICON;
7749 icon_name = FOCUS_MODE_MACRO_NORMAL_ICON;
7751 case CAM_MENU_FOCUS_FACE_DETECTION:
7752 if (state == BUTTON_STATE_PRESS)
7753 icon_name = FOCUS_MODE_FACE_DETECTION_PRESS_ICON;
7755 icon_name = FOCUS_MODE_FACE_DETECTION_NORMAL_ICON;
7757 case CAM_MENU_RECORDING_MODE_NORMAL:
7758 case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
7759 if (state == BUTTON_STATE_PRESS)
7760 icon_name = RECORDING_MODE_NORMAL_PRESS_ICON;
7762 icon_name = RECORDING_MODE_NORMAL_NORMAL_ICON;
7764 case CAM_MENU_RECORDING_MODE_LIMIT:
7765 case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
7766 if (state == BUTTON_STATE_PRESS)
7767 icon_name = RECORDING_MODE_LIMIT_MMS_PRESS_ICON;
7769 icon_name = RECORDING_MODE_LIMIT_MMS_NORMAL_ICON;
7771 case CAM_MENU_RECORDING_MODE_SLOW:
7772 if (state == BUTTON_STATE_PRESS)
7773 icon_name = RECORDING_MODE_SLOW_MOTION_PRESS_ICON;
7775 icon_name = RECORDING_MODE_SLOW_MOTION_NORMAL_ICON;
7777 case CAM_MENU_RECORDING_MODE_FAST:
7778 if (state == BUTTON_STATE_PRESS)
7779 icon_name = RECORDING_MODE_FAST_MOTION_PRESS_ICON;
7781 icon_name = RECORDING_MODE_FAST_MOTION_NORMAL_ICON;
7783 case CAM_MENU_FLASH_OFF:
7784 if (state == BUTTON_STATE_PRESS)
7785 icon_name = FLASH_OFF_PRESS_ICON;
7787 icon_name = FLASH_OFF_NORMAL_ICON;
7789 case CAM_MENU_FLASH_ON:
7790 if (state == BUTTON_STATE_PRESS)
7791 icon_name = FLASH_ON_PRESS_ICON;
7793 icon_name = FLASH_ON_NORMAL_ICON;
7795 case CAM_MENU_FLASH_AUTO:
7796 if (state == BUTTON_STATE_PRESS)
7797 icon_name = FLASH_AUTO_PRESS_ICON;
7799 icon_name = FLASH_AUTO_NORMAL_ICON;
7801 case CAM_MENU_METERING_MATRIX:
7802 if (state == BUTTON_STATE_PRESS)
7803 icon_name = METERING_MATRIX_PRESS_ICON;
7805 icon_name = METERING_MATRIX_NORMAL_ICON;
7807 case CAM_MENU_METERING_CENTER_WEIGHTED:
7808 if (state == BUTTON_STATE_PRESS)
7809 icon_name = METERING_CENTER_WEIGHTED_PRESS_ICON;
7811 icon_name = METERING_CENTER_WEIGHTED_NORMAL_ICON;
7813 case CAM_MENU_METERING_SPOT:
7814 if (state == BUTTON_STATE_PRESS)
7815 icon_name = METERING_SPOT_PRESS_ICON;
7817 icon_name = METERING_SPOT_NORMAL_ICON;
7819 case CAM_MENU_ISO_AUTO:
7820 if (state == BUTTON_STATE_PRESS)
7821 icon_name = ISO_AUTO_PRESS_ICON;
7823 icon_name = ISO_AUTO_NORMAL_ICON;
7825 case CAM_MENU_ISO_50:
7826 if (state == BUTTON_STATE_PRESS)
7827 icon_name = ISO_50_PRESS_ICON;
7829 icon_name = ISO_50_NORMAL_ICON;
7831 case CAM_MENU_ISO_100:
7832 if (state == BUTTON_STATE_PRESS)
7833 icon_name = ISO_100_PRESS_ICON;
7835 icon_name = ISO_100_NORMAL_ICON;
7837 case CAM_MENU_ISO_200:
7838 if (state == BUTTON_STATE_PRESS)
7839 icon_name = ISO_200_PRESS_ICON;
7841 icon_name = ISO_200_NORMAL_ICON;
7843 case CAM_MENU_ISO_400:
7844 if (state == BUTTON_STATE_PRESS)
7845 icon_name = ISO_400_PRESS_ICON;
7847 icon_name = ISO_400_NORMAL_ICON;
7849 case CAM_MENU_ISO_80O:
7850 if (state == BUTTON_STATE_PRESS)
7851 icon_name = ISO_800_PRESS_ICON;
7853 icon_name = ISO_800_NORMAL_ICON;
7855 case CAM_MENU_ISO_1600:
7856 if (state == BUTTON_STATE_PRESS)
7861 case CAM_MENU_ISO_320O:
7862 if (state == BUTTON_STATE_PRESS)
7867 case CAM_MENU_STORAGE_PHONE:
7868 if (state == BUTTON_STATE_PRESS)
7869 icon_name = STORAGE_MYDEVICE_PRESS_ICON;
7871 icon_name = STORAGE_MYDEVICE_NORMAL_ICON;
7873 case CAM_MENU_STORAGE_MMC:
7874 if (state == BUTTON_STATE_PRESS)
7875 icon_name = STORAGE_CARD_PRESS_ICON;
7877 icon_name = STORAGE_CARD_NORMAL_ICON;
7879 case CAM_MENU_TIMER_OFF:
7880 if (state == BUTTON_STATE_PRESS)
7881 icon_name = TIMER_OFF_PRESS_ICON;
7883 icon_name = TIMER_OFF_NORMAL_ICON;
7885 case CAM_MENU_TIMER_2SEC:
7886 if (state == BUTTON_STATE_PRESS)
7887 icon_name = TIMER_2SEC_PRESS_ICON;
7889 icon_name = TIMER_2SEC_NORMAL_ICON;
7891 case CAM_MENU_TIMER_5SEC:
7892 if (state == BUTTON_STATE_PRESS)
7893 icon_name = TIMER_5SEC_PRESS_ICON;
7895 icon_name = TIMER_5SEC_NORMAL_ICON;
7897 case CAM_MENU_TIMER_10SEC:
7898 if (state == BUTTON_STATE_PRESS)
7899 icon_name = TIMER_10SEC_PRESS_ICON;
7901 icon_name = TIMER_10SEC_NORMAL_ICON;
7903 case CAM_MENU_VOLUME_KEY_ZOOM:
7904 if (state == BUTTON_STATE_PRESS)
7905 icon_name = VOLUME_KEY_AS_ZOOM_PRESS_ICON;
7907 icon_name = VOLUME_KEY_AS_ZOOM_NORMAL_ICON;
7909 case CAM_MENU_VOLUME_KEY_SHUTTER:
7910 if (state == BUTTON_STATE_PRESS)
7911 icon_name = VOLUME_KEY_AS_SHUTTER_PRESS_ICON;
7913 icon_name = VOLUME_KEY_AS_SHUTTER_NORMAL_ICON;
7915 case CAM_MENU_EXPLOSURE_VALUE:
7916 if (camapp->self_portrait == FALSE)
7917 exposure_value = camapp->brightness;
7919 exposure_value = camapp->brightness + 4;
7921 if (exposure_value == 0) {
7922 if (state == BUTTON_STATE_PRESS)
7923 icon_name = EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON;
7925 icon_name = EXPOSURE_VALUE_MINUS_2_0_ICON;
7926 } else if (exposure_value == 1) {
7927 if (state == BUTTON_STATE_PRESS)
7928 icon_name = EXPOSURE_VALUE_MINUS_1_5_PRESS_ICON;
7930 icon_name = EXPOSURE_VALUE_MINUS_1_5_ICON;
7931 } else if (exposure_value == 2) {
7932 if (state == BUTTON_STATE_PRESS)
7933 icon_name = EXPOSURE_VALUE_MINUS_1_0_PRESS_ICON;
7935 icon_name = EXPOSURE_VALUE_MINUS_1_0_ICON;
7936 } else if (exposure_value == 3) {
7937 if (state == BUTTON_STATE_PRESS)
7938 icon_name = EXPOSURE_VALUE_MINUS_0_5_PRESS_ICON;
7940 icon_name = EXPOSURE_VALUE_MINUS_0_5_ICON;
7941 } else if (exposure_value == 4) {
7942 if (state == BUTTON_STATE_PRESS)
7943 icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
7945 icon_name = EXPOSURE_VALUE_0_ICON;
7946 } else if (exposure_value == 5) {
7947 if (state == BUTTON_STATE_PRESS)
7948 icon_name = EXPOSURE_VALUE_PLUS_0_5_PRESS_ICON;
7950 icon_name = EXPOSURE_VALUE_PLUS_0_5_ICON;
7951 } else if (exposure_value == 6) {
7952 if (state == BUTTON_STATE_PRESS)
7953 icon_name = EXPOSURE_VALUE_PLUS_1_0_PRESS_ICON;
7955 icon_name = EXPOSURE_VALUE_PLUS_1_0_ICON;
7956 } else if (exposure_value == 7) {
7957 if (state == BUTTON_STATE_PRESS)
7958 icon_name = EXPOSURE_VALUE_PLUS_1_5_PRESS_ICON;
7960 icon_name = EXPOSURE_VALUE_PLUS_1_5_ICON;
7961 } else if (exposure_value == 8) {
7962 if (state == BUTTON_STATE_PRESS)
7963 icon_name = EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON;
7965 icon_name = EXPOSURE_VALUE_PLUS_2_0_ICON;
7967 if (state == BUTTON_STATE_PRESS)
7968 icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
7970 icon_name = EXPOSURE_VALUE_0_ICON;
7980 static const char* __get_text_name(CAM_MENU_ITEM item)
7983 case CAM_MENU_SCENE_AUTO:
7984 return "IDS_CAM_BODY_NONE";
7985 case CAM_MENU_SCENE_PORTRAIT:
7986 return "IDS_CAM_OPT_SCENE_PORTRAIT";
7987 case CAM_MENU_SCENE_LANDSCAPE:
7988 return "IDS_CAM_OPT_SCENE_LANDSCAPE";
7989 case CAM_MENU_SCENE_NIGHT:
7990 return "IDS_CAM_OPT_SCENEMODE_NIGHT";
7991 case CAM_MENU_SCENE_SPORTS:
7992 return "IDS_CAM_OPT_SCENE_SPORTS";
7993 case CAM_MENU_SCENE_PARTY:
7994 return "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR";
7995 case CAM_MENU_SCENE_BEACHSNOW:
7996 return "IDS_CAM_OPT_BEACH_SNOW";
7997 case CAM_MENU_SCENE_SUNSET:
7998 return "IDS_CAM_OPT_SCENEMODE_SUNSET";
7999 case CAM_MENU_SCENE_DUSKDAWN:
8000 return "IDS_CAM_OPT_SCENE_DAWN";
8001 case CAM_MENU_SCENE_FALL:
8002 return "IDS_CAM_OPT_AUTUMN_COLOUR";
8003 case CAM_MENU_SCENE_FIREWORK:
8004 return "IDS_CAM_BODY_SCENEMODE_FIREWORK";
8005 case CAM_MENU_SCENE_TEXT:
8006 return "IDS_CAM_BODY_SCENEMODE_TEXT";
8007 case CAM_MENU_SCENE_CANDLELIGHT:
8008 return "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT";
8009 case CAM_MENU_SCENE_BACKLIGHT:
8010 return "IDS_CAM_OPT_SCENE_BACKLIGHT";
8011 case CAM_MENU_SHOOTING_SINGLE:
8012 case CAM_MENU_SHOOTING_SELF_SINGLE:
8013 return "IDS_CAM_BODY_SINGLE";
8014 case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
8016 case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
8018 case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
8020 case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
8022 case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
8024 case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
8026 case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
8028 case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
8030 case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
8032 case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
8034 case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
8036 case CAM_MENU_PHOTO_RESOLUTION_1280x960:
8038 case CAM_MENU_PHOTO_RESOLUTION_1280x720:
8040 case CAM_MENU_PHOTO_RESOLUTION_640x480:
8042 case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
8044 case CAM_MENU_VIDEO_RESOLUTION_HD:
8046 case CAM_MENU_VIDEO_RESOLUTION_WVGA:
8048 case CAM_MENU_VIDEO_RESOLUTION_VGA:
8050 case CAM_MENU_VIDEO_RESOLUTION_QVGA:
8052 case CAM_MENU_VIDEO_RESOLUTION_QCIF:
8054 case CAM_MENU_WB_AWB:
8055 return "IDS_CAM_BODY_AUTO";
8056 case CAM_MENU_WB_INCANDESCENT:
8057 return "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT";
8058 case CAM_MENU_WB_FLUORESCENT:
8059 return "IDS_CAM_BODY_FLUORESCENT";
8060 case CAM_MENU_WB_DAYLIGHT:
8061 return "IDS_CAM_BODY_DAYLIGHT";
8062 case CAM_MENU_WB_CLOUDY:
8063 return "IDS_CAM_BODY_CLOUDY";
8064 case CAM_MENU_WB_SHADE:
8065 return "IDS_CAM_BODY_SHADE";
8066 case CAM_MENU_WB_HORIZON:
8067 return "IDS_CAM_BODY_HORIZON";
8068 case CAM_MENU_WB_FLASH:
8069 return "IDS_CAM_OPT_FLASH";
8070 case CAM_MENU_WB_CUSTOM:
8071 return "IDS_CAM_BODY_CUSTOM";
8072 case CAM_MENU_EFFECT_NONE:
8073 return "IDS_CAM_BODY_NONE";
8074 case CAM_MENU_EFFECT_NEGATIVE:
8075 return "IDS_CAM_BODY_NEGATIVE";
8076 case CAM_MENU_EFFECT_BLACKANDWHITE:
8077 return "IDS_CAM_BODY_BLACK_AND_WHITE";
8078 case CAM_MENU_EFFECT_SEPIA:
8079 return "IDS_CAM_BODY_SEPIA";
8080 case CAM_MENU_FOCUS_AUTO:
8081 return "IDS_CAM_OPT_AUTO_FOCUS";
8082 case CAM_MENU_FOCUS_MACRO:
8083 return "IDS_CAM_BODY_MACRO";
8084 case CAM_MENU_FOCUS_FACE_DETECTION:
8085 return "IDS_CAM_OPT_FACE_DETECTION";
8086 case CAM_MENU_RECORDING_MODE_NORMAL:
8087 return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
8088 case CAM_MENU_RECORDING_MODE_LIMIT:
8089 return "IDS_CAM_OPT_MESSAGE_LIMIT";
8090 case CAM_MENU_RECORDING_MODE_SLOW:
8091 return "IDS_CAM_OPT_SLOW_MOTION";
8092 case CAM_MENU_RECORDING_MODE_FAST:
8093 return "IDS_CAM_BODY_FAST_MOTION";
8094 case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
8095 return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
8096 case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
8097 return "IDS_CAM_OPT_MESSAGE_LIMIT";
8098 case CAM_MENU_FLASH_OFF:
8099 return "IDS_CAM_BODY_OFF";
8100 case CAM_MENU_FLASH_ON:
8101 return "IDS_CAM_BODY_ON";
8102 case CAM_MENU_FLASH_AUTO:
8103 return "IDS_CAM_BODY_AUTO";
8104 case CAM_MENU_METERING_MATRIX:
8105 return "IDS_CAM_BODY_MATRIX";
8106 case CAM_MENU_METERING_CENTER_WEIGHTED:
8107 return "IDS_CAM_BODY_CENTER_WEIGHTED";
8108 case CAM_MENU_METERING_SPOT:
8109 return "IDS_CAM_BODY_SPOT";
8110 case CAM_MENU_ISO_AUTO:
8111 return "IDS_CAM_BODY_AUTO";
8112 case CAM_MENU_ISO_50:
8114 case CAM_MENU_ISO_100:
8116 case CAM_MENU_ISO_200:
8118 case CAM_MENU_ISO_400:
8120 case CAM_MENU_ISO_80O:
8122 case CAM_MENU_ISO_1600:
8124 case CAM_MENU_ISO_320O:
8126 case CAM_MENU_STORAGE_PHONE:
8127 return "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY";
8128 case CAM_MENU_STORAGE_MMC:
8129 return "IDS_CAM_OPT_MEMORY_CARD";
8130 case CAM_MENU_TIMER_OFF:
8131 return "IDS_CAM_BODY_OFF";
8132 case CAM_MENU_TIMER_2SEC:
8133 return "IDS_CAM_BODY_2_SEC";
8134 case CAM_MENU_TIMER_5SEC:
8135 return "IDS_CAM_BODY_5_SEC";
8136 case CAM_MENU_TIMER_10SEC:
8137 return "IDS_CAM_BODY_10_SEC";
8138 case CAM_MENU_VOLUME_KEY_ZOOM:
8139 return "IDS_CAM_MBODY_THE_ZOOM_KEY";
8140 case CAM_MENU_VOLUME_KEY_SHUTTER:
8141 return "IDS_CAM_MBODY_THE_CAMERA_KEY";
8147 #define SUB_MENU_MAX_COUNT (5)
8148 #define SUB_MENU_2_COUNT_GAP (35)
8149 #define SUB_MENU_3_COUNT_GAP (30)
8150 #define SUB_MENU_4_COUNT_GAP (25)
8151 #define SUB_MENU_5_COUNT_GAP (15)
8153 static int __get_sub_menu_height(int count)
8157 height = SUB_MENU_POPUP_HEIGHT;
8159 height = (int)(SUB_MENU_POPUP_HEIGHT * count/SUB_MENU_MAX_COUNT);
8162 height += SUB_MENU_2_COUNT_GAP;
8165 height += SUB_MENU_3_COUNT_GAP;
8168 height += SUB_MENU_4_COUNT_GAP;
8171 height += SUB_MENU_5_COUNT_GAP;
8178 static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
8180 cam_retm_if(obj == NULL, "obj is NULL");
8181 struct appdata *ad = (struct appdata *)cam_appdata_get();
8182 cam_retm_if(ad == NULL, "appdata is NULL");
8183 CamAppData *camapp = ad->camapp_handle;
8184 cam_retm_if(camapp == NULL, "camapp is NULL");
8188 int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
8190 /* set resolution value */
8191 if (camapp->photo_resolution != resolution) {
8193 CAM_GVALUE_SET_INT(value, resolution);
8194 if (!cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &value)) {
8195 DEBUG_TRACE("set photo resolution failed!");
8199 __update_menubar_icon_by_index(ad, CAM_MENU_PHOTO_RESOLUTION);
8200 if (ad->setting_select_item)
8201 elm_genlist_item_update(ad->setting_select_item);
8203 setting_ctxpopup_destroy(ad);
8204 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
8207 static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
8209 cam_retm_if(obj == NULL, "obj is NULL");
8210 struct appdata *ad = (struct appdata *)cam_appdata_get();
8211 cam_retm_if(ad == NULL, "appdata is NULL");
8212 CamAppData *camapp = ad->camapp_handle;
8213 cam_retm_if(camapp == NULL, "camapp is NULL");
8217 int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
8219 /* set resolution value */
8220 if (camapp->video_resolution != resolution) {
8222 CAM_GVALUE_SET_INT(value, resolution);
8223 if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
8224 DEBUG_TRACE("set video resolution failed!");
8228 __update_menubar_icon_by_index(ad, CAM_MENU_VIDEO_RESOLUTION);
8229 if (ad->setting_select_item)
8230 elm_genlist_item_update(ad->setting_select_item);
8232 setting_ctxpopup_destroy(ad);
8233 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
8236 void cam_toolbar_show_cafbutton(struct appdata *ad, gboolean show)
8238 cam_retm_if(ad == NULL, "appdata is NULL");
8241 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
8244 __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
8248 static void __update_setting_popup(void* data)
8251 struct appdata *ad = data;
8252 cam_retm_if(ad == NULL, "appdata is NULL");
8254 Elm_Object_Item *it = NULL;
8255 it = elm_genlist_first_item_get(ad->genlist);
8258 CAM_MENU_ITEM item = (CAM_MENU_ITEM)elm_object_item_data_get(it);
8259 gboolean cap_enable = cam_is_enabled_menu(ad,item);
8260 gboolean cur_state = elm_object_item_disabled_get(it);
8261 DEBUG_TRACE("cap_enable %d", cap_enable);
8262 DEBUG_TRACE("cur_state %d", cap_enable);
8263 if(cap_enable == cur_state) {
8264 DEBUG_TRACE("cur_state|cap_enable %d", cap_enable|cur_state);
8265 elm_object_item_disabled_set(it, !cap_enable);
8266 elm_genlist_item_update(it);
8269 it = elm_genlist_item_next_get(it);
8275 static void __set_show_state_preview_obj(void *data, gboolean show)
8277 struct appdata *ad = data;
8278 cam_retm_if(ad == NULL, "appdata is NULL");
8281 cam_app_focus_guide_update(ad);
8282 cam_indicator_set_show_state(ad, TRUE);
8284 if (ad->guideline_edje)
8285 evas_object_show(ad->guideline_edje);
8287 if (ad->shot_mode_guide_popup)
8288 evas_object_show(ad->shot_mode_guide_popup);
8290 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
8291 cam_indicator_set_show_state(ad, FALSE);
8293 if (ad->guideline_edje)
8294 evas_object_hide(ad->guideline_edje);
8296 if (ad->shot_mode_guide_popup)
8297 evas_object_hide(ad->shot_mode_guide_popup);