summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJinkun Jang <jinkun.jang@samsung.com>2013-03-13 01:38:24 +0900
committerJinkun Jang <jinkun.jang@samsung.com>2013-03-13 01:38:24 +0900
commit84334d75452c67c690e300579c515fed0c4a07db (patch)
tree5714c673e93fba17e0a24b8ce01b6c93dc43519e
parent6d705b8c5b707e7acb8ac05ac49380601af4977e (diff)
downloadug-camera-efl-84334d75452c67c690e300579c515fed0c4a07db.tar.gz
ug-camera-efl-84334d75452c67c690e300579c515fed0c4a07db.tar.bz2
ug-camera-efl-84334d75452c67c690e300579c515fed0c4a07db.zip
Tizen 2.1 base
-rwxr-xr-xCMakeLists.txt196
-rw-r--r--LICENSE.Flora75
-rw-r--r--NOTICE3
-rwxr-xr-xedc/cam_ctxpopup_shortcuts.edc1010
-rwxr-xr-xedc/cam_ctxpopup_shortcuts_inc.edc163
-rwxr-xr-xedc/cam_ev_layout.edc159
-rwxr-xr-xedc/cam_ev_layout_inverse.edc159
-rwxr-xr-xedc/cam_ev_layout_vertical.edc158
-rwxr-xr-xedc/cam_ev_layout_vertical_inverse.edc159
-rw-r--r--edc/cam_funcs.edc163
-rw-r--r--edc/cam_guideline_edje.edc453
-rwxr-xr-xedc/cam_images.edc332
-rwxr-xr-xedc/cam_indicator_layout.edc218
-rwxr-xr-xedc/cam_main_layout.edc496
-rwxr-xr-xedc/cam_recording_edje.edc190
-rwxr-xr-xedc/cam_recording_edje_inc.edc40
-rwxr-xr-xedc/cam_recording_edje_inverse.edc194
-rwxr-xr-xedc/cam_recording_edje_inverse_inc.edc38
-rwxr-xr-xedc/cam_recording_edje_vertical.edc189
-rwxr-xr-xedc/cam_recording_edje_vertical_inc.edc39
-rwxr-xr-xedc/cam_recording_edje_vertical_inverse.edc192
-rwxr-xr-xedc/cam_recording_edje_vertical_inverse_inc.edc38
-rw-r--r--edc/cam_setting_popup_layout.edc50
-rwxr-xr-xedc/cam_setting_popup_layout_inc.edc288
-rwxr-xr-xedc/cam_toolbar_layout.edc619
-rwxr-xr-xedc/cam_toolbar_layout_inc.edc353
-rwxr-xr-xedc/cam_toolbar_layout_inverse.edc619
-rwxr-xr-xedc/cam_toolbar_layout_inverse_inc.edc353
-rwxr-xr-xedc/cam_toolbar_layout_vertical.edc618
-rwxr-xr-xedc/cam_toolbar_layout_vertical_inc.edc353
-rwxr-xr-xedc/cam_toolbar_layout_vertical_inverse.edc618
-rwxr-xr-xedc/cam_toolbar_layout_vertical_inverse_inc.edc353
-rwxr-xr-xedc/cam_utils.edc436
-rwxr-xr-xedc/cam_zoom_layout.edc341
-rwxr-xr-xedc/cam_zoom_layout_inverse.edc146
-rwxr-xr-xedc/cam_zoom_layout_vertical.edc344
-rwxr-xr-xedc/cam_zoom_layout_vertical_inverse.edc146
-rw-r--r--edc/style_button_camera.edc490
-rwxr-xr-xedc/style_ctxpopup_camera_with_radio.edc1732
-rwxr-xr-xedc/style_genlist_macro.edc847
-rw-r--r--edc/style_genlist_normal.edc866
-rw-r--r--edc/style_label_camera.edc634
-rwxr-xr-xedc/style_slider_camera.edc488
-rw-r--r--edc/style_tizen_hd_inc.edc1155
-rw-r--r--images/edc_images/00_button_01_normal.pngbin0 -> 3025 bytes
-rw-r--r--images/edc_images/00_button_01_normal_Focus.pngbin0 -> 2990 bytes
-rw-r--r--images/edc_images/00_button_01_normal_dim.pngbin0 -> 3012 bytes
-rw-r--r--images/edc_images/00_button_01_normal_press.pngbin0 -> 3099 bytes
-rw-r--r--images/edc_images/00_check_off.pngbin0 -> 3235 bytes
-rw-r--r--images/edc_images/camara_back_button.pngbin0 -> 3863 bytes
-rwxr-xr-ximages/edc_images/camara_back_button_press.pngbin0 -> 3528 bytes
-rwxr-xr-ximages/edc_images/camcorder_recording_pause.pngbin0 -> 12359 bytes
-rwxr-xr-ximages/edc_images/camcorder_recording_pause_press.pngbin0 -> 11595 bytes
-rwxr-xr-ximages/edc_images/camcorder_recording_shutter.pngbin0 -> 13746 bytes
-rwxr-xr-ximages/edc_images/camcorder_recording_stop.pngbin0 -> 12350 bytes
-rwxr-xr-ximages/edc_images/camcorder_recording_stop_press.pngbin0 -> 11730 bytes
-rwxr-xr-ximages/edc_images/camcorder_standby_shutter.pngbin0 -> 12302 bytes
-rwxr-xr-ximages/edc_images/camcorder_standby_shutter_dim.pngbin0 -> 11687 bytes
-rwxr-xr-ximages/edc_images/camcorder_standby_shutter_press.pngbin0 -> 12082 bytes
-rwxr-xr-ximages/edc_images/camcorder_stop_shutter_icon.pngbin0 -> 2930 bytes
-rw-r--r--images/edc_images/camera_button_off.pngbin0 -> 4169 bytes
-rw-r--r--images/edc_images/camera_button_on.pngbin0 -> 4397 bytes
-rwxr-xr-ximages/edc_images/camera_handle.pngbin0 -> 8521 bytes
-rw-r--r--images/edc_images/camera_help_image.pngbin0 -> 16120 bytes
-rwxr-xr-ximages/edc_images/camera_menu_bg.pngbin0 -> 3415 bytes
-rwxr-xr-ximages/edc_images/camera_menu_bg_press.pngbin0 -> 3388 bytes
-rwxr-xr-ximages/edc_images/camera_menu_tab_hold.pngbin0 -> 1692 bytes
-rwxr-xr-ximages/edc_images/camera_mode_shutter_dim.pngbin0 -> 20959 bytes
-rwxr-xr-ximages/edc_images/camera_mode_shutter_icon.pngbin0 -> 2249 bytes
-rwxr-xr-ximages/edc_images/camera_mode_shutter_icon_dim.pngbin0 -> 4015 bytes
-rwxr-xr-ximages/edc_images/camera_mode_shutter_normal.pngbin0 -> 21827 bytes
-rw-r--r--images/edc_images/camera_mode_shutter_normal_inverse.pngbin0 -> 26999 bytes
-rwxr-xr-ximages/edc_images/camera_mode_shutter_press.pngbin0 -> 21089 bytes
-rwxr-xr-ximages/edc_images/camera_mode_thumbnail_bg.pngbin0 -> 2450 bytes
-rwxr-xr-ximages/edc_images/camera_mode_thumbnail_bg_press.pngbin0 -> 2368 bytes
-rwxr-xr-ximages/edc_images/camera_normal_left.pngbin0 -> 2210 bytes
-rwxr-xr-ximages/edc_images/camera_normal_opacity_l_bg.pngbin0 -> 2122 bytes
-rwxr-xr-ximages/edc_images/camera_normal_opacity_r_bg.pngbin0 -> 2241 bytes
-rwxr-xr-ximages/edc_images/camera_normal_right.pngbin0 -> 2203 bytes
-rwxr-xr-ximages/edc_images/camera_option_popup_anker.pngbin0 -> 3117 bytes
-rwxr-xr-ximages/edc_images/camera_option_popup_anker_inverse.pngbin0 -> 3151 bytes
-rwxr-xr-ximages/edc_images/camera_option_popup_bg.pngbin0 -> 3134 bytes
-rwxr-xr-ximages/edc_images/camera_option_popup_bg_2depth.pngbin0 -> 3130 bytes
-rwxr-xr-ximages/edc_images/camera_popup_ex_bar.pngbin0 -> 3130 bytes
-rwxr-xr-ximages/edc_images/camera_popup_zoom.pngbin0 -> 1846 bytes
-rwxr-xr-ximages/edc_images/camera_popup_zoom_bar.pngbin0 -> 1330 bytes
-rwxr-xr-ximages/edc_images/camera_radio_btn_off.pngbin0 -> 2458 bytes
-rwxr-xr-ximages/edc_images/camera_radio_btn_on.pngbin0 -> 3208 bytes
-rwxr-xr-ximages/edc_images/camera_recording_btn_caf.pngbin0 -> 4342 bytes
-rwxr-xr-ximages/edc_images/camera_recording_btn_caf_press.pngbin0 -> 4393 bytes
-rwxr-xr-ximages/edc_images/camera_shortcut_line_h_01.pngbin0 -> 3912 bytes
-rwxr-xr-ximages/edc_images/camera_shortcut_line_v_01.pngbin0 -> 3832 bytes
-rwxr-xr-ximages/edc_images/camera_shortcut_line_v_02.pngbin0 -> 2276 bytes
-rwxr-xr-ximages/edc_images/camera_shrtcut_edit_bg.pngbin0 -> 4197 bytes
-rwxr-xr-ximages/edc_images/camera_shrtcut_menubar_bg.pngbin0 -> 2209 bytes
-rwxr-xr-ximages/edc_images/camera_shrtcut_text_bg.pngbin0 -> 1595 bytes
-rwxr-xr-ximages/edc_images/camera_timer_popup.pngbin0 -> 8502 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_00.pngbin0 -> 3007 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_01.pngbin0 -> 3234 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_02.pngbin0 -> 3300 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_03.pngbin0 -> 3300 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_04.pngbin0 -> 3304 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_05.pngbin0 -> 3288 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_charge.pngbin0 -> 1455 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_battery_full.pngbin0 -> 3265 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_gps_connection01.pngbin0 -> 3913 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_gps_connection02.pngbin0 -> 4515 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_gps_connection03.pngbin0 -> 5117 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_gps_off.pngbin0 -> 5044 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_gps_on.pngbin0 -> 3550 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_mute.pngbin0 -> 3912 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_smile_shot.pngbin0 -> 4156 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_storage_in.pngbin0 -> 1458 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_storage_memoryfull.pngbin0 -> 1704 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_storage_phonefull.pngbin0 -> 1509 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_indicator_storage_t_flash.pngbin0 -> 1583 bytes
-rwxr-xr-ximages/edc_images/indicator/camera_rec.pngbin0 -> 3926 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_anti_shake_off_nor.pngbin0 -> 3718 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_anti_shake_off_press.pngbin0 -> 4891 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_anti_shake_on_nor.pngbin0 -> 3353 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_anti_shake_on_press.pngbin0 -> 4679 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_auto_contrast_off_nor.pngbin0 -> 4628 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_auto_contrast_off_press.pngbin0 -> 5414 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_auto_contrast_on_nor.pngbin0 -> 4228 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_auto_contrast_on_press.pngbin0 -> 5193 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_burstshot_off_nor.pngbin0 -> 4081 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_burstshot_off_press.pngbin0 -> 4004 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_burstshot_on_nor.pngbin0 -> 1638 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_burstshot_on_press.pngbin0 -> 1507 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_capture_voice_off_nor.pngbin0 -> 4202 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_capture_voice_off_press.pngbin0 -> 4116 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_capture_voice_on_nor.pngbin0 -> 4309 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_capture_voice_on_press.pngbin0 -> 4241 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_Black and white_nor.pngbin0 -> 4074 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_Black and white_press.pngbin0 -> 4090 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_negative_nor.pngbin0 -> 3981 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_negative_press.pngbin0 -> 4009 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_none_nor.pngbin0 -> 3277 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_none_press.pngbin0 -> 4424 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_sepia_nor.pngbin0 -> 4137 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_effect_sepia_press.pngbin0 -> 4130 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_1_nor.pngbin0 -> 3229 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_1_press.pngbin0 -> 2761 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_2_nor.pngbin0 -> 2887 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_2_press.pngbin0 -> 2482 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_3_nor.pngbin0 -> 2949 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_3_press.pngbin0 -> 2550 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_4_nor.pngbin0 -> 3255 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_4_press.pngbin0 -> 2783 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_5_nor.pngbin0 -> 2961 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_5_press.pngbin0 -> 2618 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_6_nor.pngbin0 -> 3053 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_6_press.pngbin0 -> 2615 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_7_nor.pngbin0 -> 2741 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_7_press.pngbin0 -> 2387 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_8_nor.pngbin0 -> 2707 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_8_press.pngbin0 -> 2300 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_9_nor.pngbin0 -> 3048 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_exposure_9_press.pngbin0 -> 2588 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_flash_auto_nor.pngbin0 -> 3711 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_flash_auto_press.pngbin0 -> 4870 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_flash_off_nor.pngbin0 -> 3688 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_flash_off_press.pngbin0 -> 4816 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_flash_on_nor.pngbin0 -> 2697 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_flash_on_press.pngbin0 -> 4089 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_focus_auto_nor.pngbin0 -> 2335 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_focus_auto_press.pngbin0 -> 3765 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_focus_face_detection_nor.pngbin0 -> 3930 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_focus_face_detection_press.pngbin0 -> 5143 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_focus_macro_nor.pngbin0 -> 3686 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_focus_macro_press.pngbin0 -> 4733 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_gps_off_nor.pngbin0 -> 4628 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_gps_off_press.pngbin0 -> 5907 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_gps_on_nor.pngbin0 -> 4654 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_gps_on_press.pngbin0 -> 5543 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_guidelines_off_nor.pngbin0 -> 3214 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_guidelines_off_press.pngbin0 -> 2527 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_guidelines_on_nor.pngbin0 -> 1451 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_guidelines_on_press.pngbin0 -> 1305 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_100_nor.pngbin0 -> 1659 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_100_press.pngbin0 -> 1442 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_200_nor.pngbin0 -> 1655 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_200_press.pngbin0 -> 1454 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_400_nor.pngbin0 -> 1675 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_400_press.pngbin0 -> 1454 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_50_nor.pngbin0 -> 3599 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_50_press.pngbin0 -> 3739 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_800_nor.pngbin0 -> 1653 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_800_press.pngbin0 -> 1469 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_auto_nor.pngbin0 -> 1712 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_iso_auto_press.pngbin0 -> 1493 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_center_weighted_nor.pngbin0 -> 4492 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_center_weighted_press.pngbin0 -> 5302 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_matrix_nor.pngbin0 -> 1399 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_matrix_press.pngbin0 -> 1297 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_normal_nor.pngbin0 -> 1402 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_pressmal_press.pngbin0 -> 1297 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_spot_nor.pngbin0 -> 2293 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_metering_spot_press.pngbin0 -> 1919 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_outdoor_visibility_off_nor.pngbin0 -> 3568 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_outdoor_visibility_off_press.pngbin0 -> 2921 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_outdoor_visibility_on_nor.pngbin0 -> 3476 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_outdoor_visibility_on_press.pngbin0 -> 2874 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_fast_nor.pngbin0 -> 6855 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_fast_press.pngbin0 -> 5722 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_limit_for_mms_nor.pngbin0 -> 2816 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_limit_for_mms_press.pngbin0 -> 4441 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_normal_nor.pngbin0 -> 3289 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_normal_press.pngbin0 -> 4688 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_slowmotion_nor.pngbin0 -> 7944 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_recording_slowmotion_press.pngbin0 -> 7059 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_refresh_nor.pngbin0 -> 3597 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_refresh_press.pngbin0 -> 4713 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_reset_nor.pngbin0 -> 4501 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_reset_press.pngbin0 -> 5712 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_0_3m_nor.pngbin0 -> 4317 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_0_3m_press.pngbin0 -> 5659 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_1280X720_nor.pngbin0 -> 3930 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_1280X720_press.pngbin0 -> 4962 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_176X144_nor.pngbin0 -> 3941 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_176X144_press.pngbin0 -> 4933 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_1920X1080_nor.pngbin0 -> 4027 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_1920X1080_press.pngbin0 -> 5019 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_1_3m_nor.pngbin0 -> 5609 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_1_3m_press.pngbin0 -> 4840 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_2m_nor.pngbin0 -> 3786 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_2m_press.pngbin0 -> 5121 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_320X240_nor.pngbin0 -> 4203 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_320X240_press.pngbin0 -> 5101 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_3_2m_nor.pngbin0 -> 4249 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_3_2m_press.pngbin0 -> 5734 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_5m_nor.pngbin0 -> 3799 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_5m_press.pngbin0 -> 5154 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_640X480_nor.pngbin0 -> 4202 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_640X480_press.pngbin0 -> 5111 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_720X480_nor.pngbin0 -> 4133 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_720X480_press.pngbin0 -> 5094 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_8m_nor.pngbin0 -> 3683 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_8m_press.pngbin0 -> 4956 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w0_9m_nor.pngbin0 -> 4965 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w0_9m_press.pngbin0 -> 3688 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w2_4m_nor.pngbin0 -> 4544 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w2_4m_press.pngbin0 -> 5957 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w2m_nor.pngbin0 -> 6532 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w2m_press.pngbin0 -> 5740 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w3_6m_nor.pngbin0 -> 4977 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w3_6m_press.pngbin0 -> 3711 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w4m_nor.pngbin0 -> 4098 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w4m_press.pngbin0 -> 5573 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w5_7m_nor.pngbin0 -> 4522 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w5_7m_press.pngbin0 -> 6019 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w6m_nor.pngbin0 -> 4446 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_resolution_w6m_press.pngbin0 -> 3153 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_self_rec_nor.pngbin0 -> 3039 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_self_rec_press.pngbin0 -> 4265 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_self_shot_nor.pngbin0 -> 3777 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_self_shot_press.pngbin0 -> 4914 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_setting_nor.pngbin0 -> 3075 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_setting_press.pngbin0 -> 4350 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_Backlight_nor.pngbin0 -> 3178 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_Backlight_press.pngbin0 -> 4382 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_action_shot_nor.pngbin0 -> 3524 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_action_shot_press.pngbin0 -> 5336 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_nor.pngbin0 -> 3553 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_press.pngbin0 -> 4898 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_beauty_nor.pngbin0 -> 3235 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_beauty_press.pngbin0 -> 4439 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_nor.pngbin0 -> 4239 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_press.pngbin0 -> 4039 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_nor.pngbin0 -> 4395 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_press.pngbin0 -> 3867 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_candlelight_nor.pngbin0 -> 2159 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_candlelight_press.pngbin0 -> 3719 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_cartoon_nor.pngbin0 -> 4389 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_cartoon_press.pngbin0 -> 5622 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_dawn_nor.pngbin0 -> 2398 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_dawn_press.pngbin0 -> 3645 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_fall_nor.pngbin0 -> 2739 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_fall_press.pngbin0 -> 4040 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_firework_nor.pngbin0 -> 4828 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_firework_press.pngbin0 -> 5657 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_hdr_nor.pngbin0 -> 6662 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_hdr_press.pngbin0 -> 5479 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_landscape_nor.pngbin0 -> 2228 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_landscape_press.pngbin0 -> 3564 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_night_nor.pngbin0 -> 3679 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_night_press.pngbin0 -> 4778 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_panorama_nor.pngbin0 -> 2289 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_panorama_press.pngbin0 -> 3659 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_nor.pngbin0 -> 1992 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_press.pngbin0 -> 1868 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_portrait_nor.pngbin0 -> 3987 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_portrait_press.pngbin0 -> 5062 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_scene_none_nor.pngbin0 -> 1940 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_scene_none_press.pngbin0 -> 1732 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_share_nor.pngbin0 -> 4505 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_share_press.pngbin0 -> 5352 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_single_shot_nor.pngbin0 -> 1468 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_single_shot_press.pngbin0 -> 1376 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_nor.pngbin0 -> 3769 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_press.pngbin0 -> 5058 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_sports_nor.pngbin0 -> 4427 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_sports_press.pngbin0 -> 5404 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_sunset_nor.pngbin0 -> 2167 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_sunset_press.pngbin0 -> 3481 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_text_nor.pngbin0 -> 1792 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shooting_mode_text_press.pngbin0 -> 3324 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shutter.pngbin0 -> 6009 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_shutter_press.pngbin0 -> 5749 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_storage_mydevice_nor.pngbin0 -> 1482 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_storage_mydevice_press.pngbin0 -> 1405 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_storage_storagecard_nor.pngbin0 -> 1882 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_storage_storagecard_press.pngbin0 -> 1747 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_10_nor.pngbin0 -> 4772 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_10_press.pngbin0 -> 5608 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_2_nor.pngbin0 -> 4663 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_2_press.pngbin0 -> 5494 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_5_nor.pngbin0 -> 4716 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_5_press.pngbin0 -> 5549 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_off_nor.pngbin0 -> 4690 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_timer_off_press.pngbin0 -> 5578 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_auto_nor.pngbin0 -> 1970 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_auto_press.pngbin0 -> 1751 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_cloudy_nor.pngbin0 -> 2409 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_cloudy_press.pngbin0 -> 3676 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_day_light_nor.pngbin0 -> 3855 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_day_light_press.pngbin0 -> 5020 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_fluorescent_nor.pngbin0 -> 3281 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_fluorescent_press.pngbin0 -> 4379 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_horizon_nor.pngbin0 -> 2754 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_horizon_press.pngbin0 -> 4056 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_incandescent_nor.pngbin0 -> 3002 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_incandescent_press.pngbin0 -> 4241 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_shade_nor.pngbin0 -> 2072 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_shade_press.pngbin0 -> 3504 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_tungsten_nor.pngbin0 -> 2998 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_whitebalance_tungsten_press.pngbin0 -> 4241 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_zoom.pngbin0 -> 5293 bytes
-rwxr-xr-ximages/edc_images/shortcut/camera_mode_zoom_press.pngbin0 -> 5104 bytes
-rwxr-xr-ximages/edc_images/shortcut/sharewith_icon.pngbin0 -> 3457 bytes
-rwxr-xr-ximages/edc_images/shortcut/sharewith_icon_press.pngbin0 -> 3065 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camcorder_standby_press.pngbin0 -> 25958 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camcorder_standby_press_ver.pngbin0 -> 26128 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_bg.pngbin0 -> 7075 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_bg_ver.pngbin0 -> 7163 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_button.pngbin0 -> 8788 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_button_ver.pngbin0 -> 8842 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_camcorder_off.pngbin0 -> 3363 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_camcorder_on.pngbin0 -> 3363 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_camera_off.pngbin0 -> 3613 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_camera_on.pngbin0 -> 3613 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_recording_normal.pngbin0 -> 24190 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_recording_normal_ver.pngbin0 -> 23973 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_recording_press.pngbin0 -> 23027 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_mode_recording_press_ver.pngbin0 -> 22954 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_snapshot.pngbin0 -> 8360 bytes
-rwxr-xr-ximages/edc_images/tmp/11_camera_snapshot_press.pngbin0 -> 8146 bytes
-rw-r--r--images/edc_images/tmp/37_guideline_1.pngbin0 -> 2812 bytes
-rw-r--r--images/edc_images/tmp/37_guideline_2.pngbin0 -> 2811 bytes
-rw-r--r--images/edc_images/tmp/37_guideline_opa_1.pngbin0 -> 2814 bytes
-rw-r--r--images/edc_images/tmp/37_guideline_opa_2.pngbin0 -> 2812 bytes
-rwxr-xr-ximages/edc_images/tmp/37_shootingmode_popup_bg.pngbin0 -> 698 bytes
-rwxr-xr-ximages/edc_images/touch_af_focus_rect_01.pngbin0 -> 2852 bytes
-rwxr-xr-ximages/edc_images/touch_af_focus_rect_02.pngbin0 -> 2850 bytes
-rwxr-xr-ximages/edc_images/touch_af_focus_rect_03.pngbin0 -> 2857 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_mode_bg_ver.pngbin0 -> 3770 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_mode_button_ver.pngbin0 -> 7937 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_mode_shutter_dim_ver.pngbin0 -> 20865 bytes
-rw-r--r--images/edc_images/vertical/camera_mode_shutter_norma_ver_inverse.pngbin0 -> 27060 bytes
-rw-r--r--images/edc_images/vertical/camera_mode_shutter_normal_ver.pngbin0 -> 27198 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_mode_shutter_press_ver.pngbin0 -> 20774 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_normal_bg_ver.pngbin0 -> 1647 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_normal_bg_ver2.pngbin0 -> 1640 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_normal_bg_ver2_01.pngbin0 -> 625 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_normal_bg_ver_01.pngbin0 -> 625 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_option_popup_anker_vertical.pngbin0 -> 3154 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_option_popup_anker_vertical_inverse.pngbin0 -> 3150 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_popup_ex_bar_ver.pngbin0 -> 3111 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_popup_zoom_bar_ver.pngbin0 -> 1292 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_popup_zoom_ver.pngbin0 -> 515 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_shrtcut_edit_bg_02_ver.pngbin0 -> 3682 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_shrtcut_edit_bg_ver.pngbin0 -> 4250 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_shrtcut_menubar_bg_ver.pngbin0 -> 1783 bytes
-rwxr-xr-ximages/edc_images/vertical/camera_shrtcut_text_bg_ver.pngbin0 -> 1618 bytes
-rw-r--r--include/CamDeviceCapacity.h118
-rwxr-xr-xinclude/CamTypeConverter.h48
-rwxr-xr-xinclude/cam.h393
-rw-r--r--include/cam_animation.h28
-rwxr-xr-xinclude/cam_app.h498
-rwxr-xr-xinclude/cam_capacity_type.h188
-rwxr-xr-xinclude/cam_config.h84
-rwxr-xr-xinclude/cam_continuous_shot.h49
-rwxr-xr-xinclude/cam_debug.h296
-rwxr-xr-xinclude/cam_device_capacity.h51
-rwxr-xr-xinclude/cam_error.h68
-rw-r--r--include/cam_exif_info.h35
-rw-r--r--include/cam_face_detection_focus.h70
-rwxr-xr-xinclude/cam_file.h87
-rwxr-xr-xinclude/cam_lbs.h46
-rw-r--r--include/cam_long_press.h41
-rwxr-xr-xinclude/cam_menu_composer.h45
-rwxr-xr-xinclude/cam_mm.h252
-rwxr-xr-xinclude/cam_popup.h76
-rwxr-xr-xinclude/cam_property.h954
-rwxr-xr-xinclude/cam_rec.h45
-rwxr-xr-xinclude/cam_sound.h55
-rwxr-xr-xinclude/cam_ta.h112
-rw-r--r--include/cam_typeconverter.h55
-rw-r--r--include/cam_ui_effect_utils.h86
-rw-r--r--include/cam_ui_rotate_utils.h101
-rw-r--r--include/cam_voice_command.h37
-rwxr-xr-xinclude/camera_utils.h153
-rwxr-xr-xinclude/edc-callback/cam_common_edc_callback.h46
-rwxr-xr-xinclude/edc-callback/cam_ev_edc_callback.h26
-rwxr-xr-xinclude/edc-callback/cam_indicator_edc_callback.h35
-rwxr-xr-xinclude/edc-callback/cam_recording_edc_callback.h28
-rwxr-xr-xinclude/edc-callback/cam_toolbar_edc_callback.h120
-rwxr-xr-xinclude/edc-callback/cam_zoom_edc_callback.h30
-rwxr-xr-xinclude/edc_image_name.h402
-rwxr-xr-xinclude/edc_string.h104
-rw-r--r--packaging/ug-camera-efl.spec77
-rw-r--r--po/CMakeLists.txt25
-rwxr-xr-xpo/POTFILES.in1
-rwxr-xr-xpo/ar.po342
-rwxr-xr-xpo/az.po342
-rwxr-xr-xpo/bg.po342
-rwxr-xr-xpo/ca.po342
-rwxr-xr-xpo/cs.po342
-rwxr-xr-xpo/da.po342
-rwxr-xr-xpo/de_DE.po342
-rwxr-xr-xpo/el_GR.po342
-rwxr-xr-xpo/en.po342
-rwxr-xr-xpo/en_PH.po342
-rwxr-xr-xpo/en_US.po342
-rwxr-xr-xpo/es_ES.po342
-rwxr-xr-xpo/es_MX.po342
-rwxr-xr-xpo/et.po342
-rwxr-xr-xpo/eu.po342
-rwxr-xr-xpo/fi.po342
-rwxr-xr-xpo/fr_CA.po342
-rwxr-xr-xpo/fr_FR.po342
-rwxr-xr-xpo/ga.po342
-rwxr-xr-xpo/gl.po342
-rwxr-xr-xpo/hi.po342
-rwxr-xr-xpo/hr.po342
-rwxr-xr-xpo/htm2po.py97
-rwxr-xr-xpo/hu.po342
-rwxr-xr-xpo/hy.po342
-rwxr-xr-xpo/is.po342
-rwxr-xr-xpo/it_IT.po342
-rwxr-xr-xpo/ja_JP.po342
-rwxr-xr-xpo/ka.po342
-rwxr-xr-xpo/kk.po342
-rwxr-xr-xpo/ko_KR.po342
-rwxr-xr-xpo/lt.po342
-rwxr-xr-xpo/lv.po342
-rwxr-xr-xpo/mk.po342
-rwxr-xr-xpo/nb.po342
-rwxr-xr-xpo/nl_NL.po342
-rwxr-xr-xpo/pl.po342
-rwxr-xr-xpo/pt_BR.po342
-rwxr-xr-xpo/pt_PT.po342
-rwxr-xr-xpo/ro.po342
-rwxr-xr-xpo/ru_RU.po342
-rwxr-xr-xpo/sk.po342
-rwxr-xr-xpo/sl.po342
-rwxr-xr-xpo/sr.po342
-rwxr-xr-xpo/sv.po342
-rwxr-xr-xpo/tr_TR.po342
-rwxr-xr-xpo/uk.po342
-rwxr-xr-xpo/update-po.sh57
-rwxr-xr-xpo/uz.po342
-rwxr-xr-xpo/zh_CN.po342
-rwxr-xr-xpo/zh_HK.po342
-rwxr-xr-xpo/zh_SG.po342
-rwxr-xr-xpo/zh_TW.po342
-rwxr-xr-xsounds/af_fail.wavbin0 -> 18132 bytes
-rwxr-xr-xsounds/af_ok.wavbin0 -> 16104 bytes
-rwxr-xr-xsounds/count.wavbin0 -> 26700 bytes
-rwxr-xr-xsrc/CamDeviceCapacity.cpp715
-rwxr-xr-xsrc/CamTypeConverter.cpp672
-rwxr-xr-xsrc/cam.c924
-rwxr-xr-xsrc/cam_animation.c196
-rwxr-xr-xsrc/cam_app.c8653
-rw-r--r--src/cam_config.c361
-rwxr-xr-xsrc/cam_continuous_shot.c621
-rwxr-xr-xsrc/cam_debug.c291
-rw-r--r--src/cam_device_capacity.cpp108
-rw-r--r--src/cam_exif_info.c264
-rw-r--r--src/cam_face_detection_focus.c223
-rwxr-xr-xsrc/cam_file.c489
-rwxr-xr-xsrc/cam_lbs.c304
-rwxr-xr-xsrc/cam_long_press.c162
-rwxr-xr-xsrc/cam_menu_composer.c1245
-rwxr-xr-xsrc/cam_mm.c2431
-rwxr-xr-xsrc/cam_popup.c392
-rwxr-xr-xsrc/cam_rec.c495
-rwxr-xr-xsrc/cam_sound.c249
-rwxr-xr-xsrc/cam_ta.c620
-rw-r--r--src/cam_typeconverter.cpp109
-rwxr-xr-xsrc/cam_ui_effect_utils.c199
-rwxr-xr-xsrc/cam_ui_rotate_utils.c589
-rw-r--r--src/cam_voice_command.c139
-rwxr-xr-xsrc/camera_utils.c1461
-rwxr-xr-xsrc/edc-callback/cam_common_edc_callback.c949
-rwxr-xr-xsrc/edc-callback/cam_ev_edc_callback.c277
-rwxr-xr-xsrc/edc-callback/cam_indicator_edc_callback.c435
-rwxr-xr-xsrc/edc-callback/cam_recording_edc_callback.c383
-rwxr-xr-xsrc/edc-callback/cam_toolbar_edc_callback.c8301
-rwxr-xr-xsrc/edc-callback/cam_zoom_edc_callback.c418
-rw-r--r--ug-camera-efl.manifest11
-rwxr-xr-xug-camera-efl.pngbin0 -> 17101 bytes
-rwxr-xr-xug-camera-efl.xml70
513 files changed, 71830 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755
index 0000000..1f04124
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,196 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ug-camera-efl C CXX)
+
+message(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
+message("furcate arm or i686")
+EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_VERSION)
+message("This package is building by ${CMAKE_SYSTEM_VERSION}")
+message(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
+
+if("${CMAKE_SYSTEM_VERSION}" MATCHES "^arm.*")
+SET(SRCS
+src/cam.c
+src/camera_utils.c
+src/cam_mm.c
+src/cam_app.c
+src/cam_animation.c
+src/cam_sound.c
+src/cam_debug.c
+src/cam_config.c
+src/cam_file.c
+src/cam_ta.c
+src/cam_continuous_shot.c
+src/cam_rec.c
+src/cam_lbs.c
+src/cam_popup.c
+src/cam_long_press.c
+src/cam_face_detection_focus.c
+src/cam_ui_effect_utils.c
+src/cam_ui_rotate_utils.c
+src/cam_menu_composer.c
+src/cam_typeconverter.cpp
+src/cam_device_capacity.cpp
+src/CamTypeConverter.cpp
+src/CamDeviceCapacity.cpp
+src/cam_voice_command.c
+src/cam_exif_info.c
+src/edc-callback/cam_common_edc_callback.c
+src/edc-callback/cam_toolbar_edc_callback.c
+src/edc-callback/cam_indicator_edc_callback.c
+src/edc-callback/cam_ev_edc_callback.c
+src/edc-callback/cam_zoom_edc_callback.c
+src/edc-callback/cam_recording_edc_callback.c
+)
+else()
+SET(SRCS
+src/cam.c
+src/camera_utils.c
+src/cam_mm.c
+src/cam_app.c
+src/cam_sound.c
+src/cam_debug.c
+src/cam_config.c
+src/cam_file.c
+src/cam_ta.c
+src/cam_continuous_shot.c
+src/cam_rec.c
+src/cam_lbs.c
+src/cam_popup.c
+src/cam_long_press.c
+src/cam_face_detection_focus.c
+src/cam_ui_effect_utils.c
+src/cam_ui_rotate_utils.c
+src/cam_menu_composer.c
+src/cam_typeconverter.cpp
+src/cam_device_capacity.cpp
+src/CamTypeConverter.cpp
+src/CamDeviceCapacity.cpp
+src/cam_voice_command.c
+src/edc-callback/cam_common_edc_callback.c
+src/edc-callback/cam_toolbar_edc_callback.c
+src/edc-callback/cam_indicator_edc_callback.c
+src/edc-callback/cam_ev_edc_callback.c
+src/edc-callback/cam_zoom_edc_callback.c
+src/edc-callback/cam_recording_edc_callback.c
+)
+endif()
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include
+${CMAKE_CURRENT_SOURCE_DIR}/include/edc-callback )
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ elementary
+ devman
+ capi-appfw-application
+ capi-content-media-content
+ capi-location-manager
+ capi-media-camera
+ capi-media-image-util
+ capi-media-recorder
+ capi-media-sound-manager
+ capi-media-wav-player
+ capi-system-power
+ vconf
+ dlog
+ ui-gadget-1
+ utilX
+ ecore-x ecore ecore-evas ecore-input eina
+ syspopup-caller
+ capi-system-sensor
+)
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -fPIC")
+SET(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS})
+
+SET(CAMERA_UG_PACKAGE_NAME "ug-camera-efl")
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "/opt/usr/ug/data/${CAMERA_UG_PACKAGE_NAME}")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(EDJDIR "${RESDIR}/edje/${CAMERA_UG_PACKAGE_NAME}")
+SET(SOUNDDIR "${RESDIR}/sounds/${CAMERA_UG_PACKAGE_NAME}")
+SET(ICONDIR "${RESDIR}/icons/${CAMERA_UG_PACKAGE_NAME}")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+ADD_DEFINITIONS("-DSLP_DEBUG")
+
+if(NOT "${CMAKE_SYSTEM_VERSION}" MATCHES "^arm.*")
+add_definitions(-DCAMERA_MACHINE_I686="${CMAKE_SYSTEM_VERSION}")
+endif()
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
+
+if("${CMAKE_SYSTEM_VERSION}" MATCHES "^arm.*")
+#TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${${PROJECT_NAME}_pkgs_LDFLAGS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${EXTPkgs_LDFLAGS} "-fpie")
+else()
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+endif()
+
+###################################### EDC, Begin ################################
+SET(EDC_DIR ${CMAKE_SOURCE_DIR}/edc)
+SET(IMAGE_DIR ${CMAKE_SOURCE_DIR}/images/edc_images)
+
+SET(EDC_FILES
+cam_main_layout
+cam_toolbar_layout
+cam_toolbar_layout_inverse
+cam_toolbar_layout_vertical
+cam_toolbar_layout_vertical_inverse
+cam_recording_edje
+cam_recording_edje_inverse
+cam_recording_edje_vertical
+cam_recording_edje_vertical_inverse
+style_ctxpopup_camera_with_radio
+style_slider_camera
+style_label_camera
+style_button_camera
+cam_indicator_layout
+cam_utils
+cam_ev_layout
+cam_ev_layout_inverse
+cam_ev_layout_vertical
+cam_ev_layout_vertical_inverse
+cam_zoom_layout
+cam_zoom_layout_inverse
+cam_zoom_layout_vertical
+cam_zoom_layout_vertical_inverse
+cam_ctxpopup_shortcuts
+cam_setting_popup_layout
+cam_images
+)
+
+FOREACH(file_name ${EDC_FILES})
+ ADD_CUSTOM_TARGET(${file_name}.edj
+ COMMAND edje_cc -id ${IMAGE_DIR}
+ ${EDC_DIR}/${file_name}.edc ${EDC_DIR}/${file_name}.edj
+ DEPENDS ${EDC_DIR}/${file_name}.edc
+ )
+ ADD_DEPENDENCIES(${PROJECT_NAME} ${file_name}.edj)
+ INSTALL(FILES ${EDC_DIR}/${file_name}.edj DESTINATION ${EDJDIR})
+ENDFOREACH(file_name)
+###################################### EDC, end ################################
+
+# install library
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/ug/lib)
+
+# install sound & image files
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/ug-camera-efl.xml DESTINATION /usr/share/packages/)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/ug-camera-efl.png DESTINATION ${ICONDIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/sounds DESTINATION ${SOUNDDIR})
+
+# install .camera.ini file
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/.camera.ini DESTINATION ${DATADIR})
+
+# i18n
+ADD_SUBDIRECTORY(po)
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100644
index 0000000..cc8727b
--- /dev/null
+++ b/LICENSE.Flora
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies with the standards set forth in the Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work solely as incorporated into a Tizen Certified Platform, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work solely as incorporated into a Tizen Certified Platform to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Flora License, Version 1.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://floralicense.org/license/
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..1b25bce
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Flora License, Version 1.0.
+Please, see the LICENSE.Flora file for Flora License, Version 1.0 terms and conditions.
diff --git a/edc/cam_ctxpopup_shortcuts.edc b/edc/cam_ctxpopup_shortcuts.edc
new file mode 100755
index 0000000..ea06b17
--- /dev/null
+++ b/edc/cam_ctxpopup_shortcuts.edc
@@ -0,0 +1,1010 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_ctxpopup_shortcuts_inc.edc"
+
+#define SHORTCUTS_PANEL_WIDTH 720
+#define SHORTCUTS_PANEL_HEIGHT 900
+
+
+images {
+ image: SHOTCUTS_LINE_V_IMAGE COMP;
+ image: SHOTCUTS_EDIT_BG_H_IMAGE COMP;
+ image: SHOTCUTS_EDIT_MENU_BG_H_IMAGE COMP;
+ image: SHOTCUTS_LINE_H_IMAGE COMP;
+ image: SHOTCUTS_TEXT_BG_IMAGE COMP;
+}
+
+collections {
+ styles
+ {
+ style {
+ name: "cam_textblock_effect_default";
+ base: "font=SLP:style=Roman font_size=30 align=center color=#FFFFFF ellipise=1.0 wrap=mixed";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+ style {
+ name: "cam_textblock_effect_align_left";
+ base: "font=SLP:style=Roman font_size=30 color=#000000 ellipise=1.0 wrap=mixed";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+ style {
+ name: "cam_text_default";
+ base: "font=SLP:style=Roman font_size=30 align=center color=#FFFFFF ellipise=1.0 wrap=mixed";
+ tag: "br" " \n";
+ }
+ style {
+ name: "cam_text_left";
+ base: "font=SLP:style=Roman font_size=30 align=left color=#FFFFFF ellipise=1.0 wrap=mixed";
+ tag: "br" " \n";
+ }
+ }
+ group {
+ name: "camera/shortcuts/ele";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 180 200;
+ max: 180 200;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+ part {
+ name: "ele.bg.top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 0.0 0.0; to:"bg";}
+ rel2 { relative: 1.0 122/200; to:"bg";}
+ }
+ }
+ part {
+ name: "ele.bg.bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 0.0 100/200; to:"bg";}
+ rel2 { relative: 1.0 1.0; to:"bg";}
+ }
+ }
+ part {
+ name: "ele.icon";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 86 86;
+ max: 86 86;
+ align: 0.5 0.5;
+ aspect: 1.0 1.0;
+ rel1 { relative: 14/180 0.0; to:"ele.bg.top";}
+ rel2 { relative: (1-14/180) 1.0; to:"ele.bg.top";}
+ }
+ }
+ part {
+ name: "ele.txt";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.05 0.05; to:"ele.bg.bottom";}
+ rel2 { relative: 0.95 0.80; to:"ele.bg.bottom";}
+ text {
+ style: cam_textblock_effect_default;
+ min: 0 0;
+ }
+ }
+ }
+ part {
+ name: "ele.bg.bottom.pad";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.0;
+ min: 0 4;
+ rel1 { relative: 1.0 1.0; to:"ele.txt";}
+ }
+ }
+ }
+ }
+
+ #define SHORTCUST_LAYOUT_WIDTH 720
+ #define SHORTCUST_LAYOUT_HEIGHT 1000
+
+ group {
+ name : "camera/shortcuts/layout/description";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+// scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 720 120;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+
+ part {
+ name: "bg.content.img";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "bg";}
+ rel2 { relative: 1.0 1.0; to: "bg";}
+ image{
+ normal: SHOTCUTS_TEXT_BG_IMAGE ;
+ }
+ }
+ }
+ part {
+ name: "description.txtblock";
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 80/720 30/120; to: "bg.content.img";}
+ rel2 { relative: 640/720 100/120; to: "bg.content.img";}
+ align: 0.0 0.0;
+ text {
+ style: cam_textblock_effect_default;
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ }
+ }//end parts
+ }
+
+ group {
+ name:"camera/shortcuts/layout";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+// scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: SHORTCUST_LAYOUT_WIDTH SHORTCUST_LAYOUT_HEIGHT;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+
+ part {
+ name: "bg.content.img";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "bg";}
+ rel2 { relative: 1.0 1.0; to: "bg";}
+ image{
+ normal: SHOTCUTS_EDIT_BG_H_IMAGE ;
+ }
+ }
+ }
+
+ part {
+ name: "bg.content.shortcuts";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 0.0 0.0; to: "bg";}
+ rel2 { relative: 1.0 1.0; to: "bg";}
+ }
+ }
+
+ part {
+ name: "line_h.1.padding.top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 200;
+ visible: 0;
+ rel1 { relative: 0.0 0.0; to: "bg.content.shortcuts";}
+ rel2 { relative: 1.0 0.0; to: "bg.content.shortcuts";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_h.1";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 4;
+ visible: 1;
+ rel1 { relative: 0.0 1.0; to: "line_h.1.padding.top";}
+ rel2 { relative: 1.0 1.0; to: "line_h.1.padding.top";}
+ align: 0.0 0.0;
+ image{
+ normal: SHOTCUTS_LINE_H_IMAGE ;
+ }
+ }
+ }
+
+ part {
+ name: "line_h.2.padding.top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 200;
+ visible: 0;
+ rel1 { relative: 0.0 1.0; to: "line_h.1";}
+ rel2 { relative: 1.0 1.0; to: "line_h.1";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_h.2";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 4;
+ visible: 1;
+ rel1 { relative: 0.0 1.0; to: "line_h.2.padding.top";}
+ rel2 { relative: 1.0 1.0; to: "line_h.2.padding.top";}
+ image{
+ normal: SHOTCUTS_LINE_H_IMAGE ;
+ }
+ align: 0.0 0.0;
+ }
+ }
+
+ part {
+ name: "line_h.3.padding.top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 200;
+ visible: 0;
+ rel1 { relative: 0.0 1.0; to: "line_h.2";}
+ rel2 { relative: 1.0 1.0; to: "line_h.2";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_h.3";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 4;
+ visible: 1;
+ rel1 { relative: 0.0 1.0; to: "line_h.3.padding.top";}
+ rel2 { relative: 1.0 1.0; to: "line_h.3.padding.top";}
+ align: 0.0 0.0;
+ image{
+ normal: SHOTCUTS_LINE_H_IMAGE ;
+ }
+ }
+ }
+
+ part {
+ name: "line_h.4.padding.top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 200;
+ visible: 0;
+ rel1 { relative: 0.0 1.0; to: "line_h.3";}
+ rel2 { relative: 1.0 1.0; to: "line_h.3";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_h.4";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 4;
+ visible: 1;
+ rel1 { relative: 0.0 1.0; to: "line_h.4.padding.top";}
+ rel2 { relative: 1.0 1.0; to: "line_h.4.padding.top";}
+ align: 0.0 0.0;
+ image{
+ normal: SHOTCUTS_LINE_H_IMAGE ;
+ }
+ }
+ }
+
+ part {
+ name: "line_h.5.padding.top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 720 200;
+ visible: 0;
+ rel1 { relative: 0.0 1.0; to: "line_h.4";}
+ rel2 { relative: 1.0 1.0; to: "line_h.4";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_v.1.padding.left";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 180 1000;
+ visible: 0;
+ rel1 { relative: 0.0 0.0; to:"bg.content.shortcuts";}
+ rel2 { relative: 0.0 1.0; to:"bg.content.shortcuts";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_v.1";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 4 1000;
+ visible: 1;
+ rel1 { relative: 1.0 0.0; to:"line_v.1.padding.left";}
+ rel2 { relative: 1.0 1.0; to:"line_v.1.padding.left";}
+ image{
+ normal: SHOTCUTS_LINE_V_IMAGE ;
+ }
+ align: 0.0 0.0;
+ }
+ }
+
+ part {
+ name: "line_v.2.padding.left";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 180 1000;
+ visible: 0;
+ rel1 { relative: 1.0 0.0; to:"line_v.1";}
+ rel2 { relative: 1.0 1.0; to:"line_v.1";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_v.2";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 4 1000;
+ rel1 { relative: 1.0 0.0; to:"line_v.2.padding.left";}
+ rel2 { relative: 1.0 1.0; to:"line_v.2.padding.left";}
+ image{
+ normal: SHOTCUTS_LINE_V_IMAGE ;
+ }
+ align: 0.0 0.0;
+ }
+ }
+
+ part {
+ name: "line_v.3.padding.left";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 180 1000;
+ visible: 0;
+ rel1 { relative: 1.0 0.0; to:"line_v.2";}
+ rel2 { relative: 1.0 1.0; to:"line_v.2";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "line_v.3";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 4 1000;
+ rel1 { relative: 1.0 0.0; to:"line_v.3.padding.left";}
+ rel2 { relative: 1.0 1.0; to:"line_v.3.padding.left";}
+ image{
+ normal: SHOTCUTS_LINE_V_IMAGE ;
+ }
+ align: 0.0 0.0;
+ }
+ }
+
+ part {
+ name: "line_v.4.padding.left";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 180 1000;
+ visible: 0;
+ rel1 { relative: 1.0 0.0; to:"line_v.3";}
+ rel2 { relative: 1.0 1.0; to:"line_v.3";}
+ align: 0.0 0.0;
+ color: 0 0 0 255;
+ }
+ }
+
+ SHORTCUTS_ITEM_BG(0,1,1);
+ SHORTCUTS_ITEM_BG(1,1,2);
+ SHORTCUTS_ITEM_BG(2,1,3);
+ SHORTCUTS_ITEM_BG(3,1,4);
+
+ SHORTCUTS_ITEM_BG(4,2,1);
+ SHORTCUTS_ITEM_BG(5,2,2);
+ SHORTCUTS_ITEM_BG(6,2,3);
+ SHORTCUTS_ITEM_BG(7,2,4);
+
+ SHORTCUTS_ITEM_BG(8,3,1);
+ SHORTCUTS_ITEM_BG(9,3,2);
+ SHORTCUTS_ITEM_BG(10,3,3);
+ SHORTCUTS_ITEM_BG(11,3,4);
+
+ SHORTCUTS_ITEM_BG(12,4,1);
+ SHORTCUTS_ITEM_BG(13,4,2);
+ SHORTCUTS_ITEM_BG(14,4,3);
+ SHORTCUTS_ITEM_BG(15,4,4);
+
+ SHORTCUTS_ITEM_BG(16,5,1);
+ SHORTCUTS_ITEM_BG(17,5,2);
+ SHORTCUTS_ITEM_BG(18,5,3);
+ SHORTCUTS_ITEM_BG(19,5,4);
+
+
+ SHORTCUTS_MENU_H("0", "menu.0.bg", "menu.0.bg", "menu.1.bg")
+ SHORTCUTS_MENU_H("1", "menu.0.bg", "menu.1.bg", "menu.2.bg")
+ SHORTCUTS_MENU_H("2", "menu.1.bg", "menu.2.bg", "menu.3.bg")
+ SHORTCUTS_MENU_H("3", "menu.2.bg", "menu.3.bg", "menu.4.bg")
+
+ SHORTCUTS_MENU_H("4", "menu.3.bg", "menu.4.bg", "menu.5.bg")
+ SHORTCUTS_MENU_H("5", "menu.4.bg", "menu.5.bg", "menu.6.bg")
+ SHORTCUTS_MENU_H("6", "menu.5.bg", "menu.6.bg", "menu.7.bg")
+ SHORTCUTS_MENU_H("7", "menu.6.bg", "menu.7.bg", "menu.8.bg")
+
+ SHORTCUTS_MENU_H("8", "menu.7.bg", "menu.8.bg", "menu.9.bg")
+ SHORTCUTS_MENU_H("9", "menu.8.bg", "menu.9.bg", "menu.10.bg")
+ SHORTCUTS_MENU_H("10", "menu.9.bg", "menu.10.bg", "menu.11.bg")
+ SHORTCUTS_MENU_H("11", "menu.10.bg", "menu.11.bg", "menu.12.bg")
+
+ SHORTCUTS_MENU_H("12", "menu.11.bg", "menu.12.bg", "menu.13.bg")
+ SHORTCUTS_MENU_H("13", "menu.12.bg", "menu.13.bg", "menu.14.bg")
+ SHORTCUTS_MENU_H("14", "menu.13.bg", "menu.14.bg", "menu.15.bg")
+ SHORTCUTS_MENU_H("15", "menu.14.bg", "menu.15.bg", "menu.16.bg")
+
+ SHORTCUTS_MENU_H("16", "menu.15.bg", "menu.16.bg", "menu.17.bg")
+ SHORTCUTS_MENU_H("17", "menu.16.bg", "menu.17.bg", "menu.18.bg")
+ SHORTCUTS_MENU_H("18", "menu.17.bg", "menu.18.bg", "menu.19.bg")
+ SHORTCUTS_MENU_H("19", "menu.18.bg", "menu.19.bg", "menu.19.bg")
+
+ }
+ programs {
+ SHORTCUTS_MENU_PROGRAM(0)
+ SHORTCUTS_MENU_PROGRAM(1)
+ SHORTCUTS_MENU_PROGRAM(2)
+ SHORTCUTS_MENU_PROGRAM(3)
+
+ SHORTCUTS_MENU_PROGRAM(4)
+ SHORTCUTS_MENU_PROGRAM(5)
+ SHORTCUTS_MENU_PROGRAM(6)
+ SHORTCUTS_MENU_PROGRAM(7)
+
+ SHORTCUTS_MENU_PROGRAM(8)
+ SHORTCUTS_MENU_PROGRAM(9)
+ SHORTCUTS_MENU_PROGRAM(10)
+ SHORTCUTS_MENU_PROGRAM(11)
+
+ SHORTCUTS_MENU_PROGRAM(12)
+ SHORTCUTS_MENU_PROGRAM(13)
+ SHORTCUTS_MENU_PROGRAM(14)
+ SHORTCUTS_MENU_PROGRAM(15)
+
+ SHORTCUTS_MENU_PROGRAM(16)
+ SHORTCUTS_MENU_PROGRAM(17)
+ SHORTCUTS_MENU_PROGRAM(18)
+ SHORTCUTS_MENU_PROGRAM(19)
+
+ }
+ }
+
+/*NOTE: shortcuts popup tip define*/
+/**
+* width:10(left_pading) + 16 + 306(help image width) +16 + 16 + 10(right padding)
+* width = 10 + 16 + 306 + 16 + 306 + 16 + 10 = 680
+* height = 10 + 64 + 22 + 240 + 22 + 60 + 22 + 96 + 10 = 546
+*/
+
+ group {
+ name: "camera/shortcuts/help/check/layout";
+ parts {
+ part {
+ name: "check.swallow";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 42 42;
+ max: 42 42;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ }
+ }
+
+ part {
+ name: "check.txt";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 120 42;
+ max: 120 42;
+ fixed: 1 0;
+ align: 0 0.5;
+ rel1 { relative: 1.0 0.0; to: "check.swallow";}
+ rel2 { relative: 1.0 1.0;}
+ text {
+ font: FONT_NAME;
+ size: 30;
+ align: 0.0 0.5;
+ min: 1 1;
+ text: "Don't ask again";
+ }
+ }
+ }//part
+ }//parts
+
+ }
+
+ group {
+ name: "camera/shortcuts/help";
+ min: 680 546;
+ max: 680 546;
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 680 546;
+ max: 680 546;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 255 255 255 255;
+ }
+ }
+ CAM_SHORTCUTS_HELP_PART_PADDING_TOP(10)
+ CAM_SHORTCUTS_HELP_PART_PADDING_BOTTOM(10)
+ CAM_SHORTCUTS_HELP_PART_PADDING_LEFT(10)
+ CAM_SHORTCUTS_HELP_PART_PADDING_RIGHT(10)
+
+ part {
+ name: "tips";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 0 64;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 1.0 1.0; to_x: "elm.padding.left"; to_y: "elm.padding.top";}
+ rel2 { relative: 0.0 1.0; to_x: "elm.padding.right"; to_y: "elm.padding.top";}
+ color: 51 102 153 255;
+ /*color: 0 0 0 196;*/
+ }
+ }
+
+ part {
+ name: "tips.txt";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to: "tips";}
+ rel2 { relative: 1.0 1.0; to: "tips";}
+ text {
+ style: "cam_text_default";
+ min: 1 1;
+ }
+ }
+ }
+
+ part {
+ name: "button.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 96;
+ fixed: 0 1;
+ align: 1 1;
+ rel1 { relative: 1.0 0.0; to_x: "elm.padding.left"; to_y: "elm.padding.bottom";}
+ rel2 { relative: 0.0 0.0; to_x: "elm.padding.right"; to_y: "elm.padding.bottom";}
+ color: 255 255 255 64;
+ }
+ }
+
+ part {
+ name: "button.swallow";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.2 0.0; to: "button.bg";}
+ rel2 { relative: 0.8 0.8; to: "button.bg";}
+ color: 51 102 153 255;
+ }
+ }
+
+
+ part {
+ name: "content.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 1.0 1.0; to_x: "elm.padding.left"; to_y: "tips";}
+ rel2 { relative: 0.0 0.0; to_x: "elm.padding.right"; to_y: "button.bg";}
+ color: 0 0 0 64;
+ }
+ }
+ /*note: content:
+ * width: 16 + 306 + 16 + 306 + 16 = 660
+ * height: 22 + 60*4 + 22 + 60 + 22 = 366
+ */
+ part {
+ name: "content.help.image";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ rel1 { relative: 16/660 22/366; to: "content.bg";}
+ rel2 { relative: (16+306)/660 (22 + 240)/366; to: "content.bg";}
+ }
+ }
+ part {
+ name: "content.help.txt.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: (16+306)/660 22/366; to: "content.bg";}
+ rel2 { relative: (16+306+306)/660 (22 + 240)/366; to: "content.bg";}
+ color: 0 0 0 64;
+ }
+ }
+
+ part {
+ name: "content.help.check";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 16/660 (22 + 240 + 22)/366; to: "content.bg";}
+ rel2 { relative: (16+306+306)/660 (22 + 240 + 22 + 60)/366; to: "content.bg";}
+ color: 0 0 0 64;
+ }
+ }
+
+ part {
+ name: "content.help.check.swallow";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 1.0 0.5;
+ rel1 { relative: 0.25 0.0; to: "content.help.check";}
+ rel2 { relative: 0.40 1.0; to: "content.help.check";}
+ color: 0 0 0 64;
+ }
+ }
+
+ part {
+ name: "content.help.check.txt";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0.0 0.5;
+ rel1 { relative: 0.40 0.0; to: "content.help.check";}
+ rel2 { relative: 1.0 1.0; to: "content.help.check";}
+ text {
+ style: "cam_text_left";
+ min: 1 1;
+ }
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "content.help.txt.1.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 0.0 0.0; to: "content.help.txt.bg";}
+ rel2 { relative: 1.0 60/240; to: "content.help.txt.bg";}
+ color: 0 0 0 64;
+ }
+ }
+ part {
+ name: "content.help.txt.2.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 0.0 60/240; to: "content.help.txt.bg";}
+ rel2 { relative: 1.0 120/240; to: "content.help.txt.bg";}
+ color: 0 0 0 64;
+ }
+ }
+ part {
+ name: "content.help.txt.3.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 0.0 120/240; to: "content.help.txt.bg";}
+ rel2 { relative: 1.0 180/240; to: "content.help.txt.bg";}
+ color: 0 0 0 64;
+ }
+ }
+ part {
+ name: "content.help.txt.4.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 0.0 180/240; to: "content.help.txt.bg";}
+ rel2 { relative: 1.0 240/240; to: "content.help.txt.bg";}
+ color: 0 0 0 64;
+ }
+ }
+#if 1/*note: using textblock, block two lines parts*/
+ part {
+ name: "content.help.txtblock.bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1 1;
+ rel1 { relative: 0.0 0/240; to: "content.help.txt.bg";}
+ rel2 { relative: 1.0 180/240; to: "content.help.txt.bg";}
+ color: 0 0 0 64;
+ }
+ }
+ part {
+ name: "content.help.txtblock";
+ type: TEXTBLOCK;
+ scale: 1;
+ multiline: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to: "content.help.txtblock.bg";}
+ rel2 { relative: 1.0 1.0; to: "content.help.txtblock.bg";}
+ text {
+ style: cam_textblock_effect_align_left;
+ align: 0.0 1.0;
+ min: 0 0;
+ max: 0 1;
+ //text: "Tap and hold <br><br>shortcuts <br><br>to edit them";
+ }
+ }
+ }
+
+#else
+ part {
+ name: "content.help.txt.1";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ rel1 { relative: 16/(306+16) 0.0; to: "content.help.txt.1.bg";}
+ rel2 { relative: 1.0 1.0; to: "content.help.txt.1.bg";}
+ text {
+ font: FONT_NAME;
+ size: 30;
+ align: 0.0 0.5;
+ min: 1 1;
+ text: "Tap and hold";
+ }
+ }
+ }
+ part {
+ name: "content.help.txt.2";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ rel1 { relative: 16/(306+16) 0.0; to: "content.help.txt.2.bg";}
+ rel2 { relative: 1.0 1.0; to: "content.help.txt.2.bg";}
+ text {
+ font: FONT_NAME;
+ size: 30;
+ align: 0.0 0.5;
+ min: 1 1;
+ text: "shortcuts";
+ }
+ }
+ }
+ part {
+ name: "content.help.txt.3";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ rel1 { relative: 16/(306+16) 0.0; to: "content.help.txt.3.bg";}
+ rel2 { relative: 1.0 1.0; to: "content.help.txt.3.bg";}
+ text {
+ font: FONT_NAME;
+ size: 30;
+ align: 0.0 0.5;
+ min: 1 1;
+ text: "to edit them";
+ }
+ }
+ }
+ part {
+ name: "content.help.txt.4";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ rel1 { relative: 16/(306+16) 0.0; to: "content.help.txt.4.bg";}
+ rel2 { relative: 1.0 1.0; to: "content.help.txt.4.bg";}
+ text {
+ font: FONT_NAME;
+ size: 30;
+ align: 0.0 0.5;
+ min: 1 1;
+ text: "";
+ }
+ }
+ }
+#endif
+
+ }//end parts
+ }//end group
+
+}//END connection
+//end file
diff --git a/edc/cam_ctxpopup_shortcuts_inc.edc b/edc/cam_ctxpopup_shortcuts_inc.edc
new file mode 100755
index 0000000..1e3837e
--- /dev/null
+++ b/edc/cam_ctxpopup_shortcuts_inc.edc
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "cam_funcs.edc"
+
+#define SHORTCUTS_PANEL_WIDTH 720
+#define SHORTCUTS_PANEL_HEIGHT 900
+
+#define SHORTCUTS_ITEM_BG(part_no,row,col) \
+ part {\
+ name: "menu."part_no".bg";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ description {\
+ state: "default" 0.0;\
+ visible: 0;\
+ rel1 {\
+ relative: 0.0 0.0;\
+ to_x: "line_v."col".padding.left";\
+ to_y: "line_h."row".padding.top";\
+ }\
+ rel2 {\
+ relative: 1.0 1.0;\
+ to_x: "line_v."col".padding.left";\
+ to_y: "line_h."row".padding.top";\
+ }\
+ color: 255 255 255 255;\
+ align: 0.0 0.0;\
+ }\
+ }
+
+#define SHORTCUTS_MENU_H(part_name, pre_to_part, to_part, next_to_part) \
+ part { \
+ name: "row."part_name; \
+ type: SWALLOW; \
+ scale: 1; \
+ mouse_events: 1; \
+ repeat_events: 0;\
+ description { \
+ state: "default" 0.0; \
+ visible: 1; \
+ align: 0.5 0.5; \
+ aspect: 1.0 1.0; \
+ rel1 { relative: 0.0 0.0; to:to_part;} \
+ rel2 { relative: 1.0 1.0; to:to_part;} \
+ } \
+ description { \
+ state: "prev" 0.0; \
+ inherit: "default" 0.0;\
+ rel1 { relative: 0.0 0.0; to:pre_to_part;} \
+ rel2 { relative: 1.0 1.0; to:pre_to_part;} \
+ } \
+ description { \
+ state: "next" 0.0; \
+ inherit: "default" 0.0;\
+ rel1 { relative: 0.0 0.0; to:next_to_part;} \
+ rel2 { relative: 1.0 1.0; to:next_to_part;} \
+ } \
+ }
+
+#define SHORTCUTS_MENU_PROGRAM(part_name) \
+ program { \
+ name: "row."part_name".prev"; \
+ signal: "move,prev"; \
+ source: "row."part_name; \
+ action: STATE_SET "prev" 0.0; \
+ target: "row."part_name; \
+ } \
+ program { \
+ name: "row."part_name".next"; \
+ signal: "move,next"; \
+ source: "row."part_name; \
+ action: STATE_SET "next" 0.0; \
+ target: "row."part_name; \
+ } \
+ program { \
+ name: "row."part_name".ani"; \
+ signal: "ani,return"; \
+ source: "row."part_name; \
+ action: STATE_SET "default" 0.0; \
+ target: "row."part_name; \
+ transition: DECELERATE 0.4; \
+ }
+
+
+/*note: for shotcuts popup tip*/
+
+#define CAM_SHORTCUTS_HELP_PART_PADDING_TOP( param_padding_size ) \
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2 {relative: 1.0 0.0; to: "bg";}\
+ align: 0.0 0.0; \
+ color: 0 0 0 64;\
+ } \
+ }
+
+
+#define CAM_SHORTCUTS_HELP_PART_PADDING_BOTTOM( param_padding_size ) \
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1 {relative: 0.0 1.0; to: "bg";}\
+ align: 0.0 1.0; \
+ color: 0 0 0 64;\
+ } \
+ }
+
+#define CAM_SHORTCUTS_HELP_PART_PADDING_LEFT( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2 {relative: 0.0 1.0; to: "bg";}\
+ align: 0.0 0.0; \
+ color: 0 0 0 64;\
+ } \
+ }
+
+#define CAM_SHORTCUTS_HELP_PART_PADDING_RIGHT( param_padding_size ) \
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1 {relative: 1.0 0.0; to: "bg";}\
+ align: 1.0 0.0; \
+ color: 0 0 0 64;\
+ } \
+ }
+
+//end file
+
diff --git a/edc/cam_ev_layout.edc b/edc/cam_ev_layout.edc
new file mode 100755
index 0000000..a0f951e
--- /dev/null
+++ b/edc/cam_ev_layout.edc
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define EV_BG_X 188
+#define EV_BG_Y 72
+#define EV_BG_W 116
+#define EV_BG_H 576
+
+#define EV_ICON_X 15
+#define EV_ICON_Y 14
+#define EV_ICON_W 86
+#define EV_ICON_H 86
+
+#define EV_SLIDE_X 0
+#define EV_SLIDE_Y 120
+
+
+images {
+ image: ZOOM_BG_IMAGE COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON COMP;
+}
+
+collections {
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_W MAIN_H;
+ max: MAIN_W MAIN_H;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_BG_X/MAIN_W EV_BG_Y/MAIN_H; to: "bg";}
+ rel2 { relative: (EV_BG_X+EV_BG_W)/MAIN_W (EV_BG_Y+EV_BG_H)/MAIN_H; to: "bg";}
+ image { normal: ZOOM_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "icon_minus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_ICON_X/EV_BG_W (EV_BG_H-EV_ICON_H-EV_ICON_Y)/EV_BG_H; to: "bg_image"; }
+ rel2 { relative: (EV_ICON_X+EV_ICON_W)/EV_BG_W (EV_BG_H-EV_ICON_Y)/EV_BG_H; to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "icon_plus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_ICON_X/EV_BG_W EV_ICON_Y/EV_BG_H; to: "bg_image"; }
+ rel2 { relative: (EV_ICON_X+EV_ICON_W)/EV_BG_W (EV_ICON_Y+EV_ICON_H)/EV_BG_H; to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 EV_SLIDE_Y/EV_BG_H; to: "bg_image"; }
+ rel2 { relative: 1.0 (EV_BG_H-EV_SLIDE_Y)/EV_BG_H; to: "bg_image"; }
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "icon_minus_press";
+ signal: "mouse,down,1";
+ source: "icon_minus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_release";
+ signal: "mouse,up,1";
+ source: "icon_minus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_minus";
+ action: SIGNAL_EMIT "icon_minus,clicked" "ev_icon_signal";
+ }
+ program {
+ name: "icon_plus_press";
+ signal: "mouse,down,1";
+ source: "icon_plus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_release";
+ signal: "mouse,up,1";
+ source: "icon_plus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_plus";
+ action: SIGNAL_EMIT "icon_plus,clicked" "ev_icon_signal";
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_ev_layout_inverse.edc b/edc/cam_ev_layout_inverse.edc
new file mode 100755
index 0000000..0796343
--- /dev/null
+++ b/edc/cam_ev_layout_inverse.edc
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define EV_BG_X 188
+#define EV_BG_Y 72
+#define EV_BG_W 116
+#define EV_BG_H 576
+
+#define EV_ICON_X 15
+#define EV_ICON_Y 14
+#define EV_ICON_W 86
+#define EV_ICON_H 86
+
+#define EV_SLIDE_X 0
+#define EV_SLIDE_Y 120
+
+
+images {
+ image: ZOOM_BG_IMAGE COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON COMP;
+}
+
+collections {
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_W MAIN_H;
+ max: MAIN_W MAIN_H;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (EV_BG_X+EV_BG_W)/MAIN_W) (1 - (EV_BG_Y+EV_BG_H)/MAIN_H); to: "bg";}
+ rel2 { relative: (1 - EV_BG_X/MAIN_W) (1 - EV_BG_Y/MAIN_H); to: "bg";}
+ image { normal: ZOOM_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "icon_minus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (EV_ICON_X+EV_ICON_W)/EV_BG_W) (1 - (EV_BG_H-EV_ICON_Y)/EV_BG_H); to: "bg_image"; }
+ rel2 { relative: (1 - EV_ICON_X/EV_BG_W) (1 - (EV_BG_H-EV_ICON_Y-EV_ICON_H)/EV_BG_H); to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "icon_plus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (EV_ICON_X+EV_ICON_W)/EV_BG_W) (1 - (EV_ICON_Y+EV_ICON_H)/EV_BG_H); to: "bg_image"; }
+ rel2 { relative: (1 - EV_ICON_X/EV_BG_W) (1 - EV_ICON_Y/EV_BG_H); to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 (1 - (EV_BG_H-EV_SLIDE_Y)/EV_BG_H); to: "bg_image"; }
+ rel2 { relative: 1.0 (1 - EV_SLIDE_Y/EV_BG_H); to: "bg_image"; }
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "icon_minus_press";
+ signal: "mouse,down,1";
+ source: "icon_minus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_release";
+ signal: "mouse,up,1";
+ source: "icon_minus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_minus";
+ action: SIGNAL_EMIT "icon_minus,clicked" "ev_icon_signal";
+ }
+ program {
+ name: "icon_plus_press";
+ signal: "mouse,down,1";
+ source: "icon_plus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_release";
+ signal: "mouse,up,1";
+ source: "icon_plus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_plus";
+ action: SIGNAL_EMIT "icon_plus,clicked" "ev_icon_signal";
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_ev_layout_vertical.edc b/edc/cam_ev_layout_vertical.edc
new file mode 100755
index 0000000..c7f83bc
--- /dev/null
+++ b/edc/cam_ev_layout_vertical.edc
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define EV_BG_X 188
+#define EV_BG_Y 72
+#define EV_BG_W 116
+#define EV_BG_H 576
+
+#define EV_ICON_X 15
+#define EV_ICON_Y 14
+#define EV_ICON_W 86
+#define EV_ICON_H 86
+
+#define EV_SLIDE_X 0
+#define EV_SLIDE_Y 120
+
+
+images {
+ image: ZOOM_BG_VER_IMAGE COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON COMP;
+}
+
+collections {
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_H MAIN_W;
+ max: MAIN_H MAIN_W;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (EV_BG_Y+EV_BG_H)/MAIN_H) EV_BG_X/MAIN_W; to: "bg";}
+ rel2 { relative: (1 - EV_BG_Y/MAIN_H) (EV_BG_X+EV_BG_W)/MAIN_W; to: "bg";}
+ image { normal: ZOOM_BG_VER_IMAGE; }
+ }
+ }
+ part {
+ name: "icon_minus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (EV_BG_H-EV_ICON_Y)/EV_BG_H) EV_ICON_X/EV_BG_W; to: "bg_image"; }
+ rel2 { relative: (1 - (EV_BG_H-EV_ICON_H-EV_ICON_Y)/EV_BG_H) (EV_ICON_X+EV_ICON_W)/EV_BG_W; to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "icon_plus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (EV_ICON_Y+EV_ICON_H)/EV_BG_H) EV_ICON_X/EV_BG_W; to: "bg_image"; }
+ rel2 { relative: (1 - EV_ICON_Y/EV_BG_H) (EV_ICON_X+EV_ICON_W)/EV_BG_W; to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_SLIDE_Y/EV_BG_H 0.0 ; to: "bg_image"; }
+ rel2 { relative: (1 - EV_SLIDE_Y/EV_BG_H) 1.0; to: "bg_image"; }
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "icon_minus_press";
+ signal: "mouse,down,1";
+ source: "icon_minus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_release";
+ signal: "mouse,up,1";
+ source: "icon_minus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_minus";
+ action: SIGNAL_EMIT "icon_minus,clicked" "ev_icon_signal";
+ }
+ program {
+ name: "icon_plus_press";
+ signal: "mouse,down,1";
+ source: "icon_plus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_release";
+ signal: "mouse,up,1";
+ source: "icon_plus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_plus";
+ action: SIGNAL_EMIT "icon_plus,clicked" "ev_icon_signal";
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_ev_layout_vertical_inverse.edc b/edc/cam_ev_layout_vertical_inverse.edc
new file mode 100755
index 0000000..59f8c66
--- /dev/null
+++ b/edc/cam_ev_layout_vertical_inverse.edc
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define EV_BG_X 188
+#define EV_BG_Y 72
+#define EV_BG_W 116
+#define EV_BG_H 576
+
+#define EV_ICON_X 15
+#define EV_ICON_Y 14
+#define EV_ICON_W 86
+#define EV_ICON_H 86
+
+#define EV_SLIDE_X 0
+#define EV_SLIDE_Y 120
+
+
+images {
+ image: ZOOM_BG_VER_IMAGE COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_ICON COMP;
+ image: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON COMP;
+}
+
+collections {
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_H MAIN_W;
+ max: MAIN_H MAIN_W;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_BG_Y/MAIN_H (1 - (EV_BG_X+EV_BG_W)/MAIN_W); offset: 0 0; to: "bg";}
+ rel2 { relative: (EV_BG_Y+EV_BG_H)/MAIN_H (1 - EV_BG_X/MAIN_W); offset: -1 -1; to: "bg";}
+ image { normal: ZOOM_BG_VER_IMAGE; }
+ }
+ }
+ part {
+ name: "icon_minus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (EV_BG_H-EV_ICON_H-EV_ICON_Y)/EV_BG_H (1 - (EV_ICON_X+EV_ICON_W)/EV_BG_W); to: "bg_image"; }
+ rel2 { relative: (EV_BG_H-EV_ICON_Y)/EV_BG_H (1 - EV_ICON_X/EV_BG_W); to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "icon_plus";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_ICON_Y/EV_BG_H (1 - (EV_ICON_X+EV_ICON_W)/EV_BG_W); to: "bg_image"; }
+ rel2 { relative: (EV_ICON_Y+EV_ICON_H)/EV_BG_H (1 - EV_ICON_X/EV_BG_W); to: "bg_image"; }
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_ICON; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON; }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: EV_SLIDE_Y/EV_BG_H 0.0; to: "bg_image"; }
+ rel2 { relative: (1 - EV_SLIDE_Y/EV_BG_H) 1.0; to: "bg_image"; }
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "icon_minus_press";
+ signal: "mouse,down,1";
+ source: "icon_minus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_release";
+ signal: "mouse,up,1";
+ source: "icon_minus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_minus";
+ }
+ program {
+ name: "icon_minus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_minus";
+ action: SIGNAL_EMIT "icon_minus,clicked" "ev_icon_signal";
+ }
+ program {
+ name: "icon_plus_press";
+ signal: "mouse,down,1";
+ source: "icon_plus";
+ action: STATE_SET "press" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_release";
+ signal: "mouse,up,1";
+ source: "icon_plus";
+ action: STATE_SET "default" 0.0;
+ target: "icon_plus";
+ }
+ program {
+ name: "icon_plus_clicked";
+ signal: "mouse,clicked,1";
+ source: "icon_plus";
+ action: SIGNAL_EMIT "icon_plus,clicked" "ev_icon_signal";
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_funcs.edc b/edc/cam_funcs.edc
new file mode 100644
index 0000000..0812635
--- /dev/null
+++ b/edc/cam_funcs.edc
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_string.h"
+
+// background
+#define BACKGROUND_IMAGE(part_name, x, y, w, h, img) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \
+ rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \
+ image { normal: img; } \
+ } \
+ }
+#define BACKGROUND_IMAGE_WITH_ALPHA(part_name, x, y, w, h, img, alpha) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \
+ rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \
+ image { normal: img; }\
+ color: 255 255 255 alpha; \
+ } \
+ }
+
+#define VER_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (x)/VER_MAIN_W (y)/VER_MAIN_H; } \
+ rel2 { relative: (x+w)/VER_MAIN_W (y+h)/VER_MAIN_H; } \
+ image { normal: img; } \
+ } \
+ }
+
+#define GENERAL_BUTTON(part_name, x, y, w, h, img_dim, img, img_p, img_s) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ mouse_events: 1;\
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \
+ rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \
+ image { normal: img; } \
+ } \
+ description { \
+ state: "press" 0.0; \
+ inherit: "default" 0.0; \
+ image { normal: img_p; }\
+ } \
+ description { \
+ state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image { normal: img_s; }\
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ image { normal: img_dim;} \
+ } \
+ description { \
+ state: "invisible" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define VER_GENERAL_BUTTON(part_name, x, y, w, h, img_dim, img, img_p, img_s) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ mouse_events: 1;\
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (x)/VER_MAIN_W (y)/VER_MAIN_H; } \
+ rel2 { relative: (x+w)/VER_MAIN_W (y+h)/VER_MAIN_H; } \
+ image { normal: img; } \
+ } \
+ description { \
+ state: "press" 0.0; \
+ inherit: "default" 0.0; \
+ image { normal: img_p; }\
+ } \
+ description { \
+ state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image { normal: img_s; }\
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ image { normal: img_dim;} \
+ } \
+ description { \
+ state: "invisible" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define GENERAL_BUTTON_PROGRAMS(part_name, signal_name, source_name) \
+ program { \
+ name: "lbutton_down_"part_name; \
+ signal: "mouse,down,1"; \
+ source: part_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:part_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ { \
+ set_state(PART:part_name, "press", 0.0);\
+ emit( HAPTIC_SIG, HAPTIC_SIG_SRC );\
+ } \
+ }\
+ } \
+ program { \
+ name: "lbutton_send_event_"part_name; \
+ signal: "mouse,clicked,1"; \
+ source: part_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:part_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ emit( signal_name, source_name );\
+ }\
+ } \
+ program { \
+ name: "lbutton_up_"part_name; \
+ signal: "mouse,up,1"; \
+ source: part_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:part_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ set_state(PART:part_name, "default", 0.0);\
+ }\
+ }
+
diff --git a/edc/cam_guideline_edje.edc b/edc/cam_guideline_edje.edc
new file mode 100644
index 0000000..8a31bae
--- /dev/null
+++ b/edc/cam_guideline_edje.edc
@@ -0,0 +1,453 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+images {
+ image: GUDIE_LINE_1_IMAGE COMP;
+ image: GUDIE_LINE_2_IMAGE COMP;
+ image: GUDIE_OPA_LINE_1_IMAGE COMP;
+ image: GUDIE_OPA_LINE_2_IMAGE COMP;
+}
+
+#define GUIDE_LINE_H1 238
+#define GUIDE_LINE_H2 238
+#define GUIDE_LINE_H3 238
+
+#define GUIDE_LINE_W1 425
+#define GUIDE_LINE_W2 424
+#define GUIDE_LINE_W3 425
+
+#define VER_GUIDE_LINE_H1 425
+#define VER_GUIDE_LINE_H2 424
+#define VER_GUIDE_LINE_H3 425
+
+#define VER_GUIDE_LINE_W1 238
+#define VER_GUIDE_LINE_W2 238
+#define VER_GUIDE_LINE_W3 238
+
+
+#define GUIDE_LINE_GAP 3
+
+group {
+ name: "guideline";
+ /**min: MAIN_W MAIN_H;*/
+
+ parts{
+ /*outline*/
+ part {
+ name: "guide_line1_outline1_1";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_W1 - 1)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_W1)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_1_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+
+ part {
+ name: "guide_line1";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: GUIDE_LINE_W1/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_default" 0.0;
+ rel1 { relative: VER_GUIDE_LINE_W1/VER_MAIN_W 0.125; }
+ rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP)/VER_MAIN_W 0.875; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_wide" 0.0;
+ rel1 { relative: VER_GUIDE_LINE_W1/VER_MAIN_W 0.0; }
+ rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP)/VER_MAIN_W 1.0; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_square" 0.0;
+ rel1 { relative: VER_GUIDE_LINE_W1/VER_MAIN_W ((VER_MAIN_H-VER_MAIN_W)/2)/VER_MAIN_H; }
+ rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP)/VER_MAIN_W ((VER_MAIN_H-VER_MAIN_W)/2+VER_MAIN_W)/VER_MAIN_H; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+
+ }
+ /*outline*/
+ part {
+ name: "guide_line1_outline1_2";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + 1)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_1_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+ /*outline*/
+
+ part {
+ name: "guide_line2_outline2_1";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + GUIDE_LINE_W2 - 1)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + GUIDE_LINE_W2)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_1_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+
+ part {
+ name: "guide_line2";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + GUIDE_LINE_W2)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + GUIDE_LINE_W2 + GUIDE_LINE_GAP)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_default" 0.0;
+ rel1 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2)/VER_MAIN_W 0.125; }
+ rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2 + GUIDE_LINE_GAP)/VER_MAIN_W 0.875; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_wide" 0.0;
+ rel1 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2)/VER_MAIN_W 0.0; }
+ rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2 + GUIDE_LINE_GAP)/VER_MAIN_W 1.0; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_square" 0.0;
+ rel1 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2)/VER_MAIN_W ((VER_MAIN_H-VER_MAIN_W)/2)/VER_MAIN_H; }
+ rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2 + GUIDE_LINE_GAP)/VER_MAIN_W ((VER_MAIN_H-VER_MAIN_W)/2+VER_MAIN_W)/VER_MAIN_H; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+
+ }
+ /*outline*/
+ part {
+ name: "guide_line2_outline2_2";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + GUIDE_LINE_W2 + GUIDE_LINE_GAP)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_W1 + GUIDE_LINE_GAP + GUIDE_LINE_W2 + GUIDE_LINE_GAP + 1)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_1_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+ /*outline*/
+ part {
+ name: "guide_line3_outline3_1";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_H1 - 1)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_H1)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_2_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+
+ part {
+ name: "guide_line3";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.125 GUIDE_LINE_H1/MAIN_H; }
+ rel2 { relative: 0.875 (GUIDE_LINE_H1 + GUIDE_LINE_GAP)/MAIN_H; }
+ image{
+ normal: GUDIE_LINE_2_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "wide" 0.0;
+ rel1 { relative: 0.0 GUIDE_LINE_H1/MAIN_H; }
+ rel2 { relative: 1.0 (GUIDE_LINE_H1 + GUIDE_LINE_GAP)/MAIN_H; }
+ image{
+ normal: GUDIE_LINE_2_IMAGE ;
+ }
+ }
+ description {
+ state: "square" 0.0;
+ rel1 { relative: ((MAIN_W-MAIN_H)/2)/MAIN_W GUIDE_LINE_H1/MAIN_H; }
+ rel2 { relative: (((MAIN_W-MAIN_H)/2+MAIN_H))/MAIN_W (GUIDE_LINE_H1 + GUIDE_LINE_GAP)/MAIN_H; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "ver_default" 0.0;
+ rel1 { relative: 0.0 VER_GUIDE_LINE_H1/VER_MAIN_H; }
+ rel2 { relative: 1.0 (VER_GUIDE_LINE_H1 + GUIDE_LINE_GAP)/VER_MAIN_H; }
+ image{
+ normal: GUDIE_LINE_2_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ }
+ /*outline*/
+ part {
+ name: "guide_line3_outline3_2";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_H1 + GUIDE_LINE_GAP)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_H1 + GUIDE_LINE_GAP + 1)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_2_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+
+ /*outline*/
+ part {
+ name: "guide_line4_outline4_1";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2 - 1)/MAIN_W 0.0; }
+ rel2 { relative: (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_2_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+
+ part {
+ name: "guide_line4";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.125 (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2)/MAIN_H; }
+ rel2 { relative: 0.875 (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2 + GUIDE_LINE_GAP)/MAIN_H; }
+ image{
+ normal: GUDIE_LINE_2_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "square" 0.0;
+ rel1 { relative: ((MAIN_W-MAIN_H)/2)/MAIN_W (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2)/MAIN_H; }
+ rel2 { relative: (((MAIN_W-MAIN_H)/2+MAIN_H))/MAIN_W (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2 + GUIDE_LINE_GAP)/MAIN_H; }
+ image{
+ normal: GUDIE_LINE_1_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "wide" 0.0;
+ rel1 { relative: 0.0 (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2)/MAIN_H; }
+ rel2 { relative: 1.0 (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2 + GUIDE_LINE_GAP)/MAIN_H; }
+ image{
+ normal: GUDIE_LINE_2_IMAGE ;
+ }
+ }
+ description {
+ state: "ver_default" 0.0;
+ rel1 { relative: 0.0 (VER_GUIDE_LINE_H1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_H2)/VER_MAIN_H; }
+ rel2 { relative: 1.0 (VER_GUIDE_LINE_H1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_H2 + GUIDE_LINE_GAP)/VER_MAIN_H; }
+ image{
+ normal: GUDIE_LINE_2_IMAGE ;
+ }
+ color: 255 255 255 255;
+ }
+
+ }
+ /*outline*/
+ part {
+ name: "guide_line4_outline4_2";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (VER_GUIDE_LINE_H1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_H2 + GUIDE_LINE_GAP)/MAIN_W 0.0; }
+ rel2 { relative: (VER_GUIDE_LINE_H1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_H2 + GUIDE_LINE_GAP + 1)/MAIN_W 1.0; }
+ image{
+ normal: GUDIE_OPA_LINE_2_IMAGE ;
+ }
+ color: 0 0 0 25;
+ }
+ }
+
+
+ }/*end parts*/
+
+ programs{
+
+ /*line1 line2*/
+ program {
+ name: "prog_guideline12_set_normal";
+ source: "prog_guideline";
+ signal: "guide_line,1,2,normal";
+ script: {
+ set_state(PART:"guide_line1", "default", 0.0);
+ set_state(PART:"guide_line2", "default", 0.0);
+
+ }
+ }
+
+ program {
+ name:"prog_guideline12_set_wide_ver";
+ source: "prog_guideline";
+ signal: "guide_line,1,2,vertical,wide";
+ script: {
+ set_state(PART:"guide_line1", "ver_wide", 0.0);
+ set_state(PART:"guide_line2", "ver_wide", 0.0);
+ }
+ }
+
+ program {
+ name: "prog_guideline12_set_normal_ver";
+ source: "prog_guideline";
+ signal: "guide_line,1,2,vertical,normal";
+ script: {
+ set_state(PART:"guide_line1", "ver_default", 0.0);
+ set_state(PART:"guide_line2", "ver_default", 0.0);
+
+ }
+ }
+
+ program {
+ name: "prog_guideline12_set_square_ver";
+ source: "prog_guideline";
+ signal: "guide_line,1,2,vertical,square";
+ script: {
+ set_state(PART:"guide_line1", "ver_square", 0.0);
+ set_state(PART:"guide_line2", "ver_square", 0.0);
+
+ }
+ }
+
+ /*line3 line4 */
+ program {
+ name:"prog_guideline34_set_wide";
+ source: "prog_guideline";
+ signal: "guide_line,3,4,wide";
+ script: {
+ set_state(PART:"guide_line3", "wide", 0.0);
+ set_state(PART:"guide_line4", "wide", 0.0);
+ }
+ }
+
+ program {
+ name: "prog_guideline34_set_normal";
+ source: "prog_guideline";
+ signal: "guide_line,3,4,normal";
+ script: {
+ set_state(PART:"guide_line3", "default", 0.0);
+ set_state(PART:"guide_line4", "default", 0.0);
+
+ }
+ }
+
+ program {
+ name: "prog_guideline34_set_square";
+ source: "prog_guideline";
+ signal: "guide_line,3,4,square";
+ script: {
+ set_state(PART:"guide_line3", "square", 0.0);
+ set_state(PART:"guide_line4", "square", 0.0);
+
+ }
+ }
+
+ program {
+ name: "prog_guideline34_set_normal_ver";
+ source: "prog_guideline";
+ signal: "guide_line,3,4,vertical,normal";
+ script: {
+ set_state(PART:"guide_line3", "ver_default", 0.0);
+ set_state(PART:"guide_line4", "ver_default", 0.0);
+
+ }
+ }
+
+
+
+ }/*end programs*/
+
+
+}/*end group*/
+
+
diff --git a/edc/cam_images.edc b/edc/cam_images.edc
new file mode 100755
index 0000000..9c90139
--- /dev/null
+++ b/edc/cam_images.edc
@@ -0,0 +1,332 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "../include/edc_image_name.h"
+
+
+#define RESOURCE_IMAGE( FILE_NAME ) \
+ group { \
+ name: FILE_NAME; \
+ images.image: FILE_NAME COMP; \
+ parts { \
+ part { name: "image"; \
+ description { \
+ state: "default" 0.0; \
+ image.normal: FILE_NAME; \
+ aspect: 1 1; \
+ aspect_preference: BOTH; \
+ } \
+ } \
+ } \
+ }
+
+#define RESOURCE_IMAGE_LOSSY( FILE_NAME ) \
+ group { \
+ name: FILE_NAME; \
+ images.image: FILE_NAME LOSSY 85; \
+ parts { \
+ part { name: "image"; \
+ description { \
+ state: "default" 0.0; \
+ image.normal: FILE_NAME; \
+ aspect: 1 1; \
+ aspect_preference: BOTH; \
+ } \
+ } \
+ } \
+ }
+
+
+collections {
+/* Burst shot */
+RESOURCE_IMAGE(BURST_SHOT_MODE_ON_NORMAL_ICON);
+RESOURCE_IMAGE(BURST_SHOT_MODE_ON_PRESS_ICON);
+RESOURCE_IMAGE(BURST_SHOT_MODE_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(BURST_SHOT_MODE_OFF_PRESS_ICON);
+
+/* Self portrait */
+RESOURCE_IMAGE(CAMERA_SELF_PORTRAIT_NORMAL_ICON);
+RESOURCE_IMAGE(CAMERA_SELF_PORTRAIT_PRESS_ICON);
+RESOURCE_IMAGE(CAMCORDER_SELF_PORTRAIT_NORMAL_ICON);
+RESOURCE_IMAGE(CAMCORDER_SELF_PORTRAIT_PRESS_ICON);
+
+/* Flash */
+RESOURCE_IMAGE(FLASH_AUTO_NORMAL_ICON);
+RESOURCE_IMAGE(FLASH_AUTO_PRESS_ICON);
+RESOURCE_IMAGE(FLASH_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(FLASH_OFF_PRESS_ICON);
+RESOURCE_IMAGE(FLASH_ON_NORMAL_ICON);
+RESOURCE_IMAGE(FLASH_ON_PRESS_ICON);
+
+/* Shooting mode */
+RESOURCE_IMAGE(SHOOTING_MODE_SINGLE_NORMAL_ICON);
+RESOURCE_IMAGE(SHOOTING_MODE_SINGLE_PRESS_ICON);
+
+/* Recording mode */
+RESOURCE_IMAGE(RECORDING_MODE_NORMAL_NORMAL_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_NORMAL_PRESS_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_LIMIT_MMS_NORMAL_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_LIMIT_MMS_PRESS_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_SLOW_MOTION_NORMAL_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_SLOW_MOTION_PRESS_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_FAST_MOTION_NORMAL_ICON);
+RESOURCE_IMAGE(RECORDING_MODE_FAST_MOTION_PRESS_ICON);
+
+/* Scene mode */
+RESOURCE_IMAGE(SCENE_MODE_AUTO_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_AUTO_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_PORTRAIT_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_PORTRAIT_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_LANDSCAPE_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_LANDSCAPE_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_NIGHT_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_NIGHT_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_SPORTS_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_SPORTS_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_PARTY_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_PARTY_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_BEACHSNOW_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_BEACHSNOW_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_SUNSET_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_SUNSET_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_DUSKDAWN_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_DUSKDAWN_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_FALL_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_FALL_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_FIREWORK_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_FIREWORK_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_TEXT_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_TEXT_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_CANDLELIGHT_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_CANDLELIGHT_PRESS_ICON);
+RESOURCE_IMAGE(SCENE_MODE_BACKLIGHT_NORMAL_ICON);
+RESOURCE_IMAGE(SCENE_MODE_BACKLIGHT_PRESS_ICON);
+
+/* Exposure value */
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_2_0_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_1_5_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_1_5_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_1_0_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_1_0_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_0_5_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_MINUS_0_5_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_0_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_0_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_0_5_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_0_5_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_1_0_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_1_0_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_1_5_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_1_5_PRESS_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_2_0_ICON);
+RESOURCE_IMAGE(EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON);
+
+/* Focus mode */
+RESOURCE_IMAGE(FOCUS_MODE_AUTO_NORMAL_ICON);
+RESOURCE_IMAGE(FOCUS_MODE_AUTO_PRESS_ICON);
+RESOURCE_IMAGE(FOCUS_MODE_MACRO_NORMAL_ICON);
+RESOURCE_IMAGE(FOCUS_MODE_MACRO_PRESS_ICON);
+RESOURCE_IMAGE(FOCUS_MODE_FACE_DETECTION_NORMAL_ICON);
+RESOURCE_IMAGE(FOCUS_MODE_FACE_DETECTION_PRESS_ICON);
+
+/* Timer */
+RESOURCE_IMAGE(TIMER_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(TIMER_OFF_PRESS_ICON);
+RESOURCE_IMAGE(TIMER_2SEC_NORMAL_ICON);
+RESOURCE_IMAGE(TIMER_2SEC_PRESS_ICON);
+RESOURCE_IMAGE(TIMER_5SEC_NORMAL_ICON);
+RESOURCE_IMAGE(TIMER_5SEC_PRESS_ICON);
+RESOURCE_IMAGE(TIMER_10SEC_NORMAL_ICON);
+RESOURCE_IMAGE(TIMER_10SEC_PRESS_ICON);
+
+/* Effect */
+RESOURCE_IMAGE(EFFECTS_NONE_NORMAL_ICON);
+RESOURCE_IMAGE(EFFECTS_NONE_PRESS_ICON);
+RESOURCE_IMAGE(EFFECTS_NEGATIVE_NORMAL_ICON);
+RESOURCE_IMAGE(EFFECTS_NEGATIVE_PRESS_ICON);
+RESOURCE_IMAGE(EFFECTS_BLACKANDWHITE_NORMAL_ICON);
+RESOURCE_IMAGE(EFFECTS_BLACKANDWHITE_PRESS_ICON);
+RESOURCE_IMAGE(EFFECTS_SEPIA_NORMAL_ICON);
+RESOURCE_IMAGE(EFFECTS_SEPIA_PRESS_ICON);
+
+/* Camera resolution */
+RESOURCE_IMAGE(CAM_RESOLUTION_8M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_8M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_5M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_5M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_3_2M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_3_2M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_2M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_2M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_1_3M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_1_3M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_0_3M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_0_3M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W6M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W6M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W5_7M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W5_7M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W2_4M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W2_4M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W2M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W2M_PRESS_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W0_9M_NORMAL_ICON);
+RESOURCE_IMAGE(CAM_RESOLUTION_W0_9M_PRESS_ICON);
+
+/* Camcorder resolution */
+RESOURCE_IMAGE(REC_RESOLUTION_FULLHD_NORMAL_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_FULLHD_PRESS_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_HD_NORMAL_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_HD_PRESS_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_WVGA_NORMAL_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_WVGA_PRESS_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_VGA_NORMAL_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_VGA_PRESS_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_QVGA_NORMAL_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_QVGA_PRESS_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_QCIF_NORMAL_ICON);
+RESOURCE_IMAGE(REC_RESOLUTION_QCIF_PRESS_ICON);
+
+/* White balance */
+RESOURCE_IMAGE(WHITE_BALANCE_AUTO_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_AUTO_PRESS_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_INCANDESCENT_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_INCANDESCENT_PRESS_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_FLUORESCENT_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_FLUORESCENT_PRESS_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_DAYLIGHT_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_DAYLIGHT_PRESS_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_CLOUDY_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_CLOUDY_PRESS_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_SHADE_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_SHADE_PRESS_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_HORIZON_NORMAL_ICON);
+RESOURCE_IMAGE(WHITE_BALANCE_HORIZON_PRESS_ICON);
+
+/* ISO */
+RESOURCE_IMAGE(ISO_AUTO_NORMAL_ICON);
+RESOURCE_IMAGE(ISO_AUTO_PRESS_ICON);
+RESOURCE_IMAGE(ISO_50_NORMAL_ICON);
+RESOURCE_IMAGE(ISO_50_PRESS_ICON);
+RESOURCE_IMAGE(ISO_100_NORMAL_ICON);
+RESOURCE_IMAGE(ISO_100_PRESS_ICON);
+RESOURCE_IMAGE(ISO_200_NORMAL_ICON);
+RESOURCE_IMAGE(ISO_200_PRESS_ICON);
+RESOURCE_IMAGE(ISO_400_NORMAL_ICON);
+RESOURCE_IMAGE(ISO_400_PRESS_ICON);
+RESOURCE_IMAGE(ISO_800_NORMAL_ICON);
+RESOURCE_IMAGE(ISO_800_PRESS_ICON);
+
+/* Metering */
+RESOURCE_IMAGE(METERING_MATRIX_NORMAL_ICON);
+RESOURCE_IMAGE(METERING_MATRIX_PRESS_ICON);
+RESOURCE_IMAGE(METERING_CENTER_WEIGHTED_NORMAL_ICON);
+RESOURCE_IMAGE(METERING_CENTER_WEIGHTED_PRESS_ICON);
+RESOURCE_IMAGE(METERING_SPOT_NORMAL_ICON);
+RESOURCE_IMAGE(METERING_SPOT_PRESS_ICON);
+
+/* Anti shake */
+RESOURCE_IMAGE(ANTISHAKE_ON_NORMAL_ICON);
+RESOURCE_IMAGE(ANTISHAKE_ON_PRESS_ICON);
+RESOURCE_IMAGE(ANTISHAKE_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(ANTISHAKE_OFF_PRESS_ICON);
+
+/* Outdoor visibility */
+RESOURCE_IMAGE(OUTDOOR_VISIBILITY_ON_NORMAL_ICON);
+RESOURCE_IMAGE(OUTDOOR_VISIBILITY_ON_PRESS_ICON);
+RESOURCE_IMAGE(OUTDOOR_VISIBILITY_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(OUTDOOR_VISIBILITY_OFF_PRESS_ICON);
+
+/* Auto contrast */
+RESOURCE_IMAGE(AUTO_CONTRAST_ON_NORMAL_ICON);
+RESOURCE_IMAGE(AUTO_CONTRAST_ON_PRESS_ICON);
+RESOURCE_IMAGE(AUTO_CONTRAST_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(AUTO_CONTRAST_OFF_PRESS_ICON);
+
+/* Guide lines */
+RESOURCE_IMAGE(GUIDELINE_ON_NORMAL_ICON);
+RESOURCE_IMAGE(GUIDELINE_ON_PRESS_ICON);
+RESOURCE_IMAGE(GUIDELINE_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(GUIDELINE_OFF_PRESS_ICON);
+
+/* Capture with voice */
+RESOURCE_IMAGE(CAPTURE_WITH_VOICE_ON_NORMAL_ICON);
+RESOURCE_IMAGE(CAPTURE_WITH_VOICE_ON_PRESS_ICON);
+RESOURCE_IMAGE(CAPTURE_WITH_VOICE_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(CAPTURE_WITH_VOICE_OFF_PRESS_ICON);
+
+/* GPS */
+RESOURCE_IMAGE(GPS_ON_NORMAL_ICON);
+RESOURCE_IMAGE(GPS_ON_PRESS_ICON);
+RESOURCE_IMAGE(GPS_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(GPS_OFF_PRESS_ICON);
+
+/* Save as flip */
+RESOURCE_IMAGE(SAVE_AS_FLIP_ON_NORMAL_ICON);
+RESOURCE_IMAGE(SAVE_AS_FLIP_ON_PRESS_ICON);
+RESOURCE_IMAGE(SAVE_AS_FLIP_OFF_NORMAL_ICON);
+RESOURCE_IMAGE(SAVE_AS_FLIP_OFF_PRESS_ICON);
+
+/* Storage */
+RESOURCE_IMAGE(STORAGE_MYDEVICE_NORMAL_ICON);
+RESOURCE_IMAGE(STORAGE_MYDEVICE_PRESS_ICON);
+RESOURCE_IMAGE(STORAGE_CARD_NORMAL_ICON);
+RESOURCE_IMAGE(STORAGE_CARD_PRESS_ICON);
+
+/* Reset setting */
+RESOURCE_IMAGE(RESET_SETTING_NORMAL_ICON);
+RESOURCE_IMAGE(RESET_SETTING_PRESS_ICON);
+
+/* Setting */
+RESOURCE_IMAGE(SETTING_NORMAL_ICON);
+RESOURCE_IMAGE(SETTING_PRESS_ICON);
+
+/* Indicator */
+RESOURCE_IMAGE(INDICATOR_STORAGE_INTERNAL_ICON);
+RESOURCE_IMAGE(INDICATOR_STORAGE_CARD_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_LEVEL_00_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_LEVEL_01_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_LEVEL_02_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_LEVEL_03_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_LEVEL_04_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_LEVEL_05_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_FULL_ICON);
+RESOURCE_IMAGE(INDICATOR_BATTERY_CHARGE_ICON);
+RESOURCE_IMAGE(INDICATOR_GPS_STATE_OFF_ICON);
+RESOURCE_IMAGE(INDICATOR_GPS_STATE_ON_ICON);
+RESOURCE_IMAGE(INDICATOR_GPS_STATE_CONNECT_ANI01_ICON);
+RESOURCE_IMAGE(INDICATOR_GPS_STATE_CONNECT_ANI02_ICON);
+RESOURCE_IMAGE(INDICATOR_GPS_STATE_CONNECT_ANI03_ICON);
+RESOURCE_IMAGE(INDICATOR_MUTE_ICON);
+
+/* Shutter icon */
+RESOURCE_IMAGE(CAMERA_SHUTTER_ICON);
+RESOURCE_IMAGE(CAMERA_SHUTTER_ICON_DIM);
+
+/* Volume key */
+RESOURCE_IMAGE(VOLUME_KEY_AS_ZOOM_NORMAL_ICON);
+RESOURCE_IMAGE(VOLUME_KEY_AS_ZOOM_PRESS_ICON);
+RESOURCE_IMAGE(VOLUME_KEY_AS_SHUTTER_NORMAL_ICON);
+RESOURCE_IMAGE(VOLUME_KEY_AS_SHUTTER_PRESS_ICON);
+
+/* Tip popup */
+RESOURCE_IMAGE(TIP_POPUP_BURSTSHOT_HELP_IMAGE);
+RESOURCE_IMAGE(TIP_POPUP_VOLUMEKEY_HELP_IMAGE);
+}
+
diff --git a/edc/cam_indicator_layout.edc b/edc/cam_indicator_layout.edc
new file mode 100755
index 0000000..dd613f2
--- /dev/null
+++ b/edc/cam_indicator_layout.edc
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_string.h"
+
+// order GUI_v1.0_120727
+// voice capture/gps/remain cnt/stroage/battery
+
+//indicator
+#define INDI_BATTERY_X 1044
+#define INDI_STORAGE_X 994
+#define INDI_NUM_X 874
+#define INDI_NUM_W 120
+#define INDI_GPS_X 824
+#define INDI_REC_GPS_X 944
+#define INDI_MUTE_X 894
+
+#define INDICATOR_Y 12
+#define INDICATOR_W 48
+#define INDICATOR_H 48
+
+//portrait
+#define INDI_PORTRAIT_BATTERY_X 660
+#define INDI_PORTRAIT_STORAGE_X 610
+#define INDI_PORTRAIT_NUM_X 488
+#define INDI_PORTRAIT_GPS_X 438
+#define INDI_PORTRAIT_MUTE_X 510
+#define INDI_PORTRAIT_REC_GPS_X 560
+#define INDI_PORTRAIT_REC_Y 28
+
+#define INDICATOR_PORTRAIT_Y 172
+
+
+#define INDICATOR(part_name, x, y) \
+ part { \
+ name: part_name; \
+ type: SWALLOW; \
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: x/MAIN_W y/MAIN_H; } \
+ rel2 { relative: (x+INDICATOR_W)/MAIN_W (y+INDICATOR_H)/MAIN_H; } \
+ } \
+ }
+
+#define INDICATOR_INVERSE(part_name, x, y) \
+ part { \
+ name: part_name; \
+ type: SWALLOW; \
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (x+INDICATOR_W)/MAIN_W) (1 - (y+INDICATOR_H)/MAIN_H); } \
+ rel2 { relative: (1 - x/MAIN_W) (1 - y/MAIN_H); } \
+ } \
+ }
+
+
+#define INDICATOR_PORTRAIT(part_name, x, y) \
+ part { \
+ name: part_name; \
+ type: SWALLOW; \
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: x/MAIN_H y/MAIN_W; } \
+ rel2 { relative: (x+INDICATOR_W)/MAIN_H (y+INDICATOR_H)/MAIN_W; } \
+ } \
+ }
+
+#define INDICATOR_PORTRAIT_INVERSE(part_name, x, y) \
+ part { \
+ name: part_name; \
+ type: SWALLOW; \
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (x+INDICATOR_W)/MAIN_H) (1 - (y+INDICATOR_H)/MAIN_W); } \
+ rel2 { relative: (1 - x/MAIN_H) (1 - (y/MAIN_W)); } \
+ } \
+ }
+
+
+collections {
+ group { name: "indicator_landscape";
+ min: MAIN_W MAIN_H;
+
+ parts{
+ INDICATOR(INDICATOR_GPS, INDI_GPS_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_GPS, INDI_REC_GPS_X, INDICATOR_Y)
+ INDICATOR(INDICATOR_STORAGE, INDI_STORAGE_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_STORAGE, INDI_STORAGE_X, INDICATOR_Y)
+ INDICATOR(INDICATOR_BATTERY, INDI_BATTERY_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_BATTERY, INDI_BATTERY_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_MUTE, INDI_MUTE_X, INDICATOR_Y)
+
+
+ part {
+ name: INDICATOR_NUM;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: INDI_NUM_X/MAIN_W INDICATOR_Y/MAIN_H; }
+ rel2 { relative: (INDI_NUM_X+INDI_NUM_W)/MAIN_W (INDICATOR_Y+INDICATOR_H)/MAIN_H; }
+ color: COLOR_1;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 1.0 0.5;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "indicator_landscape_inverse";
+ min: MAIN_W MAIN_H;
+ parts{
+ INDICATOR(INDICATOR_STORAGE, INDI_STORAGE_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_STORAGE, INDI_STORAGE_X, INDICATOR_Y)
+ INDICATOR(INDICATOR_GPS, INDI_GPS_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_GPS, INDI_REC_GPS_X, INDICATOR_Y)
+ INDICATOR(INDICATOR_BATTERY, INDI_BATTERY_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_BATTERY, INDI_BATTERY_X, INDICATOR_Y)
+ INDICATOR(INDI_REC_MUTE, INDI_MUTE_X, INDICATOR_Y)
+
+ part {
+ name: INDICATOR_NUM;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: INDI_NUM_X/MAIN_W INDICATOR_Y/MAIN_H; }
+ rel2 { relative: (INDI_NUM_X+INDI_NUM_W)/MAIN_W (INDICATOR_Y+INDICATOR_H)/MAIN_H; }
+ color: COLOR_1;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "indicator_portrait";
+ min: MAIN_H MAIN_W;
+ parts{
+ INDICATOR_PORTRAIT(INDICATOR_GPS, INDI_PORTRAIT_GPS_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_GPS, INDI_PORTRAIT_REC_GPS_X, INDI_PORTRAIT_REC_Y)
+ INDICATOR_PORTRAIT(INDICATOR_STORAGE, INDI_PORTRAIT_STORAGE_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_STORAGE, INDI_PORTRAIT_STORAGE_X, INDI_PORTRAIT_REC_Y)
+ INDICATOR_PORTRAIT(INDICATOR_BATTERY, INDI_PORTRAIT_BATTERY_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_BATTERY, INDI_PORTRAIT_BATTERY_X, INDI_PORTRAIT_REC_Y)
+ INDICATOR_PORTRAIT(INDI_REC_MUTE, INDI_PORTRAIT_MUTE_X, INDI_PORTRAIT_REC_Y)
+
+ part {
+ name: INDICATOR_NUM;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: INDI_PORTRAIT_NUM_X/MAIN_H INDICATOR_PORTRAIT_Y/MAIN_W ; }
+ rel2 { relative: (INDI_PORTRAIT_NUM_X+INDI_NUM_W)/MAIN_H (INDICATOR_PORTRAIT_Y+INDICATOR_H)/MAIN_W ; }
+ color: COLOR_1;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 1.0 0.5;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "indicator_portrait_inverse";
+ min: MAIN_H MAIN_W;
+ parts{
+ INDICATOR_PORTRAIT(INDICATOR_GPS, INDI_PORTRAIT_GPS_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_GPS, INDI_PORTRAIT_REC_GPS_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDICATOR_STORAGE, INDI_PORTRAIT_STORAGE_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_STORAGE, INDI_PORTRAIT_STORAGE_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDICATOR_BATTERY, INDI_PORTRAIT_BATTERY_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_BATTERY, INDI_PORTRAIT_BATTERY_X, INDICATOR_PORTRAIT_Y)
+ INDICATOR_PORTRAIT(INDI_REC_MUTE, INDI_PORTRAIT_MUTE_X, INDICATOR_PORTRAIT_Y)
+
+ part {
+ name: INDICATOR_NUM;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: INDI_PORTRAIT_NUM_X/MAIN_H INDICATOR_PORTRAIT_Y/MAIN_W ; }
+ rel2 { relative: (INDI_PORTRAIT_NUM_X+INDI_NUM_W)/MAIN_H (INDICATOR_PORTRAIT_Y+INDICATOR_H)/MAIN_W ; }
+ color: COLOR_1;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ }
+ }
+
+}//end collections
+//end file
diff --git a/edc/cam_main_layout.edc b/edc/cam_main_layout.edc
new file mode 100755
index 0000000..8688684
--- /dev/null
+++ b/edc/cam_main_layout.edc
@@ -0,0 +1,496 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+
+collections {
+ group {
+ name: "main_layout";
+ parts {
+ part { name: "transparent_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "guideline_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "shot_guide_popup_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "indicator_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "recording_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "mouse_event_layer";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color : 0 0 0 0;
+ }
+ }
+ part { name: "timer_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "best_photo_thumbnail_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "progressbar_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "progress_popup_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "tip_popup_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "pinch_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "zoom_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "ev_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ part { name: "toolbar_layout";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0; }
+ }
+ }
+ }
+
+#include "cam_guideline_edje.edc"
+
+ group {
+ name: "progressbar";
+ min: MAIN_W MAIN_H;
+
+ parts {
+
+#define PROGRESS_BAR_X 320
+#define PROGRESS_BAR_Y 657
+#define PROGRESS_BAR_W 639
+#define PROGRESS_BAR_H 20
+
+ part {
+ name: "progressbar";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed:1 1;
+ visible: 0;
+ rel1 { relative: PROGRESS_BAR_X/MAIN_W PROGRESS_BAR_Y/MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H)/MAIN_H; }
+ }
+
+ description {
+ state: "landscape" 0.0;
+ fixed:1 1;
+ visible: 1;
+ rel1 { relative: PROGRESS_BAR_X/MAIN_W PROGRESS_BAR_Y/MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H)/MAIN_H; }
+ }
+
+ description {
+ state: "vertical" 0.0;
+ fixed:1 1;
+ visible: 1;
+ rel1 { relative: PROGRESS_BAR_X/MAIN_W (PROGRESS_BAR_Y - 60)/MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H - 60)/MAIN_H; }
+ }
+ }
+
+ part {
+ name: "progressbar_text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1.0 (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (1.0+90/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.5 0.5;
+ }
+ }
+ description {
+ state: "vertical" 0.0;
+ rel1 { relative: 1.0 (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (1.0+90/PROGRESS_BAR_W*MAIN_W/MAIN_H) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.5 0.5;
+ }
+ }
+ }
+
+ }
+ programs {
+ program {
+ name: "progressbar,default";
+ source: "prog";
+ signal: "progressbar,default";
+ script: {
+ set_state(PART:"progressbar", "landscape", 0.0);
+ set_state(PART:"progressbar_text", "default", 0.0);
+ }
+ }
+ program {
+ name: "progressbar,vertical";
+ source: "prog";
+ signal: "progressbar,vertical";
+ script: {
+ set_state(PART:"progressbar", "vertical", 0.0);
+ set_state(PART:"progressbar_text", "vertical", 0.0);
+ }
+ }
+ }
+ }
+
+ group {
+ name: "shutter_image";
+ min: MAIN_W MAIN_H;
+
+ parts {
+ part {
+ name: "camera_image_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color : 0 0 0 0;
+ }
+ description {
+ state: "gray" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color : 0 0 0 180;
+ }
+ }
+ part {
+ name: "up_part";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to : "camera_image_bg"; }
+ rel2 { relative: 1.0 0.0; offset: -1 0; to : "camera_image_bg"; }
+ color : 0 0 0 255;
+// visible: 1;
+ }
+ description {
+ state: "middle" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to : "camera_image_bg"; }
+ rel2 { relative: 1.0 0.5; offset: -1 -1; to : "camera_image_bg"; }
+ color : 0 0 0 255;
+// visible: 0;
+ }
+ }
+
+ part { name: "down_part";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 1.0; offset: 0 -1; to : "camera_image_bg"; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; to : "camera_image_bg"; }
+ color : 0 0 0 255;
+// visible: 1;
+ }
+ description {
+ state: "middle" 0.0;
+ rel1 { relative: 0.0 0.5; offset: 0 -1; to : "camera_image_bg"; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; to : "camera_image_bg"; }
+ color : 0 0 0 255;
+// visible: 0;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "close";
+ signal: "start_animation";
+ source: "*";
+ action: STATE_SET "middle" 0.0;
+ target: "up_part" ;
+ target: "down_part" ;
+ transition: ACCELERATE 0.25;
+ after: "open";
+ }
+ program {
+ name: "open";
+ signal: "open";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "up_part" ;
+ target: "down_part" ;
+ transition: DECELERATE 0.25;
+ }
+ program {
+ name: "dim";
+ signal: "dim";
+ source: "*";
+ action: STATE_SET "gray" 0.0;
+ target: "camera_image_bg" ;
+ }
+
+ program {
+ name: "bright";
+ signal: "bright";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "camera_image_bg" ;
+ transition: DECELERATE 0.2;
+ after: "animation_finish";
+ }
+ program {
+ name: "animation_finish";
+ signal: "animation_finish";
+ source: "*";
+ action: SIGNAL_EMIT "animation_finish" "*";
+ }
+ }
+ }
+
+ group {
+ name: "shutter_rect";
+ min: MAIN_W MAIN_H;
+
+ parts {
+ part {
+ name: "shutter_rect_bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ color : 0 0 0 0;
+ }
+ description {
+ state: "gray" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ color : 0 0 0 180;
+ }
+ }
+
+ part {
+ name: "point_0";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ max: 1 1;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ rel1 { relative: 0.0 0.0; to : "shutter_rect_bg"; }
+ rel2 { relative: 0.0 0.0; to : "shutter_rect_bg"; }
+ color : 255 255 255 0;
+ visible: 0;
+ }
+ description {
+ state: "end" 0.0;
+ inherit: "default" 0.0;
+ min: 15 15;
+ max: 15 15;
+ fixed: 1 1;
+ }
+ }
+ part {
+ name: "point_1";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ max: 1 1;
+ fixed: 1 1;
+ align: 1.0 0.0;
+ rel1 { relative: 1.0 0.0; to : "shutter_rect_bg"; }
+ rel2 { relative: 1.0 0.0; to : "shutter_rect_bg"; }
+ color : 255 255 255 0;
+ visible: 0;
+ }
+ description {
+ state: "end" 0.0;
+ inherit: "default" 0.0;
+ min: 15 15;
+ max: 15 15;
+ fixed: 1 1;
+ }
+ }
+ part {
+ name: "point_2";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ max: 1 1;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ rel1 { relative: 1.0 1.0; to : "shutter_rect_bg"; }
+ rel2 { relative: 1.0 1.0; to : "shutter_rect_bg"; }
+ color : 255 255 255 0;
+ visible: 0;
+ }
+ description {
+ state: "end" 0.0;
+ inherit: "default" 0.0;
+ min: 15 15;
+ max: 15 15;
+ fixed: 1 1;
+ }
+ }
+ part {
+ name: "point_3";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ max: 1 1;
+ fixed: 1 1;
+ align: 0.0 1.0;
+ rel1 { relative: 0.0 1.0; to : "shutter_rect_bg"; }
+ rel2 { relative: 0.0 1.0; to : "shutter_rect_bg"; }
+ color : 255 255 255 0;
+ visible: 0;
+ }
+ description {
+ state: "end" 0.0;
+ inherit: "default" 0.0;
+ min: 15 15;
+ max: 15 15;
+ fixed: 1 1;
+ }
+ }
+
+ part {
+ name: "top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to_x : "point_0"; to_y : "point_0";}
+ rel2 { relative: 0.0 1.0; offset: 0 0; to_x : "point_1"; to_y : "point_1";}
+ color : 255 255 255 200;
+ visible: 1;
+ }
+ }
+
+ part {
+ name: "right";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 1 0; to_x : "point_1"; to_y : "point_1";}
+ rel2 { relative: 1.0 1.0; offset: 0 0; to_x : "point_2"; to_y : "point_2";}
+ color : 255 255 255 200;
+ visible: 1;
+ }
+ }
+
+ part {
+ name: "bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to_x : "point_3"; to_y : "point_3";}
+ rel2 { relative: 0.0 1.0; offset: 0 0; to_x : "point_2"; to_y : "point_2";}
+ color : 255 255 255 200;
+ visible: 1;
+ }
+ }
+ part {
+ name: "left";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 1.0; offset: 0 1; to_x : "point_0"; to_y : "point_0";}
+ rel2 { relative: 1.0 0.0; offset: 0 -1; to_x : "point_3"; to_y : "point_3";}
+ color : 255 255 255 200;
+ visible: 1;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "shutter_rect,start";
+ signal: "shutter_rect,start";
+ source: "prog";
+ action: STATE_SET "end" 0.0;
+ target: "point_0";
+ target: "point_1";
+ target: "point_2";
+ target: "point_3";
+ transition: DECELERATE 0.20;
+ after: "shutter_rect,finish";
+ }
+ program {
+ name: "shutter_rect,finish";
+ signal: "shutter_rect,finish";
+ source: "*";
+ action: SIGNAL_EMIT "shutter_rect,finish" "*";
+ }
+ }
+ }
+}
+
+
diff --git a/edc/cam_recording_edje.edc b/edc/cam_recording_edje.edc
new file mode 100755
index 0000000..467bfb0
--- /dev/null
+++ b/edc/cam_recording_edje.edc
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "cam_recording_edje_inc.edc"
+
+collections {
+ group {
+ name: "recording_layout";
+ min: MAIN_W MAIN_H;
+
+ parts {
+ part {
+ name: RECORDING_IMAGE;
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_IMAGE_X/MAIN_W RECORDING_IMAGE_Y/MAIN_H; }
+ rel2 { relative: (RECORDING_IMAGE_X+RECORDING_IMAGE_W)/MAIN_W (RECORDING_IMAGE_Y+RECORDING_IMAGE_H)/MAIN_H; }
+ }
+ description {
+ state: "rec" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "rec1" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_TEXT_X/MAIN_W RECORDING_TEXT_Y/MAIN_H; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_LEFT_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_LEFT_TEXT_X/MAIN_W RECORDING_LEFT_TEXT_Y/MAIN_H; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible : 0;
+ }
+ }
+
+ part { name: "progressbar";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed:1 1;
+ rel1 { relative: PROGRESS_BAR_X/MAIN_W PROGRESS_BAR_Y/MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H)/MAIN_H; }
+ }
+ }
+
+ part {
+ name: "progressbar_text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1.0 (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (1.0+90/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.5 0.5;
+ }
+ }
+ }
+
+ part{
+ name: "file_size_text";
+ type: TEXT;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: (0.0-100/PROGRESS_BAR_W) (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (0.0-10/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align : 1.0 0.5;
+ }
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "set_rec_state";
+ source: "program";
+ signal: "state,rec";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_rec_state1";
+ source: "program";
+ signal: "state,rec1";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec1", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_pause_state";
+ source: "program";
+ signal: "state,pause";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "hide_indicator";
+ source: "program";
+ signal: "indicator,hide";
+ script {
+ set_state(PART:RECORDING_IMAGE, "invisible", 0.0);
+ set_state(PART:RECORDING_TEXT, "invisible", 0.0);
+ }
+ }
+ program {
+ name: "show_indicator";
+ source: "program";
+ signal: "indicator,show";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ }
+ }
+}
+//endfile
diff --git a/edc/cam_recording_edje_inc.edc b/edc/cam_recording_edje_inc.edc
new file mode 100755
index 0000000..523836b
--- /dev/null
+++ b/edc/cam_recording_edje_inc.edc
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "../include/edc_image_name.h"
+#include "cam_funcs.edc"
+images {
+ image: RECORDING_IMAGE_REC_IMAGE COMP;
+}
+
+
+#define RECORDING_IMAGE_X 844
+#define RECORDING_IMAGE_Y 12
+#define RECORDING_IMAGE_W 48
+#define RECORDING_IMAGE_H 48
+#define RECORDING_TEXT_X 734
+#define RECORDING_TEXT_Y 12
+#define RECORDING_LEFT_TEXT_X 128
+#define RECORDING_LEFT_TEXT_Y 10
+
+#define PROGRESS_BAR_X 320
+#define PROGRESS_BAR_Y 657
+#define PROGRESS_BAR_W 639
+#define PROGRESS_BAR_H 20
+
+//endfiles
diff --git a/edc/cam_recording_edje_inverse.edc b/edc/cam_recording_edje_inverse.edc
new file mode 100755
index 0000000..7fce4b2
--- /dev/null
+++ b/edc/cam_recording_edje_inverse.edc
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "cam_recording_edje_inverse_inc.edc"
+
+collections {
+
+ group {
+ name: "recording_layout";
+ min: MAIN_W MAIN_H;
+
+ parts {
+
+ part {
+ name: RECORDING_IMAGE;
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_IMAGE_X/MAIN_W RECORDING_IMAGE_Y/MAIN_H; }
+ rel2 { relative: (RECORDING_IMAGE_X+RECORDING_IMAGE_W)/MAIN_W (RECORDING_IMAGE_Y+RECORDING_IMAGE_H)/MAIN_H; }
+ }
+ description {
+ state: "rec" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "rec1" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_TEXT_X/MAIN_W RECORDING_TEXT_Y/MAIN_H; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+
+ part {
+ name: RECORDING_LEFT_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: (1.0 - RECORDING_LEFT_TEXT_X/MAIN_W) (1.0 - RECORDING_LEFT_TEXT_Y/MAIN_H); offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 1.0 1.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible : 0;
+ }
+ }
+
+ part { name: "progressbar";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed:1 1;
+ rel1 { relative: PROGRESS_BAR_X/MAIN_W PROGRESS_BAR_Y/MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H)/MAIN_H; }
+ }
+ }
+
+ part {
+ name: "progressbar_text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1.0 (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (1.0+90/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.5 0.5;
+ }
+ }
+ }
+
+ part{
+ name: "file_size_text";
+ type: TEXT;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: (0.0-100/PROGRESS_BAR_W) (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (0.0-10/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align : 1.0 0.5;
+ }
+ }
+ }
+ }
+
+ programs {
+
+ program {
+ name: "set_rec_state";
+ source: "program";
+ signal: "state,rec";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_rec_state1";
+ source: "program";
+ signal: "state,rec1";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec1", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_pause_state";
+ source: "program";
+ signal: "state,pause";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "hide_indicator";
+ source: "program";
+ signal: "indicator,hide";
+ script {
+ set_state(PART:RECORDING_IMAGE, "invisible", 0.0);
+ set_state(PART:RECORDING_TEXT, "invisible", 0.0);
+ }
+ }
+ program {
+ name: "show_indicator";
+ source: "program";
+ signal: "indicator,show";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ }
+ }
+}
+//endfile
diff --git a/edc/cam_recording_edje_inverse_inc.edc b/edc/cam_recording_edje_inverse_inc.edc
new file mode 100755
index 0000000..37f84b2
--- /dev/null
+++ b/edc/cam_recording_edje_inverse_inc.edc
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "../include/edc_image_name.h"
+#include "cam_funcs.edc"
+images {
+ image: RECORDING_IMAGE_REC_IMAGE COMP;
+}
+
+
+#define RECORDING_IMAGE_X 844
+#define RECORDING_IMAGE_Y 12
+#define RECORDING_IMAGE_W 48
+#define RECORDING_IMAGE_H 48
+#define RECORDING_TEXT_X 734
+#define RECORDING_TEXT_Y 12
+#define RECORDING_LEFT_TEXT_X 128
+#define RECORDING_LEFT_TEXT_Y 10
+
+#define PROGRESS_BAR_X 320
+#define PROGRESS_BAR_Y 657
+#define PROGRESS_BAR_W 639
+#define PROGRESS_BAR_H 20
+
+//endfiles \ No newline at end of file
diff --git a/edc/cam_recording_edje_vertical.edc b/edc/cam_recording_edje_vertical.edc
new file mode 100755
index 0000000..3befe35
--- /dev/null
+++ b/edc/cam_recording_edje_vertical.edc
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_recording_edje_vertical_inc.edc"
+
+
+collections {
+ group {
+ name: "recording_layout";
+ min: MAIN_H MAIN_W;
+
+ parts {
+ part {
+ name: RECORDING_IMAGE;
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_IMAGE_X/VER_MAIN_W RECORDING_IMAGE_Y/VER_MAIN_H; }
+ rel2 { relative: (RECORDING_IMAGE_X+RECORDING_IMAGE_W)/VER_MAIN_W (RECORDING_IMAGE_Y+RECORDING_IMAGE_H)/VER_MAIN_H; }
+ }
+ description {
+ state: "rec" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "rec1" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_TEXT_X/VER_MAIN_W RECORDING_TEXT_Y/VER_MAIN_H; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_LEFT_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_LEFT_TEXT_X/VER_MAIN_W RECORDING_LEFT_TEXT_Y/VER_MAIN_H; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible : 0;
+ }
+ }
+
+ part { name: "progressbar";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed:1 1;
+ rel1 { relative: PROGRESS_BAR_X/VER_MAIN_W PROGRESS_BAR_Y/VER_MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/VER_MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H)/VER_MAIN_H; }
+ }
+ }
+
+ part {
+ name: "progressbar_text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1.0 (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (1.0+90/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.5 0.5;
+ }
+ }
+ }
+
+ part{
+ name: "file_size_text";
+ type: TEXT;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: (0.0-100/PROGRESS_BAR_W) (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (0.0-10/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align : 1.0 0.5;
+ }
+ }
+ }
+ }
+
+ programs {
+
+ program {
+ name: "set_rec_state";
+ source: "program";
+ signal: "state,rec";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_rec_state1";
+ source: "program";
+ signal: "state,rec1";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec1", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_pause_state";
+ source: "program";
+ signal: "state,pause";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program { name: "hide_indicator";
+ source: "program";
+ signal: "indicator,hide";
+ script {
+ set_state(PART:RECORDING_IMAGE, "invisible", 0.0);
+ set_state(PART:RECORDING_TEXT, "invisible", 0.0);
+ }
+ }
+ program { name: "show_indicator";
+ source: "program";
+ signal: "indicator,show";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ }
+ }
+}
+//endfile
diff --git a/edc/cam_recording_edje_vertical_inc.edc b/edc/cam_recording_edje_vertical_inc.edc
new file mode 100755
index 0000000..cf0e171
--- /dev/null
+++ b/edc/cam_recording_edje_vertical_inc.edc
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "cam_funcs.edc"
+images {
+ image: RECORDING_IMAGE_REC_IMAGE COMP;
+}
+
+
+#define RECORDING_IMAGE_X 460
+#define RECORDING_IMAGE_Y 28
+#define RECORDING_IMAGE_W 48
+#define RECORDING_IMAGE_H 48
+#define RECORDING_TEXT_X 350
+#define RECORDING_TEXT_Y 28
+#define RECORDING_LEFT_TEXT_X 10
+#define RECORDING_LEFT_TEXT_Y 28
+
+#define PROGRESS_BAR_X 128
+#define PROGRESS_BAR_Y 1000
+#define PROGRESS_BAR_W 464
+#define PROGRESS_BAR_H 20
+
+//endfiles \ No newline at end of file
diff --git a/edc/cam_recording_edje_vertical_inverse.edc b/edc/cam_recording_edje_vertical_inverse.edc
new file mode 100755
index 0000000..53f402f
--- /dev/null
+++ b/edc/cam_recording_edje_vertical_inverse.edc
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "cam_recording_edje_vertical_inverse_inc.edc"
+
+collections {
+ group {
+ name: "recording_layout";
+ min: MAIN_H MAIN_W;
+
+ parts {
+ part {
+ name: RECORDING_IMAGE;
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_IMAGE_X/VER_MAIN_W RECORDING_IMAGE_Y/VER_MAIN_H; }
+ rel2 { relative: (RECORDING_IMAGE_X+RECORDING_IMAGE_W)/VER_MAIN_W (RECORDING_IMAGE_Y+RECORDING_IMAGE_H)/VER_MAIN_H; }
+ }
+ description {
+ state: "rec" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "rec1" 0.0;
+ inherit: "default" 0.0;
+ image { normal: RECORDING_IMAGE_REC_IMAGE; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: RECORDING_TEXT_X/VER_MAIN_W RECORDING_TEXT_Y/VER_MAIN_H; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: RECORDING_LEFT_TEXT;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: (1 - RECORDING_LEFT_TEXT_X/VER_MAIN_W) (1 - RECORDING_LEFT_TEXT_Y/VER_MAIN_H); offset: -1 -1; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 35;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible : 0;
+ }
+ }
+
+ part { name: "progressbar";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed:1 1;
+ rel1 { relative: PROGRESS_BAR_X/VER_MAIN_W PROGRESS_BAR_Y/VER_MAIN_H; }
+ rel2 { relative: (PROGRESS_BAR_X+PROGRESS_BAR_W)/VER_MAIN_W (PROGRESS_BAR_Y+PROGRESS_BAR_H)/VER_MAIN_H; }
+ }
+ }
+
+ part {
+ name: "progressbar_text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1.0 (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (1.0+90/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align: 0.5 0.5;
+ }
+ }
+ }
+
+ part{
+ name: "file_size_text";
+ type: TEXT;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: (0.0-100/PROGRESS_BAR_W) (-20)/PROGRESS_BAR_H; to: "progressbar"; }
+ rel2 { relative: (0.0-10/PROGRESS_BAR_W) (1.0+20/PROGRESS_BAR_H); to: "progressbar"; }
+ color: FONT_COLOR;
+ text {
+ font : FONT_NAME;
+ size : 28;
+ align : 1.0 0.5;
+ }
+ }
+ }
+ }
+
+ programs {
+
+ program {
+ name: "set_rec_state";
+ source: "program";
+ signal: "state,rec";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_rec_state1";
+ source: "program";
+ signal: "state,rec1";
+ script {
+ set_state(PART:RECORDING_IMAGE, "rec1", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "set_pause_state";
+ source: "program";
+ signal: "state,pause";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ program {
+ name: "hide_indicator";
+ source: "program";
+ signal: "indicator,hide";
+ script {
+ set_state(PART:RECORDING_IMAGE, "invisible", 0.0);
+ set_state(PART:RECORDING_TEXT, "invisible", 0.0);
+ }
+ }
+ program {
+ name: "show_indicator";
+ source: "program";
+ signal: "indicator,show";
+ script {
+ set_state(PART:RECORDING_IMAGE, "pause", 0.0);
+ set_state(PART:RECORDING_TEXT, "default", 0.0);
+ }
+ }
+ }
+ }
+}
+//endfile
+
diff --git a/edc/cam_recording_edje_vertical_inverse_inc.edc b/edc/cam_recording_edje_vertical_inverse_inc.edc
new file mode 100755
index 0000000..0f88b2d
--- /dev/null
+++ b/edc/cam_recording_edje_vertical_inverse_inc.edc
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "cam_funcs.edc"
+images {
+ image: RECORDING_IMAGE_REC_IMAGE COMP;
+}
+
+#define RECORDING_IMAGE_X 460
+#define RECORDING_IMAGE_Y 172
+#define RECORDING_IMAGE_W 48
+#define RECORDING_IMAGE_H 48
+#define RECORDING_TEXT_X 350
+#define RECORDING_TEXT_Y 172
+#define RECORDING_LEFT_TEXT_X 10
+#define RECORDING_LEFT_TEXT_Y 28
+
+#define PROGRESS_BAR_X 128
+#define PROGRESS_BAR_Y 1000
+#define PROGRESS_BAR_W 464
+#define PROGRESS_BAR_H 20
+
+//endfiles \ No newline at end of file
diff --git a/edc/cam_setting_popup_layout.edc b/edc/cam_setting_popup_layout.edc
new file mode 100644
index 0000000..b10430b
--- /dev/null
+++ b/edc/cam_setting_popup_layout.edc
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+#include "cam_setting_popup_layout_inc.edc"
+
+#define SETTING_POPUP_WIDTH 550
+#define SETTING_POPUP_HEIGHT 661
+
+images {
+ image: CTXPOPUP_BG_IMAGE COMP;
+}
+
+collections {
+ group {
+ name:"camera/setting/popup/area/toolbar";
+ min: MAIN_W MAIN_H;
+ parts {
+ part { name: "setting_popup";
+ type: SWALLOW;
+ repeat_events: 0;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: ((TOOLBAR_W+20)/MAIN_W) 0.0;}
+ rel2{ relative: ((MAIN_W-TOOLBAR_W-20)/MAIN_W) 1.0;}
+ }
+ }
+ }
+ }
+
+ CAMERA_SETTING_POPUP_GROUP_LAYOUT("toolbar", SETTING_POPUP_WIDTH, SETTING_POPUP_HEIGHT)
+}
+
+
+
diff --git a/edc/cam_setting_popup_layout_inc.edc b/edc/cam_setting_popup_layout_inc.edc
new file mode 100755
index 0000000..fd9f835
--- /dev/null
+++ b/edc/cam_setting_popup_layout_inc.edc
@@ -0,0 +1,288 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_EDC_CAM_SETTING_POPUP_LAYOUT_EDC_H__
+#define __H_EDC_CAM_SETTING_POPUP_LAYOUT_EDC_H__
+#define SETTING_POPUP_WIDTH 550
+#define SETTING_POPUP_HEIGHT 661
+
+
+#define CAMERA_SETTING_POPUP_AREA_PART(part_name, width, height) \
+ part { name: "camera/setting/popup/area/"part_name;\
+ type: SWALLOW;\
+ scale: 1;\
+ repeat_events: 0;\
+ description {\
+ state:"default" 0.0;\
+ min: width height;\
+ max: width height;\
+ fixed: 1 1;\
+ align: 0 0;\
+ rel1{ relative: 0.0 0.0; to: "popup_area";}\
+ rel2{ relative: 0.0 0.0; to: "popup_area";}\
+ } \
+ }
+
+
+/*Ctxpopup Style*/
+#define CTXPOPUP_BORDER_CORNER_SIZE 9
+
+#define CAMERA_SETTING_POPUP_GROUP_LAYOUT(group_name, width, height)\
+ group { \
+ name: "camera/setting/popup/"group_name;\
+ min: width height;\
+ max: width height;\
+ parts {\
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 CTXPOPUP_BORDER_CORNER_SIZE; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ color: 255 255 255 255;\
+ } \
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 CTXPOPUP_BORDER_CORNER_SIZE; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1.relative: 0.0 1.0; \
+ align: 0.0 1.0; \
+ color: 255 255 255 255;\
+ } \
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: CTXPOPUP_BORDER_CORNER_SIZE 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ color: 255 255 255 255;\
+ } \
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: CTXPOPUP_BORDER_CORNER_SIZE 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ color: 255 255 255 255;\
+ } \
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ part {\
+ name: "bg";\
+ type: RECT;\
+ mouse_events: 0;\
+ repeat_events: 0;\
+ description {\
+ state: "default" 0.0;\
+ visible: 0;\
+ rel1 { relative: 0.0 0.0; }\
+ rel2 { relative: 1.0 1.0; }\
+ }\
+ }\
+ part {\
+ name: "bg_image";\
+ type: IMAGE;\
+ scale: 1;\
+ mouse_events: 0;\
+ repeat_events: 0;\
+ description {\
+ align: 1 1;\
+ visible: 0;\
+ image {\
+ normal: CTXPOPUP_BG_IMAGE;\
+ border: 67 67 92 42;\
+ border_scale: 1;\
+ }\
+ rel1 {relative: 0.0 0.0; to: "bg";}\
+ rel2 {relative: 1.0. 1.0; to: "bg";}\
+ }\
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ part {\
+ name: "ele.bg.top";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ repeat_events: 0;\
+ description {\
+ state: "default" 0.0;\
+ visible: 0;\
+ rel1 { relative: 0.0 0.0; to:"bg";}\
+ rel2 { relative: 1.0 60/height; to:"bg";}\
+ }\
+ }\
+ part {\
+ name: "ele.bg.bottom";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ repeat_events: 0;\
+ description {\
+ state: "default" 0.0;\
+ visible: 0;\
+ rel1 { relative: 0.0 60/height; to:"bg";}\
+ rel2 { relative: 1.0 1.0; to:"bg";}\
+ }\
+ }\
+ part {\
+ name: "elm.text";\
+ type: TEXT;\
+ scale: 1;\
+ mouse_events: 1;\
+ repeat_events: 0;\
+ description {\
+ state: "default" 0.0;\
+ visible: 0;\
+ align: 0.5 0.5;\
+ rel1 { relative: 0.0 0.0; to:"ele.bg.top";}\
+ rel2 { relative: 1.0 1.0; to:"ele.bg.top";}\
+ text {\
+ font: FONT_NAME;\
+ size: 30;\
+ align: 0.5 0.5;\
+ min: 1 1;\
+ text: "";\
+ }\
+ }\
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ part {\
+ name: "elm.swallow.box";\
+ type: SWALLOW;\
+ scale: 1;\
+ mouse_events: 1;\
+ repeat_events: 0;\
+ description {\
+ state: "default" 0.0;\
+ visible: 0;\
+ align: 0.5 0.5;\
+ rel1 { relative: 0.0 0.0; to:"ele.bg.bottom";}\
+ rel2 { relative: 1.0 1.0; to:"ele.bg.bottom";}\
+ }\
+ description {\
+ state: "show" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ description {\
+ state: "dim" 0.0;\
+ inherit: "default" 0.0;\
+ }\
+ }\
+ }\
+ programs {\
+ program {\
+ name: "set.popup.dim";\
+ source: "prog";\
+ signal: "set.popup.dim";\
+ script: {\
+ set_state(PART:"bg_image", "dim", 0.0);\
+ set_state(PART:"elm.text", "dim", 0.0);\
+ set_state(PART:"elm.swallow.box", "dim", 0.0);\
+ set_state(PART:"elm.padding.right", "dim", 0.0);\
+ set_state(PART:"elm.padding.left", "dim", 0.0);\
+ set_state(PART:"elm.padding.top", "dim", 0.0);\
+ set_state(PART:"elm.padding.bottom", "dim", 0.0);\
+ }\
+ }\
+ program {\
+ name: "set.popup.show";\
+ source: "prog";\
+ signal: "set.popup.show";\
+ script: {\
+ set_state(PART:"bg_image", "show", 0.0);\
+ set_state(PART:"elm.text", "show", 0.0);\
+ set_state(PART:"elm.swallow.box", "show", 0.0);\
+ set_state(PART:"elm.padding.right", "show", 0.0);\
+ set_state(PART:"elm.padding.left", "show", 0.0);\
+ set_state(PART:"elm.padding.top", "show", 0.0);\
+ set_state(PART:"elm.padding.bottom", "show", 0.0);\
+ }\
+ }\
+ }\
+ }
+
+
+#endif /*__H_EDC_CAM_SETTING_POPUP_LAYOUT_EDC_H__*/
+//end file
diff --git a/edc/cam_toolbar_layout.edc b/edc/cam_toolbar_layout.edc
new file mode 100755
index 0000000..ead32b2
--- /dev/null
+++ b/edc/cam_toolbar_layout.edc
@@ -0,0 +1,619 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+#include "cam_toolbar_layout_inc.edc"
+#include "cam_setting_popup_layout_inc.edc"
+
+
+collections {
+
+ group {
+ name: "toolbar";
+ min: MAIN_W MAIN_H;
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: MAIN_W MAIN_H;
+ max: MAIN_W MAIN_H;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+
+ TOOLBAR_BACKGROUND_IMAGE("left_bg", 0, 0, TOOLBAR_W, MAIN_H, LEFT_TOOLBAR_BG_IMAGE)
+ TOOLBAR_BACKGROUND_IMAGE("right_bg", MAIN_W-TOOLBAR_W, 0, TOOLBAR_W, MAIN_H, RIGHT_TOOLBAR_BG_IMAGE)
+
+ part { name: "popup_area";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: TOOLBAR_W/MAIN_W 0.0; to: "bg";}
+ rel2{ relative: (MAIN_W-TOOLBAR_W)/MAIN_W 1.0; to: "bg";}
+ }
+ }
+
+ part { name: "setting_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: TOOLBAR_W/MAIN_W 0.0; to: "bg";}
+ rel2{ relative: (MAIN_W-TOOLBAR_W)/MAIN_W 1.0; to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: TOOLBAR_W/MAIN_W 0.0; to: "bg";}
+ rel2{ relative: (TOOLBAR_W+720)/MAIN_W (MAIN_H-120)/MAIN_H; to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup_description";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: TOOLBAR_W/MAIN_W (MAIN_H-120)/MAIN_H; to: "bg";}
+ rel2{ relative: (TOOLBAR_W+720)/MAIN_W 1.0; to: "bg";}
+ }
+ }
+
+ TOOLBAR_ITEM_BUTTON("toolbar_0_button", TOOLBAR_0_X, TOOLBAR_0_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_1_button", TOOLBAR_1_X, TOOLBAR_1_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_2_button", TOOLBAR_2_X, TOOLBAR_2_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_3_button", TOOLBAR_3_X, TOOLBAR_3_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_4_button", TOOLBAR_4_X, TOOLBAR_4_Y)
+
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_0_icon", TOOLBAR_0_X, TOOLBAR_0_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_1_icon", TOOLBAR_1_X, TOOLBAR_1_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_2_icon", TOOLBAR_2_X, TOOLBAR_2_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_3_icon", TOOLBAR_3_X, TOOLBAR_3_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_4_icon", TOOLBAR_4_X, TOOLBAR_4_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+
+ TOOLBAR_ITEM_SWALLOW_BUTTON("shutter_button", SHUTTER_X, SHUTTER_Y, SHUTTER_W, SHUTTER_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_button", RECORDINGBTN_X, RECORDINGBTN_Y, RECORDINGBTN_W, RECORDINGBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_stop_button",REC_STOP_BTN_X, REC_STOP_BTN_Y, REC_STOP_BTN_W, REC_STOP_BTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("quickview_item", QUICKVIEW_X, QUICKVIEW_Y, QUICKVIEW_W, QUICKVIEW_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("backbutton_item", BACKBTN_X, BACKBTN_Y, BACKBTN_W, BACKBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("cafbutton_item", CAF_BUTTON_X, CAF_BUTTON_Y, CAF_BUTTON_W, CAF_BUTTON_H)
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "toolbar_bg,show";
+ source: "prog";
+ signal: "toolbar_bg,show";
+ script: {
+ set_state(PART:"left_bg", "default", 0.0);
+ set_state(PART:"right_bg", "default", 0.0);
+ }
+ }
+ program {
+ name: "toolbar_bg,hide";
+ source: "prog";
+ signal: "toolbar_bg,hide";
+ script: {
+ set_state(PART:"left_bg", "hide", 0.0);
+ set_state(PART:"right_bg", "hide", 0.0);
+ }
+ }
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_0_button", "toolbar_0_icon", "toolbar_0_press_sig", "toolbar_0_release_sig", "toolbar_0_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_1_button", "toolbar_1_icon", "toolbar_1_press_sig", "toolbar_1_release_sig", "toolbar_1_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_2_button", "toolbar_2_icon", "toolbar_2_press_sig", "toolbar_2_release_sig", "toolbar_2_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_3_button", "toolbar_3_icon", "toolbar_3_press_sig", "toolbar_3_release_sig", "toolbar_3_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_4_button", "toolbar_4_icon", "toolbar_4_press_sig", "toolbar_4_release_sig", "toolbar_4_click_sig")
+ }/*end programs*/
+ }/*end group :toolbar*/
+
+ group {
+ name: "shutter_button";
+
+ images {
+ image: SHUTTER_NORMAL_IMAGE COMP;
+ image: SHUTTER_PRESS_IMAGE COMP;
+ image: SHUTTER_DIM_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_NORMAL_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_PRESS_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_DIM_IMAGE; }
+ }
+ }
+
+ part { name: "camera_icon";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ align: 0.5 0.5;
+ max: 60 60;
+ min: 60 60;
+ fixed:1 1;
+ rel1 { relative: 0.0 0.0; to: "capture_button";}
+ rel2 { relative: 1.0 1.0; to: "capture_button";}
+ visible: 1;
+ }
+
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+
+ program {
+ name: "camera_icon,normal";
+ source: "prog";
+ signal: "camera_icon,normal";
+ script: { set_state(PART:"camera_icon", "normal", 0.0); }
+ }
+ program {
+ name: "camera_icon,invisible";
+ source: "prog";
+ signal: "camera_icon,invisible";
+ script: { set_state(PART:"camera_icon", "dim", 0.0); }
+ }
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_button";
+
+ images {
+ image: CAMCORDER_SHUTTER_ICON_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_DIM_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_DIM_IMAGE; }
+ }
+ }
+ part { name: "recording_pause_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_pause_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_stop_button";
+
+ images {
+ image: CAMCORDER_STOP_ICON_IMAGE COMP;
+ image: CAMCORDER_STOP_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_stop_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_stop_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "toolbar_quickview_item";
+
+ images {
+ image: THUMBNAIL_BG_NORMAL_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "bg";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal: THUMBNAIL_BG_NORMAL_IMAGE ;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "thumbnail";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1/9 1/9; to: "bg"; }
+ rel2 { relative: 8/9 8/9; to: "bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part { name: "thumbnail_area"; /*note: just for c codes get thumbnail x,y,w,h*/
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "thumbnail"; }
+ rel2 { relative: 1.0 1.0; to: "thumbnail"; }
+ color: 0 0 0 0;
+ }
+ }
+
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "quickview_bg,mouse,down,1";
+ signal: "mouse,down,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,press" "toolbar_signal";
+ }
+ program {
+ name: "quickview_bg,mouse,up,1";
+ signal: "mouse,up,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,release" "toolbar_signal";
+ }
+ program {
+ name: "prog_set_default";
+ source: "prog";
+ signal: "SET_DEFAULT";
+ script: {
+ set_state(PART:"bg", "default", 0.0);
+ set_state(PART:"thumbnail", "default", 0.0);
+ }
+ }
+ program {
+ name: "prog_set_invisible";
+ source: "prog";
+ signal: "SET_INVISIBLE";
+ script: {
+ set_state(PART:"bg", "invisible", 0.0);
+ set_state(PART:"thumbnail", "invisible", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_quickview_item*/
+
+ group{
+ name: "toolbar_backbutton_item";
+
+ images{
+ image: BACK_BUTTON_NORMAL_IMAGE COMP;
+ image: BACK_BUTTON_PRESS_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "back_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "back_button_press";
+ signal: "mouse,down,1";
+ source: "back_button";
+ action: STATE_SET "press" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_release";
+ signal: "mouse,up,1";
+ source: "back_button";
+ action: STATE_SET "default" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "back_button";
+ action: SIGNAL_EMIT "landscape,backbutton,clicked" "toolbar_signal";
+ }
+ }/*end programs*/
+ }/*end toolbar_backbutton_item*/
+
+ group{
+ name: "toolbar_cafbutton_item";
+
+ parts{
+ part{
+ name: "caf_button";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description{
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "caf_button_press";
+ signal: "mouse,down,1";
+ source: "caf_button";
+ action: STATE_SET "press" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_release";
+ signal: "mouse,up,1";
+ source: "caf_button";
+ action: STATE_SET "normal" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "caf_button";
+ action: SIGNAL_EMIT "caf_button,clicked" "toolbar_signal";
+ }
+ program {
+ name: "caf_button_normal";
+ source: "prog";
+ signal: "caf_button,normal";
+ script: {
+ set_state(PART:"caf_button", "normal", 0.0);
+ }
+ }
+ program {
+ name: "caf_button_default";
+ source: "prog";
+ signal: "caf_button,invisible";
+ script: {
+ set_state(PART:"caf_button", "default", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_cafbutton_item*/
+
+ group{
+ name: "toolbar_capture_button_item";
+
+ images{
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "capture_button_press";
+ signal: "mouse,down,1";
+ source: "capture_button";
+ action: STATE_SET "press" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_release";
+ signal: "mouse,up,1";
+ source: "capture_button";
+ action: STATE_SET "default" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "capture_button";
+ action: SIGNAL_EMIT "capture_button_click" "capture_button_click";
+ }
+ }/*end programs*/
+ }
+}/*end collections*/
+//end file
diff --git a/edc/cam_toolbar_layout_inc.edc b/edc/cam_toolbar_layout_inc.edc
new file mode 100755
index 0000000..a346f72
--- /dev/null
+++ b/edc/cam_toolbar_layout_inc.edc
@@ -0,0 +1,353 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+#define __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+
+#define SETTING_TOOLBAR_W 1156
+#define SETTING_TOOLBAR_H 116
+
+#define TOOLBAR_ITEM_W 86
+#define TOOLBAR_ITEM_H 86
+
+#define TOOLBAR_0_X 38
+#define TOOLBAR_0_Y 594
+
+#define TOOLBAR_1_X 38
+#define TOOLBAR_1_Y 454
+
+#define TOOLBAR_2_X 38
+#define TOOLBAR_2_Y 317
+
+#define TOOLBAR_3_X 38
+#define TOOLBAR_3_Y 180
+
+#define TOOLBAR_4_X 38
+#define TOOLBAR_4_Y 40
+
+#define SHUTTER_X 1146
+#define SHUTTER_Y 194
+#define SHUTTER_W 108
+#define SHUTTER_H 214
+
+#define BACKBTN_X 1146
+#define BACKBTN_Y 18
+#define BACKBTN_W 108
+#define BACKBTN_H 108
+
+#define QUICKVIEW_X 1146
+#define QUICKVIEW_Y 604
+#define QUICKVIEW_W 108
+#define QUICKVIEW_H 108
+
+#define RECORDINGBTN_X 1146
+#define RECORDINGBTN_Y 418
+#define RECORDINGBTN_W 108
+#define RECORDINGBTN_H 108
+
+#define REC_STOP_BTN_X 1146
+#define REC_STOP_BTN_Y 594
+#define REC_STOP_BTN_W 108
+#define REC_STOP_BTN_H 108
+
+#define CAF_BUTTON_X 38
+#define CAF_BUTTON_Y 606
+#define CAF_BUTTON_W 87
+#define CAF_BUTTON_H 88
+
+#define CAMERA_BUTTON_X 38
+#define CAMERA_BUTTON_Y 65
+#define CAMERA_BUTTON_W 61
+#define CAMERA_BUTTON_H 61
+#define CAMCORDER_BUTTON_X 38
+#define CAMCORDER_BUTTON_Y 109
+#define CAMCORDER_BUTTON_W 61
+#define CAMCORDER_BUTTON_H 61
+#define CAMERA_ICON_X 38
+#define CAMERA_ICON_Y 10
+#define CAMERA_ICON_W 56
+#define CAMERA_ICON_H 48
+
+images {
+ /*item_button*/
+ image: BUTTON_BG_NORMAL_IMAGE COMP;
+ image: BUTTON_BG_PRESS_IMAGE COMP;
+
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ image: LEFT_TOOLBAR_BG_IMAGE COMP;
+ image: RIGHT_TOOLBAR_BG_IMAGE COMP;
+
+ image: CAF_BUTTON_NORMAL_IMAGE COMP;
+ image: CAF_BUTTON_PRESS_IMAGE COMP;
+}
+
+#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \
+ rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \
+ image { normal: img; } \
+ }\
+ description{ \
+ state: "hide" 0.0; \
+ inherit:"default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON_WITH_BG(button_name, x, y, bg_w, bg_h) \
+ part { name: button_name; \
+ type: IMAGE; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (x)/(bg_w) (y)/(bg_h); offset: 0 0;} \
+ rel2 { relative: (x+TOOLBAR_ITEM_W)/(bg_w) (y+TOOLBAR_ITEM_H)/(bg_h); offset: 0 0;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_NORMAL_IMAGE; } \
+ } \
+ description { \
+ state: "press" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_PRESS_IMAGE; } \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (x)/(bg_w) (y)/(bg_h); offset: 0 0;} \
+ rel2 { relative: (x+w)/(bg_w) (y+h)/(bg_h); offset: 0 0;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ part { name: icon_name"_event"; \
+ type: RECT; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1.to: icon_name; \
+ rel2.to: icon_name; \
+ color: 0 0 0 0; \
+ visible: 1; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (x)/(bg_w) (y)/(bg_h); offset: 0 0;} \
+ rel2 { relative: (x+w)/(bg_w) (y+h)/(bg_h); offset: -1 -1;} \
+ } \
+ }
+
+#define TOOLBAR_LEFT_ITEM_PROGRAM(button_name, icon_name, press_signal, release_signal, click_signal) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( press_signal, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( release_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( click_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",edit"; \
+ source: "prog"; \
+ signal: icon_name",edit"; \
+ script: { \
+ set_state(PART:button_name, "normal", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_RIGHT_ITEM_PROGRAM(icon_name, press_signal_name, release_signal_name, click_signal_name) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( press_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( release_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ emit( click_signal_name, "toolbar_signal" );\
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",press"; \
+ source: "prog"; \
+ signal: icon_name",press"; \
+ script: { \
+ set_state(PART:icon_name, "press", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON(name, x, y) \
+ TOOLBAR_ITEM_BUTTON_WITH_BG(name, x, y, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_ICON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#endif /*__H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__*/
+//end files
diff --git a/edc/cam_toolbar_layout_inverse.edc b/edc/cam_toolbar_layout_inverse.edc
new file mode 100755
index 0000000..327fc70
--- /dev/null
+++ b/edc/cam_toolbar_layout_inverse.edc
@@ -0,0 +1,619 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+#include "cam_toolbar_layout_inverse_inc.edc"
+#include "cam_setting_popup_layout_inc.edc"
+
+
+collections {
+
+ group {
+ name: "toolbar";
+ min: MAIN_W MAIN_H;
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: MAIN_W MAIN_H;
+ max: MAIN_W MAIN_H;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+
+ TOOLBAR_BACKGROUND_IMAGE("left_bg", 0, 0, TOOLBAR_W, MAIN_H, RIGHT_TOOLBAR_BG_IMAGE)
+ TOOLBAR_BACKGROUND_IMAGE("right_bg", MAIN_W-TOOLBAR_W, 0, TOOLBAR_W, MAIN_H, LEFT_TOOLBAR_BG_IMAGE)
+
+ part { name: "popup_area";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: (1 - (MAIN_W-TOOLBAR_W)/MAIN_W) 0.0; to: "bg";}
+ rel2{ relative: (1 - TOOLBAR_W/MAIN_W) 1.0; to: "bg";}
+ }
+ }
+
+ part { name: "setting_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: (1 - (MAIN_W-TOOLBAR_W)/MAIN_W) 0.0; to: "bg";}
+ rel2{ relative: (1 - TOOLBAR_W/MAIN_W) 1.0; to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: (1 - (TOOLBAR_W+720)/MAIN_W) 0.0; to: "bg";}
+ rel2{ relative: (1 - TOOLBAR_W/MAIN_W) (MAIN_H-120)/MAIN_H; to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup_description";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: (1 - (TOOLBAR_W+720)/MAIN_W) (MAIN_H-120)/MAIN_H; to: "bg";}
+ rel2{ relative: (1 - TOOLBAR_W/MAIN_W) 1.0; to: "bg";}
+ }
+ }
+
+ TOOLBAR_ITEM_BUTTON("toolbar_0_button", TOOLBAR_0_X, TOOLBAR_0_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_1_button", TOOLBAR_1_X, TOOLBAR_1_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_2_button", TOOLBAR_2_X, TOOLBAR_2_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_3_button", TOOLBAR_3_X, TOOLBAR_3_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_4_button", TOOLBAR_4_X, TOOLBAR_4_Y)
+
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_0_icon", TOOLBAR_0_X, TOOLBAR_0_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_1_icon", TOOLBAR_1_X, TOOLBAR_1_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_2_icon", TOOLBAR_2_X, TOOLBAR_2_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_3_icon", TOOLBAR_3_X, TOOLBAR_3_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_4_icon", TOOLBAR_4_X, TOOLBAR_4_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+
+ TOOLBAR_ITEM_SWALLOW_BUTTON("shutter_button", SHUTTER_X, SHUTTER_Y, SHUTTER_W, SHUTTER_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_button", RECORDINGBTN_X, RECORDINGBTN_Y, RECORDINGBTN_W, RECORDINGBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_stop_button",REC_STOP_BTN_X, REC_STOP_BTN_Y, REC_STOP_BTN_W, REC_STOP_BTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("quickview_item", QUICKVIEW_X, QUICKVIEW_Y, QUICKVIEW_W, QUICKVIEW_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("backbutton_item", BACKBTN_X, BACKBTN_Y, BACKBTN_W, BACKBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("cafbutton_item", CAF_BUTTON_X, CAF_BUTTON_Y, CAF_BUTTON_W, CAF_BUTTON_H)
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "toolbar_bg,show";
+ source: "prog";
+ signal: "toolbar_bg,show";
+ script: {
+ set_state(PART:"left_bg", "default", 0.0);
+ set_state(PART:"right_bg", "default", 0.0);
+ }
+ }
+ program {
+ name: "toolbar_bg,hide";
+ source: "prog";
+ signal: "toolbar_bg,hide";
+ script: {
+ set_state(PART:"left_bg", "hide", 0.0);
+ set_state(PART:"right_bg", "hide", 0.0);
+ }
+ }
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_0_button", "toolbar_0_icon", "toolbar_0_press_sig", "toolbar_0_release_sig", "toolbar_0_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_1_button", "toolbar_1_icon", "toolbar_1_press_sig", "toolbar_1_release_sig", "toolbar_1_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_2_button", "toolbar_2_icon", "toolbar_2_press_sig", "toolbar_2_release_sig", "toolbar_2_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_3_button", "toolbar_3_icon", "toolbar_3_press_sig", "toolbar_3_release_sig", "toolbar_3_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_4_button", "toolbar_4_icon", "toolbar_4_press_sig", "toolbar_4_release_sig", "toolbar_4_click_sig")
+ }/*end programs*/
+ }/*end group :toolbar*/
+
+ group {
+ name: "shutter_button";
+
+ images {
+ image: SHUTTER_NORMAL_INVERSE_IMAGE COMP;
+ image: SHUTTER_PRESS_IMAGE COMP;
+ image: SHUTTER_DIM_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_NORMAL_INVERSE_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_PRESS_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_DIM_IMAGE; }
+ }
+ }
+
+ part { name: "camera_icon";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ align: 0.5 0.5;
+ max: 60 60;
+ min: 60 60;
+ fixed:1 1;
+ rel1 { relative: 0.0 0.0; to: "capture_button";}
+ rel2 { relative: 1.0 1.0; to: "capture_button";}
+ visible: 1;
+ }
+
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+
+ program {
+ name: "camera_icon,normal";
+ source: "prog";
+ signal: "camera_icon,normal";
+ script: { set_state(PART:"camera_icon", "normal", 0.0); }
+ }
+ program {
+ name: "camera_icon,invisible";
+ source: "prog";
+ signal: "camera_icon,invisible";
+ script: { set_state(PART:"camera_icon", "dim", 0.0); }
+ }
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_button";
+
+ images {
+ image: CAMCORDER_SHUTTER_ICON_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_DIM_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_DIM_IMAGE; }
+ }
+ }
+ part { name: "recording_pause_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_pause_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_stop_button";
+
+ images {
+ image: CAMCORDER_STOP_ICON_IMAGE COMP;
+ image: CAMCORDER_STOP_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_stop_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_stop_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "toolbar_quickview_item";
+
+ images {
+ image: THUMBNAIL_BG_NORMAL_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "bg";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal: THUMBNAIL_BG_NORMAL_IMAGE ;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "thumbnail";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1/9 1/9;to: "bg"; }
+ rel2 { relative: 8/9 8/9;to: "bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part { name: "thumbnail_area"; /*note: just for c codes get thumbnail x,y,w,h*/
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "thumbnail"; }
+ rel2 { relative: 1.0 1.0; to: "thumbnail"; }
+ color: 0 0 0 0;
+ }
+ }
+
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "quickview_bg,mouse,down,1";
+ signal: "mouse,down,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,press" "toolbar_signal";
+ }
+ program {
+ name: "quickview_bg,mouse,up,1";
+ signal: "mouse,up,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,release" "toolbar_signal";
+ }
+ program {
+ name: "prog_set_default";
+ source: "prog";
+ signal: "SET_DEFAULT";
+ script: {
+ set_state(PART:"bg", "default", 0.0);
+ set_state(PART:"thumbnail", "default", 0.0);
+ }
+ }
+ program {
+ name: "prog_set_invisible";
+ source: "prog";
+ signal: "SET_INVISIBLE";
+ script: {
+ set_state(PART:"bg", "invisible", 0.0);
+ set_state(PART:"thumbnail", "invisible", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_quickview_item*/
+
+ group{
+ name: "toolbar_backbutton_item";
+
+ images{
+ image: BACK_BUTTON_NORMAL_IMAGE COMP;
+ image: BACK_BUTTON_PRESS_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "back_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "back_button_press";
+ signal: "mouse,down,1";
+ source: "back_button";
+ action: STATE_SET "press" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_release";
+ signal: "mouse,up,1";
+ source: "back_button";
+ action: STATE_SET "default" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "back_button";
+ action: SIGNAL_EMIT "landscape,backbutton,clicked" "toolbar_signal";
+ }
+ }/*end programs*/
+ }/*end toolbar_backbutton_item*/
+
+ group{
+ name: "toolbar_cafbutton_item";
+
+ parts{
+ part{
+ name: "caf_button";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description{
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "caf_button_press";
+ signal: "mouse,down,1";
+ source: "caf_button";
+ action: STATE_SET "press" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_release";
+ signal: "mouse,up,1";
+ source: "caf_button";
+ action: STATE_SET "normal" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "caf_button";
+ action: SIGNAL_EMIT "caf_button,clicked" "toolbar_signal";
+ }
+ program {
+ name: "caf_button_normal";
+ source: "prog";
+ signal: "caf_button,normal";
+ script: {
+ set_state(PART:"caf_button", "normal", 0.0);
+ }
+ }
+ program {
+ name: "caf_button_default";
+ source: "prog";
+ signal: "caf_button,invisible";
+ script: {
+ set_state(PART:"caf_button", "default", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_cafbutton_item*/
+
+ group{
+ name: "toolbar_capture_button_item";
+
+ images{
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "capture_button_press";
+ signal: "mouse,down,1";
+ source: "capture_button";
+ action: STATE_SET "press" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_release";
+ signal: "mouse,up,1";
+ source: "capture_button";
+ action: STATE_SET "default" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "capture_button";
+ action: SIGNAL_EMIT "capture_button_click" "capture_button_click";
+ }
+ }/*end programs*/
+ }
+}/*end collections*/
+//end file
diff --git a/edc/cam_toolbar_layout_inverse_inc.edc b/edc/cam_toolbar_layout_inverse_inc.edc
new file mode 100755
index 0000000..e06ed88
--- /dev/null
+++ b/edc/cam_toolbar_layout_inverse_inc.edc
@@ -0,0 +1,353 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+#define __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+
+#define SETTING_TOOLBAR_W 1156
+#define SETTING_TOOLBAR_H 116
+
+#define TOOLBAR_ITEM_W 86
+#define TOOLBAR_ITEM_H 86
+
+#define TOOLBAR_0_X 38
+#define TOOLBAR_0_Y 594
+
+#define TOOLBAR_1_X 38
+#define TOOLBAR_1_Y 454
+
+#define TOOLBAR_2_X 38
+#define TOOLBAR_2_Y 317
+
+#define TOOLBAR_3_X 38
+#define TOOLBAR_3_Y 180
+
+#define TOOLBAR_4_X 38
+#define TOOLBAR_4_Y 40
+
+#define SHUTTER_X 1146
+#define SHUTTER_Y 194
+#define SHUTTER_W 108
+#define SHUTTER_H 214
+
+#define BACKBTN_X 1146
+#define BACKBTN_Y 18
+#define BACKBTN_W 108
+#define BACKBTN_H 108
+
+#define QUICKVIEW_X 1146
+#define QUICKVIEW_Y 604
+#define QUICKVIEW_W 108
+#define QUICKVIEW_H 108
+
+#define RECORDINGBTN_X 1146
+#define RECORDINGBTN_Y 418
+#define RECORDINGBTN_W 108
+#define RECORDINGBTN_H 108
+
+#define REC_STOP_BTN_X 1146
+#define REC_STOP_BTN_Y 594
+#define REC_STOP_BTN_W 108
+#define REC_STOP_BTN_H 108
+
+#define CAF_BUTTON_X 38
+#define CAF_BUTTON_Y 606
+#define CAF_BUTTON_W 87
+#define CAF_BUTTON_H 88
+
+#define CAMERA_BUTTON_X 38
+#define CAMERA_BUTTON_Y 65
+#define CAMERA_BUTTON_W 61
+#define CAMERA_BUTTON_H 61
+#define CAMCORDER_BUTTON_X 38
+#define CAMCORDER_BUTTON_Y 109
+#define CAMCORDER_BUTTON_W 61
+#define CAMCORDER_BUTTON_H 61
+#define CAMERA_ICON_X 38
+#define CAMERA_ICON_Y 10
+#define CAMERA_ICON_W 56
+#define CAMERA_ICON_H 48
+
+images {
+ /*item_button*/
+ image: BUTTON_BG_NORMAL_IMAGE COMP;
+ image: BUTTON_BG_PRESS_IMAGE COMP;
+
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ image: LEFT_TOOLBAR_BG_IMAGE COMP;
+ image: RIGHT_TOOLBAR_BG_IMAGE COMP;
+
+ image: CAF_BUTTON_NORMAL_IMAGE COMP;
+ image: CAF_BUTTON_PRESS_IMAGE COMP;
+}
+
+#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (1 - (x+w)/MAIN_W) (1 - (y+h)/MAIN_H); } \
+ rel2 { relative: (1 - (x)/MAIN_W) (1 - (y)/MAIN_H); } \
+ image { normal: img; } \
+ } \
+ description{ \
+ state: "hide" 0.0; \
+ inherit:"default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON_WITH_BG(button_name, x, y, bg_w, bg_h) \
+ part { name: button_name; \
+ type: IMAGE; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (x+TOOLBAR_ITEM_W)/(bg_w)) (1 - (y+TOOLBAR_ITEM_H)/(bg_h)); offset: 1 0;} \
+ rel2 { relative: (1 - (x)/(bg_w)) (1 - (y)/(bg_h)); offset: 1 0;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_NORMAL_IMAGE; } \
+ } \
+ description { \
+ state: "press" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_PRESS_IMAGE; } \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (x+w)/(bg_w)) (1 - (y+h)/(bg_h)); offset: 1 0;} \
+ rel2 { relative: (1 - (x)/(bg_w)) (1 - (y)/(bg_h)); offset: 1 0;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ part { name: icon_name"_event"; \
+ type: RECT; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1.to: icon_name; \
+ rel2.to: icon_name; \
+ color: 0 0 0 0; \
+ visible: 1; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (x+w)/(bg_w)) (1 - (y+h)/(bg_h)); offset: 1 1;} \
+ rel2 { relative: (1 - (x)/(bg_w)) (1 - (y)/(bg_h)); offset: 0 0;} \
+ } \
+ }
+
+#define TOOLBAR_LEFT_ITEM_PROGRAM(button_name, icon_name, press_signal, release_signal, click_signal) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( press_signal, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( release_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( click_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",edit"; \
+ source: "prog"; \
+ signal: icon_name",edit"; \
+ script: { \
+ set_state(PART:button_name, "normal", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_RIGHT_ITEM_PROGRAM(icon_name, press_signal_name, release_signal_name, click_signal_name) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( press_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( release_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ emit( click_signal_name, "toolbar_signal" );\
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",press"; \
+ source: "prog"; \
+ signal: icon_name",press"; \
+ script: { \
+ set_state(PART:icon_name, "press", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON(name, x, y) \
+ TOOLBAR_ITEM_BUTTON_WITH_BG(name, x, y, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_ICON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#endif /*__H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__*/
+//end files
diff --git a/edc/cam_toolbar_layout_vertical.edc b/edc/cam_toolbar_layout_vertical.edc
new file mode 100755
index 0000000..0b4c0ed
--- /dev/null
+++ b/edc/cam_toolbar_layout_vertical.edc
@@ -0,0 +1,618 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+#include "cam_toolbar_layout_vertical_inc.edc"
+#include "cam_setting_popup_layout.edc"
+
+
+collections {
+
+ group {
+ name: "toolbar";
+ min: MAIN_H MAIN_W;
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: MAIN_H MAIN_W;
+ max: MAIN_H MAIN_W;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+
+ TOOLBAR_BACKGROUND_IMAGE("left_bg", 0, 0, TOOLBAR_W, MAIN_H, LEFT_TOOLBAR_BG_VER_IMAGE)
+ TOOLBAR_BACKGROUND_IMAGE("right_bg", MAIN_W-TOOLBAR_W, 0, TOOLBAR_W, MAIN_H, RIGHT_TOOLBAR_BG_VER_IMAGE)
+
+ part { name: "popup_area";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 TOOLBAR_W/MAIN_W; to: "bg";}
+ rel2{ relative: 1.0 (MAIN_W-TOOLBAR_W)/MAIN_W; to: "bg";}
+ }
+ }
+
+ part { name: "setting_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 TOOLBAR_W/MAIN_W; to: "bg";}
+ rel2{ relative: 1.0 (MAIN_W-TOOLBAR_W)/MAIN_W; to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 TOOLBAR_W/MAIN_W; to: "bg";}
+ rel2{ relative: 1.0 (TOOLBAR_W+720-120)/MAIN_W; to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup_description";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 (TOOLBAR_W+720-120)/MAIN_W; to: "bg";}
+ rel2{ relative: 1.0 (TOOLBAR_W+720)/MAIN_W; to: "bg";}
+ }
+ }
+
+ TOOLBAR_ITEM_BUTTON("toolbar_0_button", TOOLBAR_0_X, TOOLBAR_0_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_1_button", TOOLBAR_1_X, TOOLBAR_1_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_2_button", TOOLBAR_2_X, TOOLBAR_2_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_3_button", TOOLBAR_3_X, TOOLBAR_3_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_4_button", TOOLBAR_4_X, TOOLBAR_4_Y)
+
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_0_icon", TOOLBAR_0_X, TOOLBAR_0_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_1_icon", TOOLBAR_1_X, TOOLBAR_1_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_2_icon", TOOLBAR_2_X, TOOLBAR_2_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_3_icon", TOOLBAR_3_X, TOOLBAR_3_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_4_icon", TOOLBAR_4_X, TOOLBAR_4_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+
+ TOOLBAR_ITEM_SWALLOW_BUTTON("shutter_button", SHUTTER_X, SHUTTER_Y, SHUTTER_W, SHUTTER_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_button", RECORDINGBTN_X, RECORDINGBTN_Y, RECORDINGBTN_W, RECORDINGBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_stop_button",REC_STOP_BTN_X, REC_STOP_BTN_Y, REC_STOP_BTN_W, REC_STOP_BTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("quickview_item", QUICKVIEW_X, QUICKVIEW_Y, QUICKVIEW_W, QUICKVIEW_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("backbutton_item", BACKBTN_X, BACKBTN_Y, BACKBTN_W, BACKBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("cafbutton_item", CAF_BUTTON_X, CAF_BUTTON_Y, CAF_BUTTON_W, CAF_BUTTON_H)
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "toolbar_bg,show";
+ source: "prog";
+ signal: "toolbar_bg,show";
+ script: {
+ set_state(PART:"left_bg", "default", 0.0);
+ set_state(PART:"right_bg", "default", 0.0);
+ }
+ }
+ program {
+ name: "toolbar_bg,hide";
+ source: "prog";
+ signal: "toolbar_bg,hide";
+ script: {
+ set_state(PART:"left_bg", "hide", 0.0);
+ set_state(PART:"right_bg", "hide", 0.0);
+ }
+ }
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_0_button", "toolbar_0_icon", "toolbar_0_press_sig", "toolbar_0_release_sig", "toolbar_0_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_1_button", "toolbar_1_icon", "toolbar_1_press_sig", "toolbar_1_release_sig", "toolbar_1_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_2_button", "toolbar_2_icon", "toolbar_2_press_sig", "toolbar_2_release_sig", "toolbar_2_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_3_button", "toolbar_3_icon", "toolbar_3_press_sig", "toolbar_3_release_sig", "toolbar_3_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_4_button", "toolbar_4_icon", "toolbar_4_press_sig", "toolbar_4_release_sig", "toolbar_4_click_sig")
+ }/*end programs*/
+ }/*end group :toolbar*/
+
+ group {
+ name: "shutter_button";
+
+ images {
+ image: SHUTTER_NORMAL_VER_IMAGE COMP;
+ image: SHUTTER_PRESS_VER_IMAGE COMP;
+ image: SHUTTER_DIM_VER_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_NORMAL_VER_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_PRESS_VER_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_DIM_VER_IMAGE; }
+ }
+ }
+
+ part { name: "camera_icon";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ align: 0.5 0.5;
+ max: 60 60;
+ min: 60 60;
+ fixed:1 1;
+ rel1 { relative: 0.0 0.0; to: "capture_button";}
+ rel2 { relative: 1.0 1.0; to: "capture_button";}
+ visible: 1;
+ }
+
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+
+ program {
+ name: "camera_icon,normal";
+ source: "prog";
+ signal: "camera_icon,normal";
+ script: { set_state(PART:"camera_icon", "normal", 0.0); }
+ }
+ program {
+ name: "camera_icon,invisible";
+ source: "prog";
+ signal: "camera_icon,invisible";
+ script: { set_state(PART:"camera_icon", "dim", 0.0); }
+ }
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_button";
+
+ images {
+ image: CAMCORDER_SHUTTER_ICON_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_DIM_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_DIM_IMAGE; }
+ }
+ }
+ part { name: "recording_pause_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_pause_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_stop_button";
+
+ images {
+ image: CAMCORDER_STOP_ICON_IMAGE COMP;
+ image: CAMCORDER_STOP_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_stop_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_stop_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "toolbar_quickview_item";
+
+ images {
+ image: THUMBNAIL_BG_NORMAL_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "bg";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal: THUMBNAIL_BG_NORMAL_IMAGE ;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "thumbnail";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1/9 1/9; to: "bg"; }
+ rel2 { relative: 8/9 8/9; to: "bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part { name: "thumbnail_area"; /*note: just for c codes get thumbnail x,y,w,h*/
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "thumbnail"; }
+ rel2 { relative: 1.0 1.0; to: "thumbnail"; }
+ color: 0 0 0 0;
+ }
+ }
+
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "quickview_bg,mouse,down,1";
+ signal: "mouse,down,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,press" "toolbar_signal";
+ }
+ program {
+ name: "quickview_bg,mouse,up,1";
+ signal: "mouse,up,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,release" "toolbar_signal";
+ }
+ program {
+ name: "prog_set_default";
+ source: "prog";
+ signal: "SET_DEFAULT";
+ script: {
+ set_state(PART:"bg", "default", 0.0);
+ set_state(PART:"thumbnail", "default", 0.0);
+ }
+ }
+ program {
+ name: "prog_set_invisible";
+ source: "prog";
+ signal: "SET_INVISIBLE";
+ script: {
+ set_state(PART:"bg", "invisible", 0.0);
+ set_state(PART:"thumbnail", "invisible", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_quickview_item*/
+
+ group{
+ name: "toolbar_backbutton_item";
+
+ images{
+ image: BACK_BUTTON_NORMAL_IMAGE COMP;
+ image: BACK_BUTTON_PRESS_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "back_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "back_button_press";
+ signal: "mouse,down,1";
+ source: "back_button";
+ action: STATE_SET "press" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_release";
+ signal: "mouse,up,1";
+ source: "back_button";
+ action: STATE_SET "default" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "back_button";
+ action: SIGNAL_EMIT "landscape,backbutton,clicked" "toolbar_signal";
+ }
+ }/*end programs*/
+ }/*end toolbar_backbutton_item*/
+
+ group{
+ name: "toolbar_cafbutton_item";
+
+ parts{
+ part{
+ name: "caf_button";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description{
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "caf_button_press";
+ signal: "mouse,down,1";
+ source: "caf_button";
+ action: STATE_SET "press" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_release";
+ signal: "mouse,up,1";
+ source: "caf_button";
+ action: STATE_SET "normal" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "caf_button";
+ action: SIGNAL_EMIT "caf_button,clicked" "toolbar_signal";
+ }
+ program {
+ name: "caf_button_normal";
+ source: "prog";
+ signal: "caf_button,normal";
+ script: {
+ set_state(PART:"caf_button", "normal", 0.0);
+ }
+ }
+ program {
+ name: "caf_button_default";
+ source: "prog";
+ signal: "caf_button,invisible";
+ script: {
+ set_state(PART:"caf_button", "default", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_cafbutton_item*/
+
+ group{
+ name: "toolbar_capture_button_item";
+
+ images{
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "capture_button_press";
+ signal: "mouse,down,1";
+ source: "capture_button";
+ action: STATE_SET "press" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_release";
+ signal: "mouse,up,1";
+ source: "capture_button";
+ action: STATE_SET "default" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "capture_button";
+ action: SIGNAL_EMIT "capture_button_click" "capture_button_click";
+ }
+ }/*end programs*/
+ }
+}/*end collections*/
+//end file
diff --git a/edc/cam_toolbar_layout_vertical_inc.edc b/edc/cam_toolbar_layout_vertical_inc.edc
new file mode 100755
index 0000000..c2c6ace
--- /dev/null
+++ b/edc/cam_toolbar_layout_vertical_inc.edc
@@ -0,0 +1,353 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+#define __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+
+#define SETTING_TOOLBAR_W 1156
+#define SETTING_TOOLBAR_H 116
+
+#define TOOLBAR_ITEM_W 86
+#define TOOLBAR_ITEM_H 86
+
+#define TOOLBAR_0_X 38
+#define TOOLBAR_0_Y 594
+
+#define TOOLBAR_1_X 38
+#define TOOLBAR_1_Y 454
+
+#define TOOLBAR_2_X 38
+#define TOOLBAR_2_Y 317
+
+#define TOOLBAR_3_X 38
+#define TOOLBAR_3_Y 180
+
+#define TOOLBAR_4_X 38
+#define TOOLBAR_4_Y 40
+
+#define SHUTTER_X 1146
+#define SHUTTER_Y 194
+#define SHUTTER_W 108
+#define SHUTTER_H 214
+
+#define BACKBTN_X 1146
+#define BACKBTN_Y 18
+#define BACKBTN_W 108
+#define BACKBTN_H 108
+
+#define QUICKVIEW_X 1146
+#define QUICKVIEW_Y 604
+#define QUICKVIEW_W 108
+#define QUICKVIEW_H 108
+
+#define RECORDINGBTN_X 1146
+#define RECORDINGBTN_Y 418
+#define RECORDINGBTN_W 108
+#define RECORDINGBTN_H 108
+
+#define REC_STOP_BTN_X 1146
+#define REC_STOP_BTN_Y 594
+#define REC_STOP_BTN_W 108
+#define REC_STOP_BTN_H 108
+
+#define CAF_BUTTON_X 38
+#define CAF_BUTTON_Y 606
+#define CAF_BUTTON_W 87
+#define CAF_BUTTON_H 88
+
+#define CAMERA_BUTTON_X 38
+#define CAMERA_BUTTON_Y 65
+#define CAMERA_BUTTON_W 61
+#define CAMERA_BUTTON_H 61
+#define CAMCORDER_BUTTON_X 38
+#define CAMCORDER_BUTTON_Y 109
+#define CAMCORDER_BUTTON_W 61
+#define CAMCORDER_BUTTON_H 61
+#define CAMERA_ICON_X 38
+#define CAMERA_ICON_Y 10
+#define CAMERA_ICON_W 56
+#define CAMERA_ICON_H 48
+
+images {
+ /*item_button*/
+ image: BUTTON_BG_NORMAL_IMAGE COMP;
+ image: BUTTON_BG_PRESS_IMAGE COMP;
+
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ image: LEFT_TOOLBAR_BG_VER_IMAGE COMP;
+ image: RIGHT_TOOLBAR_BG_VER_IMAGE COMP;
+
+ image: CAF_BUTTON_NORMAL_IMAGE COMP;
+ image: CAF_BUTTON_PRESS_IMAGE COMP;
+}
+
+#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (1 - (y+h)/MAIN_H) (x)/MAIN_W; } \
+ rel2 { relative: (1 - (y)/MAIN_H) (x+w)/MAIN_W; } \
+ image { normal: img; } \
+ }\
+ description{ \
+ state: "hide" 0.0; \
+ inherit:"default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON_WITH_BG(button_name, x, y, bg_w, bg_h) \
+ part { name: button_name; \
+ type: IMAGE; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (y+TOOLBAR_ITEM_H)/(bg_h)) (x)/(bg_w); offset: 0 0;} \
+ rel2 { relative: (1 - (y)/(bg_h)) (x+TOOLBAR_ITEM_W)/(bg_w); offset: 0 0;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_NORMAL_IMAGE; } \
+ } \
+ description { \
+ state: "press" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_PRESS_IMAGE; } \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (y+h)/(bg_h)) (x)/(bg_w); offset: 0 0;} \
+ rel2 { relative: (1 - (y)/(bg_h)) (x+w)/(bg_w); offset: 0 0;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ part { name: icon_name"_event"; \
+ type: RECT; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1.to: icon_name; \
+ rel2.to: icon_name; \
+ color: 0 0 0 0; \
+ visible: 1; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (1 - (y+h)/(bg_h)) (x)/(bg_w); offset: 1 0;} \
+ rel2 { relative: (1 - (y)/(bg_h)) (x+w)/(bg_w); offset: 0 -1;} \
+ } \
+ }
+
+#define TOOLBAR_LEFT_ITEM_PROGRAM(button_name, icon_name, press_signal, release_signal, click_signal) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( press_signal, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( release_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( click_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",edit"; \
+ source: "prog"; \
+ signal: icon_name",edit"; \
+ script: { \
+ set_state(PART:button_name, "normal", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_RIGHT_ITEM_PROGRAM(icon_name, press_signal_name, release_signal_name, click_signal_name) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( press_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( release_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ emit( click_signal_name, "toolbar_signal" );\
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",press"; \
+ source: "prog"; \
+ signal: icon_name",press"; \
+ script: { \
+ set_state(PART:icon_name, "press", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON(name, x, y) \
+ TOOLBAR_ITEM_BUTTON_WITH_BG(name, x, y, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_ICON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#endif /*__H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__*/
+//end files
diff --git a/edc/cam_toolbar_layout_vertical_inverse.edc b/edc/cam_toolbar_layout_vertical_inverse.edc
new file mode 100755
index 0000000..4eb028b
--- /dev/null
+++ b/edc/cam_toolbar_layout_vertical_inverse.edc
@@ -0,0 +1,618 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+#include "cam_toolbar_layout_vertical_inverse_inc.edc"
+#include "cam_setting_popup_layout_inc.edc"
+
+
+collections {
+
+ group {
+ name: "toolbar";
+ min: MAIN_H MAIN_W;
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: MAIN_H MAIN_W;
+ max: MAIN_H MAIN_W;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+
+ TOOLBAR_BACKGROUND_IMAGE("left_bg", 0, 0, TOOLBAR_W, MAIN_H, RIGHT_TOOLBAR_BG_VER_IMAGE)
+ TOOLBAR_BACKGROUND_IMAGE("right_bg", MAIN_W-TOOLBAR_W, 0, TOOLBAR_W, MAIN_H, LEFT_TOOLBAR_BG_VER_IMAGE)
+
+ part { name: "popup_area";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 (1 - (MAIN_W-TOOLBAR_W)/MAIN_W); to: "bg";}
+ rel2{ relative: 1.0 (1 - TOOLBAR_W/MAIN_W); to: "bg";}
+ }
+ }
+
+ part { name: "setting_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 (1 - (MAIN_W-TOOLBAR_W)/MAIN_W) ; to: "bg";}
+ rel2{ relative: 1.0 (1 - TOOLBAR_W/MAIN_W); to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 (1 - (TOOLBAR_W+720)/MAIN_W); to: "bg";}
+ rel2{ relative: 1.0 (1 - (TOOLBAR_W+120)/MAIN_W); to: "bg";}
+ }
+ }
+
+ part { name: "shortcuts_popup_description";
+ type: SWALLOW;
+ scale: 1;
+ description{
+ state:"default" 0.0;
+ rel1{ relative: 0.0 (1 - (TOOLBAR_W+120)/MAIN_W); to: "bg";}
+ rel2{ relative: 1.0 (1 - (TOOLBAR_W)/MAIN_W); to: "bg";}
+ }
+ }
+
+ TOOLBAR_ITEM_BUTTON("toolbar_0_button", TOOLBAR_0_X, TOOLBAR_0_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_1_button", TOOLBAR_1_X, TOOLBAR_1_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_2_button", TOOLBAR_2_X, TOOLBAR_2_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_3_button", TOOLBAR_3_X, TOOLBAR_3_Y)
+ TOOLBAR_ITEM_BUTTON("toolbar_4_button", TOOLBAR_4_X, TOOLBAR_4_Y)
+
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_0_icon", TOOLBAR_0_X, TOOLBAR_0_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_1_icon", TOOLBAR_1_X, TOOLBAR_1_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_2_icon", TOOLBAR_2_X, TOOLBAR_2_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_3_icon", TOOLBAR_3_X, TOOLBAR_3_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+ TOOLBAR_ITEM_SWALLOW_ICON("toolbar_4_icon", TOOLBAR_4_X, TOOLBAR_4_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H)
+
+ TOOLBAR_ITEM_SWALLOW_BUTTON("shutter_button", SHUTTER_X, SHUTTER_Y, SHUTTER_W, SHUTTER_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_button", RECORDINGBTN_X, RECORDINGBTN_Y, RECORDINGBTN_W, RECORDINGBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("recording_stop_button",REC_STOP_BTN_X, REC_STOP_BTN_Y, REC_STOP_BTN_W, REC_STOP_BTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("quickview_item", QUICKVIEW_X, QUICKVIEW_Y, QUICKVIEW_W, QUICKVIEW_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("backbutton_item", BACKBTN_X, BACKBTN_Y, BACKBTN_W, BACKBTN_H)
+ TOOLBAR_ITEM_SWALLOW_BUTTON("cafbutton_item", CAF_BUTTON_X, CAF_BUTTON_Y, CAF_BUTTON_W, CAF_BUTTON_H)
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "toolbar_bg,show";
+ source: "prog";
+ signal: "toolbar_bg,show";
+ script: {
+ set_state(PART:"left_bg", "default", 0.0);
+ set_state(PART:"right_bg", "default", 0.0);
+ }
+ }
+ program {
+ name: "toolbar_bg,hide";
+ source: "prog";
+ signal: "toolbar_bg,hide";
+ script: {
+ set_state(PART:"left_bg", "hide", 0.0);
+ set_state(PART:"right_bg", "hide", 0.0);
+ }
+ }
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_0_button", "toolbar_0_icon", "toolbar_0_press_sig", "toolbar_0_release_sig", "toolbar_0_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_1_button", "toolbar_1_icon", "toolbar_1_press_sig", "toolbar_1_release_sig", "toolbar_1_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_2_button", "toolbar_2_icon", "toolbar_2_press_sig", "toolbar_2_release_sig", "toolbar_2_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_3_button", "toolbar_3_icon", "toolbar_3_press_sig", "toolbar_3_release_sig", "toolbar_3_click_sig")
+ TOOLBAR_LEFT_ITEM_PROGRAM("toolbar_4_button", "toolbar_4_icon", "toolbar_4_press_sig", "toolbar_4_release_sig", "toolbar_4_click_sig")
+ }/*end programs*/
+ }/*end group :toolbar*/
+
+ group {
+ name: "shutter_button";
+
+ images {
+ image: SHUTTER_NORMAL_VER_INVERSE_IMAGE COMP;
+ image: SHUTTER_PRESS_VER_IMAGE COMP;
+ image: SHUTTER_DIM_VER_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_NORMAL_VER_INVERSE_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_PRESS_VER_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: SHUTTER_DIM_VER_IMAGE; }
+ }
+ }
+
+ part { name: "camera_icon";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ aspect: 1.0 1.0;
+ align: 0.5 0.5;
+ max: 60 60;
+ min: 60 60;
+ fixed:1 1;
+ rel1 { relative: 0.0 0.0; to: "capture_button";}
+ rel2 { relative: 1.0 1.0; to: "capture_button";}
+ visible: 1;
+ }
+
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+
+ program {
+ name: "camera_icon,normal";
+ source: "prog";
+ signal: "camera_icon,normal";
+ script: { set_state(PART:"camera_icon", "normal", 0.0); }
+ }
+ program {
+ name: "camera_icon,invisible";
+ source: "prog";
+ signal: "camera_icon,invisible";
+ script: { set_state(PART:"camera_icon", "dim", 0.0); }
+ }
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_button";
+
+ images {
+ image: CAMCORDER_SHUTTER_ICON_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE COMP;
+ image: CAMCORDER_SHUTTER_ICON_DIM_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_IMAGE COMP;
+ image: CAMCORDER_PAUSE_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_PRESS_IMAGE; }
+ }
+ description {
+ state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_SHUTTER_ICON_DIM_IMAGE; }
+ }
+ }
+ part { name: "recording_pause_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_PAUSE_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_pause_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "recording_stop_button";
+
+ images {
+ image: CAMCORDER_STOP_ICON_IMAGE COMP;
+ image: CAMCORDER_STOP_ICON_PRESS_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "recording_stop_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description {
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_IMAGE; }
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: CAMCORDER_STOP_ICON_PRESS_IMAGE; }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ TOOLBAR_RIGHT_ITEM_PROGRAM("recording_stop_button", "press_shutter_sig", "release_shutter_sig", "click_shutter_sig")
+ }/*end programs*/
+ }/*end group*/
+
+ group {
+ name: "toolbar_quickview_item";
+
+ images {
+ image: THUMBNAIL_BG_NORMAL_IMAGE COMP;
+ }
+
+ parts {
+ part { name: "bg";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal: THUMBNAIL_BG_NORMAL_IMAGE ;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "thumbnail";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 1/9 1/9; to: "bg"; }
+ rel2 { relative: 8/9 8/9; to: "bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part { name: "thumbnail_area"; /*note: just for c codes get thumbnail x,y,w,h*/
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "thumbnail"; }
+ rel2 { relative: 1.0 1.0; to: "thumbnail"; }
+ color: 0 0 0 0;
+ }
+ }
+
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "quickview_bg,mouse,down,1";
+ signal: "mouse,down,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,press" "toolbar_signal";
+ }
+ program {
+ name: "quickview_bg,mouse,up,1";
+ signal: "mouse,up,1";
+ source: "bg";
+ action: SIGNAL_EMIT "landscape,quickview,release" "toolbar_signal";
+ }
+ program {
+ name: "prog_set_default";
+ source: "prog";
+ signal: "SET_DEFAULT";
+ script: {
+ set_state(PART:"bg", "default", 0.0);
+ set_state(PART:"thumbnail", "default", 0.0);
+ }
+ }
+ program {
+ name: "prog_set_invisible";
+ source: "prog";
+ signal: "SET_INVISIBLE";
+ script: {
+ set_state(PART:"bg", "invisible", 0.0);
+ set_state(PART:"thumbnail", "invisible", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_quickview_item*/
+
+ group{
+ name: "toolbar_backbutton_item";
+
+ images{
+ image: BACK_BUTTON_NORMAL_IMAGE COMP;
+ image: BACK_BUTTON_PRESS_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "back_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : BACK_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "back_button_press";
+ signal: "mouse,down,1";
+ source: "back_button";
+ action: STATE_SET "press" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_release";
+ signal: "mouse,up,1";
+ source: "back_button";
+ action: STATE_SET "default" 0.0;
+ target: "back_button";
+ }
+ program {
+ name: "back_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "back_button";
+ action: SIGNAL_EMIT "landscape,backbutton,clicked" "toolbar_signal";
+ }
+ }/*end programs*/
+ }/*end toolbar_backbutton_item*/
+
+ group{
+ name: "toolbar_cafbutton_item";
+
+ parts{
+ part{
+ name: "caf_button";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ visible: 0;
+ }
+ description{
+ state: "normal" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal : CAF_BUTTON_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "caf_button_press";
+ signal: "mouse,down,1";
+ source: "caf_button";
+ action: STATE_SET "press" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_release";
+ signal: "mouse,up,1";
+ source: "caf_button";
+ action: STATE_SET "normal" 0.0;
+ target: "caf_button";
+ }
+ program {
+ name: "caf_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "caf_button";
+ action: SIGNAL_EMIT "caf_button,clicked" "toolbar_signal";
+ }
+ program {
+ name: "caf_button_normal";
+ source: "prog";
+ signal: "caf_button,normal";
+ script: {
+ set_state(PART:"caf_button", "normal", 0.0);
+ }
+ }
+ program {
+ name: "caf_button_default";
+ source: "prog";
+ signal: "caf_button,invisible";
+ script: {
+ set_state(PART:"caf_button", "default", 0.0);
+ }
+ }
+ }/*end programs*/
+ }/*end toolbar_cafbutton_item*/
+
+ group{
+ name: "toolbar_capture_button_item";
+
+ images{
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ }
+
+ parts{
+ part{
+ name: "capture_button";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description{
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_NORMAL_IMAGE;
+ }
+ }
+ description{
+ state: "press" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ image {
+ normal : SNAPSHOT_PRESS_IMAGE;
+ }
+ }
+ }
+ }/*end parts*/
+
+ programs {
+ program {
+ name: "capture_button_press";
+ signal: "mouse,down,1";
+ source: "capture_button";
+ action: STATE_SET "press" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_release";
+ signal: "mouse,up,1";
+ source: "capture_button";
+ action: STATE_SET "default" 0.0;
+ target: "capture_button";
+ }
+ program {
+ name: "capture_button_clicked";
+ signal: "mouse,clicked,1";
+ source: "capture_button";
+ action: SIGNAL_EMIT "capture_button_click" "capture_button_click";
+ }
+ }/*end programs*/
+ }
+}/*end collections*/
+//end file
diff --git a/edc/cam_toolbar_layout_vertical_inverse_inc.edc b/edc/cam_toolbar_layout_vertical_inverse_inc.edc
new file mode 100755
index 0000000..884fb27
--- /dev/null
+++ b/edc/cam_toolbar_layout_vertical_inverse_inc.edc
@@ -0,0 +1,353 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+#define __H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__
+
+#define SETTING_TOOLBAR_W 1156
+#define SETTING_TOOLBAR_H 116
+
+#define TOOLBAR_ITEM_W 86
+#define TOOLBAR_ITEM_H 86
+
+#define TOOLBAR_0_X 38
+#define TOOLBAR_0_Y 594
+
+#define TOOLBAR_1_X 38
+#define TOOLBAR_1_Y 454
+
+#define TOOLBAR_2_X 38
+#define TOOLBAR_2_Y 317
+
+#define TOOLBAR_3_X 38
+#define TOOLBAR_3_Y 180
+
+#define TOOLBAR_4_X 38
+#define TOOLBAR_4_Y 40
+
+#define SHUTTER_X 1146
+#define SHUTTER_Y 194
+#define SHUTTER_W 108
+#define SHUTTER_H 214
+
+#define BACKBTN_X 1146
+#define BACKBTN_Y 18
+#define BACKBTN_W 108
+#define BACKBTN_H 108
+
+#define QUICKVIEW_X 1146
+#define QUICKVIEW_Y 604
+#define QUICKVIEW_W 108
+#define QUICKVIEW_H 108
+
+#define RECORDINGBTN_X 1146
+#define RECORDINGBTN_Y 418
+#define RECORDINGBTN_W 108
+#define RECORDINGBTN_H 108
+
+#define REC_STOP_BTN_X 1146
+#define REC_STOP_BTN_Y 594
+#define REC_STOP_BTN_W 108
+#define REC_STOP_BTN_H 108
+
+#define CAF_BUTTON_X 38
+#define CAF_BUTTON_Y 606
+#define CAF_BUTTON_W 87
+#define CAF_BUTTON_H 88
+
+#define CAMERA_BUTTON_X 38
+#define CAMERA_BUTTON_Y 65
+#define CAMERA_BUTTON_W 61
+#define CAMERA_BUTTON_H 61
+#define CAMCORDER_BUTTON_X 38
+#define CAMCORDER_BUTTON_Y 109
+#define CAMCORDER_BUTTON_W 61
+#define CAMCORDER_BUTTON_H 61
+#define CAMERA_ICON_X 38
+#define CAMERA_ICON_Y 10
+#define CAMERA_ICON_W 56
+#define CAMERA_ICON_H 48
+
+images {
+ /*item_button*/
+ image: BUTTON_BG_NORMAL_IMAGE COMP;
+ image: BUTTON_BG_PRESS_IMAGE COMP;
+
+ image: SNAPSHOT_PRESS_IMAGE COMP;
+ image: SNAPSHOT_NORMAL_IMAGE COMP;
+ image: LEFT_TOOLBAR_BG_VER_IMAGE COMP;
+ image: RIGHT_TOOLBAR_BG_VER_IMAGE COMP;
+
+ image: CAF_BUTTON_NORMAL_IMAGE COMP;
+ image: CAF_BUTTON_PRESS_IMAGE COMP;
+}
+
+#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \
+ part { \
+ name: part_name; \
+ type: IMAGE; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0;\
+ rel1 { relative: (y)/MAIN_H (1 - (x+w)/MAIN_W); } \
+ rel2 { relative: (y+h)/MAIN_H (1 - (x)/MAIN_W); } \
+ image { normal: img; } \
+ } \
+ description{ \
+ state: "hide" 0.0; \
+ inherit:"default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON_WITH_BG(button_name, x, y, bg_w, bg_h) \
+ part { name: button_name; \
+ type: IMAGE; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (y)/(bg_h) (1 - (x+TOOLBAR_ITEM_W)/(bg_w)); offset: 0 1;} \
+ rel2 { relative: (y+TOOLBAR_ITEM_H)/(bg_h) (1 - (x)/(bg_w)); offset: 0 1;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_NORMAL_IMAGE; } \
+ } \
+ description { \
+ state: "press" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ image { normal: BUTTON_BG_PRESS_IMAGE; } \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (y)/(bg_h) (1 - (x+w)/(bg_w)); offset: 0 1;} \
+ rel2 { relative: (y+h)/(bg_h) (1 - (x)/(bg_w)); offset: 0 1;} \
+ visible: 0; \
+ } \
+ description { \
+ state: "normal" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ description { \
+ state: "dim" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ part { name: icon_name"_event"; \
+ type: RECT; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1.to: icon_name; \
+ rel2.to: icon_name; \
+ color: 0 0 0 0; \
+ visible: 1; \
+ } \
+ }
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h) \
+ part { name: icon_name; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1;\
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: (y)/(bg_h) (1 - (x+w)/(bg_w)); offset: 0 1;} \
+ rel2 { relative: (y+h)/(bg_h) (1 - (x)/(bg_w)); offset: -1 0;} \
+ } \
+ }
+
+#define TOOLBAR_LEFT_ITEM_PROGRAM(button_name, icon_name, press_signal, release_signal, click_signal) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( press_signal, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( release_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name"_event"; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "normal") == 0) { \
+ emit( click_signal, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",edit"; \
+ source: "prog"; \
+ signal: icon_name",edit"; \
+ script: { \
+ set_state(PART:button_name, "normal", 0.0); \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:button_name, "default", 0.0); \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_RIGHT_ITEM_PROGRAM(icon_name, press_signal_name, release_signal_name, click_signal_name) \
+ program { \
+ name: "mouse_down_"icon_name; \
+ signal: "mouse,down,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( press_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ } \
+ program { \
+ name: "mouse_up_"icon_name; \
+ signal: "mouse,up,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) { \
+ emit( release_signal_name, "toolbar_signal" );\
+ } \
+ }\
+ }\
+ program { \
+ name: "mouse_clicked_"icon_name; \
+ signal: "mouse,clicked,1"; \
+ source: icon_name; \
+ script {\
+ new st[31];\
+ new Float:vl;\
+ get_state(PART:icon_name, st, 30, vl);\
+ if (strcmp(st, "dim") != 0) \
+ emit( click_signal_name, "toolbar_signal" );\
+ }\
+ }\
+ program { \
+ name: icon_name",invisible"; \
+ source: "prog"; \
+ signal: icon_name",invisible"; \
+ script: { \
+ set_state(PART:icon_name, "default", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",normal"; \
+ source: "prog"; \
+ signal: icon_name",normal"; \
+ script: { \
+ set_state(PART:icon_name, "normal", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",press"; \
+ source: "prog"; \
+ signal: icon_name",press"; \
+ script: { \
+ set_state(PART:icon_name, "press", 0.0); \
+ } \
+ } \
+ program { \
+ name: icon_name",dim"; \
+ source: "prog"; \
+ signal: icon_name",dim"; \
+ script: { \
+ set_state(PART:icon_name, "dim", 0.0); \
+ } \
+ }
+
+#define TOOLBAR_ITEM_BUTTON(name, x, y) \
+ TOOLBAR_ITEM_BUTTON_WITH_BG(name, x, y, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_ICON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#define TOOLBAR_ITEM_SWALLOW_BUTTON(name, x, y, w, h) \
+ TOOLBAR_ITEM_SWALLOW_BUTTON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H)
+
+#endif /*__H_EDC_CAM_TOOLBAR_LAYOUT_INC_EDC_H__*/
+//end files
diff --git a/edc/cam_utils.edc b/edc/cam_utils.edc
new file mode 100755
index 0000000..e451a9b
--- /dev/null
+++ b/edc/cam_utils.edc
@@ -0,0 +1,436 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_funcs.edc"
+#include "../include/edc_image_name.h"
+
+#define CAM_FOCUS_IMG "CAMERA_FOCUS_IMG"
+
+images {
+ image: FOCUS_GUIDE_NOTREADY_IMAGE COMP;
+ image: FOCUS_GUIDE_FOCUSED_IMAGE COMP;
+ image: FOCUS_GUIDE_FAILED_IMAGE COMP;
+ image: SHOTTING_MODE_POPUP_BG_IMAGE COMP;
+ image: TIMER_ICON_BG_IMAGE COMP;
+}
+
+styles {
+ style {
+ name: "textblock_style";
+ base: "font=SLP:style=Roman font_size=40 align=left valign=top color=#ffffff wrap=word";
+ tag: "br" " \n";
+ }
+
+ style {
+ name: "textblock_style_center";
+ base: "font=SLP:style=Roman font_size=40 align=center valign=top color=#ffffff wrap=word";
+ tag: "br" " \n";
+ }
+
+ style {
+ name: "textblock_style_shot_guide";
+ base: "font=SLP:style=Roman font_size=36 align=center color=#FFFFFF ellipise=1.0 wrap=mixed";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+}
+
+
+collections {
+ group { name: "focus_image";
+ min: CAMERA_FOCUS_W CAMERA_FOCUS_H;
+ max: CAMERA_FOCUS_W CAMERA_FOCUS_H;
+ parts{
+ part {
+ name: CAM_FOCUS_IMG;
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+
+ }
+ description {
+ state: "notready" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image{
+ normal: FOCUS_GUIDE_NOTREADY_IMAGE;
+ border: 9 9 9 9;
+ border_scale: 1;
+ }
+ }
+ description {
+ state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image{
+ normal:FOCUS_GUIDE_FOCUSED_IMAGE;
+ border: 9 9 9 9;
+ border_scale: 1;
+ }
+ }
+ description {
+ state: "failed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image{
+ normal: FOCUS_GUIDE_FAILED_IMAGE;
+ border: 9 9 9 9;
+ border_scale: 1;
+ }
+ }
+
+ }
+ }
+
+ programs {
+ program { name: "focus,hide";
+ source: "program";
+ signal: "focus,hide";
+ action: STATE_SET "default" 0.0;
+ target: CAM_FOCUS_IMG;
+ }
+ program { name: "focus,notready";
+ source: "program";
+ signal: "focus,notready";
+ action: STATE_SET "notready" 0.0;
+ target: CAM_FOCUS_IMG;
+ }
+ program { name: "focus,focused";
+ source: "program";
+ signal: "focus,focused";
+ action: STATE_SET "focused" 0.0;
+ target: CAM_FOCUS_IMG;
+ }
+ program { name: "focus,failed";
+ source: "program";
+ signal: "focus,failed";
+ action: STATE_SET "failed" 0.0;
+ target: CAM_FOCUS_IMG;
+ }
+ }
+ }
+
+#define PX_POPUP_BOX_X 288
+#define PX_POPUP_BOX_Y 239
+#define VER_PX_POPUP_BOX_X 8
+#define VER_PX_POPUP_BOX_Y 519
+
+#define PX_POPUP_BOX_W 704
+#define PX_POPUP_BOX_H 242
+
+
+#define PX_POPUP_TEXT_Y 32
+
+#define PX_POPUP_BAR_X 72
+#define PX_POPUP_BAR_Y 182
+#define PX_POPUP_BAR_W 560
+#define PX_POPUP_BAR_H 21
+
+
+ group { name: "progress_popup";
+ parts {
+ part {
+ name: "progress_popup_bg";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: PX_POPUP_BOX_X/MAIN_W PX_POPUP_BOX_Y/MAIN_H; }
+ rel2 { relative: (PX_POPUP_BOX_X+PX_POPUP_BOX_W)/MAIN_W (PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/MAIN_H; }
+ image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; }
+ }
+ description {
+ state: "landscape" 0.0;
+ visible: 1;
+ rel1 { relative: PX_POPUP_BOX_X/MAIN_W PX_POPUP_BOX_Y/MAIN_H; }
+ rel2 { relative: (PX_POPUP_BOX_X+PX_POPUP_BOX_W)/MAIN_W (PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/MAIN_H; }
+ image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; }
+ }
+ description {
+ state: "vertical" 0.0;
+ visible: 1;
+ rel1 { relative: VER_PX_POPUP_BOX_X/VER_MAIN_W VER_PX_POPUP_BOX_Y/VER_MAIN_H; }
+ rel2 { relative: (VER_PX_POPUP_BOX_X+PX_POPUP_BOX_W)/VER_MAIN_W (VER_PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/VER_MAIN_H; }
+ image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "progress_popup_text";
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ rel1 { relative: 66/PX_POPUP_BOX_W PX_POPUP_TEXT_Y/PX_POPUP_BOX_H; to: progress_popup_bg; }
+ rel2 { relative: (PX_POPUP_BOX_W - 66)/PX_POPUP_BOX_W 152/PX_POPUP_BOX_H; to: progress_popup_bg; }
+ color: FONT_COLOR;
+ text {
+ style: "textblock_style";
+ min: 0 1;
+ }
+ }
+ }
+ //to swallow progressbar
+ part {
+ name: "progress_popup_bar";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ rel1 { relative: PX_POPUP_BAR_X/PX_POPUP_BOX_W PX_POPUP_BAR_Y/PX_POPUP_BOX_H;
+ to: progress_popup_bg; }
+ rel2 { relative: (PX_POPUP_BAR_X+PX_POPUP_BAR_W)/PX_POPUP_BOX_W (PX_POPUP_BAR_Y+PX_POPUP_BAR_H)/PX_POPUP_BOX_H;
+ to: progress_popup_bg; }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "progress_popup,default";
+ source: "prog";
+ signal: "progress_popup,default";
+ script: {
+ set_state(PART:"progress_popup_bg", "landscape", 0.0);
+ }
+ }
+ program {
+ name: "progress_popup,vertical";
+ source: "prog";
+ signal: "progress_popup,vertical";
+ script: {
+ set_state(PART:"progress_popup_bg", "vertical", 0.0);
+ }
+ }
+ }
+ }
+#if 1/*note: for burst mode*/
+//#define PX_POPUP_BOX_W 704
+//#define PX_POPUP_BOX_H 180
+
+group { name: "burst_progress_popup";
+ parts {
+ part {
+ name: "progress_popup_bg";
+ type: IMAGE;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: PX_POPUP_BOX_X/MAIN_W PX_POPUP_BOX_Y/MAIN_H; }
+ rel2 { relative: (PX_POPUP_BOX_X+PX_POPUP_BOX_W)/MAIN_W (PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/MAIN_H; }
+ image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; }
+ }
+ description {
+ state: "landscape" 0.0;
+ visible: 1;
+ rel1 { relative: PX_POPUP_BOX_X/MAIN_W PX_POPUP_BOX_Y/MAIN_H; }
+ rel2 { relative: (PX_POPUP_BOX_X+PX_POPUP_BOX_W)/MAIN_W (PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/MAIN_H; }
+ image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; }
+ }
+ description {
+ state: "vertical" 0.0;
+ visible: 1;
+ rel1 { relative: VER_PX_POPUP_BOX_X/VER_MAIN_W VER_PX_POPUP_BOX_Y/VER_MAIN_H; }
+ rel2 { relative: (VER_PX_POPUP_BOX_X+PX_POPUP_BOX_W)/VER_MAIN_W (VER_PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/VER_MAIN_H; }
+ image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "progress_popup_text";
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ rel1 { relative: 66/PX_POPUP_BOX_W PX_POPUP_TEXT_Y/PX_POPUP_BOX_H; to: progress_popup_bg; }
+ rel2 { relative: (PX_POPUP_BOX_W - 66)/PX_POPUP_BOX_W 152/PX_POPUP_BOX_H; to: progress_popup_bg; }
+ color: FONT_COLOR;
+ text {
+ style: "textblock_style_center";
+ min: 0 1;
+ }
+ }
+ }
+ //to swallow progressbar
+ part {
+ name: "progress_popup_bar";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ rel1 { relative: PX_POPUP_BAR_X/PX_POPUP_BOX_W PX_POPUP_BAR_Y/PX_POPUP_BOX_H;
+ to: progress_popup_bg; }
+ rel2 { relative: (PX_POPUP_BAR_X+PX_POPUP_BAR_W)/PX_POPUP_BOX_W (PX_POPUP_BAR_Y+PX_POPUP_BAR_H)/PX_POPUP_BOX_H;
+ to: progress_popup_bg; }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "progress_popup,default";
+ source: "prog";
+ signal: "progress_popup,default";
+ script: {
+ set_state(PART:"progress_popup_bg", "landscape", 0.0);
+ }
+ }
+ program {
+ name: "progress_popup,vertical";
+ source: "prog";
+ signal: "progress_popup,vertical";
+ script: {
+ set_state(PART:"progress_popup_bg", "vertical", 0.0);
+ }
+ }
+ }
+}
+
+
+#endif
+
+
+#define TIMER_ICON_W 188
+#define TIMER_ICON_H 158
+ group{ name: "timer_icon_landscape";
+
+ parts{
+ part {
+ name: "icon";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - TIMER_ICON_W/MAIN_W)/2 (1 - TIMER_ICON_H/MAIN_H)/2; offset: 0 0; }
+ rel2 { relative: (1 + TIMER_ICON_W/MAIN_W)/2 (1 + TIMER_ICON_H/MAIN_H)/2; offset: -1 -1; }
+ image { normal: TIMER_ICON_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to: "icon"; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; to: "icon"; }
+ color: COLOR_1;
+ text {
+ font: FONT_NAME;
+ size: 60;
+ min: 1 1;
+ align: 0.8 0.8;
+ }
+ }
+ }
+ }
+ }
+
+ group{ name: "timer_icon_portrait";
+
+ parts{
+ part {
+ name: "icon";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - TIMER_ICON_W/MAIN_H)/2 (1 - TIMER_ICON_H/MAIN_W)/2; offset: 0 0; }
+ rel2 { relative: (1 + TIMER_ICON_W/MAIN_H)/2 (1 + TIMER_ICON_H/MAIN_W)/2; offset: -1 -1; }
+ image { normal: TIMER_ICON_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to: "icon"; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; to: "icon"; }
+ color: COLOR_1;
+ text {
+ font: FONT_NAME;
+ size: 60;
+ min: 1 1;
+ align: 0.8 0.8;
+ }
+ }
+ }
+ }
+ }
+
+
+#define SHOT_GUIDE_POPUP_WIDTH 600
+#define SHOT_GUIDE_POPUP_HEIGHT 72
+ group{ name: "shot_guide_landscape";
+ parts{
+ part {
+ name: "text";
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - SHOT_GUIDE_POPUP_WIDTH/MAIN_W)/2 0.8; offset: 0 0; }
+ rel2 { relative: (1 + SHOT_GUIDE_POPUP_WIDTH/MAIN_W)/2 1.0; offset: -1 -1; }
+ color: COLOR_1;
+ text {
+ style: textblock_style_shot_guide;
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ }
+ }
+ }
+
+ group{ name: "shot_guide_potrait";
+ parts{
+ part {
+ name: "text";
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - SHOT_GUIDE_POPUP_WIDTH/MAIN_H)/2 0.75; offset: 0 0; }
+ rel2 { relative: (1 + SHOT_GUIDE_POPUP_WIDTH/MAIN_H)/2 0.85; offset: -1 -1; }
+ color: COLOR_1;
+ text {
+ style: textblock_style_shot_guide;
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/edc/cam_zoom_layout.edc b/edc/cam_zoom_layout.edc
new file mode 100755
index 0000000..216356d
--- /dev/null
+++ b/edc/cam_zoom_layout.edc
@@ -0,0 +1,341 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define ZOOM_BG_X 188
+#define ZOOM_BG_Y 89
+#define ZOOM_BG_W 96
+#define ZOOM_BG_H 542
+
+#define ZOOM_TEXT_X 0
+#define ZOOM_TEXT_Y 26
+#define ZOOM_TEXT_W 96
+#define ZOOM_TEXT_H 44
+
+#define ZOOM_SLIDE_X 0
+#define ZOOM_SLIDE_Y 104
+
+#define PIN_STEP_GAP (8)
+#define PIN_IMAGE_1X_WIDTH (160)
+#define PIN_IMAGE_1_1X_WIDTH (160 + PIN_STEP_GAP)
+#define PIN_IMAGE_1_2X_WIDTH (160 + PIN_STEP_GAP*2)
+#define PIN_IMAGE_1_3X_WIDTH (160 + PIN_STEP_GAP*3)
+#define PIN_IMAGE_1_4X_WIDTH (160 + PIN_STEP_GAP*4)
+#define PIN_IMAGE_1_5X_WIDTH (160 + PIN_STEP_GAP*5)
+#define PIN_IMAGE_1_6X_WIDTH (160 + PIN_STEP_GAP*6)
+#define PIN_IMAGE_1_7X_WIDTH (160 + PIN_STEP_GAP*7)
+#define PIN_IMAGE_1_8X_WIDTH (160 + PIN_STEP_GAP*8)
+#define PIN_IMAGE_1_9X_WIDTH (160 + PIN_STEP_GAP*9)
+
+#define PIN_IMAGE_2X_WIDTH (240)
+#define PIN_IMAGE_2_1X_WIDTH (240 + PIN_STEP_GAP)
+#define PIN_IMAGE_2_2X_WIDTH (240 + PIN_STEP_GAP*2)
+#define PIN_IMAGE_2_3X_WIDTH (240 + PIN_STEP_GAP*3)
+#define PIN_IMAGE_2_4X_WIDTH (240 + PIN_STEP_GAP*4)
+#define PIN_IMAGE_2_5X_WIDTH (240 + PIN_STEP_GAP*5)
+#define PIN_IMAGE_2_6X_WIDTH (240 + PIN_STEP_GAP*6)
+#define PIN_IMAGE_2_7X_WIDTH (240 + PIN_STEP_GAP*7)
+#define PIN_IMAGE_2_8X_WIDTH (240 + PIN_STEP_GAP*8)
+#define PIN_IMAGE_2_9X_WIDTH (240 + PIN_STEP_GAP*9)
+
+
+#define PIN_IMAGE_3X_WIDTH (320)
+#define PIN_IMAGE_3_1X_WIDTH (320 + PIN_STEP_GAP)
+#define PIN_IMAGE_3_2X_WIDTH (320 + PIN_STEP_GAP*2)
+#define PIN_IMAGE_3_3X_WIDTH (320 + PIN_STEP_GAP*3)
+#define PIN_IMAGE_3_4X_WIDTH (320 + PIN_STEP_GAP*4)
+#define PIN_IMAGE_3_5X_WIDTH (320 + PIN_STEP_GAP*5)
+#define PIN_IMAGE_3_6X_WIDTH (320 + PIN_STEP_GAP*6)
+#define PIN_IMAGE_3_7X_WIDTH (320 + PIN_STEP_GAP*7)
+#define PIN_IMAGE_3_8X_WIDTH (320 + PIN_STEP_GAP*8)
+#define PIN_IMAGE_3_9X_WIDTH (320 + PIN_STEP_GAP*9)
+
+#define PIN_IMAGE_4X_WIDTH (400)
+
+images {
+ image: ZOOM_BG_IMAGE COMP;
+ image: ZOOM_PINCH_IMAGE COMP;
+}
+
+#define ZOOM_X_DESCRIPTON(name, width, height) \
+description {\
+ state: name 0.0;\
+ rel1 { relative: (MAIN_W/2 - (width)/2)/MAIN_W (MAIN_H/2 - (width)/2)/MAIN_H;}\
+ rel2 { relative: (MAIN_W/2 + (height)/2)/MAIN_W (MAIN_H/2 + (height)/2)/MAIN_H;}\
+ image {\
+ normal: ZOOM_PINCH_IMAGE;\
+ border: 9 9 9 9;\
+ border_scale: 1;\
+ }\
+}
+
+#define ZOOM_X_TEXT_DESCRIPTION(name, txt) \
+description {\
+ state: name 0.0;\
+ align: 1.0 0.0;\
+ min: 0 40;\
+ max: 100 40;\
+ fixed: 1 1;\
+ rel1 { relative: 0.0 1.0; to: "pinch_image"; offset:0 2;}\
+ rel2 { relative: 1.0 1.0; to: "pinch_image";}\
+ text {\
+ font : FONT_NAME;\
+ size : 40;\
+ align: 0.5 0.5;\
+ text: txt;\
+ }\
+}
+
+#define ZOOM_X_PROGRAM(pro_name, pro_signal, pro_state)\
+program {\
+ name: "set.pinch."pro_name;\
+ source: "prog";\
+ signal: "set.pinch."pro_signal;\
+ script: {\
+ set_state(PART:"pinch_image", pro_state, 0.0);\
+ set_state(PART:"text_desc", pro_state, 0.0);\
+ }\
+ transition: LINEAR 0.1;\
+}
+
+
+collections {
+ group {
+ name: "pinch";
+ parts {
+ part {
+ name: "pinch_image";
+ type: IMAGE;
+ scale: 1;
+ ZOOM_X_DESCRIPTON("default", PIN_IMAGE_1X_WIDTH, PIN_IMAGE_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.0x", PIN_IMAGE_1X_WIDTH, PIN_IMAGE_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.1x", PIN_IMAGE_1_1X_WIDTH, PIN_IMAGE_1_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.2x", PIN_IMAGE_1_2X_WIDTH, PIN_IMAGE_1_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.3x", PIN_IMAGE_1_3X_WIDTH, PIN_IMAGE_1_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.4x", PIN_IMAGE_1_4X_WIDTH, PIN_IMAGE_1_4X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.5x", PIN_IMAGE_1_5X_WIDTH, PIN_IMAGE_1_5X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.6x", PIN_IMAGE_1_6X_WIDTH, PIN_IMAGE_1_6X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.7x", PIN_IMAGE_1_7X_WIDTH, PIN_IMAGE_1_7X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.8x", PIN_IMAGE_1_8X_WIDTH, PIN_IMAGE_1_8X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.9x", PIN_IMAGE_1_9X_WIDTH, PIN_IMAGE_1_9X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.0x", PIN_IMAGE_2X_WIDTH, PIN_IMAGE_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.1x", PIN_IMAGE_2_1X_WIDTH, PIN_IMAGE_2_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.2x", PIN_IMAGE_2_2X_WIDTH, PIN_IMAGE_2_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.3x", PIN_IMAGE_2_3X_WIDTH, PIN_IMAGE_2_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.4x", PIN_IMAGE_2_4X_WIDTH, PIN_IMAGE_2_4X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.5x", PIN_IMAGE_2_5X_WIDTH, PIN_IMAGE_2_5X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.6x", PIN_IMAGE_2_6X_WIDTH, PIN_IMAGE_2_6X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.7x", PIN_IMAGE_2_7X_WIDTH, PIN_IMAGE_2_7X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.8x", PIN_IMAGE_2_8X_WIDTH, PIN_IMAGE_2_8X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.9x", PIN_IMAGE_2_9X_WIDTH, PIN_IMAGE_2_9X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.0x", PIN_IMAGE_3X_WIDTH, PIN_IMAGE_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.1x", PIN_IMAGE_3_1X_WIDTH, PIN_IMAGE_3_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.2x", PIN_IMAGE_3_2X_WIDTH, PIN_IMAGE_3_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.3x", PIN_IMAGE_3_3X_WIDTH, PIN_IMAGE_3_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.4x", PIN_IMAGE_3_4X_WIDTH, PIN_IMAGE_3_4X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.5x", PIN_IMAGE_3_5X_WIDTH, PIN_IMAGE_3_5X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.6x", PIN_IMAGE_3_6X_WIDTH, PIN_IMAGE_3_6X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.7x", PIN_IMAGE_3_7X_WIDTH, PIN_IMAGE_3_7X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.8x", PIN_IMAGE_3_8X_WIDTH, PIN_IMAGE_3_8X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.9x", PIN_IMAGE_3_9X_WIDTH, PIN_IMAGE_3_9X_WIDTH)
+ ZOOM_X_DESCRIPTON("4.0x", PIN_IMAGE_4X_WIDTH, PIN_IMAGE_4X_WIDTH)
+ }
+
+ part {
+ name: "text_desc";
+ type: TEXT;
+ scale: 1;
+ ZOOM_X_TEXT_DESCRIPTION("default", "1.0x")
+ ZOOM_X_TEXT_DESCRIPTION("1.0x", "1.0x")
+ ZOOM_X_TEXT_DESCRIPTION("1.1x", "1.1x")
+ ZOOM_X_TEXT_DESCRIPTION("1.2x", "1.2x")
+ ZOOM_X_TEXT_DESCRIPTION("1.3x", "1.3x")
+ ZOOM_X_TEXT_DESCRIPTION("1.4x", "1.4x")
+ ZOOM_X_TEXT_DESCRIPTION("1.5x", "1.5x")
+ ZOOM_X_TEXT_DESCRIPTION("1.6x", "1.6x")
+ ZOOM_X_TEXT_DESCRIPTION("1.7x", "1.7x")
+ ZOOM_X_TEXT_DESCRIPTION("1.8x", "1.8x")
+ ZOOM_X_TEXT_DESCRIPTION("1.9x", "1.9x")
+ ZOOM_X_TEXT_DESCRIPTION("2.0x", "2.0x")
+ ZOOM_X_TEXT_DESCRIPTION("2.1x", "2.1x")
+ ZOOM_X_TEXT_DESCRIPTION("2.2x", "2.2x")
+ ZOOM_X_TEXT_DESCRIPTION("2.3x", "2.3x")
+ ZOOM_X_TEXT_DESCRIPTION("2.4x", "2.4x")
+ ZOOM_X_TEXT_DESCRIPTION("2.5x", "2.5x")
+ ZOOM_X_TEXT_DESCRIPTION("2.6x", "2.6x")
+ ZOOM_X_TEXT_DESCRIPTION("2.7x", "2.7x")
+ ZOOM_X_TEXT_DESCRIPTION("2.8x", "2.8x")
+ ZOOM_X_TEXT_DESCRIPTION("2.9x", "2.9x")
+ ZOOM_X_TEXT_DESCRIPTION("3.0x", "3.0x")
+ ZOOM_X_TEXT_DESCRIPTION("3.1x", "3.1x")
+ ZOOM_X_TEXT_DESCRIPTION("3.2x", "3.2x")
+ ZOOM_X_TEXT_DESCRIPTION("3.3x", "3.3x")
+ ZOOM_X_TEXT_DESCRIPTION("3.4x", "3.4x")
+ ZOOM_X_TEXT_DESCRIPTION("3.5x", "3.5x")
+ ZOOM_X_TEXT_DESCRIPTION("3.6x", "3.6x")
+ ZOOM_X_TEXT_DESCRIPTION("3.7x", "3.7x")
+ ZOOM_X_TEXT_DESCRIPTION("3.8x", "3.8x")
+ ZOOM_X_TEXT_DESCRIPTION("3.9x", "3.9x")
+ ZOOM_X_TEXT_DESCRIPTION("4.0x", "4.0x")
+ }
+
+ programs {
+ ZOOM_X_PROGRAM("default", "default", "default")
+ ZOOM_X_PROGRAM("1.0x", "1.0x", "1.0x")
+ ZOOM_X_PROGRAM("1.1x", "1.1x", "1.1x")
+ ZOOM_X_PROGRAM("1.2x", "1.2x", "1.2x")
+ ZOOM_X_PROGRAM("1.3x", "1.3x", "1.3x")
+ ZOOM_X_PROGRAM("1.4x", "1.4x", "1.4x")
+ ZOOM_X_PROGRAM("1.5x", "1.5x", "1.5x")
+ ZOOM_X_PROGRAM("1.6x", "1.6x", "1.6x")
+ ZOOM_X_PROGRAM("1.7x", "1.7x", "1.7x")
+ ZOOM_X_PROGRAM("1.8x", "1.8x", "1.8x")
+ ZOOM_X_PROGRAM("1.9x", "1.9x", "1.9x")
+ ZOOM_X_PROGRAM("2.0x", "2.0x", "2.0x")
+ ZOOM_X_PROGRAM("2.1x", "2.1x", "2.1x")
+ ZOOM_X_PROGRAM("2.2x", "2.2x", "2.2x")
+ ZOOM_X_PROGRAM("2.3x", "2.3x", "2.3x")
+ ZOOM_X_PROGRAM("2.4x", "2.4x", "2.4x")
+ ZOOM_X_PROGRAM("2.5x", "2.5x", "2.5x")
+ ZOOM_X_PROGRAM("2.6x", "2.6x", "2.6x")
+ ZOOM_X_PROGRAM("2.7x", "2.7x", "2.7x")
+ ZOOM_X_PROGRAM("2.8x", "2.8x", "2.8x")
+ ZOOM_X_PROGRAM("2.9x", "2.9x", "2.9x")
+ ZOOM_X_PROGRAM("3.0x", "3.0x", "3.0x")
+ ZOOM_X_PROGRAM("3.1x", "3.1x", "3.1x")
+ ZOOM_X_PROGRAM("3.2x", "3.2x", "3.2x")
+ ZOOM_X_PROGRAM("3.3x", "3.3x", "3.3x")
+ ZOOM_X_PROGRAM("3.4x", "3.4x", "3.4x")
+ ZOOM_X_PROGRAM("3.5x", "3.5x", "3.5x")
+ ZOOM_X_PROGRAM("3.6x", "3.6x", "3.6x")
+ ZOOM_X_PROGRAM("3.7x", "3.7x", "3.7x")
+ ZOOM_X_PROGRAM("3.8x", "3.8x", "3.8x")
+ ZOOM_X_PROGRAM("3.9x", "3.9x", "3.9x")
+ ZOOM_X_PROGRAM("4.0x", "4.0x", "4.0x")
+ }
+ }
+
+ }
+
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_W MAIN_H;
+ max: MAIN_W MAIN_H;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: ZOOM_BG_X/MAIN_W ZOOM_BG_Y/MAIN_H; to: "bg";}
+ rel2 { relative: (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H; to: "bg";}
+ image { normal: ZOOM_BG_IMAGE; }
+ }
+ }
+ part {
+ name: "text_min";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 (ZOOM_BG_H-ZOOM_TEXT_H-ZOOM_TEXT_Y)/ZOOM_BG_H; to: "bg_image"; }
+ rel2 { relative: 1.0 (ZOOM_BG_H-ZOOM_TEXT_Y)/ZOOM_BG_H; to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "text_max";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 ZOOM_TEXT_Y/ZOOM_BG_H; to: "bg_image"; }
+ rel2 { relative: 1.0 (ZOOM_TEXT_Y+ZOOM_TEXT_H)/ZOOM_BG_H; to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 ZOOM_SLIDE_Y/ZOOM_BG_H; to: "bg_image"; }
+ rel2 { relative: 1.0 (ZOOM_BG_H-ZOOM_SLIDE_Y)/ZOOM_BG_H; to: "bg_image"; }
+ }
+ }
+ programs {
+ program {
+ name:"set.zoom.default";
+ source: "prog";
+ signal: "set.zoom.default";
+ script: {
+ set_state(PART:"bg_image", "default", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.landscape_inverse";
+ source: "prog";
+ signal: "set.zoom.landscape_inverse";
+ script: {
+ set_state(PART:"bg_image", "landscape_inverse", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait";
+ source: "prog";
+ signal: "set.zoom.portrait";
+ script: {
+ set_state(PART:"bg_image", "portrait", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait_inverse";
+ source: "prog";
+ signal: "set.zoom.portrait_inverse";
+ script: {
+ set_state(PART:"bg_image", "portrait_inverse", 0.0);
+ }
+ }
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_zoom_layout_inverse.edc b/edc/cam_zoom_layout_inverse.edc
new file mode 100755
index 0000000..8193260
--- /dev/null
+++ b/edc/cam_zoom_layout_inverse.edc
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define ZOOM_BG_X 188
+#define ZOOM_BG_Y 89
+
+#define ZOOM_BG_W 96
+#define ZOOM_BG_H 542
+
+#define ZOOM_TEXT_X 0
+#define ZOOM_TEXT_Y 26
+#define ZOOM_TEXT_W 96
+#define ZOOM_TEXT_H 44
+
+#define ZOOM_SLIDE_X 0
+#define ZOOM_SLIDE_Y 104
+
+
+images {
+ image: ZOOM_BG_IMAGE COMP;
+}
+
+collections {
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_W MAIN_H;
+ max: MAIN_W MAIN_H;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W) (1 - (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H) ; offset: 0 0; to: "bg";}
+ rel2 { relative: (1 - ZOOM_BG_X/MAIN_W) (1 - ZOOM_BG_Y/MAIN_H); offset: -1 -1; to: "bg";}
+ image { normal: ZOOM_BG_IMAGE; }
+
+ }
+ }
+ part {
+ name: "text_min";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 (1 - (ZOOM_BG_H-ZOOM_TEXT_Y)/ZOOM_BG_H); to: "bg_image"; }
+ rel2 { relative: 1.0 (1 - (ZOOM_BG_H-ZOOM_TEXT_H-ZOOM_TEXT_Y)/ZOOM_BG_H); to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "text_max";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 (1.0 - (ZOOM_TEXT_Y+ZOOM_TEXT_H)/ZOOM_BG_H); to: "bg_image"; }
+ rel2 { relative: 1.0 (1.0 - ZOOM_TEXT_Y/ZOOM_BG_H); to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 (1.0 - (ZOOM_BG_H-ZOOM_SLIDE_Y)/ZOOM_BG_H); to: "bg_image"; }
+ rel2 { relative: 1.0 (1.0 - ZOOM_SLIDE_Y/ZOOM_BG_H); to: "bg_image"; }
+ }
+ }
+ programs {
+ program {
+ name:"set.zoom.default";
+ source: "prog";
+ signal: "set.zoom.default";
+ script: {
+ set_state(PART:"bg_image", "default", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.landscape_inverse";
+ source: "prog";
+ signal: "set.zoom.landscape_inverse";
+ script: {
+ set_state(PART:"bg_image", "landscape_inverse", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait";
+ source: "prog";
+ signal: "set.zoom.portrait";
+ script: {
+ set_state(PART:"bg_image", "portrait", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait_inverse";
+ source: "prog";
+ signal: "set.zoom.portrait_inverse";
+ script: {
+ set_state(PART:"bg_image", "portrait_inverse", 0.0);
+ }
+ }
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_zoom_layout_vertical.edc b/edc/cam_zoom_layout_vertical.edc
new file mode 100755
index 0000000..b6f0a37
--- /dev/null
+++ b/edc/cam_zoom_layout_vertical.edc
@@ -0,0 +1,344 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define ZOOM_BG_X 188
+#define ZOOM_BG_Y 89
+
+#define ZOOM_BG_W 96
+#define ZOOM_BG_H 542
+
+#define ZOOM_TEXT_X 0
+#define ZOOM_TEXT_Y 26
+#define ZOOM_TEXT_W 96
+#define ZOOM_TEXT_H 44
+
+#define ZOOM_SLIDE_X 0
+#define ZOOM_SLIDE_Y 104
+
+#define PIN_STEP_GAP (8)
+#define PIN_IMAGE_1X_WIDTH (160)
+#define PIN_IMAGE_1_1X_WIDTH (160 + PIN_STEP_GAP)
+#define PIN_IMAGE_1_2X_WIDTH (160 + PIN_STEP_GAP*2)
+#define PIN_IMAGE_1_3X_WIDTH (160 + PIN_STEP_GAP*3)
+#define PIN_IMAGE_1_4X_WIDTH (160 + PIN_STEP_GAP*4)
+#define PIN_IMAGE_1_5X_WIDTH (160 + PIN_STEP_GAP*5)
+#define PIN_IMAGE_1_6X_WIDTH (160 + PIN_STEP_GAP*6)
+#define PIN_IMAGE_1_7X_WIDTH (160 + PIN_STEP_GAP*7)
+#define PIN_IMAGE_1_8X_WIDTH (160 + PIN_STEP_GAP*8)
+#define PIN_IMAGE_1_9X_WIDTH (160 + PIN_STEP_GAP*9)
+
+#define PIN_IMAGE_2X_WIDTH (240)
+#define PIN_IMAGE_2_1X_WIDTH (240 + PIN_STEP_GAP)
+#define PIN_IMAGE_2_2X_WIDTH (240 + PIN_STEP_GAP*2)
+#define PIN_IMAGE_2_3X_WIDTH (240 + PIN_STEP_GAP*3)
+#define PIN_IMAGE_2_4X_WIDTH (240 + PIN_STEP_GAP*4)
+#define PIN_IMAGE_2_5X_WIDTH (240 + PIN_STEP_GAP*5)
+#define PIN_IMAGE_2_6X_WIDTH (240 + PIN_STEP_GAP*6)
+#define PIN_IMAGE_2_7X_WIDTH (240 + PIN_STEP_GAP*7)
+#define PIN_IMAGE_2_8X_WIDTH (240 + PIN_STEP_GAP*8)
+#define PIN_IMAGE_2_9X_WIDTH (240 + PIN_STEP_GAP*9)
+
+
+#define PIN_IMAGE_3X_WIDTH (320)
+#define PIN_IMAGE_3_1X_WIDTH (320 + PIN_STEP_GAP)
+#define PIN_IMAGE_3_2X_WIDTH (320 + PIN_STEP_GAP*2)
+#define PIN_IMAGE_3_3X_WIDTH (320 + PIN_STEP_GAP*3)
+#define PIN_IMAGE_3_4X_WIDTH (320 + PIN_STEP_GAP*4)
+#define PIN_IMAGE_3_5X_WIDTH (320 + PIN_STEP_GAP*5)
+#define PIN_IMAGE_3_6X_WIDTH (320 + PIN_STEP_GAP*6)
+#define PIN_IMAGE_3_7X_WIDTH (320 + PIN_STEP_GAP*7)
+#define PIN_IMAGE_3_8X_WIDTH (320 + PIN_STEP_GAP*8)
+#define PIN_IMAGE_3_9X_WIDTH (320 + PIN_STEP_GAP*9)
+
+#define PIN_IMAGE_4X_WIDTH (400)
+
+
+images {
+ image: ZOOM_BG_VER_IMAGE COMP;
+ image: ZOOM_PINCH_IMAGE COMP;
+}
+
+#define ZOOM_X_DESCRIPTON(name, width, height) \
+description {\
+ state: name 0.0;\
+ rel1 { relative: (VER_MAIN_W/2 - (width)/2)/VER_MAIN_W (VER_MAIN_H/2 - (width)/2)/VER_MAIN_H;}\
+ rel2 { relative: (VER_MAIN_W/2 + (height)/2)/VER_MAIN_W (VER_MAIN_H/2 + (height)/2)/VER_MAIN_H;}\
+ image {\
+ normal: ZOOM_PINCH_IMAGE;\
+ border: 9 9 9 9;\
+ border_scale: 1;\
+ }\
+}
+
+#define ZOOM_X_TEXT_DESCRIPTION(name, txt) \
+description {\
+ state: name 0.0;\
+ align: 1.0 0.0;\
+ min: 0 40;\
+ max: 100 40;\
+ fixed: 1 1;\
+ rel1 { relative: 0.0 1.0; to: "pinch_image"; offset:0 2;}\
+ rel2 { relative: 1.0 1.0; to: "pinch_image";}\
+ text {\
+ font : FONT_NAME;\
+ size : 40;\
+ align: 0.5 0.5;\
+ text: txt;\
+ }\
+}
+
+#define ZOOM_X_PROGRAM(pro_name, pro_signal, pro_state)\
+program {\
+ name: "set.pinch."pro_name;\
+ source: "prog";\
+ signal: "set.pinch."pro_signal;\
+ script: {\
+ set_state(PART:"pinch_image", pro_state, 0.0);\
+ set_state(PART:"text_desc", pro_state, 0.0);\
+ }\
+ transition: LINEAR 0.1;\
+}
+
+
+collections {
+ group {
+ name: "pinch";
+ parts {
+ part {
+ name: "pinch_image";
+ type: IMAGE;
+ scale: 1;
+ ZOOM_X_DESCRIPTON("default", PIN_IMAGE_1X_WIDTH, PIN_IMAGE_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.0x", PIN_IMAGE_1X_WIDTH, PIN_IMAGE_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.1x", PIN_IMAGE_1_1X_WIDTH, PIN_IMAGE_1_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.2x", PIN_IMAGE_1_2X_WIDTH, PIN_IMAGE_1_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.3x", PIN_IMAGE_1_3X_WIDTH, PIN_IMAGE_1_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.4x", PIN_IMAGE_1_4X_WIDTH, PIN_IMAGE_1_4X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.5x", PIN_IMAGE_1_5X_WIDTH, PIN_IMAGE_1_5X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.6x", PIN_IMAGE_1_6X_WIDTH, PIN_IMAGE_1_6X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.7x", PIN_IMAGE_1_7X_WIDTH, PIN_IMAGE_1_7X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.8x", PIN_IMAGE_1_8X_WIDTH, PIN_IMAGE_1_8X_WIDTH)
+ ZOOM_X_DESCRIPTON("1.9x", PIN_IMAGE_1_9X_WIDTH, PIN_IMAGE_1_9X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.0x", PIN_IMAGE_2X_WIDTH, PIN_IMAGE_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.1x", PIN_IMAGE_2_1X_WIDTH, PIN_IMAGE_2_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.2x", PIN_IMAGE_2_2X_WIDTH, PIN_IMAGE_2_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.3x", PIN_IMAGE_2_3X_WIDTH, PIN_IMAGE_2_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.4x", PIN_IMAGE_2_4X_WIDTH, PIN_IMAGE_2_4X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.5x", PIN_IMAGE_2_5X_WIDTH, PIN_IMAGE_2_5X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.6x", PIN_IMAGE_2_6X_WIDTH, PIN_IMAGE_2_6X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.7x", PIN_IMAGE_2_7X_WIDTH, PIN_IMAGE_2_7X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.8x", PIN_IMAGE_2_8X_WIDTH, PIN_IMAGE_2_8X_WIDTH)
+ ZOOM_X_DESCRIPTON("2.9x", PIN_IMAGE_2_9X_WIDTH, PIN_IMAGE_2_9X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.0x", PIN_IMAGE_3X_WIDTH, PIN_IMAGE_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.1x", PIN_IMAGE_3_1X_WIDTH, PIN_IMAGE_3_1X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.2x", PIN_IMAGE_3_2X_WIDTH, PIN_IMAGE_3_2X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.3x", PIN_IMAGE_3_3X_WIDTH, PIN_IMAGE_3_3X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.4x", PIN_IMAGE_3_4X_WIDTH, PIN_IMAGE_3_4X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.5x", PIN_IMAGE_3_5X_WIDTH, PIN_IMAGE_3_5X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.6x", PIN_IMAGE_3_6X_WIDTH, PIN_IMAGE_3_6X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.7x", PIN_IMAGE_3_7X_WIDTH, PIN_IMAGE_3_7X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.8x", PIN_IMAGE_3_8X_WIDTH, PIN_IMAGE_3_8X_WIDTH)
+ ZOOM_X_DESCRIPTON("3.9x", PIN_IMAGE_3_9X_WIDTH, PIN_IMAGE_3_9X_WIDTH)
+ ZOOM_X_DESCRIPTON("4.0x", PIN_IMAGE_4X_WIDTH, PIN_IMAGE_4X_WIDTH)
+ }
+
+ part {
+ name: "text_desc";
+ type: TEXT;
+ scale: 1;
+ ZOOM_X_TEXT_DESCRIPTION("default", "1.0x")
+ ZOOM_X_TEXT_DESCRIPTION("1.0x", "1.0x")
+ ZOOM_X_TEXT_DESCRIPTION("1.1x", "1.1x")
+ ZOOM_X_TEXT_DESCRIPTION("1.2x", "1.2x")
+ ZOOM_X_TEXT_DESCRIPTION("1.3x", "1.3x")
+ ZOOM_X_TEXT_DESCRIPTION("1.4x", "1.4x")
+ ZOOM_X_TEXT_DESCRIPTION("1.5x", "1.5x")
+ ZOOM_X_TEXT_DESCRIPTION("1.6x", "1.6x")
+ ZOOM_X_TEXT_DESCRIPTION("1.7x", "1.7x")
+ ZOOM_X_TEXT_DESCRIPTION("1.8x", "1.8x")
+ ZOOM_X_TEXT_DESCRIPTION("1.9x", "1.9x")
+ ZOOM_X_TEXT_DESCRIPTION("2.0x", "2.0x")
+ ZOOM_X_TEXT_DESCRIPTION("2.1x", "2.1x")
+ ZOOM_X_TEXT_DESCRIPTION("2.2x", "2.2x")
+ ZOOM_X_TEXT_DESCRIPTION("2.3x", "2.3x")
+ ZOOM_X_TEXT_DESCRIPTION("2.4x", "2.4x")
+ ZOOM_X_TEXT_DESCRIPTION("2.5x", "2.5x")
+ ZOOM_X_TEXT_DESCRIPTION("2.6x", "2.6x")
+ ZOOM_X_TEXT_DESCRIPTION("2.7x", "2.7x")
+ ZOOM_X_TEXT_DESCRIPTION("2.8x", "2.8x")
+ ZOOM_X_TEXT_DESCRIPTION("2.9x", "2.9x")
+ ZOOM_X_TEXT_DESCRIPTION("3.0x", "3.0x")
+ ZOOM_X_TEXT_DESCRIPTION("3.1x", "3.1x")
+ ZOOM_X_TEXT_DESCRIPTION("3.2x", "3.2x")
+ ZOOM_X_TEXT_DESCRIPTION("3.3x", "3.3x")
+ ZOOM_X_TEXT_DESCRIPTION("3.4x", "3.4x")
+ ZOOM_X_TEXT_DESCRIPTION("3.5x", "3.5x")
+ ZOOM_X_TEXT_DESCRIPTION("3.6x", "3.6x")
+ ZOOM_X_TEXT_DESCRIPTION("3.7x", "3.7x")
+ ZOOM_X_TEXT_DESCRIPTION("3.8x", "3.8x")
+ ZOOM_X_TEXT_DESCRIPTION("3.9x", "3.9x")
+ ZOOM_X_TEXT_DESCRIPTION("4.0x", "4.0x")
+ }
+
+ programs {
+ ZOOM_X_PROGRAM("default", "default", "default")
+ ZOOM_X_PROGRAM("1.0x", "1.0x", "1.0x")
+ ZOOM_X_PROGRAM("1.1x", "1.1x", "1.1x")
+ ZOOM_X_PROGRAM("1.2x", "1.2x", "1.2x")
+ ZOOM_X_PROGRAM("1.3x", "1.3x", "1.3x")
+ ZOOM_X_PROGRAM("1.4x", "1.4x", "1.4x")
+ ZOOM_X_PROGRAM("1.5x", "1.5x", "1.5x")
+ ZOOM_X_PROGRAM("1.6x", "1.6x", "1.6x")
+ ZOOM_X_PROGRAM("1.7x", "1.7x", "1.7x")
+ ZOOM_X_PROGRAM("1.8x", "1.8x", "1.8x")
+ ZOOM_X_PROGRAM("1.9x", "1.9x", "1.9x")
+ ZOOM_X_PROGRAM("2.0x", "2.0x", "2.0x")
+ ZOOM_X_PROGRAM("2.1x", "2.1x", "2.1x")
+ ZOOM_X_PROGRAM("2.2x", "2.2x", "2.2x")
+ ZOOM_X_PROGRAM("2.3x", "2.3x", "2.3x")
+ ZOOM_X_PROGRAM("2.4x", "2.4x", "2.4x")
+ ZOOM_X_PROGRAM("2.5x", "2.5x", "2.5x")
+ ZOOM_X_PROGRAM("2.6x", "2.6x", "2.6x")
+ ZOOM_X_PROGRAM("2.7x", "2.7x", "2.7x")
+ ZOOM_X_PROGRAM("2.8x", "2.8x", "2.8x")
+ ZOOM_X_PROGRAM("2.9x", "2.9x", "2.9x")
+ ZOOM_X_PROGRAM("3.0x", "3.0x", "3.0x")
+ ZOOM_X_PROGRAM("3.1x", "3.1x", "3.1x")
+ ZOOM_X_PROGRAM("3.2x", "3.2x", "3.2x")
+ ZOOM_X_PROGRAM("3.3x", "3.3x", "3.3x")
+ ZOOM_X_PROGRAM("3.4x", "3.4x", "3.4x")
+ ZOOM_X_PROGRAM("3.5x", "3.5x", "3.5x")
+ ZOOM_X_PROGRAM("3.6x", "3.6x", "3.6x")
+ ZOOM_X_PROGRAM("3.7x", "3.7x", "3.7x")
+ ZOOM_X_PROGRAM("3.8x", "3.8x", "3.8x")
+ ZOOM_X_PROGRAM("3.9x", "3.9x", "3.9x")
+ ZOOM_X_PROGRAM("4.0x", "4.0x", "4.0x")
+ }
+ }
+
+ }
+
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_H MAIN_W;
+ max: MAIN_H MAIN_W;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ scale : 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H) ZOOM_BG_X/MAIN_W; to: "bg";}
+ rel2 { relative: (1 - ZOOM_BG_Y/MAIN_H) (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W; to: "bg";}
+ image { normal: ZOOM_BG_VER_IMAGE; }
+
+ }
+ }
+ part {
+ name: "text_min";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (ZOOM_BG_H-ZOOM_TEXT_Y)/ZOOM_BG_H) 0.0; to: "bg_image"; }
+ rel2 { relative: (1 - (ZOOM_BG_H-ZOOM_TEXT_H-ZOOM_TEXT_Y)/ZOOM_BG_H) 1.0; to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "text_max";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (ZOOM_TEXT_Y+ZOOM_TEXT_H)/ZOOM_BG_H) 0.0; to: "bg_image"; }
+ rel2 { relative: (1 - ZOOM_TEXT_Y/ZOOM_BG_H) 1.0 ; to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (1 - (ZOOM_BG_H-ZOOM_SLIDE_Y)/ZOOM_BG_H) 0.0 ; to: "bg_image"; }
+ rel2 { relative: (1 - ZOOM_SLIDE_Y/ZOOM_BG_H) 1.0; to: "bg_image"; }
+ }
+ }
+ programs {
+ program {
+ name:"set.zoom.default";
+ source: "prog";
+ signal: "set.zoom.default";
+ script: {
+ set_state(PART:"bg_image", "default", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.landscape_inverse";
+ source: "prog";
+ signal: "set.zoom.landscape_inverse";
+ script: {
+ set_state(PART:"bg_image", "landscape_inverse", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait";
+ source: "prog";
+ signal: "set.zoom.portrait";
+ script: {
+ set_state(PART:"bg_image", "portrait", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait_inverse";
+ source: "prog";
+ signal: "set.zoom.portrait_inverse";
+ script: {
+ set_state(PART:"bg_image", "portrait_inverse", 0.0);
+ }
+ }
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/cam_zoom_layout_vertical_inverse.edc b/edc/cam_zoom_layout_vertical_inverse.edc
new file mode 100755
index 0000000..5d02699
--- /dev/null
+++ b/edc/cam_zoom_layout_vertical_inverse.edc
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+
+#define ZOOM_BG_X 188
+#define ZOOM_BG_Y 89
+
+#define ZOOM_BG_W 96
+#define ZOOM_BG_H 542
+
+#define ZOOM_TEXT_X 0
+#define ZOOM_TEXT_Y 26
+#define ZOOM_TEXT_W 96
+#define ZOOM_TEXT_H 44
+
+#define ZOOM_SLIDE_X 0
+#define ZOOM_SLIDE_Y 104
+
+
+images {
+ image: ZOOM_BG_VER_IMAGE COMP;
+}
+
+collections {
+ group {
+ name: "main";
+
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0.0;
+ min: MAIN_H MAIN_W;
+ max: MAIN_H MAIN_W;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bg_image";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: ZOOM_BG_Y/MAIN_H (1 - (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W); offset: 0 0; to: "bg";}
+ rel2 { relative: (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H (1 - ZOOM_BG_X/MAIN_W); offset: -1 -1; to: "bg";}
+ image { normal: ZOOM_BG_VER_IMAGE; }
+
+ }
+ }
+ part {
+ name: "text_min";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (ZOOM_BG_H-ZOOM_TEXT_H-ZOOM_TEXT_Y)/ZOOM_BG_H 0.0 ; to: "bg_image"; }
+ rel2 { relative: (ZOOM_BG_H-ZOOM_TEXT_Y)/ZOOM_BG_H 1.0; to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "text_max";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: ZOOM_TEXT_Y/ZOOM_BG_H 0.0; to: "bg_image"; }
+ rel2 { relative: (ZOOM_TEXT_Y+ZOOM_TEXT_H)/ZOOM_BG_H 1.0; to: "bg_image"; }
+ text {
+ font : FONT_NAME;
+ size : 40;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: ZOOM_SLIDE_Y/ZOOM_BG_H 0.0; to: "bg_image"; }
+ rel2 { relative: (ZOOM_BG_H-ZOOM_SLIDE_Y)/ZOOM_BG_H 1.0; to: "bg_image"; }
+ }
+ }
+ programs {
+ program {
+ name:"set.zoom.default";
+ source: "prog";
+ signal: "set.zoom.default";
+ script: {
+ set_state(PART:"bg_image", "default", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.landscape_inverse";
+ source: "prog";
+ signal: "set.zoom.landscape_inverse";
+ script: {
+ set_state(PART:"bg_image", "landscape_inverse", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait";
+ source: "prog";
+ signal: "set.zoom.portrait";
+ script: {
+ set_state(PART:"bg_image", "portrait", 0.0);
+ }
+ }
+ program {
+ name:"set.zoom.portrait_inverse";
+ source: "prog";
+ signal: "set.zoom.portrait_inverse";
+ script: {
+ set_state(PART:"bg_image", "portrait_inverse", 0.0);
+ }
+ }
+ }
+ }
+ }
+}
+//end files
diff --git a/edc/style_button_camera.edc b/edc/style_button_camera.edc
new file mode 100644
index 0000000..fd815ef
--- /dev/null
+++ b/edc/style_button_camera.edc
@@ -0,0 +1,490 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "style_tizen_hd_inc.edc"
+
+#define BUTTON_STATE_ENABLED 0
+#define BUTTON_STATE_DISABLED 1
+
+
+collections {
+
+//////////////////////////////////////////////////////////////////////////////////////
+ group { name: "elm/button/base/camera/default";
+ images {
+ image: "00_button_01_normal.png" COMP;
+ image: "00_button_01_normal_press.png" COMP;
+ image: "00_button_01_normal_dim.png" COMP;
+ image: "00_button_01_normal_Focus.png" COMP;
+ }
+
+ parts {
+ part { name: "button_image";
+ scale: 1;
+ description { state: "default" 0.0;
+ image {
+ normal: "00_button_01_normal.png";
+ border: BUTTON_TEXT_STYLE1_BG_BORDER_INC;
+ border_scale: 1;
+ }
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_01_normal_press.png";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_01_normal_dim.png";
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_01_normal_Focus.png";
+ }
+ }
+ part { name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2.relative: 0.0 0.0;
+ min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_BG_MIN_INC;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC;
+ }
+ }
+ part { name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part { name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ description { state: "visible" 0.0;
+ visible: 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_after_icon";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 1 0;
+ min: 0 0;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ visible: 0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_before_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.text";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+ visible: 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ /*color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC;*/
+ text {
+ font: FONT_NAME;
+ size: 30;
+ align: 0.5 0.5;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC;
+ visible: 1;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+
+ programs {
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ program { name: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+
+ program { name: "button_unclick3";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ set_state(PART:"bg", "visible", 0.0);
+ }
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ set_state(PART:"bg", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ set_state(PART:"bg", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ set_state(PART:"bg", "icononly", 0.0);
+ }
+ }
+ }
+
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "padding_after_icon";
+ target: "icon_rect";
+ target: "bg";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ }
+ }
+ program { name: "focused";
+ //signal: "elm,action,focus";
+ //source: "elm";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ //signal: "elm,action,unfocus";
+ //source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+
+ }
+
+}
+//end files
diff --git a/edc/style_ctxpopup_camera_with_radio.edc b/edc/style_ctxpopup_camera_with_radio.edc
new file mode 100755
index 0000000..f2715e7
--- /dev/null
+++ b/edc/style_ctxpopup_camera_with_radio.edc
@@ -0,0 +1,1732 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "../include/edc_string.h"
+#include "cam_funcs.edc"
+#define CONTROLBAR_SMALL_H 72 //65
+//Ctxpopup Camera Shooting mode
+
+//Content Layout
+collections {
+
+ styles
+ {
+ style {
+ name: "menu_title";
+ base: "font=SLP:style=Roman font_size=30 align=0.09 color=#FFFFFF ellipise=1.0 wrap=mixed";
+ tag: "br" " \n";
+ }
+ }
+
+
+group {
+ name:"camera/layout";
+ parts {
+ part {
+ name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 60;
+ max: 999999 60;
+ fixed: 0 1;
+ align: 0.5 0;
+ text {
+ style: "menu_title";
+ min: 1 1;
+ }
+ }
+ }
+ part {
+ name: "elm.swallow.box";
+ type: SWALLOW;
+ description {
+ rel1 { to: "elm.text"; relative: 0 1; offset: 2 1;}
+ rel2 { offset: -3 -3;}
+ }
+ }
+ }
+}
+
+group {
+ name:"camera/layout/setting";
+ parts {
+ part {
+ name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 60;
+ max: 999999 60;
+ fixed: 0 1;
+ align: 0.5 0;
+ text {
+ style: "menu_title";
+ min: 1 1;
+ }
+ }
+ }
+ part {
+ name: "elm.swallow.box";
+ type: SWALLOW;
+ description {
+ rel1 { to: "elm.text"; relative: 0 1; offset: 2 1;}
+ rel2 { offset: -3 -3;}
+ }
+ }
+ }
+}
+
+#define MENU(part_name, relx1, rely1, relx2, rely2, to_part) \
+ part { \
+ name: "row."part_name; \
+ type: SWALLOW; \
+ scale: 1; \
+ mouse_events: 1; \
+ description { \
+ state: "default" 0.0; \
+ visible: 1; \
+ min: (180) (180); \
+ max: (180) (180); \
+ align: 0.5 0.5; \
+ aspect: 1.0 1.0; \
+ fixed: 1 1; \
+ rel1 { relative: (relx1/720) (rely1/1280); to:to_part;} \
+ rel2 { relative: (relx2/720) (rely2/1280); to:to_part;} \
+ } \
+ } \
+
+//Radio Button Style
+styles {
+ style {
+ name: "radio_label_textblock_style";
+ base: "font=SLP:style=Medium font_size=14 align=left color=#ffffff wrap=char";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "whitecolor" "+ color=#ffffff";
+ tag: "tab" "\t";
+ }
+ style {
+ name: "radio_label_textblock_disabled_style";
+ base: "font=SLP:style=Medium font_size=14 align=left color=#888888 color3=#000000 wrap=char";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "whitecolor" "+ color=#ffffff";
+ tag: "tab" "\t";
+ }
+}
+
+group {
+ name: "elm/radio/base/beat_winset_test/camera";
+ images {
+ image: SETTING_POPUP_RADIO_BUTTON_OFF_IMAGE COMP;
+ image: SETTING_POPUP_RADIO_BUTTON_ON_IMAGE COMP;
+ }
+ parts {
+ part { name: "bg";
+ mouse_events: 0;
+ scale: 1;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.offset: 0 0;
+ rel2.relative: 0.0 1.0;
+ rel2.offset: 0 0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ min: 60 60;
+ max: 60 60;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "radio";
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "bg";
+ offset: 0 0;
+ }
+ rel2 {
+ to: "bg";
+ offset: 0 0;
+ }
+ visible: 1;
+ color: 255 255 255 255;
+ image.normal: SETTING_POPUP_RADIO_BUTTON_OFF_IMAGE;
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_RADIO_BUTTON_ON_IMAGE;
+
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_RADIO_BUTTON_ON_IMAGE;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_RADIO_BUTTON_OFF_IMAGE;
+ }
+ description {
+ state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_RADIO_BUTTON_OFF_IMAGE;
+ }
+ }
+ part {
+ name: "elm.swallow.content";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ visible: 0;
+ color: 255 255 255 255;
+ align: 0.0 0.5;
+ rel1.to_x: "bg";
+ rel1.relative: 1.0 0.0;
+ rel1.offset: 1 1;
+ rel2.to_x: "bg";
+ rel2.relative: 1.0 1.0;
+ rel2.offset: 2 -2;
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 128 128 128 128;
+ }
+ description {
+ state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: 128 128 128 128;
+ fixed: 1 1;
+ visible: 1;
+ aspect: 1.0 1.0;
+ }
+ }
+ part {
+ name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ fixed: 0 1;
+ rel1 { relative: 1.0 0.5; offset: 1 1; to_x: "elm.swallow.content"; }
+ rel2 { relative: 1.0 0.5; offset: -2 -2; }
+ color: 255 255 255 255;
+ align: 0.0 0.5;
+ text {
+ style: "radio_label_textblock_style";
+ min: 0 0;
+ }
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ text.min: 1 1;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description {
+ state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ text {
+ style: "radio_label_textblock_disabled_style";
+ min: 1 1;
+ }
+ }
+ }
+ part {
+ name: "events";
+ type: RECT;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "disabler";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: 0 0 0 0;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "click";
+ signal: "mouse,up,1";
+ source: "events";
+ action: SIGNAL_EMIT "elm,action,radio,toggle" "";
+ }
+ program {
+ name: "bg_normal";
+ script {
+ set_state(PART:"bg", "default", 0.0);
+ }
+ }
+ program {
+ name: "mouseout";
+ signal: "mouse,out";
+ source: "events";
+ after: "bg_radio_normal";
+ }
+ program {
+ name: "bg_radio_normal";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"radio", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"radio", "default", 0.0);
+ set_state(PART:"bg", "default", 0.0);
+ }
+ }
+ program {
+ name: "pressed";
+ signal: "mouse,down,1";
+ source: "events";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"radio", st, 30, vl);
+ if (!strcmp(st, "default"))
+ set_state(PART:"radio", "pressed", 0.0);
+ }
+ }
+ program {
+ name: "radio_on";
+ signal: "elm,state,radio,on";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "radio";
+ }
+ program {
+ name: "radio_off";
+ signal: "elm,state,radio,off";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "radio";
+ }
+ program {
+ name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ program {
+ name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ program {
+ name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.content";
+ }
+ program {
+ name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ }
+ program {
+ name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disabler";
+ after: "disable_text";
+ }
+ program {
+ name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.swallow.content", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.swallow.content", "disabled", 0.0);
+
+ get_state(PART:"radio", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"radio", "disabled_visible", 0.0);
+ else
+ set_state(PART:"radio", "disabled", 0.0);
+ }
+ }
+ program {
+ name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disabler";
+ after: "enable_text";
+ }
+ program {
+ name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ else
+ set_state(PART:"elm.swallow.content", "default", 0.0);
+
+ get_state(PART:"radio", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"radio", "visible", 0.0);
+ else
+ set_state(PART:"elm.swallow.content", "default", 0.0);
+ }
+ }
+ }
+}
+
+//Ctxpopup Style
+#define CTXPOPUP_CAMERA_FRAME_WIDTH_MAX 720
+#define CTXPOPUP_CAMERA_FRAME_HEIGHT_MAX 1280
+#define CTXPOPUP_CAMERA_CONTENT_WIDTH_MAX 720
+#define CTXPOPUP_CAMERA_CONTENT_HEIGHT_MAX 1280
+/*#define CTXPOPUP_CAMERA_ARROW_SIZE 28 */
+
+group {
+ name: "elm/scroller/base/beat_winset_test/camera";
+ script {
+ public sbvis_v, sbvis_h, sbalways_v, sbalways_h, sbvis_timer;
+ public timer0(val) {
+ new v;
+ v = get_int(sbvis_v);
+ if (v) {
+ v = get_int(sbalways_v);
+ if(!v) {
+ emit("do-hide-vbar", "");
+ set_int(sbvis_v, 0);
+ }
+ }
+ v = get_int(sbvis_h);
+ if (v) {
+ v = get_int(sbalways_h);
+ if(!v) {
+ emit("do-hide-hbar", "");
+ set_int(sbvis_h, 0);
+ }
+ }
+ set_int(sbvis_timer, 0);
+ return 0;
+ }
+ }
+
+ parts {
+ part {
+ name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ max: CTXPOPUP_CAMERA_CONTENT_WIDTH_MAX CTXPOPUP_CAMERA_CONTENT_HEIGHT_MAX;
+ }
+ }
+ part {
+ name: "elm.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ max: CTXPOPUP_CAMERA_CONTENT_WIDTH_MAX CTXPOPUP_CAMERA_CONTENT_HEIGHT_MAX;
+ align: 0.5 0.5;
+ }
+ }
+ part {
+ name: "sb_vbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ }
+ description {
+ state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part {
+ name: "sb_vbar_clip";
+ clip_to:"sb_vbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2{ to:"clipper"; relative: 1.0 1.0;}
+ }
+ description {
+ state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part {
+ name: "sb_vbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ align: 1.0 0.0;
+ rel1{ to:"clipper"; relative: 1.0 0.0; }
+ rel2{ to:"clipper"; relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "elm.dragable.vbar";
+ clip_to: "sb_vbar_clip";
+ mouse_events: 0;
+ scale: 1;
+ dragable {
+ x: 0 0 0;
+ y: 1 1 0;
+ confine: "sb_vbar";
+ }
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 14 32;
+ rel1 {
+ relative: 0.5 0.5;
+ to: "sb_vbar";
+ }
+ rel2 {
+ relative: 0.5 0.5;
+ to: "sb_vbar";
+ }
+ }
+ }
+ part {
+ name: "sb_hbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ }
+ description {
+ state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part {
+ name: "sb_hbar_clip";
+ clip_to: "sb_hbar_clip_master";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2{ to:"clipper"; relative: 1.0 1.0;}
+ }
+ description {
+ state: "hidden" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part {
+ name: "sb_hbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ align: 0.0 1.0;
+ rel1 {to:"clipper"; relative: 0.0 1.0;}
+ rel2 {to:"clipper"; relative: 1.0 1.0;}
+ }
+ }
+ }
+ programs {
+ program {
+ name: "load";
+ signal: "load";
+ source: "";
+ script {
+ set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+ set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+ set_int(sbvis_v, 0);
+ set_int(sbvis_h, 0);
+ set_int(sbalways_v, 0);
+ set_int(sbalways_h, 0);
+ set_int(sbvis_timer, 0);
+ }
+ }
+ program {
+ name: "vbar_show";
+ signal: "elm,action,show,vbar";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "sb_vbar_clip_master";
+ }
+ program {
+ name: "vbar_hide";
+ signal: "elm,action,hide,vbar";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "sb_vbar_clip_master";
+ }
+ program {
+ name: "vbar_show_always";
+ signal: "elm,action,show_always,vbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbvis_v);
+ v |= get_int(sbalways_v);
+ if (!v) {
+ set_int(sbalways_v, 1);
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ }
+ }
+ program {
+ name: "vbar_show_notalways";
+ signal: "elm,action,show_notalways,vbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_v);
+ if (v) {
+ set_int(sbalways_v, 0);
+ v = get_int(sbvis_v);
+ if (!v) {
+ emit("do-hide-vbar", "");
+ set_int(sbvis_v, 0);
+ }
+ }
+ }
+ }
+ program {
+ name: "sb_vbar_show";
+ signal: "do-show-vbar";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 1.0;
+ target: "sb_vbar_clip";
+ }
+ program {
+ name: "sb_vbar_hide";
+ signal: "do-hide-vbar";
+ source: "";
+ action: STATE_SET "hidden" 0.0;
+ transition: LINEAR 1.0;
+ target: "sb_vbar_clip";
+ }
+ program {
+ name: "hbar_show";
+ signal: "elm,action,show,hbar";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "sb_hbar_clip_master";
+ }
+ program {
+ name: "hbar_hide";
+ signal: "elm,action,hide,hbar";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "sb_hbar_clip_master";
+ }
+ program {
+ name: "hbar_show_always";
+ signal: "elm,action,show_always,hbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbvis_h);
+ v |= get_int(sbalways_h);
+ if (!v) {
+ set_int(sbalways_h, 1);
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ }
+ }
+ program {
+ name: "hbar_show_notalways";
+ signal: "elm,action,show_notalways,hbar";
+ source: "elm";
+ script {
+ new v;
+ v = get_int(sbalways_h);
+ if (v) {
+ set_int(sbalways_h, 0);
+ v = get_int(sbvis_h);
+ if (!v) {
+ emit("do-hide-hbar", "");
+ set_int(sbvis_h, 0);
+ }
+ }
+ }
+ }
+ program {
+ name: "sb_hbar_show";
+ signal: "do-show-hbar";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 1.0;
+ target: "sb_hbar_clip";
+ }
+ program {
+ name: "sb_hbar_hide";
+ signal: "do-hide-hbar";
+ source: "";
+ action: STATE_SET "hidden" 0.0;
+ transition: LINEAR 1.0;
+ target: "sb_hbar_clip";
+ }
+ program {
+ name: "scroll";
+ signal: "elm,action,scroll";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ script {
+ new v;
+ v = get_int(sbvis_v);
+ v |= get_int(sbalways_v);
+ if (!v) {
+ emit("do-show-vbar", "");
+ set_int(sbvis_v, 1);
+ }
+ v = get_int(sbvis_h);
+ v |= get_int(sbalways_h);
+ if(!v) {
+ emit("do-show-hbar", "");
+ set_int(sbvis_h, 1);
+ }
+ v = get_int(sbvis_timer);
+ if (v > 0) cancel_timer(v);
+ v = timer(2.0, "timer0", 0);
+ set_int(sbvis_timer, v);
+ }
+ }
+ }
+}
+
+group {
+ name: "elm/ctxpopup/bg/beat_winset_test/camera";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "visible" 0.0;
+ visible: 0;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "show";
+ signal: "elm,state,show";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "bg";
+ }
+ program {
+ name: "hide";
+ signal: "elm,state,hide";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ }
+ }
+}
+
+//Ctxpopup Style
+#define CTXPOPUP_CAMERA_ARROW_WIDTH 28
+#define CTXPOPUP_CAMERA_ARROW_HEIGHT 42
+#define CTXPOPUP_FRAME_CORNER_SIZE 4 4
+
+///////////////////////////////////////////////////////////////////////////////
+group {
+ name: "elm/ctxpopup/base/beat_winset_test/camera";
+ images {
+ image: CTXPOPUP_BG_IMAGE COMP;
+ }
+ parts {
+ part {
+ name: "ctxpopup_frame_left_top";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 0 0;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame_right_top";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 1 0;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame_left_bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 0 1;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame_right_bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 1 1;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part { name: "arrow_area_left";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 28 42;
+ fixed: 1 1;
+ align: 1 0.5;
+ rel1 {
+ relative: 0 1;
+ to_y: "ctxpopup_frame_left_top";
+ }
+ rel2 {
+ relative: 0.5 0;
+ to:"ctxpopup_frame_left_bottom";
+ }
+ color : 255 255 255 0;
+ }
+ }
+ part { name: "arrow_area_right";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 28 42;
+ fixed: 1 1;
+ align: 0 0.5;
+ rel1 {
+ relative: 0.5 1;
+ to:"ctxpopup_frame_right_top";
+ }
+ rel2 {
+ relative: 1 0;
+ to_y: "ctxpopup_frame_right_bottom";
+ }
+ color : 255 255 255 0;
+ }
+ }
+ part { name: "arrow_area_up";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 42 28;
+ fixed: 1 1;
+ align: 0.5 1;
+ rel1 {
+ relative: 1 0;
+ to_x: "ctxpopup_frame_left_top";
+ }
+ rel2 {
+ relative: 0 0.5;
+ to:"ctxpopup_frame_right_top";
+ }
+ color : 255 255 255 0;
+ }
+ }
+ part { name: "arrow_area_down";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 42 28;
+ fixed: 1 1;
+ align: 0.5 0;
+ rel1 {
+ relative: 1 0.5;
+ to:"ctxpopup_frame_left_bottom";
+ }
+ rel2 {
+ relative: 0 1;
+ to_x: "ctxpopup_frame_right_bottom";
+ }
+ color : 255 255 255 0;
+ }
+ }
+
+ part { name: "elm.swallow.arrow_up";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_up";
+ }
+ description {
+ state: "default" 0.0;
+ min: 42 28;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.arrow_down";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_down";
+ }
+ description {
+ state: "default" 0.0;
+ min: 42 28;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.arrow_left";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_left";
+ }
+ description {
+ state: "default" 0.0;
+ min: 28 42;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.arrow_right";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_right";
+ }
+ description {
+ state: "default" 0.0;
+ min: 28 42;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part {
+ name: "ctxpopup_frame";
+ type: IMAGE;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description {
+ align: 1 1;
+ image {
+ normal: CTXPOPUP_BG_IMAGE;
+ border: 67 67 92 42;
+ border_scale: 1;
+ }
+ rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+ rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+ }
+ }
+
+ part {
+ name: "elm.swallow.content";
+ type: SWALLOW;
+ clip_to: "ctxpopup_clip";
+ description {
+ state: "default" 0.0;
+ rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+ rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+ }
+ }
+
+ part { name: "ctxpopup_clip";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"ctxpopup_frame_left_top"; relative: 0.5 0.5; }
+ rel2 { to:"ctxpopup_frame_right_bottom"; relative: 0.5 0.5; }
+ }
+ description { state: "show_up" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_down"; relative: 0 1; }
+ rel2 { to:"arrow_area_down"; relative: 1 1; }
+ }
+ description { state: "show_left" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_right"; relative: 1 0; }
+ rel2 { to:"arrow_area_right"; relative: 1 1; }
+ }
+ description { state: "show_right" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_left"; relative: 0 0; }
+ rel2 { to:"arrow_area_left"; relative: 0 1; }
+ }
+ description { state: "show_down" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_up"; relative: 0 0; }
+ rel2 { to:"arrow_area_up"; relative: 1 0; }
+ }
+ description { state: "hide_up" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_down"; relative: 0 1; }
+ rel2 { to:"arrow_area_down"; relative: 1 1; }
+ }
+ description { state: "hide_left" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_right"; relative: 1 0; }
+ rel2 { to:"arrow_area_right"; relative: 1 1; }
+ }
+ description { state: "hide_right" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_left"; relative: 0 0; }
+ rel2 { to:"arrow_area_left"; relative: 0 1; }
+ }
+ description { state: "hide_down" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_up"; relative: 0 0; }
+ rel2 { to:"arrow_area_up"; relative: 1 0; }
+ }
+ description { state: "visible" 0.0;
+ color: 255 255 255 255;
+ rel1 { to_x:"arrow_area_left"; to_y:"arrow_area_up"; }
+ rel2 { to_x:"arrow_area_right"; to_y:"arrow_area_down"; }
+ }
+ }
+ }
+ programs {
+ program { name: "show";
+ signal: "elm,state,show";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_up";
+ signal: "elm,state,show,up";
+ source: "elm";
+ action: STATE_SET "show_up" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_left";
+ signal: "elm,state,show,left";
+ source: "elm";
+ action: STATE_SET "show_left" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_right";
+ signal: "elm,state,show,right";
+ source: "elm";
+ action: STATE_SET "show_right" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_down";
+ signal: "elm,state,show,down";
+ source: "elm";
+ action: STATE_SET "show_down" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "hide_up";
+ signal: "elm,state,hide,up";
+ source: "elm";
+ action: STATE_SET "hide_up" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_left";
+ signal: "elm,state,hide,left";
+ source: "elm";
+ action: STATE_SET "hide_left" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_right";
+ signal: "elm,state,hide,right";
+ source: "elm";
+ action: STATE_SET "hide_right" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_down";
+ signal: "elm,state,hide,down";
+ source: "elm";
+ action: STATE_SET "hide_down" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_finished";
+ action: SIGNAL_EMIT "elm,action,hide,finished" "";
+ }
+ }
+}
+
+group { name: "elm/ctxpopup/arrow/beat_winset_test/camera";
+ images {
+ image: CTXPOPUP_LEFT_ARROW_IMAGE COMP;
+ image: CTXPOPUP_RIGHTT_ARROW_IMAGE COMP;
+ image: CTXPOPUP_TOP_ARROW_IMAGE COMP;
+ image: CTXPOPUP_BOTTOM_ARROW_IMAGE COMP;
+ }
+ parts {
+ part {
+ name: "ctxpopup_arrow";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: CTXPOPUP_CAMERA_ARROW_WIDTH CTXPOPUP_CAMERA_ARROW_HEIGHT;
+ max: CTXPOPUP_CAMERA_ARROW_WIDTH CTXPOPUP_CAMERA_ARROW_HEIGHT;
+ fixed: 1 1;
+ visible: 0;
+ align: 0.5 0.5;
+ rel1.relative: 0.0 -0.5;
+ rel2.relative: 0.0 1.0;
+
+ }
+ description {
+ state: "left" 0.0;
+ min: CTXPOPUP_CAMERA_ARROW_WIDTH CTXPOPUP_CAMERA_ARROW_HEIGHT;
+ max: CTXPOPUP_CAMERA_ARROW_WIDTH CTXPOPUP_CAMERA_ARROW_HEIGHT;
+ fixed: 1 1;
+ align: 0.0 0.5;
+ image {
+ normal: CTXPOPUP_LEFT_ARROW_IMAGE;
+ }
+ }
+ description {
+ state: "right" 0.0;
+ min: CTXPOPUP_CAMERA_ARROW_WIDTH CTXPOPUP_CAMERA_ARROW_HEIGHT;
+ max: CTXPOPUP_CAMERA_ARROW_WIDTH CTXPOPUP_CAMERA_ARROW_HEIGHT;
+ fixed: 1 1;
+ align: 1.0 0.5;
+ image {
+ normal: CTXPOPUP_RIGHTT_ARROW_IMAGE;
+ }
+ }
+ description {
+ state: "top" 0.0;
+ min: CTXPOPUP_CAMERA_ARROW_HEIGHT CTXPOPUP_CAMERA_ARROW_WIDTH;
+ max: CTXPOPUP_CAMERA_ARROW_HEIGHT CTXPOPUP_CAMERA_ARROW_WIDTH;
+ fixed: 1 1;
+ align: 0.5 0.0;
+ image {
+ normal: CTXPOPUP_TOP_ARROW_IMAGE;
+ }
+ }
+ description {
+ state: "bottom" 0.0;
+ min: CTXPOPUP_CAMERA_ARROW_HEIGHT CTXPOPUP_CAMERA_ARROW_WIDTH;
+ max: CTXPOPUP_CAMERA_ARROW_HEIGHT CTXPOPUP_CAMERA_ARROW_WIDTH;
+ fixed: 1 1;
+ align: 0.5 1.0;
+ image {
+ normal: CTXPOPUP_BOTTOM_ARROW_IMAGE;
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "enable_left_arrow";
+ signal: "elm,state,left";
+ source: "elm";
+ action: STATE_SET "left" 0.0;
+ target: "ctxpopup_arrow";
+ }
+ program {
+ name: "enable_right_arrow";
+ signal: "elm,state,right";
+ source: "elm";
+ action: STATE_SET "right" 0.0;
+ target: "ctxpopup_arrow";
+ }
+ program {
+ name: "enable_top_arrow";
+ signal: "elm,state,top";
+ source: "elm";
+ action: STATE_SET "top" 0.0;
+ target: "ctxpopup_arrow";
+ }
+ program {
+ name: "enable_bottom_arrow";
+ signal: "elm,state,bottom";
+ source: "elm";
+ action: STATE_SET "bottom" 0.0;
+ target: "ctxpopup_arrow";
+ }
+ }
+}
+
+group {
+ name: "elm/ctxpopup/bg/beat_winset_test/camera_no_arrow";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "visible" 0.0;
+ visible: 0;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "show";
+ signal: "elm,state,show";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "bg";
+ }
+ program {
+ name: "hide";
+ signal: "elm,state,hide";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ }
+ }
+}
+
+group {
+ name: "elm/ctxpopup/base/beat_winset_test/camera_no_arrow";
+ images {
+ image: CTXPOPUP_BG_2DEPTH_IMAGE COMP;
+ }
+ parts {
+ part {
+ name: "ctxpopup_frame_left_top";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 0 0;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame_right_top";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 1 0;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame_left_bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 0 1;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame_right_bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ visible:0;
+ align: 1 1;
+ min: CTXPOPUP_FRAME_CORNER_SIZE;
+ max: CTXPOPUP_FRAME_CORNER_SIZE;
+ }
+ }
+
+ part { name: "arrow_area_left";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 40 0;
+ fixed: 1 1;
+ align: 1 0.5;
+ rel1 {
+ relative: 0 1;
+ to_y: "ctxpopup_frame_left_top";
+ }
+ rel2 {
+ relative:0 0;
+ to:"ctxpopup_frame_left_bottom";
+ }
+ color : 255 255 255 0;
+ }
+ }
+ part { name: "arrow_area_right";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 40 0;
+ fixed: 1 1;
+ align: 0 0.5;
+ rel1 {
+ relative: 1 1;
+ to:"ctxpopup_frame_right_top";
+ }
+ rel2 {
+ relative: 1 0;
+ to_y: "ctxpopup_frame_right_bottom";
+ }
+ color : 255 255 255 0;
+ }
+ }
+ part { name: "arrow_area_up";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 40;
+ fixed: 1 1;
+ align: 0.5 1;
+ rel1 {
+ relative: 1 0;
+ to_x: "ctxpopup_frame_left_top";
+ }
+ rel2 {
+ relative: 0 0;
+ to:"ctxpopup_frame_right_top";
+ }
+ color : 255 255 255 0;
+ }
+ }
+ part { name: "arrow_area_down";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 40;
+ fixed: 1 1;
+ align: 0.5 0;
+ rel1 {
+ relative: 1 1;
+ to:"ctxpopup_frame_left_bottom";
+ }
+ rel2 {
+ relative: 0 1;
+ to_x: "ctxpopup_frame_right_bottom";
+ }
+ color : 255 255 255 0;
+ }
+ }
+
+ part { name: "elm.swallow.arrow_up";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_up";
+ }
+ description {
+ state: "default" 0.0;
+ min: 40 40;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.arrow_down";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_down";
+ }
+ description {
+ state: "default" 0.0;
+ min: 40 40;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.arrow_left";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_left";
+ }
+ description {
+ state: "default" 0.0;
+ min: 40 40;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.arrow_right";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ dragable {
+ x: 1 1 0;
+ y: 1 1 0;
+ confine: "arrow_area_right";
+ }
+ description {
+ state: "default" 0.0;
+ min: 40 40;
+ fixed: 1 1;
+ visible: 1;
+ }
+ }
+
+ part {
+ name: "ctxpopup_frame";
+ type: IMAGE;
+ scale: 1;
+ clip_to: "ctxpopup_clip";
+ description {
+ align: 1 1;
+ /*color: 0 0 0 85;*/
+ image {
+ normal: CTXPOPUP_BG_2DEPTH_IMAGE;
+ border: 67 67 92 42;
+ border_scale: 1;
+ }
+ rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+ rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+
+ // color : 255 255 255 200;
+ }
+ }
+
+ part {
+ name: "elm.swallow.content";
+ type: SWALLOW;
+ clip_to: "ctxpopup_clip";
+ description {
+ state: "default" 0.0;
+ rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+ rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+ }
+ }
+
+ part { name: "ctxpopup_clip";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"ctxpopup_frame_left_top"; relative: 0.5 0.5; }
+ rel2 { to:"ctxpopup_frame_right_bottom"; relative: 0.5 0.5; }
+ }
+ description { state: "show_up" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_down"; relative: 0 1; }
+ rel2 { to:"arrow_area_down"; relative: 1 1; }
+ }
+ description { state: "show_left" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_right"; relative: 1 0; }
+ rel2 { to:"arrow_area_right"; relative: 1 1; }
+ }
+ description { state: "show_right" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_left"; relative: 0 0; }
+ rel2 { to:"arrow_area_left"; relative: 0 1; }
+ }
+ description { state: "show_down" 0.0;
+ color: 255 255 255 0;
+ rel1 { to:"arrow_area_up"; relative: 0 0; }
+ rel2 { to:"arrow_area_up"; relative: 1 0; }
+ }
+ description { state: "hide_up" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_down"; relative: 0 1; }
+ rel2 { to:"arrow_area_down"; relative: 1 1; }
+ }
+ description { state: "hide_left" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_right"; relative: 1 0; }
+ rel2 { to:"arrow_area_right"; relative: 1 1; }
+ }
+ description { state: "hide_right" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_left"; relative: 0 0; }
+ rel2 { to:"arrow_area_left"; relative: 0 1; }
+ }
+ description { state: "hide_down" 0.0;
+ color: 255 255 255 255;
+ rel1 { to:"arrow_area_up"; relative: 0 0; }
+ rel2 { to:"arrow_area_up"; relative: 1 0; }
+ }
+ description { state: "visible" 0.0;
+ color: 255 255 255 255;
+ rel1 { to_x:"arrow_area_left"; to_y:"arrow_area_up"; }
+ rel2 { to_x:"arrow_area_right"; to_y:"arrow_area_down"; }
+ }
+ }
+ }
+ programs {
+ program { name: "show";
+ signal: "elm,state,show";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_up";
+ signal: "elm,state,show,up";
+ source: "elm";
+ action: STATE_SET "show_up" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_left";
+ signal: "elm,state,show,left";
+ source: "elm";
+ action: STATE_SET "show_left" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_right";
+ signal: "elm,state,show,right";
+ source: "elm";
+ action: STATE_SET "show_right" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "show_down";
+ signal: "elm,state,show,down";
+ source: "elm";
+ action: STATE_SET "show_down" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ }
+ program { name: "hide_up";
+ signal: "elm,state,hide,up";
+ source: "elm";
+ action: STATE_SET "hide_up" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_left";
+ signal: "elm,state,hide,left";
+ source: "elm";
+ action: STATE_SET "hide_left" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_right";
+ signal: "elm,state,hide,right";
+ source: "elm";
+ action: STATE_SET "hide_right" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_down";
+ signal: "elm,state,hide,down";
+ source: "elm";
+ action: STATE_SET "hide_down" 0.0;
+ transition: LINEAR 0.25;
+ target: "ctxpopup_clip";
+ after: "hide_finished";
+ }
+ program { name: "hide_finished";
+ action: SIGNAL_EMIT "elm,action,hide,finished" "";
+ }
+ }
+}
+
+group { name: "elm/ctxpopup/arrow/beat_winset_test/camera_no_arrow";
+ parts {
+ part {
+ name: "ctxpopup_arrow";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.5;
+ rel1.relative: 0.0 -0.5;
+ rel2.relative: 0.0 1.0;
+
+ }
+ description {
+ state: "left" 0.0;
+ inherit: "default" 0.0;
+ }
+ description {
+ state: "right" 0.0;
+ inherit: "default" 0.0;
+ }
+ description {
+ state: "top" 0.0;
+ inherit: "default" 0.0;
+ }
+ description {
+ state: "bottom" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ }
+}
+
+
+#include "style_tizen_hd_inc.edc"
+#include "style_genlist_macro.edc"
+#include "style_genlist_normal.edc"
+
+}
+
diff --git a/edc/style_genlist_macro.edc b/edc/style_genlist_macro.edc
new file mode 100755
index 0000000..07c49fa
--- /dev/null
+++ b/edc/style_genlist_macro.edc
@@ -0,0 +1,847 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#define GENLIST_PART_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 0; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: GENLIST_PART_BG_COLOR_INC; \
+ } \
+ }
+
+#define GENLIST_PART_BG \
+ part { name: "bg"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ color: GENLIST_PART_BG_COLOR_INC; \
+ } \
+ description { state: "hide" 0.0; \
+ inherit: "default" 0.0; \
+ rel1 { relative: 0.025 0.0; } \
+ rel2 { relative: 1.025 1.0; } \
+ } \
+ description { state: "hide" 0.1; \
+ inherit: "default" 0.0; \
+ rel1 { relative: 0.13 0.0; } \
+ rel2 { relative: 1.13 1.0; } \
+ } \
+ description { state: "hide" 0.2; \
+ inherit: "default" 0.0; \
+ rel1 { relative: 0.5 0.0; } \
+ rel2 { relative: 1.5 1.0; } \
+ } \
+ description { state: "hide" 0.3; \
+ inherit: "default" 0.0; \
+ rel1 { relative: 1.0 0.0; } \
+ rel2 { relative: 2.0 1.0; } \
+ } \
+ }
+
+#define GENLIST_PART_BG_IMAGE \
+ part { name: "bg_image"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ color: GENLIST_PART_LIST_BG_COLOR_INC; \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ color: GENLIST_PART_LIST_PRESS_COLOR_INC; \
+ } \
+ }
+
+#define GENLIST_PART_BOTTOM_LINE \
+ part { name: "bottom_line"; \
+ type: RECT; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ min: 0 1; \
+ fixed: 0 1; \
+ visible: 1; \
+ color: GENLIST_PART_LIST_LINE_COLOR_INC; \
+ rel1 { \
+ relative: 0.0 1.0; \
+ offset: 0 -1; \
+ } \
+ } \
+ }
+
+#define GENLIST_PART_BOTTOM_EFFECT_LINE \
+ part { name: "bottom_line"; \
+ type: RECT; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ min: 0 1; \
+ fixed: 0 1; \
+ visible: 1; \
+ color: GENLIST_PART_LIST_LINE_COLOR_INC; \
+ rel1 { \
+ relative: 0.0 1.0; \
+ offset: 0 -1; \
+ } \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+
+#define GENLIST_PART_PADDING_TOP( param_padding_size ) \
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_TEXT_TOP( param_padding_size ) \
+ part { name: "elm.padding.text.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1.relative: 0.0 1.0; \
+ align: 0.0 1.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_DIALOGUE_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: LAYOUT_GROUP_LIST_BG_COLOR_INC; \
+ } \
+ }
+
+#define GENLIST_PART_DIALOGUE_ITEM \
+ part { name: "elm.rect.dialogue"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: GENLIST_PADDING_12_INC 0; \
+ fixed: 1 0; \
+ color: GENLIST_DIALOGUE_GROUP_LEFT_BG_COLOR_INC; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_DIALOGUE_EXPANDABLE_ITEM \
+ part { name: "elm.rect.dialogue"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: GENLIST_PADDING_12_INC 0; \
+ fixed: 1 0; \
+ color: GENLIST_DIALOGUE_GROUP_LEFT_BG_COLOR_INC; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+
+#define GENLIST_PART_SWALLOW_END( param_padding_size ) \
+ part { name: "elm.padding.left.swallow.end";\
+ clip_to: "disclip"; \
+ type: RECT;\
+ scale: 1;\
+ description { state: "default" 0.0;\
+ min: param_padding_size 0;\
+ fixed: 1 0;\
+ visible: 0; \
+ rel1.to_x: "elm.swallow.end";\
+ rel2 {\
+ relative: 0.0 1.0;\
+ to_x: "elm.swallow.end";\
+ }\
+ align: 1.0 0.5;\
+ }\
+ }\
+ part { name: "elm.swallow.end";\
+ clip_to: "disclip"; \
+ type: SWALLOW;\
+ scale: 1;\
+ description { state: "default" 0.0;\
+ fixed: 1 0;\
+ align: 1.0 0.5;\
+ rel1.to_x: "elm.padding.right";\
+ rel2 {\
+ relative: 0.0 1.0;\
+ to_x: "elm.padding.right";\
+ }\
+ }\
+ }
+
+#define GENLIST_PART_DISCLIP \
+ part { name: "disclip"; \
+ type: RECT; \
+ description { state: "default" 0.0; \
+ } \
+ description { state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ color: GENLIST_PART_DISCLIP_COLOR_INC; \
+ } \
+ }
+
+#define GENLIST_EXPANDABLE_PART_PERSPECTIVE_POINT() \
+ part { name: "point"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ color: 0 0 0 0; \
+ rel1 { relative: 0.0 0.0; } \
+ rel2 { relative: 1.0 0.0; } \
+ } \
+ }
+
+#define GENLIST_PART_MAP_START( param_x, param_y, param_z ) \
+ description { state: "map_transition" 0.0; \
+ inherit: "default" 0.0; \
+ color: 50 50 50 100; \
+ map { \
+ perspective: "point"; \
+ on: 1; \
+ smooth: 1; \
+ perspective_on: 1; \
+ backface_cull: 1; \
+ rotation { \
+ center: "point"; \
+ x: param_x; \
+ y: param_y; \
+ z: param_z; \
+ } \
+ } \
+ } \
+ description { \
+ state: "hide" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ }
+
+#define GENLIST_PART_MAP_FINISH( param_x, param_y, param_z ) \
+ description { \
+ state: "map_rotate" 0.0; \
+ inherit: "default" 0.0; \
+ map { \
+ perspective: "point"; \
+ on: 1; \
+ smooth: 1; \
+ perspective_on: 1; \
+ backface_cull: 1; \
+ rotation { \
+ center: "point"; \
+ x: param_x; \
+ y: param_y; \
+ z: param_z; \
+ } \
+ } \
+ } \
+
+#define GENLIST_PART_MAP_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: GENLIST_PART_BG_COLOR_INC; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+
+#define GENLIST_EXPANDABLE_PART_BASE( GE_HEIGHT , GE_COLOR ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 GE_HEIGHT; \
+ color: GE_COLOR; \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ color: GENLIST_PART_LIST_PRESS_COLOR_INC; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+
+#define GENLIST_PROGRAM_MAP_ROTATE_EXPAND_START() \
+ name: "rotaion_transition"; \
+ signal: "flip_item"; \
+ action: STATE_SET "map_transition" 0.0; \
+ after: "rotation";
+
+#define GENLIST_PROGRAM_MAP_ROTATE_EXPAND_FINISH( second ) \
+ name: "rotation"; \
+ action: STATE_SET "map_rotate" 0.0; \
+ transition: LINEAR second; \
+ after: "rotation_end";
+
+#define GENLIST_PROGRAM_MAP_EXPAND_END() \
+ name: "rotation_end"; \
+ action: STATE_SET "default" 0.0;
+
+#define GENLIST_PROGRAM_MAP_ROTATE_CONTRACT_START() \
+ name: "rotation_transition2"; \
+ signal: "elm,state,contract_flip"; \
+ action: STATE_SET "map_rotate" 0.0; \
+ after: "rotation2";
+
+#define GENLIST_PROGRAM_MAP_ROTATE_CONTRACT_FINISH( second ) \
+ name: "rotation2"; \
+ action: STATE_SET "map_transition" 0.0; \
+ transition: LINEAR second; \
+ after: "rotation3";
+
+#define GENLIST_PROGRAM_MAP_CONTRACT_END() \
+ name: "rotation3"; \
+ action: STATE_SET "hide" 0.0;
+
+#define GENLIST_PART_EXPANDABLE2_NOSHADOW_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: GENLIST_PART_EXPANDABLE_2ND_DEPTH_BG_COLOR_INC; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+
+#define GENLIST_PART_EXPANDABLE_SWALLOW_PADDING \
+ part { name: "elm.swallow.pad"; \
+ type: SWALLOW; \
+ description { state: "default" 0.0; \
+ fixed: 1 0; \
+ align: 0.0 0.5; \
+ rel1 { \
+ relative: 1.0 0.0;\
+ to_x: "elm.padding.left"; \
+ } \
+ rel2.to_x: "elm.padding.left"; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ } \
+
+#define GENLIST_PART_PADDING_LEFT_SLIDE( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1 { relative: 0.0 0.0; to: "bg"; } \
+ rel2 { relative: 0.0 1.0; to: "bg"; } \
+ align: 0.0 0.0; \
+ } \
+ }
+
+/* only for demo */
+#define GENLIST_PART_BUTTON( param_name, param_text_name, param_text, param_left, param_right, param_top, param_bottom ) \
+ part { name: param_name; \
+ mouse_events: 1; \
+ description { state: "default" 0.0; \
+ visible: 1; \
+ rel1 { relative: param_left param_top; offset: 0 0; } \
+ rel2 { relative: param_right param_bottom; offset: -1 -1; } \
+ image { \
+ normal: "btn_normal.png"; \
+ border: 10 10 10 10; \
+ border_scale: 1; \
+ } \
+ image.middle: SOLID; \
+ fill.smooth: 0; \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image { \
+ normal: "btn_selected.png"; \
+ } \
+ } \
+ } \
+ part { name: param_text_name; \
+ type: TEXT; \
+ mouse_events: 0; \
+ scale: 1; \
+ description { \
+ align: 0.0 0.0; \
+ state: "default" 0.0; \
+ color: 0 0 0 255; \
+ rel1 { relative: 0.0 0.0; to: param_name; } \
+ rel2 { relative: 1.0 1.0; to: param_name; } \
+ text { \
+ text: param_text; \
+ font: "SLP:style=Roman"; \
+ size: 24; \
+ min: 1 1; \
+ align: 0.5 0.5; \
+ } \
+ } \
+ }
+
+/* only for demo */
+#define GENLIST_PROGRAM_BUTTON( param_name_focused, param_name_normal, param_part_name ) \
+ program { name: param_name_focused; \
+ source: param_part_name; \
+ signal: "mouse,down,1"; \
+ action: STATE_SET "selected" 0.0; \
+ target: param_part_name; \
+ } \
+ program { name: param_name_normal; \
+ source: param_part_name; \
+ signal: "mouse,up,1"; \
+ action: STATE_SET "default" 0.0; \
+ target: param_part_name; \
+ }
+
+#define GENLIST_PROGRAM_SLIDE_WITH_AFTER( param_name, param_state, param_next ) \
+ program { name: param_name; \
+ action: STATE_SET "hide" param_state; \
+ target: "bg"; \
+ transition: LINEAR 0.3; \
+ after: param_next; \
+ }
+
+#define GENLIST_PROGRAM_SLIDE( param_name, param_state_name, param_state_value ) \
+ program { name: param_name; \
+ action: STATE_SET param_state_name param_state_value; \
+ target: "bg"; \
+ transition: LINEAR 0.3; \
+ }
+
+#define DESC_FLIP_IMAGE( param_state_value, param_image_file_name ) \
+ description { state: "flipping" param_state_value; \
+ inherit: "default" 0.0; \
+ image { normal: param_image_file_name; } \
+ }
+
+#define DESC_TEXT_HIDE( param_state_value ) \
+ description { state: "hide" param_state_value; \
+ inherit: "default" 0.0; \
+ color: 0 0 0 (255*(1-param_state_value/0.20)); \
+ }
+
+#define GENLIST_EDIT_PART_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 0; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: 0 0 0 0; \
+ } \
+ }
+
+#define GENLIST_PART_FLIP \
+ part { name: "elm.flip.content"; \
+ clip_to: "disclip"; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ visible: 0; \
+ fixed: 1 1; \
+ rel1 { \
+ relative: 1.0 0.5; \
+ to_x: "elm.padding.left"; \
+ } \
+ rel2 { \
+ relative: 0.0 0.5; \
+ to_x: "elm.padding.right"; \
+ } \
+ } \
+ description { state: "flip_enabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ }
+
+#define GENLIST_DESCRIPTION_INVISIBLE_SELECTED \
+ description { state: "selected" 1.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ }
+
+#define GENLIST_DESCRIPTION_FLIP_ENABLED \
+ description { state: "flip_enabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ }
+
+#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_1TEXT \
+ script { \
+ new st[31]; \
+ new Float:vl; \
+ get_state(PART:"elm.text", st, 30, vl); \
+ set_state(PART:"bg_image", "selected", 0.0); \
+ if (!strcmp(st, "flip_enabled")) \
+ set_state(PART:"elm.text", "selected", 1.0); \
+ else \
+ set_state(PART:"elm.text", "selected", 0.0); \
+ }
+
+#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_2TEXT \
+ script { \
+ new st[31]; \
+ new Float:vl; \
+ get_state(PART:"elm.text.1", st, 30, vl); \
+ set_state(PART:"bg_image", "selected", 0.0); \
+ if (!strcmp(st, "flip_enabled")) { \
+ set_state(PART:"elm.text.1", "selected", 1.0); \
+ set_state(PART:"elm.text.2", "selected", 1.0); \
+ } \
+ else { \
+ set_state(PART:"elm.text.1", "selected", 0.0); \
+ set_state(PART:"elm.text.2", "selected", 0.0); \
+ } \
+ }
+
+#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_3TEXT \
+ script { \
+ new st[31]; \
+ new Float:vl; \
+ get_state(PART:"elm.text.1", st, 30, vl); \
+ set_state(PART:"bg_image", "selected", 0.0); \
+ if (!strcmp(st, "flip_enabled")) { \
+ set_state(PART:"elm.text.1", "selected", 1.0); \
+ set_state(PART:"elm.text.2", "selected", 1.0); \
+ set_state(PART:"elm.text.3", "selected", 1.0); \
+ } \
+ else { \
+ set_state(PART:"elm.text.1", "selected", 0.0); \
+ set_state(PART:"elm.text.2", "selected", 0.0); \
+ set_state(PART:"elm.text.3", "selected", 0.0); \
+ } \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT_1ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT_2ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT_3ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT_1ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT_2ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT_3ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_1ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_2ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_3ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ }
+
diff --git a/edc/style_genlist_normal.edc b/edc/style_genlist_normal.edc
new file mode 100644
index 0000000..ff22033
--- /dev/null
+++ b/edc/style_genlist_normal.edc
@@ -0,0 +1,866 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+ styles {
+ style {
+ name: "cam_textblock_gl_default";
+ base: "font=SLP:style=Roman font_size="GENLIST_FONT_40_INC" color=#FFFFFF ellipise=1.0 wrap=mixed";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+ style {
+ name: "cam_textblock_gl_align_left";
+ base: "font=SLP:style=Roman font_size=30 color=#000000 ellipise=1.0 wrap=mixed";
+ tag: "br" "\n";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+}
+ group { name: "elm/genlist/item/camera/1text.1icon/default";
+ alias: "elm/genlist/item_odd/camera/1text.1icon/default";
+ alias: "elm/genlist/item_compress/camera/1text.1icon/default";
+ alias: "elm/genlist/item_compress_odd/camera/1text.1icon/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.icon";
+ data.item: "flips" "elm.flip.content";
+
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_104_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_34_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_14_INC )
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: 86 84;
+ max: 86 84;
+ aspect: 1.0 1.0;
+ rel1.to_x: "elm.padding.right";
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ }
+ align: 1 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ part { name: "elm.padding.icon.left";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_14_INC 0;
+ fixed: 1 0;
+ rel1.to_x: "elm.icon";
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.icon";
+ }
+ align: 1.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.icon.left";
+ }
+ align: 0.0 0.5;
+ color: GENLIST_PART_FONT_LIST_MAIN_TEXT_UNREAD_COLOR_INC;
+ text {
+ style: "cam_textblock_gl_default";
+ min: 0 0;
+ max: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_1TEXT_1ICON
+ }
+ }
+
+group { name: "elm/genlist/item/camera/1text.2icon/default";
+ alias: "elm/genlist/item_odd/camera/1text.2icon/default";
+ alias: "elm/genlist/item_compress/camera/1text.2icon/default";
+ alias: "elm/genlist/item_compress_odd/camera/1text.2icon/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.icon elm.radio";
+ data.item: "flips" "elm.flip.content";
+
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_104_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_14_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_14_INC )
+ part { name: "elm.radio";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: 86 70;
+ max: 86 70;
+ aspect: 1.0 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ }
+ align: 0 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ part { name: "elm.padding.radio.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_14_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.radio";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.radio";
+ }
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: 86 84;
+ max: 86 84;
+ aspect: 1.0 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.radio.right";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.radio.right";
+ }
+ align: 0 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.padding.icon.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_28_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.icon";
+ }
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.icon.right";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ }
+ align: 0.0 0.5;
+ color: GENLIST_PART_FONT_LIST_MAIN_TEXT_UNREAD_COLOR_INC;
+ text {
+ style: "cam_textblock_gl_default";
+ min: 0 0;
+ max: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_1TEXT_1ICON
+ }
+}
+
+group { name: "elm/genlist/item/camera/1text.2icon.2/default";
+ alias: "elm/genlist/item_odd/camera/1text.2icon.2/default";
+ alias: "elm/genlist/item_compress/camera/1text.2icon.2/default";
+ alias: "elm/genlist/item_compress_odd/camera/1text.2icon.2/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.icon elm.radio";
+ data.item: "flips" "elm.flip.content";
+
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_86_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_14_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_14_INC )
+ part { name: "elm.radio";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: 86 70;
+ max: 86 70;
+ aspect: 1.0 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ }
+ align: 0 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ part { name: "elm.padding.radio.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_14_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.radio";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.radio";
+ }
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ min: 86 84;
+ max: 86 84;
+ aspect: 1.0 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.radio.right";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.radio.right";
+ }
+ align: 0 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.padding.icon.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_28_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "elm.icon";
+ }
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.icon.right";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ }
+ align: 0.0 0.5;
+ color: GENLIST_PART_FONT_LIST_MAIN_TEXT_UNREAD_COLOR_INC;
+ text {
+ style: "btn_multiline_naviframe_controlbar_style";
+ min: 0 0;
+ max: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_1TEXT_1ICON
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+ group { name: "elm/check/base/genlist/on&off";
+ data {
+ item: "label_1" "text.on On";
+ item: "label_2" "text.off Off";
+ }
+ images {
+ image: SETTING_POPUP_CHECK_BUTTON_ON_IMAGE COMP;
+ image: SETTING_POPUP_CHECK_BUTTON_OFF_IMAGE COMP;
+ }
+ parts {
+ part { name: "bg";
+ scale: 1;
+ type: RECT;
+ clip_to: "disclip";
+ description { state: "default" 0.0;
+ rel2.relative: 0.0 1.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ min: 86 84;
+ max: 86 84;
+
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "check";
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "disclip";
+ description { state: "default" 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ fixed: 1 0;
+ min: CHECK_ONOFF_BG_NORMAL_MIN_MAX_INC;
+ max: CHECK_ONOFF_BG_NORMAL_MIN_MAX_INC;
+ align: 0.5 0.5;
+ image {
+ normal: SETTING_POPUP_CHECK_BUTTON_OFF_IMAGE ;
+ border: CHECK_ONOFF_CHECK_IMAGE_BORDER_INC;
+ border_scale: 1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_CHECK_BUTTON_ON_IMAGE ;
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_CHECK_BUTTON_OFF_IMAGE ;
+ }
+ description { state: "visible_pressed" 0.0;
+ inherit: "default" 0.0;
+ image.normal: SETTING_POPUP_CHECK_BUTTON_ON_IMAGE ;
+ }
+ }
+ part { name: "text.on";
+ type: TEXT;
+ mouse_events: 0;
+ clip_to: "disclip";
+ scale:1;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 0.0 0.0;
+ to: "check";
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ to: "check";
+ }
+ text {
+ font: "SLP:style=Medium";
+ size: CHECK_ONOFF_ON_FONT_SIZE_INC;
+ fit: 1 1;
+ align: 0.2 0.5;
+ size_range: 12 CHECK_ONOFF_ON_FONT_SIZE_INC;
+ min: 0 0;
+ text_class: "slp_medium";
+ }
+ }
+ description { state: "on" 0.0;
+ inherit: "default" 0.0;
+ visible:1;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.5;
+ to: "check";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "check";
+ }
+ text {
+ font: "SLP:style=Medium";
+ size: CHECK_ONOFF_ON_FONT_SIZE_INC;
+ align: 0.2 0.5;
+ fit: 1 1;
+ size_range: 12 CHECK_ONOFF_ON_FONT_SIZE_INC;
+ min: 0 0;
+ }
+ }
+ }
+ part { name: "text.off";
+ type: TEXT;
+ mouse_events: 0;
+ clip_to: "disclip";
+ scale:1;
+ description { state: "default" 0.0;
+ color: 107 107 81 255;
+ rel1.to: "check";
+ rel2 {
+ relative: 1.0 0.5;
+ to: "check";
+ }
+ text {
+ font: "SLP:style=Medium";
+ size: CHECK_ONOFF_OFF_FONT_SIZE_INC;
+ fit: 1 1;
+ align: 0.2 0.5;
+ size_range: 12 CHECK_ONOFF_OFF_FONT_SIZE_INC;
+ min: 0 0;
+ text_class: "slp_medium";
+ }
+ }
+ description { state: "off" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 0.0 0.5;
+ to: "check";
+ }
+ rel2.to: "check";
+ text {
+ font: "SLP:style=Medium";
+ size: CHECK_ONOFF_OFF_FONT_SIZE_INC;
+ align: 0.2 0.5;
+ fit: 1 1;
+ size_range: 12 CHECK_ONOFF_OFF_FONT_SIZE_INC;
+ min: 0 0;
+ }
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ clip_to: "disclip";
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ visible: 0;
+ color: 255 255 255 255;
+ align: 0.0 0.5;
+ rel1 {
+ to_x: "bg";
+ relative: 1.0 0.0;
+ offset: 1 1;
+ }
+ rel2 {
+ to_x: "bg";
+ relative: 1.0 1.0;
+ offset: 2 -2;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ aspect: 1.0 1.0;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "disclip";
+ description { state: "default" 0.0;
+ visible: 0;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 0.5;
+ offset: 1 1;
+ to_x: "elm.swallow.content";
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: -2 -2;
+ }
+ align: 0.0 0.5;
+ text {
+ style: "cam_textblock_gl_default";
+ min: 0 0;
+ max: 0 1;
+ align: 0.0 0.5;
+ }
+ color: CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ text.min: 1 1;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ text.min: 1 1;
+ }
+ }
+ part { name: "events";
+ type: RECT;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "disclip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 64;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "click";
+ signal: "mouse,up,1";
+ source: "events";
+ action: SIGNAL_EMIT "elm,action,check,toggle" "";
+ }
+ program { name: "pressed";
+ signal: "mouse,down,1";
+ source: "events";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"check", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"check", "visible_pressed", 0.0);
+ else if (!strcmp(st, "default"))
+ set_state(PART:"check", "pressed", 0.0);
+ }
+ }
+ program { name: "mouseout";
+ signal: "mouse,out";
+ source: "events";
+ after: "bg_check_normal";
+ }
+ program { name: "bg_check_normal";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"check", st, 30, vl);
+ if (!strcmp(st, "pressed"))
+ set_state(PART:"check", "default", 0.0);
+ else if (!strcmp(st, "visible_pressed"))
+ set_state(PART:"check", "visible", 0.0);
+ }
+ }
+ program { name: "check_on";
+ signal: "elm,state,check,on";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "check";
+ after:"text_off_off" ;
+ }
+ program { name: "text_off_off";
+ action: STATE_SET "off" 0.0;
+ target: "text.off";
+ after: "text_on";
+ }
+ program { name: "text_on";
+ action: STATE_SET "on" 0.0;
+ target: "text.on";
+ }
+ program { name: "check_off";
+ signal: "elm,state,check,off";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "check";
+ after: "text_on_off";
+ }
+ program { name: "text_on_off";
+ action: STATE_SET "default" 0.0;
+ target: "text.on";
+ after: "text_off";
+ }
+ program { name: "text_off";
+ action: STATE_SET "default" 0.0;
+ target: "text.off";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disabler";
+ target: "disclip";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.swallow.content", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.swallow.content", "disabled", 0.0);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disabler";
+ target: "disclip";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ else
+ set_state(PART:"elm.swallow.content", "default", 0.0);
+ }
+ }
+ }
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+//end file
diff --git a/edc/style_label_camera.edc b/edc/style_label_camera.edc
new file mode 100644
index 0000000..55ff6f9
--- /dev/null
+++ b/edc/style_label_camera.edc
@@ -0,0 +1,634 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#define TEXT_SLIDE_DURATION 10
+
+ styles {
+ style { name: "textblock_style";
+ base: "font=SLP:style=Medium font_size="LABEL_FONT_SIZE_INC" color="LABEL_TEXT_BLOCK_STYLE_COLOR_INC" text_class=slp_medium";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+ }
+
+ /* label doesn't use it */
+ styles {
+ style { name: "textblock_charwrap_style";
+base: "font=SLP:style=Medium font_size="LABEL_FONT_SIZE_INC" color="LABEL_TEXT_BLOCK_STYLE_COLOR_INC" text_class=slp_medium";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+ }
+
+collections {
+
+ group { name: "elm/label/base/default";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ parts {
+ part { name: "label.text.clip";
+ type: RECT;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ scale: 1;
+ clip_to: "label.text.clip";
+ description { state: "default" 0.0;
+ text {
+ style: "textblock_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ }
+ }
+
+ /* default label doesn't use it */
+ group { name: "elm/label/base_wrap/default";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 1;
+ scale: 1;
+ multiline: 1;
+ description { state: "default" 0.0;
+ text {
+ style: "textblock_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "charwrap_mode" 0.0;
+ text {
+ style: "textblock_charwrap_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "default_on";
+ signal: "elm,state,default";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ program { name: "charwrap_on";
+ signal: "elm,state,charwrap";
+ source: "elm";
+ action: STATE_SET "charwrap_mode" 0.0;
+ target: "elm.text";
+ }
+ } // end programs
+ } // end group
+
+ /* default label doesn't use it */
+ group { name: "elm/label/base_wrap_ellipsis/default";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ multiline: 1;
+ description { state: "default" 0.0;
+ // FIXME : fixed for multiline ellipsis.
+ // does it need to make another ellipsis style?
+ fixed: 0 1;
+ text {
+ style: "textblock_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "charwrap_mode" 0.0;
+ // FIXME : fixed for multiline ellipsis.
+ // does it need to make another ellipsis style?
+ fixed: 0 1;
+ text {
+ style: "textblock_charwrap_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "default_on";
+ signal: "elm,state,default";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ program { name: "charwrap_on";
+ signal: "elm,state,charwrap";
+ source: "elm";
+ action: STATE_SET "charwrap_mode" 0.0;
+ target: "elm.text";
+ }
+ } // end programs
+ } // end group
+
+ group { name: "elm/label/base/marker";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ styles {
+ style { name: "textblock_style2";
+ base: "font=SLP:style=Bold font_size=14 align=center color=#fff wrap=word text_class=slp_bold";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "hilight" "+ color=#ffff";
+ tag: "b" "+ color=#ffff";
+ tag: "tab" "\t";
+ }
+ }
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ text {
+ style: "textblock_style2";
+ min: 1 1;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ }
+ }
+
+ /* default label doesn't use it */
+ group { name: "elm/label/base_wrap/marker";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ multiline: 1;
+ description { state: "default" 0.0;
+ text {
+ style: "textblock_style2";
+ min: 1 1;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/label/base/titlebar/default";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ parts {
+ part { name: "elm.text";
+ type: TEXT;
+ effect: SHADOW;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ text {
+ font: "SLP:style=Bold";
+ size: 28;
+ min: 0 0;
+ align: 0.0 0.5;
+ text: "slp";
+ }
+ color2: 0 0 0 255;
+ }
+ }
+ }
+ }
+
+ group { name: "elm/label/base/titlebar/header";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+ styles {
+ style { name: "header_textblock_style";
+ base: "font=SLP:style=Medium font_size=34 color=#ffffff wrap=mixed";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "em" "+ font=SLP:style=Oblique";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ }
+ }
+
+ parts {
+ part { name: "elm.text";
+ type: TEXT;
+ effect: SHADOW;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ text {
+ font: "SLP:style=Medium";
+ size: 34;
+ min: 0 0;
+ align: 0.0 0.5;
+ text: "slp";
+ }
+ color2: 0 0 0 255;
+ }
+ }
+ }
+ }
+
+
+ group { name: "elm/label/base/slide_long";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+
+ script {
+ public g_duration, g_stopslide, g_timer_id, g_anim_id;
+
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_FLOAT_SET) && (id == 0)) {
+ new Float:duration;
+ duration = getfarg(2);
+ set_float(g_duration, duration);
+ }
+ }
+ public slide_to_end_anim(val, Float:pos) {
+ new stopflag;
+ new id;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ set_tween_state(PART:"elm.text", pos, "slide_begin", 0.0, "slide_end", 0.0);
+ if (pos >= 1.0) {
+ id = timer(0.5, "slide_to_begin", 1);
+ set_int(g_timer_id, id);
+ }
+ }
+ public slide_to_end() {
+ new stopflag;
+ new id;
+ new Float:duration;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ duration = get_float(g_duration);
+ id = anim(duration, "slide_to_end_anim", 1);
+ set_int(g_anim_id, id);
+ }
+ public slide_to_begin() {
+ new stopflag;
+ new id;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ set_state(PART:"elm.text", "slide_begin", 0.0);
+ id = timer(0.5, "slide_to_end", 1);
+ set_int(g_timer_id, id);
+ }
+ public start_slide() {
+ set_int(g_stopslide, 0);
+ set_state(PART:"elm.text", "slide_begin", 0.0);
+ slide_to_end();
+ }
+ public stop_slide() {
+ new id;
+ set_int(g_stopslide, 1);
+ id = get_int(g_anim_id);
+ cancel_anim(id);
+ id = get_int(g_timer_id);
+ cancel_timer(id);
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+
+ parts {
+ part { name: "label.text.clip";
+ type: RECT;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "label.text.clip";
+ description { state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ text {
+ style: "textblock_style";
+ min: 1 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "slide_end" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ align: 1.0 0.0;
+ }
+ description { state: "slide_begin" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ programs {
+ program { name: "start_slide";
+ source: "elm";
+ signal: "elm,state,slide,start";
+ script {
+ start_slide();
+ }
+ }
+ program { name: "stop_slide";
+ source: "elm";
+ signal: "elm,state,slide,stop";
+ script {
+ stop_slide();
+ }
+ }
+ }
+ }
+
+
+ group { name: "elm/label/base/slide_short";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+
+ script {
+ public g_duration, g_stopslide, g_timer_id, g_anim_id;
+
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_FLOAT_SET) && (id == 0)) {
+ new Float:duration;
+ duration = getfarg(2);
+ set_float(g_duration, duration);
+ }
+ }
+ public slide_to_end_anim(val, Float:pos) {
+ new stopflag;
+ new id;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ set_tween_state(PART:"elm.text", pos, "slide_begin", 0.0, "slide_end", 0.0);
+ if (pos >= 1.0) {
+ id = timer(0.5, "slide_to_begin", 1);
+ set_int(g_timer_id, id);
+ }
+ }
+ public slide_to_end() {
+ new stopflag;
+ new id;
+ new Float:duration;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ duration = get_float(g_duration);
+ id = anim(duration, "slide_to_end_anim", 1);
+ set_int(g_anim_id, id);
+ }
+ public slide_to_begin() {
+ new stopflag;
+ new id;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ set_state(PART:"elm.text", "slide_begin", 0.0);
+ id = timer(0.5, "slide_to_end", 1);
+ set_int(g_timer_id, id);
+ }
+ public start_slide() {
+ set_int(g_stopslide, 0);
+ set_state(PART:"elm.text", "slide_begin", 0.0);
+ slide_to_end();
+ }
+ public stop_slide() {
+ new id;
+ set_int(g_stopslide, 1);
+ id = get_int(g_anim_id);
+ cancel_anim(id);
+ id = get_int(g_timer_id);
+ cancel_timer(id);
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+
+ parts {
+ part { name: "label.text.clip";
+ type: RECT;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "label.text.clip";
+ description { state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ text {
+ style: "textblock_style";
+ min: 1 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "slide_end" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 1.0 0.0;
+ }
+ description { state: "slide_begin" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ programs {
+ program { name: "start_slide";
+ source: "elm";
+ signal: "elm,state,slide,start";
+ script {
+ start_slide();
+ }
+ }
+ program { name: "stop_slide";
+ source: "elm";
+ signal: "elm,state,slide,stop";
+ script {
+ stop_slide();
+ }
+ }
+ }
+ }
+
+ group { name: "elm/label/base/slide_bounce";
+ data.item: "default_font_size" LABEL_FONT_SIZE_INC;
+ data.item: "min_font_size" LABEL_MIN_FONT_SIZE_INC;
+ data.item: "max_font_size" LABEL_MAX_FONT_SIZE_INC;
+
+ script {
+ public g_duration, g_stopslide, g_timer_id, g_anim_id;
+
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_FLOAT_SET) && (id == 0)) {
+ new Float:duration;
+ duration = getfarg(2);
+ set_float(g_duration, duration);
+ }
+ }
+ public slide_to_end_anim(val, Float:pos) {
+ new stopflag;
+ new id;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ set_tween_state(PART:"elm.text", pos, "slide_begin", 0.0, "slide_end", 0.0);
+ if (pos >= 1.0) {
+ id = timer(0.5, "slide_to_begin", 1);
+ set_int(g_timer_id, id);
+ }
+ }
+ public slide_to_end() {
+ new stopflag;
+ new id;
+ new Float:duration;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ duration = get_float(g_duration);
+ id = anim(duration, "slide_to_end_anim", 1);
+ set_int(g_anim_id, id);
+ }
+ public slide_to_begin_anim(val, Float:pos) {
+ new stopflag;
+ new id;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ set_tween_state(PART:"elm.text", pos, "slide_end", 0.0, "slide_begin", 0.0);
+ if (pos >= 1.0) {
+ id = timer(0.5, "slide_to_end", 1);
+ set_int(g_timer_id, id);
+ }
+ }
+ public slide_to_begin() {
+ new stopflag;
+ new id;
+ new Float:duration;
+ stopflag = get_int(g_stopslide);
+ if (stopflag == 1) return;
+ duration = get_float(g_duration);
+ id = anim(duration, "slide_to_begin_anim", 1);
+ set_int(g_anim_id, id);
+ }
+ public start_slide() {
+ set_int(g_stopslide, 0);
+ set_state(PART:"elm.text", "slide_begin", 0.0);
+ slide_to_end();
+ }
+ public stop_slide() {
+ new id;
+ set_int(g_stopslide, 1);
+ id = get_int(g_anim_id);
+ cancel_anim(id);
+ id = get_int(g_timer_id);
+ cancel_timer(id);
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+
+ parts {
+ part { name: "label.text.clip";
+ type: RECT;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "label.text.clip";
+ description { state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ text {
+ style: "textblock_style";
+ min: 1 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "slide_end" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 1.0 0.0;
+ }
+ description { state: "slide_begin" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ }
+ programs {
+ program { name: "start_slide";
+ source: "elm";
+ signal: "elm,state,slide,start";
+ script {
+ start_slide();
+ }
+ }
+ program { name: "stop_slide";
+ source: "elm";
+ signal: "elm,state,slide,stop";
+ script {
+ stop_slide();
+ }
+ }
+ }
+ }
+ /*note:button*/
+
+}
+//end file
diff --git a/edc/style_slider_camera.edc b/edc/style_slider_camera.edc
new file mode 100755
index 0000000..57cac35
--- /dev/null
+++ b/edc/style_slider_camera.edc
@@ -0,0 +1,488 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "../include/edc_image_name.h"
+#include "style_tizen_hd_inc.edc"
+
+images {
+ image: SLIDER_BAR_IMAGE COMP;
+ image: SLIDER_BAR_VER_IMAGE COMP;
+ image: SLIDER_HANDLER_IMAGE COMP;
+}
+
+collections {
+
+ group {
+ name: "elm/slider/vertical/camera";
+
+ parts {
+ part {
+ name: "base";
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ max: 20 99999;
+ min: 6 0;
+ rel1 { to: "bg"; offset: 0 0; }
+ rel2 { to: "bg"; offset: -1 -1; }
+ image.normal: SLIDER_BAR_IMAGE;
+ fill.smooth: 0;
+ }
+ }
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1.to: "elm.swallow.bar";
+ rel2.to: "elm.swallow.bar";
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "elm.swallow.bar";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 20 58;
+ max: 20 9999;
+ align: 0.5 1.0;
+ }
+ }
+ part {
+ name: "elm.swallow.icon";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.0;
+ rel1 { offset: 0 4; to_x: "elm.swallow.bar"; }
+ rel2 { offset: -1 3; relative: 1.0 0.0; to_x: "elm.swallow.bar"; }
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ rel2.offset: -1 4;
+ }
+ }
+ part {
+ name: "elm.swallow.end";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.5 1.0;
+ rel1 { offset: 0 -4; relative: 0.0 1.0; to_x: "elm.swallow.bar"; }
+ rel2 { offset: -1 -3; to_x: "elm.swallow.bar"; }
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ rel2.offset: -1 -4;
+ }
+ }
+ part {
+ name: "elm.dragable.slider";
+ type: GROUP;
+ source: "elm/slider/vertical/indicator/camera";
+ mouse_events: 1;
+ repeat_events: 1;
+ scale: 1;
+ dragable {
+ x: 0 0 0;
+ y: 1 1 0;
+ confine: "bg";
+ }
+ description {
+ state: "default" 0.0;
+ min: 20 20;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "disabler";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: SLIDER_DISABLER_PART_COLOR_INC;
+ visible: 0;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.icon";
+ }
+ program {
+ name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.icon";
+ }
+ program {
+ name: "end_show";
+ signal: "elm,state,end,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.end";
+ }
+ program {
+ name: "end_hide";
+ signal: "elm,state,end,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.end";
+ }
+ program {
+ name: "slider_disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disabler";
+ after: "disable_ind";
+ }
+ program {
+ name: "disable_ind";
+ action: SIGNAL_EMIT "elm.dragable.slider:elm,state,disabled" "elm";
+ }
+ program {
+ name: "slider_enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disabler";
+ after: "enable_ind";
+ }
+ program {
+ name: "enable_ind";
+ action: SIGNAL_EMIT "elm.dragable.slider:elm,state,enabled" "elm";
+ }
+ }
+ }
+
+ group {
+ name: "elm/slider/vertical/indicator/camera";
+
+ parts {
+ part {
+ name: "button_events";
+ type: RECT;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 60 60;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "button0";
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 60 60;
+ image {
+ normal: SLIDER_HANDLER_IMAGE;
+ }
+ fill.smooth: 0;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "slider_disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button0";
+ }
+ program {
+ name: "slider_enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button0";
+ }
+ }
+ }
+
+/*hor edc*/
+/////////////////////////////////////////////////////////////////
+ group {
+ name: "elm/slider/horizontal/camera";
+
+ parts {
+ part {
+ name: "base";
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 6;
+ max: 99999 20;
+ rel1 { to: "bg"; offset: 0 0; }
+ rel2 { to: "bg"; offset: -1 -1; }
+ image.normal: SLIDER_BAR_VER_IMAGE;
+ fill.smooth: 0;
+ }
+ }
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1.to: "elm.swallow.bar";
+ rel2.to: "elm.swallow.bar";
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "elm.swallow.bar";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 58 20;
+ max: 99999 20;
+ align: 1.0 0.5;
+ }
+ }
+ part {
+ name: "elm.swallow.icon";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 { to_y: "elm.swallow.bar"; }
+ rel2 { relative: 0.0 1.0; to_y: "elm.swallow.bar"; }
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part {
+ name: "elm.swallow.end";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 1.0 0.5;
+ rel1 { relative: 1.0 0.0; to_y: "elm.swallow.bar"; }
+ rel2 { relative: 1.0 1.0; to_y: "elm.swallow.bar"; }
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+
+ part {
+ name: "elm.dragable.slider";
+ type: GROUP;
+ source: "elm/slider/horizontal/indicator/camera";
+ mouse_events: 1;
+ repeat_events: 1;
+ scale: 1;
+ dragable {
+ x: 1 1 0;
+ y: 0 0 0;
+ confine: "bg";
+ }
+ description {
+ state: "default" 0.0;
+ min: 20 20;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "disabler";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ color: SLIDER_DISABLER_PART_COLOR_INC;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.icon";
+ }
+ program {
+ name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.icon";
+ }
+ program {
+ name: "end_show";
+ signal: "elm,state,end,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.end";
+ }
+ program {
+ name: "end_hide";
+ signal: "elm,state,end,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.end";
+ }
+ program {
+ name: "slider_disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disabler";
+ after: "disable_ind";
+ }
+ program {
+ name: "disable_ind";
+ action: SIGNAL_EMIT "elm.dragable.slider:elm,state,disabled" "elm";
+ }
+ program {
+ name: "slider_enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disabler";
+ after: "enable_ind";
+ }
+ program {
+ name: "enable_ind";
+ action: SIGNAL_EMIT "elm.dragable.slider:elm,state,enabled" "elm";
+ }
+ }
+ }
+
+ group {
+ name: "elm/slider/horizontal/indicator/camera";
+
+ parts {
+ part {
+ name: "button_events";
+ type: RECT;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 60 60;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "button0";
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 60 60;
+ image {
+ normal: SLIDER_HANDLER_IMAGE;
+ }
+ fill.smooth: 0;
+ }
+ description {
+ state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ }
+ programs {
+ program { name: "slider_disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button0";
+ }
+ program { name: "slider_enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button0";
+ }
+ }
+ }
+}
+
+//end file
+
diff --git a/edc/style_tizen_hd_inc.edc b/edc/style_tizen_hd_inc.edc
new file mode 100644
index 0000000..9fd95a3
--- /dev/null
+++ b/edc/style_tizen_hd_inc.edc
@@ -0,0 +1,1155 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#define BG_DEFAULT_COLOR_INC 249 249 249 255
+#define BG_EDIT_MODE_COLOR_INC 218 210 201 255
+#define BG_GROUP_LIST_COLOR_INC 242 238 233 255
+#define BG_TRANSPARENT_COLOR_INC 0 0 0 0
+
+#define LAYOUT_BG_COLOR_INC 249 249 249 255
+#define LAYOUT_EDIT_MODE_BG_COLOR_INC 218 210 201 255
+#define LAYOUT_GROUP_LIST_BG_COLOR_INC 242 238 233 255
+#define LAYOUT_INDICATOR_HEIGHT_INC 50
+#define LAYOUT_INDICATOR_COLOR_INC 0 0 0 255
+
+#define NAVIFRAME_TITLE_H_INC 108
+#define NAVIFRAME_SEGMENT_TITLE_H_INC 124
+#define NAVIFRAME_OH_OPENED_H_INC 106
+#define NAVIFRAME_OH_CONTENT_H_INC 74
+#define NAVIFRAME_OH_PADDING_INC 16
+#define NAVIFRAME_OH_ARROW_SIZE_INC 19 12
+#define NAVIFRAME_OH_OPENED_DOUBLE_H_INC 196
+#define NAVIFRAME_PREV_BTN_W_INC 124
+#define NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC 124 80
+#define NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 144
+#define NAVIFRAME_TEXT_PADDING_INC 144
+#define NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 52
+#define NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 186
+#define NAVIFRAME_TITLE_SEGMENT_H_INC 64
+#define NAVIFRAME_TITLE_SEGMENT_FONT_SIZE_INC 32
+#define NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC 50
+#define NAVIFRAME_TITLE_FONT_SIZE_INC 40
+#define NAVIFRAME_SUBTITLE_FONT_SIZE_INC 32
+#define NAVIFRAME_ICON_SIZE_INC 32 32
+#define NAVIFRAME_ICON_PADDING_INC 16 0
+#define NAVIFRAME_CONTROLBAR_BG_COLOR_INC 100 85 66 255
+#define NAVIFRAME_TITLE_TEXT_COLOR_INC 73 44 7 255
+#define NAVIFRAME_SUBTITLE_TEXT_COLOR_INC 73 44 7 255
+#define NAVIFRAME_TITLE_BG_COLOR_INC 219 201 174 255
+#define NAVIFRAME_OH_BORDER_INC 0 0 4 0
+
+#define PROGRESSBAR_TITLE_FONT_SIZE_INC 28
+#define PROGRESSBAR_STATUS_TEXT_FONT_SIZE_INC 20
+
+#define POPUP_DEFAULT_TITLE_TEXT_COLOR_INC 255 255 255 255
+#define POPUP_DEFAULT_DESCRIPTION_TEXT_COLOR_INC "#000000"
+#define POPUP_DIM_BG_COLOR_INC 61 59 56 204
+#define POPUP_DIM_BG_CLICKED_COLOR_INC 61 59 56 250
+#define POPUP_DIM_BG_TRANS_COLOR_INC 0 0 0 0
+#define POPUP_DIM_BG_CLICKED_TRANS_COLOR_INC 0 0 0 50
+#define POPUP_CUSTOMSTYLE_TITLE_BOTTOM_LINE_COLOR_INC 199 199 199 255
+#define POPUP_CUSTOMSTYLE_TITLE_TEXT_COLOR_INC 0 0 0 255
+
+#define CTXPOPUP_SEPARATOR_COLOR_INC 199 199 199 255
+#define CTXPOPUP_TP_BG_COLOR_INC 221 134 21 255
+#define CTXPOPUP_ITEM_TEXT_SIZE_INC 44
+#define CTXPOPUP_ITEM_HEIGHT_INC 110
+#define CTXPOPUP_ITEM_ICON_INC 160 110
+#define CTXPOPUP_ICON_WIDTH_INC 80
+#define CTXPOPUP_ICON_HEIGHT_INC 80
+#define CTXPOPUP_ARROW_SIZE_INC 48 48
+#define CTXPOPUP_CONTENT_WIDTH_MAX_INC 630
+#define CTXPOPUP_ITEM_PADDING_INC 25
+#define CTXPOPUP_IE_ARROW_SIZE_INC 52
+#define CTXPOPUP_IE_FONT_SIZE_INC 40
+#define CTXPOPUP_IE_ITEM_PADDING_INC 22
+#define CTXPOPUP_IE_ITEM_HEIGHT_INC 75
+#define CTXPOPUP_IE_CONTENT_WIDTH_MAX_INC 720
+#define CTXPOPUP_IE_ICON_WIDTH_INC 60
+#define CTXPOPUP_IE_ICON_HEIGHT_INC 60
+#define CTXPOPUP_TP_ARROW_SIZE_INC 30
+#define CTXPOPUP_TP_HEIGHT_INC 106
+
+#define DISKSELECTOR_DF_FONT_COLOR_INC 231 171 92 255
+#define DISKSELECTOR_DF_FONT_MOUSE_DOWN_COLOR_INC 255 201 122 255
+#define DISKSELECTOR_DF_ITEM_MIN_SIZE_INC 70 106;
+#define DISKSELECTOR_DF_FONT_SIZE_INC 44
+#define DISKSELECTOR_DF_DATA_MIN_HEIGHT_INC "106"
+
+#define LABEL_TEXT_BLOCK_STYLE_COLOR_INC "#000000"
+#define LABEL_FONT_SIZE_INC 36
+#define LABEL_MIN_FONT_SIZE_INC 27
+#define LABEL_MAX_FONT_SIZE_INC 90
+
+#define GENGRID_FONT_STYLE_18_INC "26"
+#define GENGRID_PART_BG_COLOR_INC 0 0 0 0
+#define GENGRID_PART_ITEM_BG_COLOR_INC 239 239 239 255
+#define GENGRID_PART_REORDER_BG_COLOR_INC 0 0 0 128
+#define GENGRID_PART_TEXTBLOCK_STYLE_COLOR_INC "#F9F9F9"
+
+#define GENLIST_HEIGHT_1_INC 1
+#define GENLIST_HEIGHT_16_INC 16
+#define GENLIST_HEIGHT_33_INC 33
+#define GENLIST_HEIGHT_49_INC 49
+#define GENLIST_HEIGHT_62_INC 62
+#define GENLIST_HEIGHT_65_INC 65
+#define GENLIST_HEIGHT_73_INC 73
+#define GENLIST_HEIGHT_77_INC 77
+#define GENLIST_HEIGHT_86_INC 86
+#define GENLIST_HEIGHT_89_INC 89
+#define GENLIST_HEIGHT_93_INC 93
+#define GENLIST_HEIGHT_97_INC 97
+#define GENLIST_HEIGHT_103_INC 103
+#define GENLIST_HEIGHT_104_INC 104
+#define GENLIST_HEIGHT_113_INC 113
+#define GENLIST_HEIGHT_129_INC 129
+#define GENLIST_HEIGHT_177_INC 177
+#define GENLIST_HEIGHT_182_INC 182
+#define GENLIST_HEIGHT_190_INC 190
+#define GENLIST_HEIGHT_207_INC 207
+#define GENLIST_HEIGHT_260_INC 260
+#define GENLIST_HEIGHT_291_INC 291
+#define GENLIST_HEIGHT_454_INC 454
+#define GENLIST_HEIGHT_566_INC 566
+
+#define GENLIST_PADDING_4_INC 4
+#define GENLIST_PADDING_5_INC 5
+#define GENLIST_PADDING_6_INC 6
+#define GENLIST_PADDING_8_INC 8
+#define GENLIST_PADDING_10_INC 10
+#define GENLIST_PADDING_11_INC 11
+#define GENLIST_PADDING_12_INC 12
+#define GENLIST_PADDING_13_INC 13
+#define GENLIST_PADDING_14_INC 14
+#define GENLIST_PADDING_16_INC 16
+#define GENLIST_PADDING_18_INC 18
+#define GENLIST_PADDING_21_INC 21
+#define GENLIST_PADDING_22_INC 22
+#define GENLIST_PADDING_24_INC 24
+#define GENLIST_PADDING_27_INC 27
+#define GENLIST_PADDING_28_INC 28
+#define GENLIST_PADDING_32_INC 32
+#define GENLIST_PADDING_34_INC 34
+#define GENLIST_PADDING_46_INC 46
+#define GENLIST_PADDING_48_INC 48
+#define GENLIST_PADDING_64_INC 64
+#define GENLIST_PADDING_74_INC 74
+#define GENLIST_PADDING_88_INC 88
+#define GENLIST_PADDING_124_INC 124
+
+#define GENLIST_FONT_27_INC 27
+#define GENLIST_FONT_28_INC 28
+#define GENLIST_FONT_30_INC 30
+#define GENLIST_FONT_32_INC 32
+#define GENLIST_FONT_STYLE_32_INC "32"
+#define GENLIST_FONT_36_INC 36
+#define GENLIST_FONT_STYLE_36_INC "36"
+#define GENLIST_FONT_40_INC 40
+#define GENLIST_FONT_STYLE_40_INC "40"
+#define GENLIST_FONT_42_INC 42
+#define GENLIST_FONT_STYLE_42_INC "42"
+#define GENLIST_FONT_44_INC 44
+#define GENLIST_FONT_STYLE_44_INC "44"
+#define GENLIST_FONT_48_INC 48
+#define GENLIST_FONT_STYLE_48_INC "48"
+
+#define GENLIST_SIZE_6_INC 6
+#define GENLIST_SIZE_8_INC 8
+#define GENLIST_SIZE_10_INC 10
+#define GENLIST_SIZE_13_INC 13
+#define GENLIST_SIZE_16_INC 16
+#define GENLIST_SIZE_18_INC 18
+#define GENLIST_SIZE_21_INC 21
+#define GENLIST_SIZE_32_INC 32
+#define GENLIST_SIZE_35_INC 35
+#define GENLIST_SIZE_38_INC 38
+#define GENLIST_SIZE_40_INC 40
+#define GENLIST_SIZE_42_INC 42
+#define GENLIST_SIZE_44_INC 44
+#define GENLIST_SIZE_45_INC 45
+#define GENLIST_SIZE_46_INC 46
+#define GENLIST_SIZE_48_INC 48
+#define GENLIST_SIZE_54_INC 54
+#define GENLIST_SIZE_56_INC 56
+#define GENLIST_SIZE_57_INC 57
+#define GENLIST_SIZE_61_INC 61
+#define GENLIST_SIZE_SLIDE_60_INC 60
+#define GENLIST_SIZE_64_INC 64
+#define GENLIST_SIZE_80_INC 80
+#define GENLIST_SIZE_90_INC 90
+#define GENLIST_SIZE_96_INC 96
+#define GENLIST_SIZE_112_INC 112
+#define GENLIST_SIZE_116_INC 116
+#define GENLIST_SIZE_128_INC 128
+#define GENLIST_SIZE_133_INC 133
+#define GENLIST_SIZE_141_INC 141
+#define GENLIST_SIZE_144_INC 144
+#define GENLIST_SIZE_154_INC 154
+#define GENLIST_SIZE_160_INC 160
+#define GENLIST_SIZE_163_INC 163
+#define GENLIST_SIZE_168_INC 168
+#define GENLIST_SIZE_174_INC 174
+#define GENLIST_SIZE_SLIDE_165_INC 165
+#define GENLIST_SIZE_176_INC 176
+#define GENLIST_SIZE_177_INC 177
+#define GENLIST_SIZE_192_INC 192
+#define GENLIST_SIZE_195_INC 195
+#define GENLIST_SIZE_206_INC 206
+#define GENLIST_SIZE_234_INC 234
+#define GENLIST_SIZE_235_INC 235
+#define GENLIST_SIZE_SLIDE_220_INC 220
+#define GENLIST_SIZE_390_INC 390
+#define GENLIST_SIZE_448_INC 448
+#define GENLIST_SIZE_560_INC 560
+#define GENLIST_SIZE_576_INC 576
+#define GENLIST_SIZE_672_INC 672
+
+#define GENLIST_TREESIZE_16_INC 16
+#define GENLIST_TREESIZE_32_INC 32
+
+//new
+#define GENLIST_PART_FONT_LIST_MAIN_TEXT_READ_COLOR_INC 158 158 158 255
+#define GENLIST_PART_FONT_LIST_MAIN_TEXT_UNREAD_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_LIST_MAIN_TEXT_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC 129 129 129 255
+#define GENLIST_PART_FONT_LIST_SUB_TEXT_SETTINGS_COLOR_INC 0 140 210 255
+#define GENLIST_PART_FONT_LIST_SUB_TEXT_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_FLEXIBLE_TEXT_MAIN_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_FLEXIBLE_TEXT_SUB_COLOR_INC 149 149 149 255
+#define GENLIST_PART_FONT_INDEX_LIST_COLOR_INC 164 164 164 255
+#define GENLIST_PART_FONT_EDITFIELD_TEXT_COLOR_INC 70 70 70 255
+#define GENLIST_PART_FONT_EDITFIELD_TEXT_CURSOR_COLOR_INC 0 140 210 255
+#define GENLIST_PART_FONT_MULTILINE_TEXT_COLOR_INC 149 149 149 255
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_READ_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_UNREAD_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_2_COLOR_INC 104 137 152 255
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_2_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_CONVERTOR_STYLE_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_CONVERTOR_STYLE_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_UNREAD_EMAIL_COLOR_INC 249 249 249 255
+#define GENLIST_PART_FONT_CONTENTS_TEXT_COLOR_INC 210 210 210 255
+#define GENLIST_PART_FONT_NAME_TEXT_COLOR_INC 129 129 129 255
+#define GENLIST_PART_FONT_NAME_TEXT_DIM_COLOR_INC 0 140 210 255
+#define GENLIST_PART_FONT_BUBBLE_READ_MESSAGE_COLOR_INC 0 0 0 255
+#define GENLIST_PART_FONT_BUBBLE_MESSAGE_TIME_COLOR_INC 96 96 96 255
+#define GENLIST_PART_FONT_BUBBLE_SENT_MESSAGE_COLOR_INC 0 0 0 255
+#define GENLIST_PART_FONT_BUBBLE_SOS_MESSAGE_COLOR_INC 211 0 0 255
+#define GENLIST_PART_FONT_BUBBLE_MESSAGE_DATE_COLOR_INC 164 164 164 255
+#define GENLIST_PART_FONT_BUBBLE_LINK_MESSAGE_COLOR_INC 34 129 157 255
+#define GENLIST_PART_FONT_BUBBLE_MESSAGE_FAILED_COLOR_INC 211 0 0 255
+#define GENLIST_PART_FONT_BUBBLE_READ_MESSAGE_NAME_COLOR_INC 57 166 215 255
+#define GENLIST_PART_FONT_BUBBLE_MESSAGE_HELP_COLOR_INC 146 146 146 255
+#define GENLIST_PART_FONT_SWEEP_STYLE_COLOR_INC 118 118 118 255
+
+#define GENLIST_PART_FONT_LIST_MAIN_TEXT_UNREAD_STYLE_COLOR_INC "#F9F9F9FF"
+#define GENLIST_PART_FONT_LIST_SUB_TEXT_STYLE_COLOR_INC "#646464FF"
+#define GENLIST_PART_FONT_FLEXIBLE_TEXT_MAIN_STYLE_COLOR_INC "#F9F9F9FF"
+#define GENLIST_PART_FONT_FLEXIBLE_TEXT_SUB_STYLE_COLOR_INC "#646464FF"
+#define GENLIST_PART_FONT_MULTILINE_TEXT_STYLE_COLOR_INC "#646464FF"
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_READ_STYLE_COLOR_INC "#9E9E9EFF"
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_UNREAD_STYLE_COLOR_INC "#F9F9F9FF"
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_FOCUS_STYLE_COLOR_INC "#F9F9F9FF"
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_2_STYLE_COLOR_INC "#688998FF"
+#define GENLIST_PART_FONT_3LINE_MAIN_TEXT_2_FOCUS_STYLE_COLOR_INC "#F9F9F9FF"
+#define GENLIST_PART_FONT_HELP_TEXT_STYLE_COLOR_INC "#929292FF"
+
+#define GENLIST_PART_DISCLIP_COLOR_INC 255 255 255 64
+#define GENLIST_PART_BG_COLOR_INC 0 0 0 0
+#define GENLIST_PART_LIST_BG_COLOR_INC 0 0 0 0
+#define GENLIST_PART_LIST_LINE_COLOR_INC 68 68 68 255
+#define GENLIST_PART_LIST_PRESS_COLOR_INC 0 140 210 255
+#define GENLIST_PART_TEXT_PRESS_COLOR_INC 249 249 249 255
+#define GENLIST_PART_EXPANDABLE_2ND_DEPTH_BG_COLOR_INC 31 31 31 255
+#define GENLIST_PART_EXPANDABLE_3ND_DEPTH_BG_COLOR_INC 46 46 46 255
+#define GENLIST_PART_EDIT_SELECT_ALL_BG_COLOR_INC 36 36 36 255
+#define GENLIST_PART_EDIT_REORDER_BG_COLOR_INC 36 36 36 255
+#define GENLIST_PART_EDIT_1PIXEL_LINE_COLOR_INC 68 68 68 255
+#define GENLIST_PART_BUBBLE_DATE_BG_COLOR_INC 66 66 66 255
+#define GENLIST_PART_BUBBLE_1PIXEL_LINE_COLOR_INC 153 153 153 255
+#define GENLIST_PART_INDEX_LIST_BASE_EVENT_INC \
+ part { name: "base_event";\
+ type: RECT;\
+ repeat_events: 0;\
+ description { state: "default" 0.0;\
+ color: 0 0 0 0;\
+ }\
+ }
+#define GENLIST_PART_INDEX_LIST_BASE_IMAGE_INC \
+ part { name: "base_image";\
+ repeat_events: 1;\
+ description { state: "default" 0.0;\
+ rel1.to: "rect";\
+ rel2.to: "rect";\
+ image {\
+ normal: "00_index list_bg.png";\
+ }\
+ }\
+ }
+
+#define GENLIST_PART_TEXT_PRESS_STYLE_COLOR_INC "#F9F9F9FF"
+#define GENLIST_PART_MATCH_TAG_COLOR_INC "+ color=#31A1FF"
+
+#define GENLIST_DIALOGUE_FONT_SUB_TITLE_COLOR_INC 102 102 102 255
+#define GENLIST_DIALOGUE_FONT_EDIT_MODE_TEXT_01_COLOR_INC 153 153 153 255
+#define GENLIST_DIALOGUE_FONT_EDIT_MODE_TEXT_01_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_EDIT_MODE_TEXT_02_COLOR_INC 63 141 173 255
+#define GENLIST_DIALOGUE_FONT_EDIT_MODE_TEXT_02_DIM_COLOR_INC 63 141 173 255
+#define GENLIST_DIALOGUE_FONT_EDIT_MODE_TEXT_02_FOCUS_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_TEXT_MAIN_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_TEXT_SUB_COLOR_INC 146 146 146 255
+#define GENLIST_DIALOGUE_FONT_APPS_NAME_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_APPS_INC_COLOR_INC 146 146 146 255
+#define GENLIST_DIALOGUE_FONT_APPS_RATING_COLOR_INC 146 146 146 255
+#define GENLIST_DIALOGUE_FONT_APPS_PRICE_ORIGINAL_COLOR_INC 0 140 210 255
+#define GENLIST_DIALOGUE_FONT_APPS_PRICE_SALE_COLOR_INC 221 134 21 255
+#define GENLIST_DIALOGUE_FONT_APPS_PRICE_FREE_COLOR_INC 0 140 210 255
+#define GENLIST_DIALOGUE_FONT_PASSWORD_TITLE_COLOR_INC 153 153 153 255
+#define GENLIST_DIALOGUE_FONT_PASSWORD_INPUT_TEXT_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_WORD_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_PRONUNCIATION_COLOR_INC 152 89 0 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_NATION_COLOR_INC 146 146 146 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_INFO_01_COLOR_INC 249 249 249 255
+#define GENLIST_DIALOGUE_FONT_DETAIL_INFO_02_COLOR_INC 146 146 146 255
+
+#define GENLIST_DIALOGUE_GROUP_BG_COLOR_INC 36 36 36 255
+#define GENLIST_DIALOGUE_GROUP_LIST_BG_COLOR_INC 36 36 36 255
+#define GENLIST_DIALOGUE_GROUP_LEFT_BG_COLOR_INC 68 68 68 255
+#define GENLIST_DIALOGUE_1PIXEL_LINE_COLOR_INC 68 68 68 255
+#define GENLIST_DIALOGUE_ICON_1PIXEL_LINE_COLOR_INC 68 68 68 255
+#define GENLIST_DIALOGUE_PHOTO_ID_1PIXEL_LINE_COLOR_INC 68 68 68 255
+
+//old
+#if 0
+#define GENLIST_PART_DISCLIP_COLOR_INC 255 255 255 64
+#define GENLIST_PART_BG_COLOR_INC 249 249 249 255
+#define GENLIST_PART_BG_SELECTED_COLOR_INC 199 185 164 255
+#define GENLIST_PART_BG_UNSELECTED_COLOR_INC 199 185 164 0
+#define GENLIST_PART_DIALOGUE_BG_COLOR_INC 242 238 233 255
+#define GENLIST_PART_SELECT_ALL_BG_COLOR_INC 239 237 230 255
+#define GENLIST_PART_TEXT_COLOR_INC 0 0 0 255
+#define GENLIST_PART_TEXT_SELECTED_COLOR_INC 255 255 255 255
+#define GENLIST_PART_SUB_TEXT_COLOR_INC 108 108 108 255
+#define GENLIST_PART_SUB_TEXT_SETTINGS_COLOR_INC 226 144 1 255
+#define GENLIST_PART_MULTILINE_TEXT_COLOR_INC GENLIST_PART_TEXT_COLOR_INC
+#define GENLIST_PART_MULTILINE_TITLE_COLOR_INC 78 73 69 255
+#define GENLIST_PART_MULTILINE_TITLE_STYLE_COLOR_INC "#4E4E4EFF"
+#define GENLIST_PART_MULTILINE_TITLE_STYLE_SELECTED_COLOR_INC "#4E4E4EFF"
+#define GENLIST_PART_MULTILINE_TEXT_STYLE_COLOR_INC "#000000"
+#define GENLIST_PART_MULTILINE_SUB_TEXT_STYLE_COLOR_INC "#6C6C6C"
+#define GENLIST_PART_MULTILINE_TEXT_STYLE_SELECTED_COLOR_INC "#FFFFFF"
+#define GENLIST_PART_MULTILINE_HELP_STYLE_COLOR_INC "#9c8e7d"
+#define GENLIST_PART_MATCH_TAG_COLOR_INC "+ color=#31A1FF"
+#define GENLIST_PART_SLIDE_TEXT_COLOR_INC 255 255 255 255
+#define GENLIST_PART_BOTTOM_LINE_INC 199 199 199 255
+#define GENLIST_PART_DIALOGUE_SUBTITLE_TEXT_COLOR_INC 156 156 156 255
+#define GENLIST_PART_DIALOGUE_INDICATOR_BG_COLOR_INC 199 199 199 255
+#define GENLIST_PART_EMAIL_READ_TEXT_COLOR_INC 108 108 108 255
+#define GENLIST_PART_EMAIL_UNREAD_TEXT_COLOR_INC 0 0 0 255
+#define GENLIST_PART_EMAIL_URGENCY_UNREAD_TEXT_COLOR_INC 207 37 37 255
+#define GENLIST_PART_EMAIL_URGENCY_READ_TEXT_COLOR_INC 171 82 82 255
+#endif
+#define GENLIST_PART_EMAIL_MSGCOUNT_TEXT_COLOR_INC 255 255 255 255
+#define GENLIST_PART_TEXTBLOCK_STYLE_COLOR_INC "#000000FF"
+#define GENLIST_PART_TEXTBLOCK_STYLE_SELECTED_COLOR_INC "#FFFFFF"
+#define GENLIST_PART_TEXTBLOCK_READ_STYLE_COLOR_INC "#989898FF"
+#define GENLIST_PART_TEXTBLOCK_UNREAD_STYLE_COLOR_INC "#000000FF"
+#define GENLIST_PART_TEXTBLOCK_SUB_STYLE_COLOR_INC "#6C6C6C"
+#define GENLIST_PART_TEXTBLOCK_URGENCY_READ_STYLE_COLOR_INC "#AB5252"
+#define GENLIST_PART_TEXTBLOCK_URGENCY_UNREAD_STYLE_COLOR_INC "#CF2525"
+#if 0
+#define GENLIST_GROUP_PART_TEXT_COLOR_INC 108 108 108 255
+#define GENLIST_GROUP_PART_BASE_EVENT_INC \
+ part { name: "base_event";\
+ type: RECT;\
+ repeat_events: 0;\
+ description { state: "default" 0.0;\
+ color: 0 0 0 0;\
+ }\
+ }
+#define GENLIST_GROUP_PART_BASE_IMAGE_INC \
+ part { name: "base_image";\
+ repeat_events: 1;\
+ description { state: "default" 0.0;\
+ rel1.to: "rect";\
+ rel2.to: "rect";\
+ image {\
+ normal: "00_index list_bg.png";\
+ }\
+ }\
+ }
+#define GENLIST_GROUP_BG_COLOR_DEFAULT_INC 0 0 0 0
+#define GENLIST_GROUP_BG_COLOR_ALPHA_OFF_INC 0 0 0 0
+#define GENLIST_GROUP_LEFT_BG_COLOR_INC 210 206 191 255
+#define GENLIST_EDIT_PART_LINE_INC 187 187 187 150
+#define GENLIST_EDIT_PART_BOTTOM_LINE_INC 82 82 82 255
+#define GENLIST_EDIT_BG_COLOR_INC 234 230 217 255
+#define GENLIST_EDIT_SELECT_ALL_BG_COLOR_INC 239 237 230 255
+#define GENLIST_EXPANDABLE_PART_BG_COLOR_INC GENLIST_PART_BG_COLOR_INC
+#define GENLIST_EXPANDABLE2_PART_BG_COLOR_INC 242 238 233 255
+#define GENLIST_EXPANDABLE3_PART_BG_COLOR_INC 218 212 205 255
+#define GENLIST_EXPANDABLE2_NOSHADOW_BG_COLOR_INC 242 238 233 255
+#define GENLIST_EXPANDABLE_PART_BG_IMAGE_INC \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_bg.png"; \
+ border: 0 0 12 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+#define GENLIST_PART_BG_EXPANDABLE3_IMAGE_INC \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_2_bg.png"; \
+ border: 0 0 12 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+#define GENLIST_EXPANDABLE3_PART_BG_IMAGE_INC \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_2_bg.png"; \
+ border: 0 0 12 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+#define GENLIST_EXPANDABLE3_NOSHADOW_PART_BG_IMAGE_INC \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_2_noshadow_bg.png"; \
+ border: 0 0 0 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \
+ GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \
+ }
+#define GENLIST_DIALOGUE_EXPANDABLE2_PART_BG_COLOR_INC 242 238 233 255
+#define GENLIST_DIALOGUE_EXPANDABLE3_PART_BG_COLOR_INC 218 212 205 255
+#define GENLIST_GROUP_PART_BUBBLE_TEXT_COLOR_INC 76 75 73 255
+#define GENLIST_GROUP_PART_BUBBLE_BG_COLOR_INC 220 211 198 255
+#define GENLIST_BUBBLE_BG_COLOR_INC 192 192 192 255
+#endif
+
+#define CONTACT_DISPLAY_NAME_FONT_COLOR_INC 0 0 0 255
+#define CONTACT_DISPLAY_NAME_FONT_GRAY_COLOR_INC 167 167 167 255
+
+#define BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC 78 73 69 255
+#define BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC 185 185 185 255
+#define BUTTON_TEXT_STYLE1_TEXT_DISABLED_COLOR_INC 160 151 1 255
+
+#define BUTTON_TEXT_NAVIFRAME_NORMAL_COLOR_INC 78 73 69 255
+#define BUTTON_TEXT_NAVIFRAME_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_TEXT_NAVIFRAME_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_TEXT_NAVIFRAME_DISABLED_COLOR_INC 185 185 185 255
+
+#define BUTTON_ICON_TEXT_NORMAL_COLOR_INC 90 73 40 255
+#define BUTTON_ICON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_ICON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_ICON_TEXT_DISABLED_COLOR_INC 154 144 123 255
+
+#define BUTTON_POPUP_BUTTON_TEXT_NORMAL_COLOR_INC 53 45 39 255
+#define BUTTON_POPUP_BUTTON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_POPUP_BUTTON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_POPUP_BUTTON_TEXT_DISABLED_COLOR_INC 87 87 87 255
+
+#define BUTTON_SWEEP_BUTTON_TEXT_NORMAL_COLOR_INC 78 73 69 255
+#define BUTTON_SWEEP_BUTTON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_SWEEP_BUTTON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_SWEEP_BUTTON_TEXT_DISABLED_COLOR_INC 185 185 185 255
+
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXT_NORMAL_COLOR_INC 78 73 69 255
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXT_DISABLED_COLOR_INC 185 185 185 255
+
+#define BUTTON_CONTACT_BUTTON_BG_NORMAL_COLOR_INC 195 160 107 255
+#define BUTTON_CONTACT_BUTTON_BG_PRESSED_COLOR_INC 103 79 43 255
+
+#define BUTTON_CONTACT_BUTTON_TEXT_NORMAL_COLOR_INC 255 255 255 255
+#define BUTTON_CONTACT_BUTTON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_CONTACT_BUTTON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_CONTACT_BUTTON_TEXT_DISABLED_COLOR_INC 255 255 255 255
+
+#define BUTTON_HIDDEN_BUTTON_TEXT_NORMAL_COLOR_INC 0 0 0 255
+#define BUTTON_HIDDEN_BUTTON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_HIDDEN_BUTTON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_HIDDEN_BUTTON_TEXT_DISABLED_COLOR_INC 154 144 123 255
+
+#define BUTTON_TEXT_CONTACTS_DELETE_NORMAL_COLOR_INC 207 41 41 255
+#define BUTTON_TEXT_CONTACTS_DELETE_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_TEXT_CONTACTS_DELETE_DISABLED_COLOR_INC 0 0 0 128
+
+#define BUTTON_NUMBERED_TEXT_NORMAL_COLOR_INC 78 73 69 255
+
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_TEXT_SIZE_INC 28
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_TEXTBLOCK_COLOR_INC "#f9f9f9"
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC 56 56
+
+#define BUTTON_TEXT_STYLE1_BG_MIN_INC 100 74
+#define BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC 148 74
+#define BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_TEXT_STYLE1_BG_BORDER_INC 5 5 5 5
+#define BUTTON_TEXT_STYLE1_PADDING_MIN_INC 20 5
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_FONT_SIZE_INC 32
+
+#define BUTTON_TEXT_STYLE2_BG_MIN_INC 100 74
+#define BUTTON_TEXT_STYLE2_VISIBLE_BG_MIN_INC 148 74
+#define BUTTON_TEXT_STYLE2_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_TEXT_STYLE2_BG_BORDER_INC 5 5 5 5
+#define BUTTON_TEXT_STYLE2_PADDING_MIN_INC 5 5
+#define BUTTON_TEXT_STYLE2_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE2_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_TEXT_STYLE2_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE2_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE2_FONT_SIZE_INC 32
+
+#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_CONTENT_MIN_MAX_INC 35 35
+
+#define BUTTON_POPUP_BG_NORMAL_MIN_INC 30 74
+#define BUTTON_POPUP_BG_BORDER_INC 5 5 5 5
+#define BUTTON_POPUP_PADDING_MIN_INC 8 5
+#define BUTTON_POPUP_PADDING_ICON_TEXT_VISIBLE_MIN_INC 8 0
+#define BUTTON_POPUP_ICON_ICONONLY_MIN_INC 38 38
+#define BUTTON_POPUP_TEXT_MIN_INC 64 20
+#define BUTTON_POPUP_TEXT_FONT_SIZE_INC 32
+
+#define BUTTON_EDIT_STYLE_BG_NORMAL_MIN_MAX_INC 74 74
+#define BUTTON_EDIT_STYLE_IMAGE_NORMAL_MIN_MAX_INC 74 74
+#define BUTTON_EDIT_STYLE_BORDER_INC 8 0 5 5
+
+#define BUTTON_EDIT_NORMAL_MIN_WIDTH_INC 54
+#define BUTTON_EDIT_NORMAL_MIN_HEIGHT_INC 54
+#define BUTTON_EDIT_EXTENDED_MIN_WIDTH_INC 64
+#define BUTTON_EDIT_EXTENDED_MIN_HEIGHT_INC 80
+
+#define BUTTON_SWEEP_BG_NORMAL_MIN_INC 12 60
+#define BUTTON_SWEEP_BG_BORDER_INC 5 5 5 5
+#define BUTTON_SWEEP_PADDING_MIN_INC 5 5
+#define BUTTON_SWEEP_ICON_RECT_MIN_INC 0 28
+#define BUTTON_SWEEP_PADDING_ICON_TEXT_VISIBLE_MIN_INC 5 0
+#define BUTTON_SWEEP_ICONONLY_ICON_MIN_INC 28 28
+#define BUTTON_SWEEP_TEXT_MIN_INC 90 28
+#define BUTTON_SWEEP_FONT_SIZE_INC 32
+
+#define BUTTON_SEARCHBAR_BG_NORMAL_MIN_INC 12 74
+#define BUTTON_SEARCHBAR_BG_BORDER_INC 6 6 6 6
+#define BUTTON_SEARCHBAR_PADDING_MIN_INC 5 5
+#define BUTTON_SEARCHBAR_ICON_RECT_MIN_INC 0 28
+#define BUTTON_SEARCHBAR_PADDING_ICON_TEXT_VISIBLE_MIN_INC 5 0
+#define BUTTON_SEARCHBAR_ICONONLY_ICON_MIN_INC 28 28
+#define BUTTON_SEARCHBAR_TEXT_MIN_INC 90 28
+#define BUTTON_SEARCHBAR_FONT_SIZE_INC 32
+
+#define BUTTON_HIDDEN_BG_NORMAL_MIN_INC 12 60
+#define BUTTON_HIDDEN_BG_BORDER_INC 5 5 5 5
+#define BUTTON_HIDDEN_PADDING_MIN_INC 5 5
+#define BUTTON_HIDDEN_ICON_RECT_MIN_INC 0 28
+#define BUTTON_HIDDEN_PADDING_ICON_TEXT_VISIBLE_MIN_INC 5 0
+#define BUTTON_HIDDEN_ICON_ICONONLY_MIN_INC 28 28
+#define BUTTON_HIDDEN_TEXT_MIN_INC 90 28
+#define BUTTON_HIDDEN_FONT_SIZE_INC 38
+
+#define BUTTON_EXPANDABLE_NUMBER_BG_NORMAL_MIN_MAX_INC 108 44
+#define BUTTON_EXPANDABLE_NUMBER_BG_BORDER_INC 5 5 5 5
+#define BUTTON_EXPANDABLE_NUMBER_PADDING_MIN_INC 16 1
+#define BUTTON_EXPANDABLE_NUMBER_ICON_RECT_EXPAND__MIN_MAX_INC 16 22
+#define BUTTON_EXPANDABLE_NUMBER_TEXT_MIN_MAX_INC 44 44
+#define BUTTON_EXPANDABLE_NUMBER_FONT_SIZE_INC 32
+
+#define BUTTON_CONTACT_DELETE_BG_NORMAL_MIN_INC 50 74
+#define BUTTON_CONTACT_DELETE_BG_BORDER_INC 8 0 5 5
+#define BUTTON_CONTACT_DELETE_PADDING_LEFT_TOP_MIN_INC 36 2
+#define BUTTON_CONTACT_DELETE_PADDING_RIGHT_BOTTOM_MIN_INC 14 2
+#define BUTTON_CONTACT_DELETE_PADDING_ICON_TEXT_VISIBLE_MIN_INC 5 0
+#define BUTTON_CONTACT_DELETE_ICON_ICONONLY_MIN_INC 42 42
+#define BUTTON_CONTACT_DELETE_FONT_SIZE_INC 32
+
+#define BUTTON_CONTACT_BG_NORMAL_MIN_INC 66 44
+#define BUTTON_CONTACT_PADDING_MIN_INC 16 1
+#define BUTTON_CONTACT_FONT_SIZE_INC 38
+
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC 106 74
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC 56 56
+
+#define BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC 249 249 249 255
+#define BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC 249 249 249 255
+
+#define BUTTON_NAVIFRAME_CENTER_BG_NORMAL_MIN_INC 22 46
+#define BUTTON_NAVIFRAME_CENTER_BG_NORMAL_BORDER_INC 4 4 4 4
+#define BUTTON_NAVIFRAME_CENTER_PADDING_MIN_MAX_INC 16 2
+#define BUTTON_NAVIFRAME_CENTER_ICON_RECT_VISIBLE_MIN_SIZE 36 36
+#define BUTTON_NAVIFRAME_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC 6 0
+#define BUTTON_NAVIFRAME_CENTER_PADDING_BEFORE_TEXT_DEFAULT_MIN_INC 6 0
+#define BUTTON_NAVIFRAME_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC 36 36
+#define BUTTON_NAVIFRAME_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_CENTER_TEXT_FONT_SIZE_INC 32
+#define BUTTON_NAVIFRAME_MULTILINE_TEXT_FONT_SIZE_INC 24
+
+#define BUTTON_NAVIFRAME_BG_MIN_INC 124 74
+#define BUTTON_NAVIFRAME_VISIBLE_BG_MIN_INC 124 74
+#define BUTTON_NAVIFRAME_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_NAVIFRAME_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_PADDING_MIN_INC 5 5
+#define BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_NAVIFRAME_FONT_SIZE_INC 28
+#define BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC 124 74
+
+#define BUTTON_NAVIFRAME_MORE_BG_MIN_MAX_INC 82 64
+#define BUTTON_NAVIFRAME_MORE_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_MORE_DEFAULT_IMAGE_MIN_MAX_INC 50 50
+
+#define BUTTON_TICKERNOTI_BG_MIN_INC 54 54
+#define BUTTON_TICKERNOTI_VISIBLE_BG_MIN_INC 62 34
+#define BUTTON_TICKERNOTI_ICONONLY_BG_MIN_INC 54 54
+#define BUTTON_TICKERNOTI_BG_BORDER_INC 5 5 5 5
+#define BUTTON_TICKERNOTI_PADDING_MIN_INC 5 5
+#define BUTTON_TICKERNOTI_VISIBLE_ICON_RECT_MIN_MAX_INC 44 44
+#define BUTTON_TICKERNOTI_VISIBLE_PADDING_ICON_TEXT_MIN_INC 8 0
+#define BUTTON_TICKERNOTI_VISIBLE_ICON_MIN_MAX_INC 44 44
+#define BUTTON_TICKERNOTI_ICONONLY_ICON_MIN_MAX_INC 44 44
+#define BUTTON_TICKERNOTI_FONT_SIZE_INC 28
+
+#define BUTTON_PICKER_TEXT_DEFAULT_COLOR_INC 78 73 69 255
+#define BUTTON_PICKER_TEXT_CLICKED_COLOR_INC 255 255 255 255
+#define BUTTON_PICKER_TEXT_DISABLED_COLOR_INC 0 0 0 128
+#define BUTTON_PICKER_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_BG_DEFAULT_MIN_INC 74 66
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_BG_DEFAULT_BORDER_INC 5 5 5 5
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_PADDING_MIN_INC 16 5
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_ICON_RECT_MIN_INC 0 56
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_PADDING_ICON_RECT_TEXT_MIN_INC 5 0
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_CONTENT_ICON_ONLY_MIN_INC 56 56
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_TEXT_FONT_SIZE_INC 32
+#define BUTTON_PICKER_PREV_TEXT_DEFAULT_TEXT_VISIBLE_MIN_INC 96 56
+
+#define BUTTON_PICKER_PREV_ICON_DEFAULT_BG_DEFAULT_MIN_MAX_INC 74 66
+#define BUTTON_PICKER_PREV_ICON_DEFAULT_BG_DEFAULT_BORDER_INC 5 5 5 5
+#define BUTTON_PICKER_PREV_ICON_DEFAULT_PADDING_MIN_INC 5 5
+#define BUTTON_PICKER_PREV_ICON_DEFAULT_IMAGE_MIN_MAX_INC 32 32
+
+#define BUTTON_PICKER_BAR_DEFAULT_BG_DEFAULT_MIN_INC 74 66
+#define BUTTON_PICKER_BAR_DEFAULT_BG_DEFAULT_IMAGE_BORDER_INC 5 5 5 5
+#define BUTTON_PICKER_BAR_DEFAULT_PADDING_MIN_INC 5 5
+#define BUTTON_PICKER_BAR_DEFAULT_ICON_RECT_DEFAULT_MIN_INC 0 56
+#define BUTTON_PICKER_BAR_DEFAULT_PADDING_ICON_RECT_TEXT_MIN_INC 5 0
+#define BUTTON_PICKER_BAR_DEFAULT_CONTENT_ICONONLY_MIN_INC 56 56
+#define BUTTON_PICKER_BAR_DEFAULT_TEXT_FONT_SIZE_INC 32
+#define BUTTON_PICKER_BAR_DEFAULT_TEXT_VISIBLE_MIN_INC 128 56
+
+#define BUTTON_COLORSELECTOR_BG_DEFAULT_MIN_INC 74 60
+
+#define BUTTON_DEFAULT_STYLE_BG_MIN_INC 28 74
+#define BUTTON_DEFAULT_STYLE_BG_BORDER_INC 5 5 5 5
+#define BUTTON_DEFAULT_STYLE_PADDING_MIN_INC 5 5
+#define BUTTON_DEFAULT_STYLE_PADDING_ICON_TEXT_VISIBLE_MIN_INC 5 0
+#define BUTTON_DEFAULT_STYLE_ICONONLY_ICON_MIN_INC 38 38
+#define BUTTON_DEFAULT_STYLE_TEXT_MIN_INC 135 38
+#define BUTTON_DEFAULT_STYLE_FONT_SIZE_INC 32
+
+#define CHECK_DELETE_TEXT_DELETE_NORMAL_COLOR_INC 207 41 41 255
+#define CHECK_DELETE_TEXT_DELETE_PRESS_COLOR_INC 255 255 255 255
+
+#define CHECK_DEFAULT_TEXT_FONT_SIZE_INC 32
+
+#define CHECK_ONOFF_BG_NORMAL_MIN_MAX_INC 60 80
+#define CHECK_ONOFF_CHECK_IMAGE_BORDER_INC 5 5 5 5
+#define CHECK_ONOFF_ON_FONT_SIZE_INC 24
+#define CHECK_ONOFF_OFF_FONT_SIZE_INC 24
+
+#define CHECK_STYLE_FAVORITE_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 64
+#define CHECK_STYLE_FAVORITE_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 64
+#define CHECK_STYLE_FAVORITE_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 64
+#define CHECK_STYLE_FAVORITE_EXTENDED_BG_IMAGE_MIN_HEIGHT_INC 75
+#define CHECK_STYLE_FAVORITE_BG_NORMAL_MIN_MAX_INC 64 64
+
+#define CHECK_STYLE_DEFAULT_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 42
+#define CHECK_STYLE_DEFAULT_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 42
+#define CHECK_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 60
+#define CHECK_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_HEIGHT_INC 75
+#define CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC 42 42
+
+#define CHECK_STYLE_DELETE_BUTTON_BG_IMAGE_MIN_MAX_WIDTH_INC 74 74
+#define CHECK_STYLE_DELETE_BUTTON_BG_EXPAND_IMAGE_MIN_MAX_WIDTH_INC 124 74
+#define CHECK_STYLE_DELETE_BUTTON_BG_EXPAND_BORDER_INC 8 0 5 5
+#define CHECK_STYLE_DELETE_BUTTON_TEXT_FONT_SIZE_INC 32
+
+#define INDEX_BG_NINEPATCH_INC 3 3 3 3
+#define INDEX_ITEM_WIDTH_INC 30
+#define INDEX_ITEM_HEIGHT_INC 30
+#define INDEX_LEVEL_PADDING_INC 70
+#define INDEX_1ST_LEVEL_POPUP_WIDTH_INC 138
+#define INDEX_2ND_LEVEL_POPUP_WIDTH_INC 168
+#define INDEX_POPUP_HEIGHT_INC 140
+#define INDEX_ROLLOVER_TEXT_SIZE_INC 22
+#define INDEX_POPUP_TEXT_SIZE_INC 78
+#define INDEX_POPUP_BG_NINEPATCH_INC 12 16 12 22
+#define INDEX_ROLLOVER_TEXT_COLOR_INC 93 93 93 255
+#define INDEX_ROLLOVER_ACTIVE_TEXT_COLOR_INC 58 60 9 255
+#define INDEX_POPUP_TEXT_COLOR_INC 88 83 79 255
+
+#define INDEX_PAGECONTROL_IND_INC 52 52
+#define INDEX_PAGECONTROL_IND_MIN_INC 24 24
+#define INDEX_PAGECONTROL_FONT_SIZE_INC 28
+#define INDEX_PAGECONTROL_FONT_COLOR_INC 120 120 120
+
+#define RADIO_STYLE_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 42
+#define RADIO_STYLE_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 42
+#define RADIO_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 50
+#define RADIO_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 50
+#define RADIO_STYLE_DEFAULT_BG_MIN_MAX_INC 42 42
+#define RADIO_STYLE_DEFAULT_FONT_SIZE_INC 32
+
+#define PANES_STYLE_DEFAULT_MOVABLE_SIZE_INC 48
+#define PANES_STYLE_DEFAULT_MIDDLE_SIZE_INC 44
+#define PANES_STYLE_DEFAULT_FIXED_SIZE_INC 6
+#define PANES_STYLE_DEFAULT_ARROW_SIZE_INC 55
+#define PANES_STYLE_DEFAULT_ARROW_FROM_INC 15
+#define PANES_STYLE_DEFAULT_ARROW_TO_INC 30
+
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_NORMAL_INC 244 212 174 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_PRESSED_INC 0 0 0 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_SELECTED_INC 0 0 0 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_DISABLED_INC 244 212 174 255
+#define SEGMENT_CONTROL_ITEM_1PX_LEFT_PADDING_COLOR_INC 172 112 16 255
+#define SEGMENT_CONTROL_ITEM_1PX_RIGHT_PADDING_COLOR_INC 201 114 54 255
+
+#define SEGMENT_CONTROL_BODY_STYLE_ITEM_TITLE_TEXT_COLOR_NORMAL_INC 149 145 136 255
+#define SEGMENT_CONTROL_BODY_STYLE_ITEM_TITLE_TEXT_COLOR_PRESSED_INC 255 255 255 255
+#define SEGMENT_CONTROL_BODY_STYLE_ITEM_TITLE_TEXT_COLOR_SELECTED_INC 255 255 255 255
+#define SEGMENT_CONTROL_BODY_STYLE_ITEM_TITLE_TEXT_COLOR_DISABLED_INC 149 145 136 255
+#define SEGMENT_CONTROL_BODY_ITEM_1PX_LEFT_PADDING_COLOR_INC 203 193 182 255
+#define SEGMENT_CONTROL_BODY_ITEM_1PX_RIGHT_PADDING_COLOR_INC 255 250 239 255
+
+#define SEGMENT_CONTROL_MULTILINE_TEXT_SIZE_INC 26
+#define SEGMENT_CONTROL_TEXT_SIZE_INC 28
+#define SEGMENT_CONTROL_TEXT_SIZE_RANGE_MIN_INC 12
+#define SEGMENT_CONTROL_TEXT_SIZE_RANGE_MAX_INC 28
+
+#define EDITFIELD_TITLE_SIZE_INC 32
+#define EDITFIELD_TITLE_COLOR_INC 73 73 73 255
+#define EDITFIELD_GUIDE_TEXT_COLOR_INC 189 189 189 255
+#define EDITFIELD_DEFAULT_ERASER_MINW_INC 48
+#define EDITFIELD_DEFAULT_ERASER_MINH_INC 48
+#define EDITFIELD_SEARCHBAR_ERASER_MINW_INC 38
+#define EDITFIELD_SEARCHBAR_ERASER_MINH_INC 38
+#define EDITFIELD_DEFAULT_MINH_INC 112
+#define EDITFIELD_SEARCHBAR_MINH_INC 50
+#define EDITFIELD_DEFAULT_TOP1_SINGLE_INC 20
+#define EDITFIELD_DEFAULT_TOP1_MULTI_INC 45
+#define EDITFIELD_DEFAULT_TOP2_INC 6
+#define EDITFIELD_DEFAULT_LEFT1_INC 0
+#define EDITFIELD_DEFAULT_LEFT2_INC 0
+#define EDITFIELD_DEFAULT_LEFT3_INC 1
+#define EDITFIELD_DEFAULT_RIGHT1_ERASER_SHOW_INC 56
+#define EDITFIELD_DEFAULT_RIGHT2_INC 0
+#define EDITFIELD_DEFAULT_BOTTOM1_SINGLE_INC 20
+#define EDITFIELD_DEFAULT_BOTTOM1_MULTI_INC 5
+#define EDITFIELD_DEFAULT_BOTTOM2_SINGLE_INC 32
+#define EDITFIELD_DEFAULT_BOTTOM2_MULTI_INC 12
+#define EDITFIELD_DEFAULT_BOTTOM3_SINGLE_INC 85
+#define EDITFIELD_DEFAULT_BOTTOM3_MULTI_INC 60
+#define EDITFIELD_SEARCHBAR_TOP1_SINGLE_INC 6
+#define EDITFIELD_SEARCHBAR_TOP1_MULTI_INC 10
+#define EDITFIELD_SEARCHBAR_TOP2_INC 10
+#define EDITFIELD_SEARCHBAR_LEFT1_INC 0
+#define EDITFIELD_SEARCHBAR_LEFT2_INC 0
+#define EDITFIELD_SEARCHBAR_LEFT3_INC 1
+#define EDITFIELD_SEARCHBAR_RIGHT1_ERASER_SHOW_INC 56
+#define EDITFIELD_SEARCHBAR_RIGHT2_INC 5
+#define EDITFIELD_SEARCHBAR_BOTTOM1_SINGLE_INC 8
+#define EDITFIELD_SEARCHBAR_BOTTOM1_MULTI_INC 2
+#define EDITFIELD_SEARCHBAR_BOTTOM2_SINGLE_INC 16
+#define EDITFIELD_SEARCHBAR_BOTTOM2_MULTI_INC 2
+#define EDITFIELD_SEARCHBAR_BOTTOM3_SINGLE_INC 50
+#define EDITFIELD_SEARCHBAR_BOTTOM3_MULTI_INC 50
+
+#define BUTTON_TICKERNOTI_NORMAL_COLOR_INC 255 255 255 255
+#define BUTTON_TICKERNOTI_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_TICKERNOTI_DISABLED_COLOR_INC 185 185 185 255
+
+#define CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC 0 0 0 255
+#define CHECK_DEFAULT_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define CHECK_DEFAULT_TEXT_DISABLED_COLOR_INC 136 136 136 136
+
+#define RADIO_DEFAULT_TEXT_NORMAL_COLOR_INC 0 0 0 255
+#define RADIO_DEFAULT_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define RADIO_DEFAULT_TEXT_DISABLED_COLOR_INC 136 136 136 136
+
+#define CONTROLBAR_LARGE_HEIGHT_INC 122
+#define CONTROLBAR_SMALL_HEIGHT_INC 102
+#define CONTROLBAR_WIDTH_INC 122
+#define CONTROLBAR_SEPARATEBAR_DARK_COLOR_INC 73 62 47 255
+#define CONTROLBAR_SEPARATEBAR_BRIGHT_COLOR_INC 136 121 100 255
+
+#define MULTIBUTTONENTRY_NORMAL_BUTTON_COLOR_INC 195 160 107 255
+#define MULTIBUTTONENTRY_PRESSED_BUTTON_COLOR_INC 103 79 43 255
+#define MULTIBUTTONENTRY_LABEL_TEXT_COLOR_INC 0 0 0 255
+#define MULTIBUTTONENTRY_GUIDETEXT_COLOR_INC 189 189 189 255
+#define MULTIBUTTONENTRY_BUTTON_TEXT_COLOR_INC "#FFFFFF"
+#define MULTIBUTTONENTRY_WIDTH_PAD_INC 15
+#define MULTIBUTTONENTRY_HEIGHT_PAD_INC 20
+#define MULTIBUTTONENTRY_BUTTON_MAX_SIZE_INC 300
+#define MULTIBUTTONENTRY_BUTTON_BASE_SIZE_INC 66
+#define MULTIBUTTONENTRY_BUTTON_NINEPATCH_INC 5 5 0 0
+#define MULTIBUTTONENTRY_BUTTON_TOP_BUTTOM_PAD_INC 12
+#define MULTIBUTTONENTRY_BUTTON_LEFT_INNER_PAD_INC 15
+#define MULTIBUTTONENTRY_BUTTON_RIGHT_INNER_PAD_INC 15
+#define MULTIBUTTONENTRY_BUTTON_RIGHT_PAD_INC 15
+#define MULTIBUTTONENTRY_BUTTON_TEXT_SIZE_INC 38
+#define MULTIBUTTONENTRY_GUIDETEXT_SIZE_INC 44
+#define MULTIBUTTONENTRY_CLOSEDBUTTON_SIZE_INC 60
+#define MULTIBUTTONENTRY_CLOSEDBUTTON_AREA_HEIGHT_INC 60
+#define MULTIBUTTONENTRY_LABEL_RIGHT_PAD_INC 27
+#define MULTIBUTTONENTRY_LABEL_TEXT_SIZE_INC 42
+#define MULTIBUTTONENTRY_LABEL_MIN_HEIGHT_INC 75
+
+#define SEARCHBAR_BACKGROUND_COLOR_INC 242 238 233 255
+#define SEARCHBAR_CANCEL_BUTTON_W_INC 134
+#define SEARCHBAR_CANCEL_BUTTON_WITH_PADDING_W_INC 150
+#define SEARCHBAR_CANCEL_BUTTON_WITH_DOUBLE_PADDING_W_INC 166
+#define SEARCHBAR_TOP_PADDING_INC 18
+#define SEARCHBAR_BOTTOM_PADDING_INC 18
+#define SEARCHBAR_HEIGHT_INC 74
+#define SEARCHBAR_LEFT_PADDING_INC 16
+#define SEARCHBAR_RIGHT_PADDING_INC 16
+#define SEARCHBAR_INPUTFIELD_BORDER_INC 6 6 6 6
+#define SEARCHBAR_LEFT_ICON_PADDING_INC 16
+#define SEARCHBAR_ICON_MIN_W_INC 42
+#define SEARCHBAR_ICON_MIN_H_INC 42
+#define SEARCHBAR_LEFT_PADDING_SEARCHFIELD_INC 16
+#define SEARCHBAR_RIGHT_PADDING_SEARCHFIELD_INC 8
+#define SEARCHBAR_SEARCH_TEXTFIELD_H_INC 60
+#define SEARCHBAR_H_INC 107
+
+#define SELECTION_INFO_BACKGROUND_COLOR_INC 217 147 26 255
+#define SELECTION_INFO_TEXT_COLOR_INC 255 255 255 255
+
+#define SELECTION_INFO_MIN_VER_W_INC 720
+#define SELECTION_INFO_MIN_HORZ_W_INC 1280
+#define SELECTION_INFO_VER_PADDING_INC 48
+#define SELECTION_INFO_LEFT_PADDING_INC 16
+#define SELECTION_INFO_TEXT_FONT_SIZE_INC 32
+#define SELECTION_INFO_MIN_VER_BOTTOM_64_H_INC 150
+#define SELECTION_INFO_MIN_VER_BOTTOM_86_H_INC 186
+
+#define POPUP_DESCRIPTION_DEFAULT_TEXT_MIN_INC 588 0
+#define POPUP_DESCRIPTION_DEFAULT_TEXT_FONT_SIZE_INC 42
+
+#define POPUP_BASE_DEFAULT_BASE_DEFAULT_MIN_INC 620 0
+#define POPUP_BASE_DEFAULT_BASE_DEFAULT_MAX_INC 620 1120
+#define POPUP_BASE_DEFAULT_BG_DEFAULT_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BASE_DEFAULT_TITLE_DEFAULT_MIN_INC 620 64
+#define POPUP_BASE_DEFAULT_TITLE_DEFAULT_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BASE_DEFAULT_PADDING_MIN_MAX_INC 16 0
+#define POPUP_BASE_DEFAULT_TITLE_ICON_DEFAULT_MIN_MAX_INC 62 62
+#define POPUP_BASE_DEFAULT_CONTENT_DEFAULT_MIN_MAX_INC 620 0
+#define POPUP_BASE_DEFAULT_BUTTON_BG_DEFAULT_MIN_INC 620 96
+#define POPUP_BASE_DEFAULT_BUTTON_BG_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BASE_DEFAULT_TEXT_FONT_SIZE_INC 38
+
+#define POPUP_CONTENT_DEFAULT_PADDING_TOP_MIN_INC 0 22
+#define POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 16 0
+#define POPUP_CONTENT_DEFAULT_PADDING_RIGHT_MIN_INC 16 0
+#define POPUP_CONTENT_DEFAULT_PADDING_BOTTOM_MIN_INC 0 22
+#define POPUP_CONTENT_DEFAULT_CONTENT_DEFAULT_MIN_INC 588 0
+
+#define POPUP_BASE_VERTICAL_BUTTON_BASE_MIN_INC 620 0
+#define POPUP_BASE_VERTICAL_BUTTON_BASE_MAX_INC 620 1120
+#define POPUP_BASE_VERTICAL_BUTTON_BG_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BASE_VERTICAL_BUTTON_TITLE_DEFAULT_MIN_INC 620 64
+#define POPUP_BASE_VERTICAL_BUTTON_TITLE_IMAGE_BORDER_MIN_INC 3 3 3 3
+#define POPUP_BASE_VERTICAL_BUTTON_TITLE_ICON_MIN_MAX_INC 62 62
+#define POPUP_BASE_VERTICAL_BUTTON_CONTENT_DEFAULT_MIN_INC 620 0
+#define POPUP_BASE_VERTICAL_BUTTON_BUTTONAREA_DEFAULT_MIN_INC 620 286
+
+#define POPUP_BUTTON3_VERTICAL_BUTTON_BG_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BUTTON3_VERTICAL_BUTTON_PADDING_TOP_MIN_INC 0 16
+#define POPUP_BUTTON_VERTICAL_ACTION_AREA_HEIGHT "286"
+#define POPUP_BUTTON3_VERTICAL_BUTTON_BUTTON_MIN_MAX_INC 356 74
+#define POPUP_BUTTON3_VERTICAL_BUTTON_PADDING_BUTTON_MIN_INC 0 16
+#define POPUP_BUTTON3_VERTICAL_BUTTON_PADDING_BUTTON_MAX_INC 9999 16
+
+#define POPUP_CONTENT_LISTSTYLE_PADDING_TOP_MIN_MAX_INC 3 3
+#define POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC 614 408
+#define POPUP_CONTENT_LISTSTYLE_PADDING_RIGHT_MIN_INC 3 0
+
+#define POPUP_CONTENT_MINSTYLE_CONTENT_DEFAULT_MIN_INC 614 0
+
+#define POPUP_BASE_CUSTOMSTYLE_BASE_DEFAULT_MIN_INC 620 0
+#define POPUP_BASE_CUSTOMSTYLE_BASE_DEFAULT_MAX_INC 620 1120
+#define POPUP_BASE_CUSTOMSTYLE_BG_DEFAULT_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BASE_CUSTOMSTYLE_TITLE_DEFAULT_MIN_INC 620 64
+#define POPUP_BASE_CUSTOMSTYLE_TITLE_BOTTOM_LINE_MIN_INC 0 1
+#define POPUP_BASE_CUSTOMSTYLE_TITLE_ICON_DEFAULT_MIN_MAX_INC 62 62
+#define POPUP_BASE_CUSTOMSTYLE_CONTENT_DEFAULT_MIN_INC 620 0
+#define POPUP_BASE_CUSTOMSTYLE_BUTTONAREA_BG_DEFAULT_MIN_INC 620 96
+#define POPUP_BASE_CUSTOMSTYLE_BUTTONAREA_BG_IMAGE_BORDER_INC 3 3 3 3
+#define POPUP_BASE_CUSTOMSTYLE_TEXT_FONT_SIZE_INC 38
+#define POPUP_BASE_CUSTOMSTYLE_CONTENT_WIDTH_INC 620
+#define POPUP_BASE_CUSTOMSTYLE_CONTENT_HEIGHT_INC 146
+#define POPUP_BASE_CUSTOMSTYLE_CONTENT_SIDE_PADDING_INC 70
+#define POPUP_BASE_CUSTOMSTYLE_CONTENT_ENTRY_MIN_INC 90 90
+#define POPUP_BASE_CUSTOMSTYLE_CONTENT_CENTER_PADDING_MIN_INC 40
+
+#define POPUP_CONTENT_CUSTOMSTYLE_DEFAULT_MIN_INC 620 0
+#define POPUP_BUTTON_DEFAULT_ACTION_AREA_HEIGHT "96"
+#define POPUP_BUTTON1_DEFAULT_BUTTON1_DEFAULT_MIN_MAX_INC 402 74
+#define POPUP_BUTTON2_DEFAULT_BUTTON_DEFAULT_MIN_MAX_INC 274 74
+#define POPUP_BUTTON2_DEFAULT_PADDING_BUTTON_MIN_MAX_INC 10 74
+#define POPUP_BUTTON3_DEFAULT_BUTTON_DEFAULT_MIN_MAX_INC 186 74
+#define POPUP_BUTTON3_DEFAULT_PADDING_BUTTON_MIN_MAX_INC 10 74
+
+#define POPUP_BASE_VOLUMEBAR_STYLE_BASE_DEFAULT_MIN_INC 624 0
+#define POPUP_BASE_VOLUMEBAR_STYLE_BASE_DEFAULT_MAX_INC 624 1120
+#define POPUP_BASE_VOLUMEBAR_STYLE_TITLE_DEFAULT_IMAGE_BORDER_INC 3 3 6 0
+#define POPUP_BASE_VOLUMEBAR_STYLE_CONTENT_DEFAULT_MIN_INC 624 0
+#define POPUP_BASE_VOLUMEBAR_STYLE_BUTTONAREA_BG_DEFAULT_MIN_INC 624 96
+
+#define POPUP_CONTENT_VOLUMEBAR_STYLE_PADDING_TOP_MIN_INC 0 31
+#define POPUP_CONTENT_VOLUMEBAR_STYLE_PADDING_LEFT_MIN_INC 40 0
+#define POPUP_CONTENT_VOLUMEBAR_STYLE_PADDING_RIGHT_MIN_INC 40 0
+#define POPUP_CONTENT_VOLUMEBAR_STYLE_CONTENT_DEFAULT_MIN_INC 544 64
+#define POPUP_CONTENT_VOLUMEBAR_STYLE_PADDING_BOTTOM_MIN_INC 0 31
+
+#define PROGRESSBAR_DEFAULT_STYLE_TEXT_COLOR_INC 224 224 224 255
+#define PROGRESSBAR_DEFAULT_STYLE_STATUS_TEXT_COLOR_INC 255 255 255 255
+#define PROGRESSBAR_LIST_PROGRESS_STYLE_TEXT_COLOR_INC 0 0 0 255
+#define PROGRESSBAR_LIST_PROGRESS_STYLE_STATUS_TEXT_COLOR_INC 224 224 224 255
+#define PROGRESSBAR_LIST_TITLE_PROGRESS_STYLE_STATUS_TEXT_COLOR_INC 108 108 108 255
+#define PROGRESSBAR_LIST_PROCESS_WIDTH_INC 66
+#define PROGRESSBAR_LIST_PROCESS_HEIGHT_INC 66
+#define PROGRESSBAR_LIST_PROCESS_SMALL_INC 35
+#define PROGRESSBAR_LIST_PROCESS_SMALL_IMAGE "32x32"
+#define PROGRESSBAR_LIST_PROGRESS_HEIGHT_INC 16
+#define PROGRESSBAR_LIST_PENDING_HEIGHT_INC 16
+
+#define NOCONTENT_TEXT_BLOCK_STYLE_COLOR_INC 173 170 165 255
+#define NOCONTENT_TEXT_BLOCK_TEXT_SIZE_INC 42
+#define NOCONTENT_MIDDLE_PADDING_INC 54
+#define NOCONTENT_BASE_SEARCH_PADDING_INC 40
+#define NOCONTENT_IMAGE_REL1_WIDTH_HEIGHT_INC 0.282 0.294
+#define NOCONTENT_IMAGE_REL2_WIDTH_HEIGHT_INC 0.718 0.54
+#define NOCONTENT_BG_COLOR_INC 249 249 249 255
+#define NOCONTENT_TEXT_STYLE_BG_MIN_INC 0 120
+
+#define ENTRY_TEXT_SIZE_INC 44
+#define ENTRY_TEXT_COLOR_INC "#000000"
+#define ENTRY_CURSOR_COLOR_INC 217 147 26 255
+#define ENTRY_PREEDIT_BACKGROUND_COLOR_INC "#000000"
+#define ENTRY_PREEDIT_TEXT_COLOR_INC "#FFFFFF"
+#define ENTRY_SELECTION_BG_COLOR 204 230 224 127
+#define ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE 48 67
+#define MAGNIFIER_HEIGHT_FILL 182
+#define MAGNIFIER_HEIGHT_FIXED 108
+#define MAGNIFIER_WIDTH_FIXED 358
+
+#define ENTRY_BUBBLE_EX_PAD 15
+#define ENTRY_BUBBLE_IX_PAD 22
+#define ENTRY_BUBBLE_Y_PAD 15
+#define ENTRY_BUBBLE_BOTTOM_PAD 22
+#define ENTRY_BUBBLE_CALLERID_PAD 16
+#define ENTRY_BUBBLE_CALLERID_WIDTH 60
+#define ENTRY_BUBBLE_CALLERID_HEIGHT 60
+#define ENTRY_BUBBLE_DATE_AREA_TEXT_SIZE_INC 26
+
+#define PANES_DEFAULT_FIXED_SEPERATOR_NORMAL_COLOR_INC 219 219 219 255
+
+#define DAYSELECTOR_BACKGROUND_COLOR_INC 199 199 199 255
+#define DAYSELECTOR_WEEKDAY_COLOR_INC 78 73 69 255
+#define DAYSELECTOR_SATURDAY_COLOR_INC 8 96 170 255
+#define DAYSELECTOR_SUNDAY_COLOR_INC 225 49 8 255
+#define DAYSELECTOR_DAY_PRESSED_COLOR_INC 255 255 255 255
+#define DAYSELECTOR_DAY_FONT_SIZE_INC 32
+#define DAYSELECTOR_CHECK_WIDTH_INC 94
+#define DAYSELECTOR_CHECK_HEIGHT_INC 90
+
+#define SLIDER_INDICATOR_TEXT_COLOR_INC 217 147 26 255
+#define SLIDER_UNITS_TEXT_COLOR_INC 122 122 122 255
+#define SLIDER_UNITS_TEXT_SIZE_INC 30
+#define SLIDER_INDICATOR_TEXT_SIZE_INC 40
+#define SLIDER_BASE_HEIGHT_INC 16
+#define SLIDER_BASE_MIN_WIDTH_INC 375
+#define SLIDER_BASE_HEIGHT_INC 16
+#define SLIDER_SWALLOW_BAR_MIN_WIDTH_INC 58
+#define SLIDER_SWALLOW_BAR_HEIGHT_INC 58
+#define SLIDER_INDICATOR_WIDTH_INC 58
+#define SLIDER_INDICATOR_HEIGHT_INC 58
+#define SLIDER_EBOOK_HEIGHT_INC 23
+#define SLIDER_EBOOK_UNITS_TEXT_COLOR_INC 164 160 149 255
+#define SLIDER_EBOOK_UNITS_TEXT_SIZE_INC 48
+#define SLIDER_EBOOK_INDICATOR_TEXT_COLOR_INC 241 150 27 255
+#define SLIDER_EBOOK_INDICATOR_DEFAULT_TEXT_SIZE_INC 36
+#define SLIDER_EBOOK_INDICATOR_DRAG_TEXT_SIZE_INC 48
+#define SLIDER_EBOOK_INDICATOR_WIDTH_INC 54
+#define SLIDER_EBOOK_INDICATOR_HEIGHT_INC 54
+#define SLIDER_DISABLER_PART_COLOR_INC 185 185 185 100
+
+#define TICKER_NOTI_DEFAULT_TEXT_COLOR_INC "#f4f4f4"
+
+#define DATETIME_FIELD_MIN_SIZE_INC 60 60
+#define DATETIME_SEPARATOR_MIN_SIZE_INC 40 60
+#define DATETIME_TEXT_FONT_SIZE_INC 36
+#define DATETIME_TEXT_NORMAL_COLOR_INC 0 0 0 255
+#define DATETIME_SEPARATOR_TEXT_COLOR_INC 100 100 100 255
+#define DATETIME_TEXT_SELECTED_COLOR_INC 224 134 21 255
+
+#define COLORSELECTOR_MIN_W_INC 624
+#define COLORSELECTOR_MIN_H_INC 336
+#define COLORSELECTOR_MAX_W_INC 1014
+#define COLORSELECTOR_COLORBAR_IMAGE0_BORDER 13 13 10 3
+#define COLORSELECTOR_COLORBAR_IMAGE1_BORDER 4 4 3 3
+#define COLORSELECTOR_COLORBAR_IMAGE2_BORDER 13 13 3 15
+#define COLORSELECTOR_COLORBAR_HEIGHT 112
+#define COLORSELECTOR_COLORBAR_LEFT_PADDING 136
+#define COLORSELECTOR_COLORBAR_RIGHT_PADDING 136
+#define COLORSELECTOR_BUTTON_TOP_PADDING 19
+#define COLORSELECTOR_ARROW_BG_LEFT_PADDING 133
+#define COLORSELECTOR_ARROW_BG_RIGHT_PADDING 133
+#define COLORSELECTOR_ARROW_MIN_WIDTH 16
+#define COLORSELECTOR_ARROW_MIN_HEIGHT 80
+#define COLORSELECTOR_DRAGGABLE_EVENT_AREA 80 80
+#define COLORSELECTOR_BUTTON_LEFT_PADDING 42
+#define COLORSELECTOR_BUTTON_RIGHT_PADDING 42
+#define COLORSELECTOR_BUTTON_WIDTH 74
+#define COLORSELECTOR_BUTTON_HEIGHT 74
+#define COLORSELECTOR_BUTTON_BORDER 6 6 6 6
+#define COLORSELECTOR_PADDING_COLOR_INC 199 199 199 255
+
+#define COLORSELECTOR_PALETTE_COLORBG_MIN_WIDTH_INC 86
+#define COLORSELECTOR_PALETTE_COLORBG_MIN_HEIGHT_INC 86
+#define COLORSELECTOR_PALETTE_COLORBG_FOCUS_MIN_WIDTH_INC 84
+#define COLORSELECTOR_PALETTE_COLORBG_FOCUS_MIN_HEIGHT_INC 84
+#define COLORSELECTOR_PORTRAIT_HOR_PAD_INC "50"
+#define COLORSELECTOR_PORTRAIT_VER_PAD_INC "26"
+#define COLORSELECTOR_LANDSCAPE_HOR_PAD_INC "36"
+#define COLORSELECTOR_LANDSCAPE_VER_PAD_INC "0"
+#define COLORSELECTOR_PALETTE_BORDER_INC 14 14 14 14
+
+#define CALENDAR_DAY_FONT_SIZE_INC 24
+#define CALENDAR_DATE_FONT_SIZE_INC 32
+#define CALENDAR_MONTH_FONT_SIZE_INC 38
+#define CALENDAR_MONTH_FONT_COLOR_INC 0 0 0 255
+#define CALENDAR_SATURDAY_FONT_COLOR_INC 47 120 220 255
+#define CALENDAR_SUNDAY_FONT_COLOR_INC 226 20 20 255
+#define CALENDAR_WEEKDAY_FONT_COLOR_INC 0 0 0 255
+#define CALENDAR_SELECTED_DATE_FONT_COLOR_INC 255 255 255 255
+#define CALENDAR_SEPERATOR_FONT_COLOR_INC 176 176 176 255
+#define CALENDAR_BACKGROUND_COLOR_INC 230 230 230 255
+#define CALENDAR_BUTTON_HEIGHT_INC 66
+#define CALENDAR_BUTTON_WIDTH_INC 74
+#define CALENDAR_ARROW_WIDTH_INC 30
+#define CALENDAR_ARROW_HEIGHT_INC 36
+#define CALENDAR_BASE_MIN_WIDTH_INC 692
+#define CALENDAR_BASE_MIN_HEIGHT_INC 420
+#define CALENDAR_HEADER_MIN_WIDTH_INC 98
+#define CALENDAR_HEADER_MIN_HEIGHT_INC 90
+
+#define CTXPOPUP_ENTRY_CENTER_IMAGE_BORDER 5 5 5 5
+#define CTXPOPUP_ENTRY_IMAGE_BORDER_WIDTH 6
+#define CTXPOPUP_ENTRY_ITEM_TEXT_COLOR 249 249 249 255
+#define CTXPOPUP_ENTRY_ITEM_LEFT_SEPARATOR_COLOR 61 61 61 255
+#define CTXPOPUP_ENTRY_ITEM_RIGHT_SEPARATOR_COLOR 148 148 148 255
+#define CTXPOPUP_ENTRY_SEPARATOR_WIDTH 1
+#define CTXPOPUP_ENTRY_SEPARATOR_HEIGHT 48
+#define CTXPOPUP_ENTRY_ITEM_HEIGHT 73
+#define CTXPOPUP_ENTRY_ITEM_PADDING_WIDTH 16
+#define CTXPOPUP_ENTRY_ITEM_FONT_SIZE 28
+#define CTXPOPUP_ENTRY_ICON_SIZE 57
+#define CTXPOPUP_ENTRY_ITEM_WIDTH_MAX 240
+#define CTXPOPUP_ENTRY_LIST_SHADOW_PADDING 3
+#define CTXPOPUP_ENTRY_ITEM_DISABLED_COLOR 200 200 200 127
+#define CTXPOPUP_ENTRY_ARROW_SIZE_HEIGHT 18
+#define CTXPOPUP_ENTRY_ARROW_SIZE_WIDTH 36
+
+#define TICKERNOTI_DEFAULT_BG_MIN_HEIGHT_INC 98
+#define TICKERNOTI_DEFAULT_BG_BOTTOM_MIN_HEIGHT_INC 8
+#define TICKERNOTI_DEFAULT_BG_BORDER_INC 0 0 0 8
+#define TICKERNOTI_DEFAULT_BG_PADDING_LEFT_TOP_INC 16 13
+#define TICKERNOTI_DEFAULT_BG_PADDING_RIGHT_BOTTOM_INC 16 13
+#define TICKERNOTI_DEFAULT_PADDING_AFTER_ICON_INC 16 0
+#define TICKERNOTI_DEFAULT_TEXT_MIN_INC 0 60
+#define TICKERNOTI_DEFAULT_BUTTON_MIN_INC 90 54
+#define TICKERNOTI_DEFAULT_BUTTON_MAX_INC 90 54
+#define TICKERNOTI_DEFAULT_ICON_MIN_INC 64 64
+#define TICKERNOTI_DEFAULT_PADDING_BEFORE_BUTTON_INC 16 0
+#define TICKERNOTI_DEFAULT_TEXT_FONT_SIZE_INC 30
+#define TICKERNOTI_INFO_BG_MIN_HEIGHT_INC 50
+#define TICKERNOTI_INFO_BG_PADDING_LEFT_TOP_INC 8 5
+#define TICKERNOTI_INFO_BG_PADDING_RIGHT_BOTTOM_INC 8 5
+#define TICKERNOTI_BG_PADDING_AFTER_ICON_INC 15 0
+#define TICKERNOTI_INFO_TEXT_FONT_SIZE_INC 28
+
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC 10 80
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC 80 10
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC 48 214
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC 214 48
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIDDLE_MIN_SIZE_INC 48 26
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIDDLE_MIN_SIZE_INC 26 48
+#define SCROLLER_HANDLER_SCROLLBAR_PADDING_INC 10
+
+//end file
diff --git a/images/edc_images/00_button_01_normal.png b/images/edc_images/00_button_01_normal.png
new file mode 100644
index 0000000..9290a24
--- /dev/null
+++ b/images/edc_images/00_button_01_normal.png
Binary files differ
diff --git a/images/edc_images/00_button_01_normal_Focus.png b/images/edc_images/00_button_01_normal_Focus.png
new file mode 100644
index 0000000..cc9314b
--- /dev/null
+++ b/images/edc_images/00_button_01_normal_Focus.png
Binary files differ
diff --git a/images/edc_images/00_button_01_normal_dim.png b/images/edc_images/00_button_01_normal_dim.png
new file mode 100644
index 0000000..9ca5a44
--- /dev/null
+++ b/images/edc_images/00_button_01_normal_dim.png
Binary files differ
diff --git a/images/edc_images/00_button_01_normal_press.png b/images/edc_images/00_button_01_normal_press.png
new file mode 100644
index 0000000..f429735
--- /dev/null
+++ b/images/edc_images/00_button_01_normal_press.png
Binary files differ
diff --git a/images/edc_images/00_check_off.png b/images/edc_images/00_check_off.png
new file mode 100644
index 0000000..49a5552
--- /dev/null
+++ b/images/edc_images/00_check_off.png
Binary files differ
diff --git a/images/edc_images/camara_back_button.png b/images/edc_images/camara_back_button.png
new file mode 100644
index 0000000..5380e1a
--- /dev/null
+++ b/images/edc_images/camara_back_button.png
Binary files differ
diff --git a/images/edc_images/camara_back_button_press.png b/images/edc_images/camara_back_button_press.png
new file mode 100755
index 0000000..b3205a3
--- /dev/null
+++ b/images/edc_images/camara_back_button_press.png
Binary files differ
diff --git a/images/edc_images/camcorder_recording_pause.png b/images/edc_images/camcorder_recording_pause.png
new file mode 100755
index 0000000..201a0ef
--- /dev/null
+++ b/images/edc_images/camcorder_recording_pause.png
Binary files differ
diff --git a/images/edc_images/camcorder_recording_pause_press.png b/images/edc_images/camcorder_recording_pause_press.png
new file mode 100755
index 0000000..a5c1b27
--- /dev/null
+++ b/images/edc_images/camcorder_recording_pause_press.png
Binary files differ
diff --git a/images/edc_images/camcorder_recording_shutter.png b/images/edc_images/camcorder_recording_shutter.png
new file mode 100755
index 0000000..c1b2a2c
--- /dev/null
+++ b/images/edc_images/camcorder_recording_shutter.png
Binary files differ
diff --git a/images/edc_images/camcorder_recording_stop.png b/images/edc_images/camcorder_recording_stop.png
new file mode 100755
index 0000000..60fbcde
--- /dev/null
+++ b/images/edc_images/camcorder_recording_stop.png
Binary files differ
diff --git a/images/edc_images/camcorder_recording_stop_press.png b/images/edc_images/camcorder_recording_stop_press.png
new file mode 100755
index 0000000..399f814
--- /dev/null
+++ b/images/edc_images/camcorder_recording_stop_press.png
Binary files differ
diff --git a/images/edc_images/camcorder_standby_shutter.png b/images/edc_images/camcorder_standby_shutter.png
new file mode 100755
index 0000000..9932e49
--- /dev/null
+++ b/images/edc_images/camcorder_standby_shutter.png
Binary files differ
diff --git a/images/edc_images/camcorder_standby_shutter_dim.png b/images/edc_images/camcorder_standby_shutter_dim.png
new file mode 100755
index 0000000..4c4a982
--- /dev/null
+++ b/images/edc_images/camcorder_standby_shutter_dim.png
Binary files differ
diff --git a/images/edc_images/camcorder_standby_shutter_press.png b/images/edc_images/camcorder_standby_shutter_press.png
new file mode 100755
index 0000000..9c1e9dc
--- /dev/null
+++ b/images/edc_images/camcorder_standby_shutter_press.png
Binary files differ
diff --git a/images/edc_images/camcorder_stop_shutter_icon.png b/images/edc_images/camcorder_stop_shutter_icon.png
new file mode 100755
index 0000000..ed60ed8
--- /dev/null
+++ b/images/edc_images/camcorder_stop_shutter_icon.png
Binary files differ
diff --git a/images/edc_images/camera_button_off.png b/images/edc_images/camera_button_off.png
new file mode 100644
index 0000000..548b5ca
--- /dev/null
+++ b/images/edc_images/camera_button_off.png
Binary files differ
diff --git a/images/edc_images/camera_button_on.png b/images/edc_images/camera_button_on.png
new file mode 100644
index 0000000..8310403
--- /dev/null
+++ b/images/edc_images/camera_button_on.png
Binary files differ
diff --git a/images/edc_images/camera_handle.png b/images/edc_images/camera_handle.png
new file mode 100755
index 0000000..f35088e
--- /dev/null
+++ b/images/edc_images/camera_handle.png
Binary files differ
diff --git a/images/edc_images/camera_help_image.png b/images/edc_images/camera_help_image.png
new file mode 100644
index 0000000..fb3e445
--- /dev/null
+++ b/images/edc_images/camera_help_image.png
Binary files differ
diff --git a/images/edc_images/camera_menu_bg.png b/images/edc_images/camera_menu_bg.png
new file mode 100755
index 0000000..9fc1362
--- /dev/null
+++ b/images/edc_images/camera_menu_bg.png
Binary files differ
diff --git a/images/edc_images/camera_menu_bg_press.png b/images/edc_images/camera_menu_bg_press.png
new file mode 100755
index 0000000..cf07a41
--- /dev/null
+++ b/images/edc_images/camera_menu_bg_press.png
Binary files differ
diff --git a/images/edc_images/camera_menu_tab_hold.png b/images/edc_images/camera_menu_tab_hold.png
new file mode 100755
index 0000000..de0c3dd
--- /dev/null
+++ b/images/edc_images/camera_menu_tab_hold.png
Binary files differ
diff --git a/images/edc_images/camera_mode_shutter_dim.png b/images/edc_images/camera_mode_shutter_dim.png
new file mode 100755
index 0000000..610bdfe
--- /dev/null
+++ b/images/edc_images/camera_mode_shutter_dim.png
Binary files differ
diff --git a/images/edc_images/camera_mode_shutter_icon.png b/images/edc_images/camera_mode_shutter_icon.png
new file mode 100755
index 0000000..10b2004
--- /dev/null
+++ b/images/edc_images/camera_mode_shutter_icon.png
Binary files differ
diff --git a/images/edc_images/camera_mode_shutter_icon_dim.png b/images/edc_images/camera_mode_shutter_icon_dim.png
new file mode 100755
index 0000000..b56adad
--- /dev/null
+++ b/images/edc_images/camera_mode_shutter_icon_dim.png
Binary files differ
diff --git a/images/edc_images/camera_mode_shutter_normal.png b/images/edc_images/camera_mode_shutter_normal.png
new file mode 100755
index 0000000..582d306
--- /dev/null
+++ b/images/edc_images/camera_mode_shutter_normal.png
Binary files differ
diff --git a/images/edc_images/camera_mode_shutter_normal_inverse.png b/images/edc_images/camera_mode_shutter_normal_inverse.png
new file mode 100644
index 0000000..5dd26a2
--- /dev/null
+++ b/images/edc_images/camera_mode_shutter_normal_inverse.png
Binary files differ
diff --git a/images/edc_images/camera_mode_shutter_press.png b/images/edc_images/camera_mode_shutter_press.png
new file mode 100755
index 0000000..8c963e6
--- /dev/null
+++ b/images/edc_images/camera_mode_shutter_press.png
Binary files differ
diff --git a/images/edc_images/camera_mode_thumbnail_bg.png b/images/edc_images/camera_mode_thumbnail_bg.png
new file mode 100755
index 0000000..823b3ea
--- /dev/null
+++ b/images/edc_images/camera_mode_thumbnail_bg.png
Binary files differ
diff --git a/images/edc_images/camera_mode_thumbnail_bg_press.png b/images/edc_images/camera_mode_thumbnail_bg_press.png
new file mode 100755
index 0000000..2ac7bcd
--- /dev/null
+++ b/images/edc_images/camera_mode_thumbnail_bg_press.png
Binary files differ
diff --git a/images/edc_images/camera_normal_left.png b/images/edc_images/camera_normal_left.png
new file mode 100755
index 0000000..3a56573
--- /dev/null
+++ b/images/edc_images/camera_normal_left.png
Binary files differ
diff --git a/images/edc_images/camera_normal_opacity_l_bg.png b/images/edc_images/camera_normal_opacity_l_bg.png
new file mode 100755
index 0000000..5e03665
--- /dev/null
+++ b/images/edc_images/camera_normal_opacity_l_bg.png
Binary files differ
diff --git a/images/edc_images/camera_normal_opacity_r_bg.png b/images/edc_images/camera_normal_opacity_r_bg.png
new file mode 100755
index 0000000..05654b5
--- /dev/null
+++ b/images/edc_images/camera_normal_opacity_r_bg.png
Binary files differ
diff --git a/images/edc_images/camera_normal_right.png b/images/edc_images/camera_normal_right.png
new file mode 100755
index 0000000..96156c6
--- /dev/null
+++ b/images/edc_images/camera_normal_right.png
Binary files differ
diff --git a/images/edc_images/camera_option_popup_anker.png b/images/edc_images/camera_option_popup_anker.png
new file mode 100755
index 0000000..7266092
--- /dev/null
+++ b/images/edc_images/camera_option_popup_anker.png
Binary files differ
diff --git a/images/edc_images/camera_option_popup_anker_inverse.png b/images/edc_images/camera_option_popup_anker_inverse.png
new file mode 100755
index 0000000..1780e6b
--- /dev/null
+++ b/images/edc_images/camera_option_popup_anker_inverse.png
Binary files differ
diff --git a/images/edc_images/camera_option_popup_bg.png b/images/edc_images/camera_option_popup_bg.png
new file mode 100755
index 0000000..7db92a1
--- /dev/null
+++ b/images/edc_images/camera_option_popup_bg.png
Binary files differ
diff --git a/images/edc_images/camera_option_popup_bg_2depth.png b/images/edc_images/camera_option_popup_bg_2depth.png
new file mode 100755
index 0000000..1012ffe
--- /dev/null
+++ b/images/edc_images/camera_option_popup_bg_2depth.png
Binary files differ
diff --git a/images/edc_images/camera_popup_ex_bar.png b/images/edc_images/camera_popup_ex_bar.png
new file mode 100755
index 0000000..c5c5d4d
--- /dev/null
+++ b/images/edc_images/camera_popup_ex_bar.png
Binary files differ
diff --git a/images/edc_images/camera_popup_zoom.png b/images/edc_images/camera_popup_zoom.png
new file mode 100755
index 0000000..03ebf29
--- /dev/null
+++ b/images/edc_images/camera_popup_zoom.png
Binary files differ
diff --git a/images/edc_images/camera_popup_zoom_bar.png b/images/edc_images/camera_popup_zoom_bar.png
new file mode 100755
index 0000000..8f27573
--- /dev/null
+++ b/images/edc_images/camera_popup_zoom_bar.png
Binary files differ
diff --git a/images/edc_images/camera_radio_btn_off.png b/images/edc_images/camera_radio_btn_off.png
new file mode 100755
index 0000000..5ac28c8
--- /dev/null
+++ b/images/edc_images/camera_radio_btn_off.png
Binary files differ
diff --git a/images/edc_images/camera_radio_btn_on.png b/images/edc_images/camera_radio_btn_on.png
new file mode 100755
index 0000000..8d86bc9
--- /dev/null
+++ b/images/edc_images/camera_radio_btn_on.png
Binary files differ
diff --git a/images/edc_images/camera_recording_btn_caf.png b/images/edc_images/camera_recording_btn_caf.png
new file mode 100755
index 0000000..291e03d
--- /dev/null
+++ b/images/edc_images/camera_recording_btn_caf.png
Binary files differ
diff --git a/images/edc_images/camera_recording_btn_caf_press.png b/images/edc_images/camera_recording_btn_caf_press.png
new file mode 100755
index 0000000..f3cf8d8
--- /dev/null
+++ b/images/edc_images/camera_recording_btn_caf_press.png
Binary files differ
diff --git a/images/edc_images/camera_shortcut_line_h_01.png b/images/edc_images/camera_shortcut_line_h_01.png
new file mode 100755
index 0000000..1d88543
--- /dev/null
+++ b/images/edc_images/camera_shortcut_line_h_01.png
Binary files differ
diff --git a/images/edc_images/camera_shortcut_line_v_01.png b/images/edc_images/camera_shortcut_line_v_01.png
new file mode 100755
index 0000000..d3a4012
--- /dev/null
+++ b/images/edc_images/camera_shortcut_line_v_01.png
Binary files differ
diff --git a/images/edc_images/camera_shortcut_line_v_02.png b/images/edc_images/camera_shortcut_line_v_02.png
new file mode 100755
index 0000000..31fb062
--- /dev/null
+++ b/images/edc_images/camera_shortcut_line_v_02.png
Binary files differ
diff --git a/images/edc_images/camera_shrtcut_edit_bg.png b/images/edc_images/camera_shrtcut_edit_bg.png
new file mode 100755
index 0000000..b0f6838
--- /dev/null
+++ b/images/edc_images/camera_shrtcut_edit_bg.png
Binary files differ
diff --git a/images/edc_images/camera_shrtcut_menubar_bg.png b/images/edc_images/camera_shrtcut_menubar_bg.png
new file mode 100755
index 0000000..64f356f
--- /dev/null
+++ b/images/edc_images/camera_shrtcut_menubar_bg.png
Binary files differ
diff --git a/images/edc_images/camera_shrtcut_text_bg.png b/images/edc_images/camera_shrtcut_text_bg.png
new file mode 100755
index 0000000..eadd845
--- /dev/null
+++ b/images/edc_images/camera_shrtcut_text_bg.png
Binary files differ
diff --git a/images/edc_images/camera_timer_popup.png b/images/edc_images/camera_timer_popup.png
new file mode 100755
index 0000000..fc69ff6
--- /dev/null
+++ b/images/edc_images/camera_timer_popup.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_00.png b/images/edc_images/indicator/camera_indicator_battery_00.png
new file mode 100755
index 0000000..a060ac7
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_00.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_01.png b/images/edc_images/indicator/camera_indicator_battery_01.png
new file mode 100755
index 0000000..aaec3f6
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_01.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_02.png b/images/edc_images/indicator/camera_indicator_battery_02.png
new file mode 100755
index 0000000..014ca72
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_02.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_03.png b/images/edc_images/indicator/camera_indicator_battery_03.png
new file mode 100755
index 0000000..5e119ac
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_03.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_04.png b/images/edc_images/indicator/camera_indicator_battery_04.png
new file mode 100755
index 0000000..00c1a06
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_04.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_05.png b/images/edc_images/indicator/camera_indicator_battery_05.png
new file mode 100755
index 0000000..3eb7cd4
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_05.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_charge.png b/images/edc_images/indicator/camera_indicator_battery_charge.png
new file mode 100755
index 0000000..d5d2d5b
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_charge.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_battery_full.png b/images/edc_images/indicator/camera_indicator_battery_full.png
new file mode 100755
index 0000000..92c3584
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_battery_full.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_gps_connection01.png b/images/edc_images/indicator/camera_indicator_gps_connection01.png
new file mode 100755
index 0000000..2a5dc2a
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_gps_connection01.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_gps_connection02.png b/images/edc_images/indicator/camera_indicator_gps_connection02.png
new file mode 100755
index 0000000..f26a22c
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_gps_connection02.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_gps_connection03.png b/images/edc_images/indicator/camera_indicator_gps_connection03.png
new file mode 100755
index 0000000..1e69e3e
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_gps_connection03.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_gps_off.png b/images/edc_images/indicator/camera_indicator_gps_off.png
new file mode 100755
index 0000000..9c97413
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_gps_off.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_gps_on.png b/images/edc_images/indicator/camera_indicator_gps_on.png
new file mode 100755
index 0000000..ec40f46
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_gps_on.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_mute.png b/images/edc_images/indicator/camera_indicator_mute.png
new file mode 100755
index 0000000..6fa2f00
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_mute.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_smile_shot.png b/images/edc_images/indicator/camera_indicator_smile_shot.png
new file mode 100755
index 0000000..a665c83
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_smile_shot.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_storage_in.png b/images/edc_images/indicator/camera_indicator_storage_in.png
new file mode 100755
index 0000000..f3d2386
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_storage_in.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_storage_memoryfull.png b/images/edc_images/indicator/camera_indicator_storage_memoryfull.png
new file mode 100755
index 0000000..72c6e6c
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_storage_memoryfull.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_storage_phonefull.png b/images/edc_images/indicator/camera_indicator_storage_phonefull.png
new file mode 100755
index 0000000..ad52f9c
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_storage_phonefull.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_indicator_storage_t_flash.png b/images/edc_images/indicator/camera_indicator_storage_t_flash.png
new file mode 100755
index 0000000..a3deba8
--- /dev/null
+++ b/images/edc_images/indicator/camera_indicator_storage_t_flash.png
Binary files differ
diff --git a/images/edc_images/indicator/camera_rec.png b/images/edc_images/indicator/camera_rec.png
new file mode 100755
index 0000000..c61e047
--- /dev/null
+++ b/images/edc_images/indicator/camera_rec.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_anti_shake_off_nor.png b/images/edc_images/shortcut/camera_mode_anti_shake_off_nor.png
new file mode 100755
index 0000000..5a56904
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_anti_shake_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_anti_shake_off_press.png b/images/edc_images/shortcut/camera_mode_anti_shake_off_press.png
new file mode 100755
index 0000000..c781d5b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_anti_shake_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_anti_shake_on_nor.png b/images/edc_images/shortcut/camera_mode_anti_shake_on_nor.png
new file mode 100755
index 0000000..7ac40e0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_anti_shake_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_anti_shake_on_press.png b/images/edc_images/shortcut/camera_mode_anti_shake_on_press.png
new file mode 100755
index 0000000..2263c20
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_anti_shake_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_auto_contrast_off_nor.png b/images/edc_images/shortcut/camera_mode_auto_contrast_off_nor.png
new file mode 100755
index 0000000..994af83
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_auto_contrast_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_auto_contrast_off_press.png b/images/edc_images/shortcut/camera_mode_auto_contrast_off_press.png
new file mode 100755
index 0000000..d56ebf3
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_auto_contrast_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_auto_contrast_on_nor.png b/images/edc_images/shortcut/camera_mode_auto_contrast_on_nor.png
new file mode 100755
index 0000000..c04704f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_auto_contrast_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_auto_contrast_on_press.png b/images/edc_images/shortcut/camera_mode_auto_contrast_on_press.png
new file mode 100755
index 0000000..19b2a12
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_auto_contrast_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_burstshot_off_nor.png b/images/edc_images/shortcut/camera_mode_burstshot_off_nor.png
new file mode 100755
index 0000000..4455ede
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_burstshot_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_burstshot_off_press.png b/images/edc_images/shortcut/camera_mode_burstshot_off_press.png
new file mode 100755
index 0000000..894ca41
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_burstshot_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_burstshot_on_nor.png b/images/edc_images/shortcut/camera_mode_burstshot_on_nor.png
new file mode 100755
index 0000000..df8b519
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_burstshot_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_burstshot_on_press.png b/images/edc_images/shortcut/camera_mode_burstshot_on_press.png
new file mode 100755
index 0000000..aae9c5c
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_burstshot_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_capture_voice_off_nor.png b/images/edc_images/shortcut/camera_mode_capture_voice_off_nor.png
new file mode 100755
index 0000000..daeb355
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_capture_voice_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_capture_voice_off_press.png b/images/edc_images/shortcut/camera_mode_capture_voice_off_press.png
new file mode 100755
index 0000000..b55c294
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_capture_voice_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_capture_voice_on_nor.png b/images/edc_images/shortcut/camera_mode_capture_voice_on_nor.png
new file mode 100755
index 0000000..c39d3a0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_capture_voice_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_capture_voice_on_press.png b/images/edc_images/shortcut/camera_mode_capture_voice_on_press.png
new file mode 100755
index 0000000..052804f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_capture_voice_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_Black and white_nor.png b/images/edc_images/shortcut/camera_mode_effect_Black and white_nor.png
new file mode 100755
index 0000000..8232df0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_Black and white_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_Black and white_press.png b/images/edc_images/shortcut/camera_mode_effect_Black and white_press.png
new file mode 100755
index 0000000..669fc5e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_Black and white_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_negative_nor.png b/images/edc_images/shortcut/camera_mode_effect_negative_nor.png
new file mode 100755
index 0000000..3783d5a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_negative_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_negative_press.png b/images/edc_images/shortcut/camera_mode_effect_negative_press.png
new file mode 100755
index 0000000..1d3df43
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_negative_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_none_nor.png b/images/edc_images/shortcut/camera_mode_effect_none_nor.png
new file mode 100755
index 0000000..accc141
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_none_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_none_press.png b/images/edc_images/shortcut/camera_mode_effect_none_press.png
new file mode 100755
index 0000000..a87d130
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_none_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_sepia_nor.png b/images/edc_images/shortcut/camera_mode_effect_sepia_nor.png
new file mode 100755
index 0000000..3a50411
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_sepia_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_effect_sepia_press.png b/images/edc_images/shortcut/camera_mode_effect_sepia_press.png
new file mode 100755
index 0000000..1638d6c
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_effect_sepia_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_1_nor.png b/images/edc_images/shortcut/camera_mode_exposure_1_nor.png
new file mode 100755
index 0000000..579b596
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_1_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_1_press.png b/images/edc_images/shortcut/camera_mode_exposure_1_press.png
new file mode 100755
index 0000000..4263fe4
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_1_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_2_nor.png b/images/edc_images/shortcut/camera_mode_exposure_2_nor.png
new file mode 100755
index 0000000..f147354
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_2_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_2_press.png b/images/edc_images/shortcut/camera_mode_exposure_2_press.png
new file mode 100755
index 0000000..3b58af7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_2_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_3_nor.png b/images/edc_images/shortcut/camera_mode_exposure_3_nor.png
new file mode 100755
index 0000000..76843df
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_3_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_3_press.png b/images/edc_images/shortcut/camera_mode_exposure_3_press.png
new file mode 100755
index 0000000..31952c8
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_3_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_4_nor.png b/images/edc_images/shortcut/camera_mode_exposure_4_nor.png
new file mode 100755
index 0000000..3987a55
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_4_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_4_press.png b/images/edc_images/shortcut/camera_mode_exposure_4_press.png
new file mode 100755
index 0000000..57e6a9b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_4_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_5_nor.png b/images/edc_images/shortcut/camera_mode_exposure_5_nor.png
new file mode 100755
index 0000000..ce905a7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_5_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_5_press.png b/images/edc_images/shortcut/camera_mode_exposure_5_press.png
new file mode 100755
index 0000000..39efe4f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_5_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_6_nor.png b/images/edc_images/shortcut/camera_mode_exposure_6_nor.png
new file mode 100755
index 0000000..409fc7f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_6_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_6_press.png b/images/edc_images/shortcut/camera_mode_exposure_6_press.png
new file mode 100755
index 0000000..31cb02a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_6_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_7_nor.png b/images/edc_images/shortcut/camera_mode_exposure_7_nor.png
new file mode 100755
index 0000000..b3d578c
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_7_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_7_press.png b/images/edc_images/shortcut/camera_mode_exposure_7_press.png
new file mode 100755
index 0000000..db23786
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_7_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_8_nor.png b/images/edc_images/shortcut/camera_mode_exposure_8_nor.png
new file mode 100755
index 0000000..b83e0eb
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_8_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_8_press.png b/images/edc_images/shortcut/camera_mode_exposure_8_press.png
new file mode 100755
index 0000000..8269097
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_8_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_9_nor.png b/images/edc_images/shortcut/camera_mode_exposure_9_nor.png
new file mode 100755
index 0000000..eed75d3
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_9_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_exposure_9_press.png b/images/edc_images/shortcut/camera_mode_exposure_9_press.png
new file mode 100755
index 0000000..d72e0cf
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_exposure_9_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_flash_auto_nor.png b/images/edc_images/shortcut/camera_mode_flash_auto_nor.png
new file mode 100755
index 0000000..6202dd1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_flash_auto_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_flash_auto_press.png b/images/edc_images/shortcut/camera_mode_flash_auto_press.png
new file mode 100755
index 0000000..946e081
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_flash_auto_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_flash_off_nor.png b/images/edc_images/shortcut/camera_mode_flash_off_nor.png
new file mode 100755
index 0000000..6e31fd1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_flash_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_flash_off_press.png b/images/edc_images/shortcut/camera_mode_flash_off_press.png
new file mode 100755
index 0000000..82b252c
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_flash_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_flash_on_nor.png b/images/edc_images/shortcut/camera_mode_flash_on_nor.png
new file mode 100755
index 0000000..fe846e7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_flash_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_flash_on_press.png b/images/edc_images/shortcut/camera_mode_flash_on_press.png
new file mode 100755
index 0000000..6994692
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_flash_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_focus_auto_nor.png b/images/edc_images/shortcut/camera_mode_focus_auto_nor.png
new file mode 100755
index 0000000..cfc3da2
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_focus_auto_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_focus_auto_press.png b/images/edc_images/shortcut/camera_mode_focus_auto_press.png
new file mode 100755
index 0000000..3e8838e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_focus_auto_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_focus_face_detection_nor.png b/images/edc_images/shortcut/camera_mode_focus_face_detection_nor.png
new file mode 100755
index 0000000..359cf49
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_focus_face_detection_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_focus_face_detection_press.png b/images/edc_images/shortcut/camera_mode_focus_face_detection_press.png
new file mode 100755
index 0000000..814d1ec
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_focus_face_detection_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_focus_macro_nor.png b/images/edc_images/shortcut/camera_mode_focus_macro_nor.png
new file mode 100755
index 0000000..75d1ccf
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_focus_macro_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_focus_macro_press.png b/images/edc_images/shortcut/camera_mode_focus_macro_press.png
new file mode 100755
index 0000000..19b5d29
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_focus_macro_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_gps_off_nor.png b/images/edc_images/shortcut/camera_mode_gps_off_nor.png
new file mode 100755
index 0000000..221f70f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_gps_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_gps_off_press.png b/images/edc_images/shortcut/camera_mode_gps_off_press.png
new file mode 100755
index 0000000..fd04d5b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_gps_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_gps_on_nor.png b/images/edc_images/shortcut/camera_mode_gps_on_nor.png
new file mode 100755
index 0000000..821d901
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_gps_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_gps_on_press.png b/images/edc_images/shortcut/camera_mode_gps_on_press.png
new file mode 100755
index 0000000..0d6f705
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_gps_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_guidelines_off_nor.png b/images/edc_images/shortcut/camera_mode_guidelines_off_nor.png
new file mode 100755
index 0000000..e97ccf4
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_guidelines_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_guidelines_off_press.png b/images/edc_images/shortcut/camera_mode_guidelines_off_press.png
new file mode 100755
index 0000000..4125cb1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_guidelines_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_guidelines_on_nor.png b/images/edc_images/shortcut/camera_mode_guidelines_on_nor.png
new file mode 100755
index 0000000..f11d1c1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_guidelines_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_guidelines_on_press.png b/images/edc_images/shortcut/camera_mode_guidelines_on_press.png
new file mode 100755
index 0000000..ff1bf5b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_guidelines_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_100_nor.png b/images/edc_images/shortcut/camera_mode_iso_100_nor.png
new file mode 100755
index 0000000..0be148b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_100_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_100_press.png b/images/edc_images/shortcut/camera_mode_iso_100_press.png
new file mode 100755
index 0000000..dc4d2ec
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_100_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_200_nor.png b/images/edc_images/shortcut/camera_mode_iso_200_nor.png
new file mode 100755
index 0000000..70b4996
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_200_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_200_press.png b/images/edc_images/shortcut/camera_mode_iso_200_press.png
new file mode 100755
index 0000000..624f3e3
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_200_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_400_nor.png b/images/edc_images/shortcut/camera_mode_iso_400_nor.png
new file mode 100755
index 0000000..84beb92
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_400_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_400_press.png b/images/edc_images/shortcut/camera_mode_iso_400_press.png
new file mode 100755
index 0000000..8b90927
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_400_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_50_nor.png b/images/edc_images/shortcut/camera_mode_iso_50_nor.png
new file mode 100755
index 0000000..01559dd
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_50_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_50_press.png b/images/edc_images/shortcut/camera_mode_iso_50_press.png
new file mode 100755
index 0000000..8c38563
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_50_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_800_nor.png b/images/edc_images/shortcut/camera_mode_iso_800_nor.png
new file mode 100755
index 0000000..69cf20e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_800_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_800_press.png b/images/edc_images/shortcut/camera_mode_iso_800_press.png
new file mode 100755
index 0000000..43153f7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_800_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_auto_nor.png b/images/edc_images/shortcut/camera_mode_iso_auto_nor.png
new file mode 100755
index 0000000..aa73672
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_auto_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_iso_auto_press.png b/images/edc_images/shortcut/camera_mode_iso_auto_press.png
new file mode 100755
index 0000000..cab451e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_iso_auto_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_center_weighted_nor.png b/images/edc_images/shortcut/camera_mode_metering_center_weighted_nor.png
new file mode 100755
index 0000000..016dcd6
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_center_weighted_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_center_weighted_press.png b/images/edc_images/shortcut/camera_mode_metering_center_weighted_press.png
new file mode 100755
index 0000000..2e35edc
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_center_weighted_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_matrix_nor.png b/images/edc_images/shortcut/camera_mode_metering_matrix_nor.png
new file mode 100755
index 0000000..0a0491d
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_matrix_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_matrix_press.png b/images/edc_images/shortcut/camera_mode_metering_matrix_press.png
new file mode 100755
index 0000000..76cea95
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_matrix_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_normal_nor.png b/images/edc_images/shortcut/camera_mode_metering_normal_nor.png
new file mode 100755
index 0000000..66cc108
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_normal_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_pressmal_press.png b/images/edc_images/shortcut/camera_mode_metering_pressmal_press.png
new file mode 100755
index 0000000..76fbd34
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_pressmal_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_spot_nor.png b/images/edc_images/shortcut/camera_mode_metering_spot_nor.png
new file mode 100755
index 0000000..74e0930
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_spot_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_metering_spot_press.png b/images/edc_images/shortcut/camera_mode_metering_spot_press.png
new file mode 100755
index 0000000..532c250
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_metering_spot_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_outdoor_visibility_off_nor.png b/images/edc_images/shortcut/camera_mode_outdoor_visibility_off_nor.png
new file mode 100755
index 0000000..53cf2db
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_outdoor_visibility_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_outdoor_visibility_off_press.png b/images/edc_images/shortcut/camera_mode_outdoor_visibility_off_press.png
new file mode 100755
index 0000000..ca300e1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_outdoor_visibility_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_outdoor_visibility_on_nor.png b/images/edc_images/shortcut/camera_mode_outdoor_visibility_on_nor.png
new file mode 100755
index 0000000..533d6df
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_outdoor_visibility_on_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_outdoor_visibility_on_press.png b/images/edc_images/shortcut/camera_mode_outdoor_visibility_on_press.png
new file mode 100755
index 0000000..05c19fb
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_outdoor_visibility_on_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_fast_nor.png b/images/edc_images/shortcut/camera_mode_recording_fast_nor.png
new file mode 100755
index 0000000..40a2e55
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_fast_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_fast_press.png b/images/edc_images/shortcut/camera_mode_recording_fast_press.png
new file mode 100755
index 0000000..fed381c
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_fast_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_limit_for_mms_nor.png b/images/edc_images/shortcut/camera_mode_recording_limit_for_mms_nor.png
new file mode 100755
index 0000000..596eed3
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_limit_for_mms_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_limit_for_mms_press.png b/images/edc_images/shortcut/camera_mode_recording_limit_for_mms_press.png
new file mode 100755
index 0000000..1a845e0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_limit_for_mms_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_normal_nor.png b/images/edc_images/shortcut/camera_mode_recording_normal_nor.png
new file mode 100755
index 0000000..a588c02
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_normal_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_normal_press.png b/images/edc_images/shortcut/camera_mode_recording_normal_press.png
new file mode 100755
index 0000000..494d64b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_normal_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_slowmotion_nor.png b/images/edc_images/shortcut/camera_mode_recording_slowmotion_nor.png
new file mode 100755
index 0000000..33968a6
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_slowmotion_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_recording_slowmotion_press.png b/images/edc_images/shortcut/camera_mode_recording_slowmotion_press.png
new file mode 100755
index 0000000..64ca3af
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_recording_slowmotion_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_refresh_nor.png b/images/edc_images/shortcut/camera_mode_refresh_nor.png
new file mode 100755
index 0000000..1a60fe1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_refresh_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_refresh_press.png b/images/edc_images/shortcut/camera_mode_refresh_press.png
new file mode 100755
index 0000000..266f819
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_refresh_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_reset_nor.png b/images/edc_images/shortcut/camera_mode_reset_nor.png
new file mode 100755
index 0000000..fdf04c7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_reset_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_reset_press.png b/images/edc_images/shortcut/camera_mode_reset_press.png
new file mode 100755
index 0000000..607ca88
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_reset_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_0_3m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_0_3m_nor.png
new file mode 100755
index 0000000..600361e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_0_3m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_0_3m_press.png b/images/edc_images/shortcut/camera_mode_resolution_0_3m_press.png
new file mode 100755
index 0000000..5153b3a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_0_3m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_1280X720_nor.png b/images/edc_images/shortcut/camera_mode_resolution_1280X720_nor.png
new file mode 100755
index 0000000..af7f189
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_1280X720_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_1280X720_press.png b/images/edc_images/shortcut/camera_mode_resolution_1280X720_press.png
new file mode 100755
index 0000000..fad0f02
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_1280X720_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_176X144_nor.png b/images/edc_images/shortcut/camera_mode_resolution_176X144_nor.png
new file mode 100755
index 0000000..7ae1a7b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_176X144_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_176X144_press.png b/images/edc_images/shortcut/camera_mode_resolution_176X144_press.png
new file mode 100755
index 0000000..bf6d881
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_176X144_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_1920X1080_nor.png b/images/edc_images/shortcut/camera_mode_resolution_1920X1080_nor.png
new file mode 100755
index 0000000..0ab4185
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_1920X1080_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_1920X1080_press.png b/images/edc_images/shortcut/camera_mode_resolution_1920X1080_press.png
new file mode 100755
index 0000000..cbd780d
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_1920X1080_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_1_3m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_1_3m_nor.png
new file mode 100755
index 0000000..87bec93
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_1_3m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_1_3m_press.png b/images/edc_images/shortcut/camera_mode_resolution_1_3m_press.png
new file mode 100755
index 0000000..5e13ed5
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_1_3m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_2m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_2m_nor.png
new file mode 100755
index 0000000..da32193
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_2m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_2m_press.png b/images/edc_images/shortcut/camera_mode_resolution_2m_press.png
new file mode 100755
index 0000000..93598a4
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_2m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_320X240_nor.png b/images/edc_images/shortcut/camera_mode_resolution_320X240_nor.png
new file mode 100755
index 0000000..8c6cbd6
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_320X240_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_320X240_press.png b/images/edc_images/shortcut/camera_mode_resolution_320X240_press.png
new file mode 100755
index 0000000..8aa56d5
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_320X240_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_3_2m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_3_2m_nor.png
new file mode 100755
index 0000000..e4be644
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_3_2m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_3_2m_press.png b/images/edc_images/shortcut/camera_mode_resolution_3_2m_press.png
new file mode 100755
index 0000000..0a39c70
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_3_2m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_5m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_5m_nor.png
new file mode 100755
index 0000000..0b8aeaf
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_5m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_5m_press.png b/images/edc_images/shortcut/camera_mode_resolution_5m_press.png
new file mode 100755
index 0000000..8cff9fc
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_5m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_640X480_nor.png b/images/edc_images/shortcut/camera_mode_resolution_640X480_nor.png
new file mode 100755
index 0000000..7b73e89
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_640X480_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_640X480_press.png b/images/edc_images/shortcut/camera_mode_resolution_640X480_press.png
new file mode 100755
index 0000000..d393212
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_640X480_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_720X480_nor.png b/images/edc_images/shortcut/camera_mode_resolution_720X480_nor.png
new file mode 100755
index 0000000..eea37c4
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_720X480_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_720X480_press.png b/images/edc_images/shortcut/camera_mode_resolution_720X480_press.png
new file mode 100755
index 0000000..1629c76
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_720X480_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_8m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_8m_nor.png
new file mode 100755
index 0000000..d26dd48
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_8m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_8m_press.png b/images/edc_images/shortcut/camera_mode_resolution_8m_press.png
new file mode 100755
index 0000000..c907a01
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_8m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w0_9m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w0_9m_nor.png
new file mode 100755
index 0000000..ab369c9
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w0_9m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w0_9m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w0_9m_press.png
new file mode 100755
index 0000000..81959be
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w0_9m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w2_4m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w2_4m_nor.png
new file mode 100755
index 0000000..5f547d8
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w2_4m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w2_4m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w2_4m_press.png
new file mode 100755
index 0000000..92d1281
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w2_4m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w2m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w2m_nor.png
new file mode 100755
index 0000000..07bf4a9
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w2m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w2m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w2m_press.png
new file mode 100755
index 0000000..3f7a124
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w2m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w3_6m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w3_6m_nor.png
new file mode 100755
index 0000000..7fe4489
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w3_6m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w3_6m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w3_6m_press.png
new file mode 100755
index 0000000..c08cfa3
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w3_6m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w4m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w4m_nor.png
new file mode 100755
index 0000000..f1b89a2
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w4m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w4m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w4m_press.png
new file mode 100755
index 0000000..61c8a00
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w4m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w5_7m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w5_7m_nor.png
new file mode 100755
index 0000000..a2f2322
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w5_7m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w5_7m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w5_7m_press.png
new file mode 100755
index 0000000..6f07a11
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w5_7m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w6m_nor.png b/images/edc_images/shortcut/camera_mode_resolution_w6m_nor.png
new file mode 100755
index 0000000..a7cc475
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w6m_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_resolution_w6m_press.png b/images/edc_images/shortcut/camera_mode_resolution_w6m_press.png
new file mode 100755
index 0000000..9c7a7c1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_resolution_w6m_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_self_rec_nor.png b/images/edc_images/shortcut/camera_mode_self_rec_nor.png
new file mode 100755
index 0000000..129d8a6
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_self_rec_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_self_rec_press.png b/images/edc_images/shortcut/camera_mode_self_rec_press.png
new file mode 100755
index 0000000..d1e7210
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_self_rec_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_self_shot_nor.png b/images/edc_images/shortcut/camera_mode_self_shot_nor.png
new file mode 100755
index 0000000..38402a1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_self_shot_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_self_shot_press.png b/images/edc_images/shortcut/camera_mode_self_shot_press.png
new file mode 100755
index 0000000..a2b064e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_self_shot_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_setting_nor.png b/images/edc_images/shortcut/camera_mode_setting_nor.png
new file mode 100755
index 0000000..3ea443b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_setting_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_setting_press.png b/images/edc_images/shortcut/camera_mode_setting_press.png
new file mode 100755
index 0000000..e97d4f1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_setting_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_Backlight_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_Backlight_nor.png
new file mode 100755
index 0000000..c0dbbcc
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_Backlight_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_Backlight_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_Backlight_press.png
new file mode 100755
index 0000000..d2f5e72
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_Backlight_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_action_shot_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_action_shot_nor.png
new file mode 100755
index 0000000..820a4de
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_action_shot_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_action_shot_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_action_shot_press.png
new file mode 100755
index 0000000..b3e51c1
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_action_shot_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_nor.png
new file mode 100755
index 0000000..c1b6ca7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_press.png
new file mode 100755
index 0000000..8d99665
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_beach_snow_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_beauty_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_beauty_nor.png
new file mode 100755
index 0000000..5f5625a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_beauty_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_beauty_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_beauty_press.png
new file mode 100755
index 0000000..d74db8d
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_beauty_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_nor.png
new file mode 100755
index 0000000..b107c00
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_press.png
new file mode 100755
index 0000000..250514d
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_bestphoto_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_nor.png
new file mode 100755
index 0000000..cd08a9e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_press.png
new file mode 100755
index 0000000..1900367
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_buddy_photo_share_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_candlelight_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_candlelight_nor.png
new file mode 100755
index 0000000..2f7efee
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_candlelight_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_candlelight_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_candlelight_press.png
new file mode 100755
index 0000000..b97efa5
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_candlelight_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_cartoon_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_cartoon_nor.png
new file mode 100755
index 0000000..a0f0c16
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_cartoon_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_cartoon_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_cartoon_press.png
new file mode 100755
index 0000000..660a2ac
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_cartoon_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_dawn_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_dawn_nor.png
new file mode 100755
index 0000000..f4d1eaa
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_dawn_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_dawn_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_dawn_press.png
new file mode 100755
index 0000000..b2f3b2e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_dawn_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_fall_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_fall_nor.png
new file mode 100755
index 0000000..9b68bb0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_fall_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_fall_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_fall_press.png
new file mode 100755
index 0000000..8b7e139
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_fall_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_firework_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_firework_nor.png
new file mode 100755
index 0000000..ea7bb6a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_firework_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_firework_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_firework_press.png
new file mode 100755
index 0000000..cf95c06
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_firework_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_hdr_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_hdr_nor.png
new file mode 100755
index 0000000..78a691a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_hdr_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_hdr_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_hdr_press.png
new file mode 100755
index 0000000..d454f98
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_hdr_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_landscape_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_landscape_nor.png
new file mode 100755
index 0000000..f2fd3fb
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_landscape_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_landscape_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_landscape_press.png
new file mode 100755
index 0000000..1ad2e04
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_landscape_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_night_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_night_nor.png
new file mode 100755
index 0000000..fb17fac
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_night_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_night_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_night_press.png
new file mode 100755
index 0000000..053b35f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_night_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_panorama_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_panorama_nor.png
new file mode 100755
index 0000000..eab49de
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_panorama_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_panorama_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_panorama_press.png
new file mode 100755
index 0000000..1b4443a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_panorama_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_nor.png
new file mode 100755
index 0000000..ddb2ad7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_press.png
new file mode 100755
index 0000000..ae0f0a5
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_party_indoor_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_portrait_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_portrait_nor.png
new file mode 100755
index 0000000..b4bfb60
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_portrait_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_portrait_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_portrait_press.png
new file mode 100755
index 0000000..1757ca0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_portrait_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_scene_none_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_scene_none_nor.png
new file mode 100755
index 0000000..812208d
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_scene_none_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_scene_none_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_scene_none_press.png
new file mode 100755
index 0000000..1c9923a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_scene_none_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_share_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_share_nor.png
new file mode 100755
index 0000000..ab25089
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_share_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_share_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_share_press.png
new file mode 100755
index 0000000..904f11e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_share_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_single_shot_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_single_shot_nor.png
new file mode 100755
index 0000000..f7db0d2
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_single_shot_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_single_shot_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_single_shot_press.png
new file mode 100755
index 0000000..4d91458
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_single_shot_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_nor.png
new file mode 100755
index 0000000..dbba7f7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_press.png
new file mode 100755
index 0000000..f8de991
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_smile_shot_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_sports_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_sports_nor.png
new file mode 100755
index 0000000..a1e79dc
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_sports_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_sports_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_sports_press.png
new file mode 100755
index 0000000..9d18212
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_sports_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_sunset_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_sunset_nor.png
new file mode 100755
index 0000000..f44e5ff
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_sunset_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_sunset_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_sunset_press.png
new file mode 100755
index 0000000..1fa0ff5
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_sunset_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_text_nor.png b/images/edc_images/shortcut/camera_mode_shooting_mode_text_nor.png
new file mode 100755
index 0000000..a66ac14
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_text_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shooting_mode_text_press.png b/images/edc_images/shortcut/camera_mode_shooting_mode_text_press.png
new file mode 100755
index 0000000..b7746ee
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shooting_mode_text_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shutter.png b/images/edc_images/shortcut/camera_mode_shutter.png
new file mode 100755
index 0000000..1a12063
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shutter.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_shutter_press.png b/images/edc_images/shortcut/camera_mode_shutter_press.png
new file mode 100755
index 0000000..77df2b7
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_shutter_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_storage_mydevice_nor.png b/images/edc_images/shortcut/camera_mode_storage_mydevice_nor.png
new file mode 100755
index 0000000..8fdc47e
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_storage_mydevice_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_storage_mydevice_press.png b/images/edc_images/shortcut/camera_mode_storage_mydevice_press.png
new file mode 100755
index 0000000..5b02708
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_storage_mydevice_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_storage_storagecard_nor.png b/images/edc_images/shortcut/camera_mode_storage_storagecard_nor.png
new file mode 100755
index 0000000..c3041eb
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_storage_storagecard_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_storage_storagecard_press.png b/images/edc_images/shortcut/camera_mode_storage_storagecard_press.png
new file mode 100755
index 0000000..6782e3a
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_storage_storagecard_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_10_nor.png b/images/edc_images/shortcut/camera_mode_timer_10_nor.png
new file mode 100755
index 0000000..7049da3
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_10_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_10_press.png b/images/edc_images/shortcut/camera_mode_timer_10_press.png
new file mode 100755
index 0000000..bcec218
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_10_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_2_nor.png b/images/edc_images/shortcut/camera_mode_timer_2_nor.png
new file mode 100755
index 0000000..1baaa17
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_2_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_2_press.png b/images/edc_images/shortcut/camera_mode_timer_2_press.png
new file mode 100755
index 0000000..7d466ab
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_2_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_5_nor.png b/images/edc_images/shortcut/camera_mode_timer_5_nor.png
new file mode 100755
index 0000000..b17a80f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_5_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_5_press.png b/images/edc_images/shortcut/camera_mode_timer_5_press.png
new file mode 100755
index 0000000..c7dab2f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_5_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_off_nor.png b/images/edc_images/shortcut/camera_mode_timer_off_nor.png
new file mode 100755
index 0000000..0184a88
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_off_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_timer_off_press.png b/images/edc_images/shortcut/camera_mode_timer_off_press.png
new file mode 100755
index 0000000..55250a0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_timer_off_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_auto_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_auto_nor.png
new file mode 100755
index 0000000..7487ddd
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_auto_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_auto_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_auto_press.png
new file mode 100755
index 0000000..1d2ccdf
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_auto_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_cloudy_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_cloudy_nor.png
new file mode 100755
index 0000000..86331a6
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_cloudy_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_cloudy_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_cloudy_press.png
new file mode 100755
index 0000000..391275b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_cloudy_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_day_light_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_day_light_nor.png
new file mode 100755
index 0000000..669cd1b
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_day_light_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_day_light_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_day_light_press.png
new file mode 100755
index 0000000..45a7bcd
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_day_light_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_fluorescent_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_fluorescent_nor.png
new file mode 100755
index 0000000..8614819
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_fluorescent_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_fluorescent_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_fluorescent_press.png
new file mode 100755
index 0000000..8251c18
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_fluorescent_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_horizon_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_horizon_nor.png
new file mode 100755
index 0000000..ce5f3ee
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_horizon_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_horizon_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_horizon_press.png
new file mode 100755
index 0000000..dcf3c33
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_horizon_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_incandescent_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_incandescent_nor.png
new file mode 100755
index 0000000..ce3dbd0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_incandescent_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_incandescent_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_incandescent_press.png
new file mode 100755
index 0000000..8bb3b45
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_incandescent_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_shade_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_shade_nor.png
new file mode 100755
index 0000000..3149288
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_shade_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_shade_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_shade_press.png
new file mode 100755
index 0000000..f861797
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_shade_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_tungsten_nor.png b/images/edc_images/shortcut/camera_mode_whitebalance_tungsten_nor.png
new file mode 100755
index 0000000..f6e84f0
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_tungsten_nor.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_whitebalance_tungsten_press.png b/images/edc_images/shortcut/camera_mode_whitebalance_tungsten_press.png
new file mode 100755
index 0000000..8bb3b45
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_whitebalance_tungsten_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_zoom.png b/images/edc_images/shortcut/camera_mode_zoom.png
new file mode 100755
index 0000000..11e3578
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_zoom.png
Binary files differ
diff --git a/images/edc_images/shortcut/camera_mode_zoom_press.png b/images/edc_images/shortcut/camera_mode_zoom_press.png
new file mode 100755
index 0000000..aa65c9f
--- /dev/null
+++ b/images/edc_images/shortcut/camera_mode_zoom_press.png
Binary files differ
diff --git a/images/edc_images/shortcut/sharewith_icon.png b/images/edc_images/shortcut/sharewith_icon.png
new file mode 100755
index 0000000..37f2106
--- /dev/null
+++ b/images/edc_images/shortcut/sharewith_icon.png
Binary files differ
diff --git a/images/edc_images/shortcut/sharewith_icon_press.png b/images/edc_images/shortcut/sharewith_icon_press.png
new file mode 100755
index 0000000..c4cc6e0
--- /dev/null
+++ b/images/edc_images/shortcut/sharewith_icon_press.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camcorder_standby_press.png b/images/edc_images/tmp/11_camcorder_standby_press.png
new file mode 100755
index 0000000..94e09c2
--- /dev/null
+++ b/images/edc_images/tmp/11_camcorder_standby_press.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camcorder_standby_press_ver.png b/images/edc_images/tmp/11_camcorder_standby_press_ver.png
new file mode 100755
index 0000000..ed19b81
--- /dev/null
+++ b/images/edc_images/tmp/11_camcorder_standby_press_ver.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_bg.png b/images/edc_images/tmp/11_camera_mode_bg.png
new file mode 100755
index 0000000..b741abd
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_bg.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_bg_ver.png b/images/edc_images/tmp/11_camera_mode_bg_ver.png
new file mode 100755
index 0000000..0d3aca7
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_bg_ver.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_button.png b/images/edc_images/tmp/11_camera_mode_button.png
new file mode 100755
index 0000000..513d118
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_button.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_button_ver.png b/images/edc_images/tmp/11_camera_mode_button_ver.png
new file mode 100755
index 0000000..6cc056f
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_button_ver.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_camcorder_off.png b/images/edc_images/tmp/11_camera_mode_camcorder_off.png
new file mode 100755
index 0000000..e4dc964
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_camcorder_off.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_camcorder_on.png b/images/edc_images/tmp/11_camera_mode_camcorder_on.png
new file mode 100755
index 0000000..e4dc964
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_camcorder_on.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_camera_off.png b/images/edc_images/tmp/11_camera_mode_camera_off.png
new file mode 100755
index 0000000..b51ec43
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_camera_off.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_camera_on.png b/images/edc_images/tmp/11_camera_mode_camera_on.png
new file mode 100755
index 0000000..b51ec43
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_camera_on.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_recording_normal.png b/images/edc_images/tmp/11_camera_mode_recording_normal.png
new file mode 100755
index 0000000..73efa2e
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_recording_normal.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_recording_normal_ver.png b/images/edc_images/tmp/11_camera_mode_recording_normal_ver.png
new file mode 100755
index 0000000..fcb07b1
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_recording_normal_ver.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_recording_press.png b/images/edc_images/tmp/11_camera_mode_recording_press.png
new file mode 100755
index 0000000..150a6dc
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_recording_press.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_mode_recording_press_ver.png b/images/edc_images/tmp/11_camera_mode_recording_press_ver.png
new file mode 100755
index 0000000..b1115c0
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_mode_recording_press_ver.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_snapshot.png b/images/edc_images/tmp/11_camera_snapshot.png
new file mode 100755
index 0000000..21804b6
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_snapshot.png
Binary files differ
diff --git a/images/edc_images/tmp/11_camera_snapshot_press.png b/images/edc_images/tmp/11_camera_snapshot_press.png
new file mode 100755
index 0000000..7a1becc
--- /dev/null
+++ b/images/edc_images/tmp/11_camera_snapshot_press.png
Binary files differ
diff --git a/images/edc_images/tmp/37_guideline_1.png b/images/edc_images/tmp/37_guideline_1.png
new file mode 100644
index 0000000..2e35a79
--- /dev/null
+++ b/images/edc_images/tmp/37_guideline_1.png
Binary files differ
diff --git a/images/edc_images/tmp/37_guideline_2.png b/images/edc_images/tmp/37_guideline_2.png
new file mode 100644
index 0000000..297e159
--- /dev/null
+++ b/images/edc_images/tmp/37_guideline_2.png
Binary files differ
diff --git a/images/edc_images/tmp/37_guideline_opa_1.png b/images/edc_images/tmp/37_guideline_opa_1.png
new file mode 100644
index 0000000..74e42a5
--- /dev/null
+++ b/images/edc_images/tmp/37_guideline_opa_1.png
Binary files differ
diff --git a/images/edc_images/tmp/37_guideline_opa_2.png b/images/edc_images/tmp/37_guideline_opa_2.png
new file mode 100644
index 0000000..1844d7f
--- /dev/null
+++ b/images/edc_images/tmp/37_guideline_opa_2.png
Binary files differ
diff --git a/images/edc_images/tmp/37_shootingmode_popup_bg.png b/images/edc_images/tmp/37_shootingmode_popup_bg.png
new file mode 100755
index 0000000..770cee9
--- /dev/null
+++ b/images/edc_images/tmp/37_shootingmode_popup_bg.png
Binary files differ
diff --git a/images/edc_images/touch_af_focus_rect_01.png b/images/edc_images/touch_af_focus_rect_01.png
new file mode 100755
index 0000000..ffed3cd
--- /dev/null
+++ b/images/edc_images/touch_af_focus_rect_01.png
Binary files differ
diff --git a/images/edc_images/touch_af_focus_rect_02.png b/images/edc_images/touch_af_focus_rect_02.png
new file mode 100755
index 0000000..54302bb
--- /dev/null
+++ b/images/edc_images/touch_af_focus_rect_02.png
Binary files differ
diff --git a/images/edc_images/touch_af_focus_rect_03.png b/images/edc_images/touch_af_focus_rect_03.png
new file mode 100755
index 0000000..30fe515
--- /dev/null
+++ b/images/edc_images/touch_af_focus_rect_03.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_mode_bg_ver.png b/images/edc_images/vertical/camera_mode_bg_ver.png
new file mode 100755
index 0000000..c1ad3c4
--- /dev/null
+++ b/images/edc_images/vertical/camera_mode_bg_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_mode_button_ver.png b/images/edc_images/vertical/camera_mode_button_ver.png
new file mode 100755
index 0000000..b2540df
--- /dev/null
+++ b/images/edc_images/vertical/camera_mode_button_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_mode_shutter_dim_ver.png b/images/edc_images/vertical/camera_mode_shutter_dim_ver.png
new file mode 100755
index 0000000..e6ad148
--- /dev/null
+++ b/images/edc_images/vertical/camera_mode_shutter_dim_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_mode_shutter_norma_ver_inverse.png b/images/edc_images/vertical/camera_mode_shutter_norma_ver_inverse.png
new file mode 100644
index 0000000..68ff3f3
--- /dev/null
+++ b/images/edc_images/vertical/camera_mode_shutter_norma_ver_inverse.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_mode_shutter_normal_ver.png b/images/edc_images/vertical/camera_mode_shutter_normal_ver.png
new file mode 100644
index 0000000..b5e2dd0
--- /dev/null
+++ b/images/edc_images/vertical/camera_mode_shutter_normal_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_mode_shutter_press_ver.png b/images/edc_images/vertical/camera_mode_shutter_press_ver.png
new file mode 100755
index 0000000..b8ee585
--- /dev/null
+++ b/images/edc_images/vertical/camera_mode_shutter_press_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_normal_bg_ver.png b/images/edc_images/vertical/camera_normal_bg_ver.png
new file mode 100755
index 0000000..313e962
--- /dev/null
+++ b/images/edc_images/vertical/camera_normal_bg_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_normal_bg_ver2.png b/images/edc_images/vertical/camera_normal_bg_ver2.png
new file mode 100755
index 0000000..7c09aad
--- /dev/null
+++ b/images/edc_images/vertical/camera_normal_bg_ver2.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_normal_bg_ver2_01.png b/images/edc_images/vertical/camera_normal_bg_ver2_01.png
new file mode 100755
index 0000000..0371449
--- /dev/null
+++ b/images/edc_images/vertical/camera_normal_bg_ver2_01.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_normal_bg_ver_01.png b/images/edc_images/vertical/camera_normal_bg_ver_01.png
new file mode 100755
index 0000000..edac7f7
--- /dev/null
+++ b/images/edc_images/vertical/camera_normal_bg_ver_01.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_option_popup_anker_vertical.png b/images/edc_images/vertical/camera_option_popup_anker_vertical.png
new file mode 100755
index 0000000..71b4154
--- /dev/null
+++ b/images/edc_images/vertical/camera_option_popup_anker_vertical.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_option_popup_anker_vertical_inverse.png b/images/edc_images/vertical/camera_option_popup_anker_vertical_inverse.png
new file mode 100755
index 0000000..b14eb9e
--- /dev/null
+++ b/images/edc_images/vertical/camera_option_popup_anker_vertical_inverse.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_popup_ex_bar_ver.png b/images/edc_images/vertical/camera_popup_ex_bar_ver.png
new file mode 100755
index 0000000..8e5ea75
--- /dev/null
+++ b/images/edc_images/vertical/camera_popup_ex_bar_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_popup_zoom_bar_ver.png b/images/edc_images/vertical/camera_popup_zoom_bar_ver.png
new file mode 100755
index 0000000..269a3d3
--- /dev/null
+++ b/images/edc_images/vertical/camera_popup_zoom_bar_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_popup_zoom_ver.png b/images/edc_images/vertical/camera_popup_zoom_ver.png
new file mode 100755
index 0000000..e6bf638
--- /dev/null
+++ b/images/edc_images/vertical/camera_popup_zoom_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_shrtcut_edit_bg_02_ver.png b/images/edc_images/vertical/camera_shrtcut_edit_bg_02_ver.png
new file mode 100755
index 0000000..0a0e510
--- /dev/null
+++ b/images/edc_images/vertical/camera_shrtcut_edit_bg_02_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_shrtcut_edit_bg_ver.png b/images/edc_images/vertical/camera_shrtcut_edit_bg_ver.png
new file mode 100755
index 0000000..ed7dd12
--- /dev/null
+++ b/images/edc_images/vertical/camera_shrtcut_edit_bg_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_shrtcut_menubar_bg_ver.png b/images/edc_images/vertical/camera_shrtcut_menubar_bg_ver.png
new file mode 100755
index 0000000..19b343c
--- /dev/null
+++ b/images/edc_images/vertical/camera_shrtcut_menubar_bg_ver.png
Binary files differ
diff --git a/images/edc_images/vertical/camera_shrtcut_text_bg_ver.png b/images/edc_images/vertical/camera_shrtcut_text_bg_ver.png
new file mode 100755
index 0000000..5d58a2f
--- /dev/null
+++ b/images/edc_images/vertical/camera_shrtcut_text_bg_ver.png
Binary files differ
diff --git a/include/CamDeviceCapacity.h b/include/CamDeviceCapacity.h
new file mode 100644
index 0000000..0e80832
--- /dev/null
+++ b/include/CamDeviceCapacity.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CCAM_DEVICE_CAPACITY_H_
+#define _CCAM_DEVICE_CAPACITY_H_
+
+#include "cam_property.h"
+
+class CCamDeviceCapacity
+{
+ //===========================================================================
+ // Constructor & Destructor
+public:
+
+protected:
+ CCamDeviceCapacity();
+ virtual ~CCamDeviceCapacity();
+
+
+ //===========================================================================
+ // Attributes
+protected:
+ static CCamDeviceCapacity* m_pInstance;
+
+ typedef struct _DevCapsSupported
+ {
+ bool bChecked;
+ bool bSupported;
+ }DevCapsSupported;
+
+ typedef struct _DevCapsMinMax
+ {
+ bool bChecked;
+ bool bSupported;
+ int nMin;
+ int nMax;
+ }DevCapsMinMax;
+
+ typedef struct _DevCapsRange
+ {
+ bool bChecked;
+ bool bSupported;
+ unsigned int unCaps;
+ }DevCapsRange;
+
+
+ DevCapsRange m_CamRes;
+ DevCapsRange m_RecRes;
+ DevCapsRange m_Focus;
+ DevCapsRange m_Effect;
+ DevCapsRange m_WB;
+ DevCapsRange m_Scene;
+ DevCapsRange m_Metering;
+ DevCapsRange m_ISO;
+ DevCapsRange m_Flash;
+ DevCapsRange m_Fps;
+ DevCapsRange m_Shot;
+ DevCapsRange m_RecMode;
+
+ DevCapsMinMax m_Zoom;
+ DevCapsMinMax m_Ev;
+ DevCapsMinMax m_Br;
+
+ DevCapsSupported m_WDR;
+ DevCapsSupported m_AntiShake;
+ DevCapsSupported m_RecAntiShake;
+ DevCapsSupported m_Outdoorvisibility;
+
+ unsigned int m_uFuncCaps;
+ //===========================================================================
+ // Interfaces
+public:
+
+ static CCamDeviceCapacity* GetInstance();
+ void Destroy();
+ void ResetCaps();
+
+ void GetCamDevFuncCaps(unsigned int *eType, void *user_data);
+
+ bool GetCamDevCamResolutionCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevRecResolutionCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevFocusCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevEffectCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevWBCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevSceneModeCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevMeteringCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevISOCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevFlashCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevFpsCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevShotModeCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevRecModeCaps(unsigned int *uCapacity, void *user_data);
+ bool GetCamDevZoomCaps(int *min, int *max);
+ bool GetCamDevEvCaps(int *min, int *max);
+ bool GetCamDevBrCaps(int *min, int *max);
+
+
+
+private:
+ bool IsSupported(unsigned int type, CamDeviceType deviceType, void *user_data);
+};
+
+
+#endif //_CCAM_DEVICE_CAPACITY_H_
+
diff --git a/include/CamTypeConverter.h b/include/CamTypeConverter.h
new file mode 100755
index 0000000..c78bd7e
--- /dev/null
+++ b/include/CamTypeConverter.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef CAM_TYPECONVERTER_H_
+#define CAM_TYPECONVERTER_H_
+
+#include "camera.h"
+#include "cam_property.h"
+
+class CCamTypeConverter {
+
+public:
+static unsigned int CamIsoDevConvertCaps(camera_attr_iso_e iso);
+static unsigned int CamEffectDevConvertCaps(camera_attr_effect_mode_e effect);
+static unsigned int CamFpsDevConvertCaps(camera_attr_fps_e fps);
+static unsigned int CamWbDevConvertCaps(camera_attr_whitebalance_e wb);
+static unsigned int CamMeteringDevConvertCaps(camera_attr_exposure_mode_e metering);
+static unsigned int CamSceneDevConvertCaps(camera_attr_scene_mode_e scene);
+static unsigned int CamFlashDevConvertCaps(camera_attr_flash_mode_e flash);
+static unsigned int CamFocusDevConvertCaps(camera_attr_af_mode_e focus);
+
+static unsigned int CamIsoCamConvertCaps(CamIso iso);
+static unsigned int CamEffectCamConvertCaps(CamSettingsEffects effect);
+static unsigned int CamWbCamConvertCaps(CamSettingsWB wb);
+static unsigned int CamMeteringCamConvertCaps(CamMetering metering);
+static unsigned int CamSceneCamConvertCaps(CamSceneMode scene);
+static unsigned int CamFlashCamConvertCaps(CamFlashMode flash);
+static unsigned int CamFocusCamConvertCaps(CamFocusMode focus);
+static unsigned int CamResolutionCamConvertCaps(unsigned int res);
+
+};
+
+#endif /* CAM_TYPECONVERTER_H_ */
+
diff --git a/include/cam.h b/include/cam.h
new file mode 100755
index 0000000..096aa48
--- /dev/null
+++ b/include/cam.h
@@ -0,0 +1,393 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_CAM_H__
+#define __DEF_CAM_H__
+
+
+#include <Elementary.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <dlfcn.h>
+#include <utilX.h>
+
+#include "cam_property.h"
+#include "cam_app.h"
+#include "edc_string.h"
+#include <fcntl.h>
+
+#include <vconf.h>
+#include <ui-gadget.h>
+#include <app.h>
+#include <media_content.h>
+#include <sensors.h>
+
+
+#define DISABLE_FOR_DEMO 0
+
+#ifdef USE_FIFO_THREAD
+#define CAM_FIFO_PATH "/tmp/cam_cmd_fifo"
+
+#define CAM_FIFO_CMD_EXIT "EXIT"
+#define CAM_FIFO_CMD_START "START"
+
+#define CAM_CAPTURE_AUTO_START "CAPTURE_AUTO_START"
+
+#define MAX_NUM_OF_FIFO_TOKEN 6
+#endif
+
+#define PACKAGE "ug-camera-efl"
+#define GRP_MAIN "main"
+
+#define EDJ_PATH "/usr/ug/res/edje/"PACKAGE
+#define CAM_IMAGE_PATH "/usr/ug/res/images/"PACKAGE"/src_images/"
+
+#define CAM_MAIN_LAYOUT_EDJ_NAME EDJ_PATH"/cam_main_layout.edj"
+
+#define CAM_RECORDING_EDJ_NAME EDJ_PATH"/cam_recording_edje.edj"
+#define CAM_RECORDING_INVERSE_EDJ_NAME EDJ_PATH"/cam_recording_edje_inverse.edj"
+#define CAM_RECORDING_VERTICAL_EDJ_NAME EDJ_PATH"/cam_recording_edje_vertical.edj"
+#define CAM_RECORDING_VERTICAL_INVERSE_EDJ_NAME EDJ_PATH"/cam_recording_edje_vertical_inverse.edj"
+
+#define CAM_TOOLBAR_LAYOUT_EDJ_NAME EDJ_PATH"/cam_toolbar_layout.edj"
+#define CAM_TOOLBAR_LAYOUT_INVERSE_EDJ_NAME EDJ_PATH"/cam_toolbar_layout_inverse.edj"
+#define CAM_TOOLBAR_LAYOUT_VERTICAL_EDJ_NAME EDJ_PATH"/cam_toolbar_layout_vertical.edj"
+#define CAM_TOOLBAR_LAYOUT_VERTICAL_INVERSE_EDJ_NAME EDJ_PATH"/cam_toolbar_layout_vertical_inverse.edj"
+
+#define CAM_SETTING_POPUP_STYLE_EDJ_NAME EDJ_PATH"/style_ctxpopup_camera.edj"
+#define CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME EDJ_PATH"/style_ctxpopup_camera_with_radio.edj"
+#define CAM_SETTING_POPUP_LAYOUT_EDJ_NAME EDJ_PATH"/cam_setting_popup_layout.edj"
+#define CAM_SLIDER_STYLE_EDJ_NAME EDJ_PATH"/style_slider_camera.edj"
+#define CAM_LABEL_STYLE_EDJ_NAME EDJ_PATH"/style_label_camera.edj"
+#define CAM_BUTTON_STYLE_EDJ_NAME EDJ_PATH"/style_button_camera.edj"
+
+
+#define CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME EDJ_PATH"/cam_ctxpopup_shortcuts.edj"
+
+#define CAM_UTILS_EDJ_NAME EDJ_PATH"/cam_utils.edj"
+#define CAM_INDICATOR_EDJ_NAME EDJ_PATH"/cam_indicator_layout.edj"
+
+#define CAM_EV_EDJ_NAME EDJ_PATH"/cam_ev_layout.edj"
+#define CAM_EV_EDJ_INVERSE_NAME EDJ_PATH"/cam_ev_layout_inverse.edj"
+#define CAM_EV_EDJ_VERTICAL_NAME EDJ_PATH"/cam_ev_layout_vertical.edj"
+#define CAM_EV_EDJ_VERTICAL_INVERSE_NAME EDJ_PATH"/cam_ev_layout_vertical_inverse.edj"
+
+#define CAM_ZOOM_EDJ_NAME EDJ_PATH"/cam_zoom_layout.edj"
+#define CAM_ZOOM_EDJ_INVERSE_NAME EDJ_PATH"/cam_zoom_layout_inverse.edj"
+#define CAM_ZOOM_EDJ_VERTICAL_NAME EDJ_PATH"/cam_zoom_layout_vertical.edj"
+#define CAM_ZOOM_EDJ_VERTICAL_INVERSE_NAME EDJ_PATH"/cam_zoom_layout_vertical_inverse.edj"
+
+#define CAM_IMAGE_EDJ_NAME EDJ_PATH"/cam_images.edj"
+
+#define IMAGE_VIEWER_VIEW_MODE_KEY_NAME "View Mode"
+#define IMAGE_VIEWER_FILE_PATH_KEY_NAME "Path"
+#define IMAGE_VIEWER_SET_AS_TYPE "Setas type"
+#define IMAGE_VIEWER_RESOLUTION "Resolution"
+#define IMAGE_VIEWER_UG_NAME "image-viewer-efl"
+
+#define LOCATION_UG_NAME "setting-location-efl"
+
+#define PREVIEW_WIDTH 640
+#define PREVIEW_HEIGHT 480
+
+#define WINDOW_W 640 /* 400 */ /*1280*/
+#define WINDOW_H 480 /* 240 */ /*720*/
+
+#define SERVICE_MIME_TYPE_IMAGE_1 "image/jpg"
+#define SERVICE_MIME_TYPE_IMAGE_2 "image/jpeg"
+#define SERVICE_MIME_TYPE_VIDEO_1 "video/3gp"
+#define SERVICE_MIME_TYPE_VIDEO_2 "video/3gpp"
+
+
+#define DEFAULT_WIN_ANGLE (270)
+
+#define CAM_FILE_PATH_MAX 1024
+#define EFL_TEMP_CODE
+/* #define USE_CAMERA_APP_SHUTTER_SOUND 1 */
+#define ENABLE_CAPTURE_ANIMATION
+
+struct appdata {
+ Evas *evas;
+ Ecore_Evas *ee;
+ Evas_Object *ug_base;
+ Evas_Object *win_main;
+ Ecore_X_Window main_xid;
+ Ecore_Pipe *main_pipe;
+ CamUgState ug_state;
+
+ app_device_orientation_e rot_current;
+ app_device_orientation_e rot_previous;
+
+ int angle_pre;
+ int angle;
+ int rotate_angle;
+ gboolean is_rotating;
+ gboolean is_processing; /*note: programm busy flag, now just used for bust shot processing popup*/
+ gboolean is_capture_animation_processing;
+
+ int camcorder_rotate;
+
+ Evas_Object *gesture; /* gesture layout */
+
+#ifdef ENABLE_CAPTURE_ANIMATION
+ Evas_Object *shutter_screen;
+ CamRectangle shutter_src_rect;
+ CamRectangle shutter_des_rect;
+ Evas_Object *rect_image;
+#endif
+
+ int win_width;
+ int win_height;
+
+ int camfw_video_width;
+ int camfw_video_height;
+
+ double af_start_x; /* area start coordination */
+ double af_start_y; /* area start coordination */
+ int af_x;
+ int af_y;
+ double camera_focus_w; /* size of focus image */
+ double camera_focus_h; /* size of focus image */
+
+ int touch_lcd_x; /* lcd x */
+ int touch_lcd_y; /* lcd y */
+
+ int preview_offset_x;
+ int preview_offset_y;
+ int preview_w;
+ int preview_h;
+
+ int target_direction;
+ Evas_Object *toolbar_edje;
+
+ Evas_Object *toolbar_edje_landscape;
+ Evas_Object *toolbar_edje_portrait;
+ Evas_Object *toolbar_edje_landscape_inverse;
+ Evas_Object *toolbar_edje_portrait_inverse;
+ char *toolbar_edj_file;
+ struct {
+ struct {
+ Evas_Object *edje;
+ Evas_Object *edje_landscape;
+ Evas_Object *edje_portrait;
+ Evas_Object *edje_landscape_inverse;
+ Evas_Object *edje_portrait_inverse;
+
+ Evas_Object *thumbnail_image;
+ } quickview_item;
+
+ } toolbar;
+
+ cam_menubar_data toolbar_menu_arrays[CAM_MENU_BAR_LEFT_MAX_NUM];
+
+
+
+ Evas_Object *shutterbtn;
+ Evas_Object *shutterbtn_camera_icon;
+ Evas_Object *recordingbtn;
+ Evas_Object *recording_stop_btn;
+ Evas_Object *backbtn;
+ Evas_Object *caf_button;
+
+ Evas_Object *focus_edje;
+ Evas_Object *indicator_edje;
+ Evas_Object *ev_edje;
+ Evas_Object *ev_icon_minus_edje;
+ Evas_Object *ev_icon_plus_edje;
+ Evas_Object *pinch_edje;
+ Evas_Object *zoom_edje;
+ Evas_Object *zoom_text_min_edje;
+ Evas_Object *zoom_text_max_edje;
+ Evas_Object *recording_edje;
+ Evas_Object *capturebtn_edje;
+
+ Evas_Object *guideline_edje;
+
+ Evas_Object *progressbar_edje;
+ Evas_Object *progressbar;
+
+ Evas_Object *gps_radio; /* radio button */
+ Evas_Object *guideline_radio; /* radio button */
+ Evas_Object *autocontrast_radio;
+ Evas_Object *antishake_radio;
+ Evas_Object *outdoor_visibility_radio;
+ Evas_Object *burst_shot_mode_radio;
+ Evas_Object *capture_by_voice_radio;
+ Evas_Object *save_as_flip_radio;
+ Elm_Object_Item *setting_select_item;
+
+ Evas_Object *genlist;
+ Evas_Object *sub_genlist;
+ Evas_Object *sub_menu_group;
+ int sub_menu_type;
+ int sub_menu_index;
+
+ bool show_setting_popup_after_rotate;
+ bool show_edit_shortcuts_popup_after_rotate;
+
+ Evas_Object *toolbar_setting_popup;
+ Evas_Object *toolbar_setting_popup_area;
+
+ Evas_Object *setting_ctxpopup;
+ Evas_Object *ctxpopup_area;
+
+ Evas_Object *edit_shortcuts_popup;
+ Evas_Object *edit_shortcuts_popup_ctx;
+ Evas_Object *edit_shortcuts_popup_scroll;
+ Evas_Object *edit_shortcuts_popup_description;/*note: text part*/
+
+ Evas_Object *tip_popup;
+ int tip_popup_type;
+
+ /* continous */
+ struct {
+ Evas_Object *layout_edje;
+ Evas_Object *gengrid;
+ Eina_List *item_list;
+ } conti_review;
+
+ /* panorama */
+ Evas_Object *progress_popup;
+ Evas_Object *progress_popup_bar;
+
+ Ecore_Event_Handler *key_up;
+ Ecore_Event_Handler *key_down;
+ Ecore_Event_Handler *mouse_up;
+ Ecore_Event_Handler *mouse_down;
+
+ Ecore_Idler *recording_commit;
+
+ /* Idle handler of capture callback. wh01.cho@samsung.com. 2010-12-15. */
+ Ecore_Idler *still_captured_idle;
+ Ecore_Idler *capture_idle;
+ GList *capture_cb_list;
+
+ Ecore_Timer *rec_icon_updater;
+ Ecore_Timer *rec_time_updater;
+ Ecore_Timer *rec_pause_timer;
+
+ Ecore_Timer *check_af_timer;
+ Ecore_Timer *continuous_shot_timer;
+ Ecore_Timer *shutter_long_tap_timer; /*long tap timer for AF*/
+ gboolean emit_continuous_shutter; /*record: continous have been emitted*/
+ gboolean continuous_shot_by_hard_key; /* continuous shot triggered by hard key */
+
+ Evas_Object *waring_popup;
+ Evas_Object *confirm_popup;
+ int recording_state;
+
+ /* auto shot */
+ Ecore_Idler *auto_shot_idle;
+
+ /* best shot */
+
+ Evas_Object *bestshot_thumbnails_edje;
+
+ /* general */
+ Ecore_Timer *timeout_checker;
+ Ecore_Timer *setting_toolbar_hide_timer;
+
+ Ecore_Timer *gps_animation_timer;
+ Ecore_Timer *battery_animation_timer;
+
+ Ecore_Timer *continuous_af_timer;
+ Ecore_Timer *focus_guide_hide_timer;
+
+ int toolbar_hided;
+
+ bool timer_activated;
+ Ecore_Timer *timer_timer;
+ int timer_count;
+ Evas_Object *timer_icon_edje;
+
+ CamAppData *camapp_handle;
+ ShortCutData *shortcut_data; /*save now moving or touch shortcut*/
+ ShortCutData *swap_data; /*save now covering shortcuts*/
+
+ /* Launching Mode */
+ int launching_mode;
+ /* ug service mime type*/
+ char *service_mime;
+ /* exe args */
+ CamExeArgs *exe_args;
+
+ /* Thread for file register */
+ pthread_t file_reg_thread;
+ pthread_mutex_t file_reg_mutex;
+ pthread_cond_t file_reg_cond;
+ GQueue *file_reg_queue;
+
+ pthread_t camera_start_thread;
+
+ ui_gadget_h camera_ug;
+
+ ui_gadget_h imageviewer_ug;
+ gboolean ug_is_deleting_process; /*note: now ug is deleting process, and run into camera preview process*/
+ service_h imageviewer_service;
+
+ ui_gadget_h location_ug;
+
+ int mm_state;
+ gboolean isGrabed;
+
+ Ecore_Idler *update_thumbnail_idler;
+
+ Ecore_Timer *longpress_timer;
+ gboolean up_key;
+
+ int cancel_key_press;
+ int is_recording;
+
+ gboolean path_in_return;
+ int displayed_setting_popup;
+ int enable_mode_change;
+ int stop_continuous_shot;
+ /*check out low battery */
+ gboolean battery_status;
+ /*check torch light*/
+ gboolean torchlight_on;
+
+ gboolean is_calling;
+
+ int fw_error_type;
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ int play_rec_sound;
+#endif
+ int last_camera_zoom_mode;
+
+ /* guide screen */
+ Evas_Object *shot_mode_guide_popup;
+
+ service_h service_handle;
+ cam_menu_composer* setting_menu_composer;
+ cam_menu_composer* sub_menu_composer;
+
+ /*note: remained_count*/
+ int remained_count;
+ sensor_h sensor;
+ CamErrorType error_type;
+};
+
+
+
+extern void *handle;
+gboolean open_cam_ext_handle();
+void close_cam_ext_handle();
+gboolean cam_toolbar_menu_config_init(void *data, int mode);
+gboolean cam_toolbar_menu_config_update(void *data);
+
+#endif /* __DEF_CAM_H__ */
diff --git a/include/cam_animation.h b/include/cam_animation.h
new file mode 100644
index 0000000..f6a3d92
--- /dev/null
+++ b/include/cam_animation.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam.h"
+#include "cam_app.h"
+#ifdef ENABLE_CAPTURE_ANIMATION
+gboolean cam_app_create_start_animation(void *data);
+gboolean cam_app_create_screennail_and_start_animation(void *user_data);
+gboolean cam_app_create_shutter_screen(void *data);
+void cam_animation_create_rect_image(void *data);
+void cam_app_stop_shutter_animation(void *data);
+
+
+#endif
diff --git a/include/cam_app.h b/include/cam_app.h
new file mode 100755
index 0000000..40d6ee6
--- /dev/null
+++ b/include/cam_app.h
@@ -0,0 +1,498 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_cam_app_H_
+#define __DEF_cam_app_H_
+
+
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <Edje.h>
+#include <utilX.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libintl.h>
+#include <aul.h>
+#include <aul_service.h>
+#include <app.h>
+
+#include "cam_property.h"
+#include "cam_debug.h"
+
+#include <media_content.h>
+
+#define USE_FIFO_THREAD
+#define EFL_TEMP_CODE
+#define REG_THREAD_EXIT "REG_THREAD_EXIT"
+#define RUN_IMAGE_HANDLE "RUN_IMAGE_HANDLE"
+#define UPDATE_THUMBNAIL "UPDATE_THUMBNAIL"
+#define UPDATE_THUMBNAIL_NO_ANI "UPDATE_THUMBNAIL_NO_ANI"
+#define REC_FILE_SAVE_REG "REC_FILE_SAVE_REG"
+
+
+#define USE_VCONF_CAMERA_KEY
+
+/* next define statement will be deleted */
+#define TODO_SURRPORT
+#include <camera.h>
+#define BEAT_UI
+
+
+/*
+ * example
+GValue value = {0, };
+CAM_GVALUE_SET_INT(value, 10);
+*/
+
+#define CAM_GVALUE_SET_INT(g_value/*GValue */, n_value) \
+{ \
+ g_value_init(&g_value, G_TYPE_INT); \
+ g_value_set_int(&g_value, n_value); \
+}
+
+#define CAM_GVALUE_SET_UINT(g_value/*GValue */, n_value) \
+{ \
+ g_value_init(&g_value, G_TYPE_UINT); \
+ g_value_set_uint(&g_value, n_value); \
+}
+
+#define CAM_GVALUE_SET_BOOLEAN(g_value/*GValue */, n_value) \
+{ \
+ g_value_init(&g_value, G_TYPE_BOOLEAN); \
+ g_value_set_boolean(&g_value, n_value); \
+}
+
+#define CAM_GVALUE_SET_STRING(g_value/*GValue */, n_value) \
+{ \
+ g_value_init(&g_value, G_TYPE_STRING); \
+ g_value_set_string(&g_value, n_value); \
+}
+
+#define _EDJ(x) (Evas_Object *)elm_layout_edje_get(x)
+/* guide rect color of panorama shot & smile shot */
+#define UYVY_GUIDE_RECT_GREEN (unsigned long)0xC262C212;
+#define UYVY_GUIDE_RECT_ORANGE (unsigned long)0xA6BAA621;
+#define UYVY_GUIDE_RECT_RED (unsigned long)0x52FA5270;
+#define UYVY_GUIDE_RECT_WHITE (unsigned long)0xFE7FFE80;
+#define YUYV_GUIDE_RECT_GREEN (unsigned long)0x62C212C2;
+#define YUYV_GUIDE_RECT_ORANGE (unsigned long)0xBAA621A6;
+#define YUYV_GUIDE_RECT_RED (unsigned long)0xFA527052;
+#define YUYV_GUIDE_RECT_WHITE (unsigned long)0x7FFE80FE;
+
+enum {
+ NORMAL_BATTERY_STATUS = 0,
+ LOW_BATTERY_WARNING_STATUS,
+ LOW_BATTERY_CRITICAL_STATUS,
+};
+
+enum {
+ DISPLAY_NONE_POPUP = 0,
+ DISPLAY_EDIT_SHOTCUTS_POPUP,
+ DISPLAY_BURST_SHOT_MODE_POPUP,
+ DISPLAY_VOLUME_KEY_POPUP,
+ DISPLAY_SELF_PORTRAIT_POPUP,
+ DISPLAY_FLASH_POPUP,
+ DISPLAY_SHOOTING_MODE_POPUP,
+ DISPLAY_RECORDING_MODE_POPUP,
+ DISPLAY_SCENE_MODE_POPUP,
+ DISPLAY_FOCUS_MODE_POPUP,
+ DISPLAY_TIMER_POPUP,
+ DISPLAY_EFFECTS_POPUP,
+ DISPLAY_PHOTO_RESOLUTION_POPUP,
+ DISPLAY_VIDEO_RESOLUTION_POPUP,
+ DISPLAY_WHITE_BALANCE_POPUP,
+ DISPLAY_ISO_POPUP,
+ DISPLAY_METERING_POPUP,
+ DISPLAY_ANTI_SHAKE_POPUP,
+ DISPLAY_OUTDOOR_VISIBILITY_POPUP,
+ DISPLAY_AUTO_CONTRAST_POPUP,
+ DISPLAY_GUIDELINES_POPUP,
+ DISPLAY_CAPTURE_VOICE_POPUP,
+ DISPLAY_GPS_TAG_POPUP,
+ DISPLAY_SAVE_AS_FLIP,
+ DISPLAY_STORAGE_POPUP,
+ DISPLAY_RESET_POPUP,
+};
+
+enum {
+ CAM_POPUP_RESPONSE_NONE = 0,
+ CAM_POPUP_RESPONSE_TIMEOUT,
+ CAM_POPUP_RESPONSE_OK,
+ CAM_POPUP_RESPONSE_CANCEL,
+ CAM_POPUP_RESPONSE_CLOSE,
+ } ;
+
+typedef enum _CamCaptureMode{
+ CAM_CAPTURE_DEFAULT = 0,
+ CAM_CAPTURE_SINGLE = CAM_CAPTURE_DEFAULT,
+ CAM_CAPTURE_BURST,
+ CAM_CAPTURE_MAX,
+}CamCaptureMode;
+
+typedef enum _CamFileExtention{
+ CAM_FILE_EXTENTION_IMAGE =0,
+ CAM_FILE_EXTENTION_VIDEO,
+}CamFileExtention;
+
+typedef void (*cam_update_view_cb)(void *data);
+
+
+typedef struct _CamApp CamAppData;
+
+struct _CamApp {
+ gint camera_mode;
+ gint shooting_mode;
+ gint recording_mode;
+ gint scene_mode;
+ gint focus_mode;
+ gint photo_resolution;
+ gint video_resolution;
+ gint fps;
+ gint brightness;
+ gint brightness_min;
+ gint brightness_max;
+ gint white_balance;
+ gint iso;
+ gint auto_exposure;
+ gint effect;
+ gint af_mode;
+ gint wdr;
+ gint flash;
+ gint timer;
+ gint image_quality;
+ gint video_quality;
+ gint audio_quality;
+ gint default_preview_width;
+ gint default_preview_height;
+ gint battery_level;
+ gint battery_charging;
+
+ gint gps_level;
+ gint zoom_min;
+ gint zoom_max;
+ gint zoom_mode;
+ gint storage;
+ gint volume_key;
+
+ gint device_type;
+
+ gboolean self_portrait;
+ gboolean outdoor_visibility;
+ gboolean burst_shot;
+ gboolean audio_recording;
+ gboolean anti_shake;
+ gboolean capture_by_voice;
+ gboolean auto_contrast;
+ gboolean guideline;
+ gboolean gps;
+ gboolean review;
+ gboolean save_as_flip;
+ gboolean enable_touch_af;
+ CamTouchAFState touch_af_state;
+
+ int need_gps_popup;
+ int need_gps_on;
+
+ gint image_count;
+ gint shutter_sound;
+ gint size_limit;
+ gint size_limit_type;
+ guint rec_elapsed;
+ guint rec_filesize;
+ guint rec_stop_type;
+
+ guint focus_state;
+
+ /* timeout check */
+ gdouble last_time;
+ gdouble start_time; /* setting toolbar */
+
+ /* continuous */
+ Evas_Object *conti_image;
+ int conti_capture_cnt;
+
+ /* guide rect for px & smile shot */
+ gulong guide_rect_color;
+
+ /* continuous shot */
+ CamContinuousShotData *continuous_shot_data;
+
+ /* post processing */
+ gboolean post_processing;
+
+ /* file */
+ gchar *filename;
+ char *thumbnail_name;
+
+ gboolean zoom_lock;
+
+ int key_lock;
+ int mouse_lock;
+
+ /*set guide rect color */
+ gulong guide_rect_green;
+ gulong guide_rect_orange;
+ gulong guide_rect_red;
+ gulong guide_rect_white; /*store white color of yuyv or uvuv*/
+
+ /*camera callback*/
+ camera_state_changed_cb state_cb;
+ camera_focus_changed_cb focus_cb;
+ camera_error_cb error_cb;
+ camera_capturing_cb capture_cb;
+ camera_capture_completed_cb capture_completed_cb;
+ camera_preview_cb preview_cb;
+ camera_interrupted_cb cam_interrupted_cb;
+ cam_update_view_cb update_view_cb;
+
+ /*recorder callbak*/
+ recorder_recording_status_cb recording_status_cb;
+ recorder_state_changed_cb recording_state_changed_cb;
+ recorder_recording_limit_reached_cb recording_limit_reached_cb;
+ recorder_interrupted_cb rec_interrupted_cb;
+
+ /*face detect callback*/
+ camera_face_detected_cb face_detect_cb;
+
+ CamCaptureMode default_capture_mode;
+
+ /* reserved setting data*/
+ cam_reserved_setting_data reserved_setting_data;
+};
+
+typedef struct _CamVideoRectangle CamVideoRectangle;
+struct _CamVideoRectangle {
+ gint x;
+ gint y;
+ gint w;
+ gint h;
+};
+
+
+/**
+ * Structure of Idler item
+ */
+typedef struct {
+ Ecore_Idler *idler;
+ void *data;
+} CamIdlerItem;
+
+gboolean __cam_single_shot_reg_file(char *file_path);
+
+/* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+Eina_Bool cam_image_capture_handle_idler(void *item);
+Eina_Bool cam_image_capture_handle(void *data);
+Eina_Bool cam_capture_on_recording_handle(void *data);
+
+ /* gboolean cam_xwin_create(void *data); */
+void *cam_appdata_get(void);
+int cam_appdata_init(void *data);
+int cam_appdata_fini(void *data);
+CamAppData *cam_handle_get(void);
+
+gboolean cam_app_start(void *data);
+gboolean cam_app_stop(void *data);
+gboolean cam_app_resume(void *data);
+gboolean cam_app_pause(void *data);
+
+gboolean cam_app_init(void *data);
+
+gboolean cam_handle_create(void *data);
+gboolean cam_handle_free(void *data);
+gboolean cam_handle_init(void *data, int mode);
+/* auto shot for smile , panorama, action shot and etc. */
+Eina_Bool _auto_shot_idle_cb(void *data);
+
+gboolean cam_app_preview_start(void *data);
+gboolean cam_app_preview_stop(void);
+
+gboolean cam_camera_touch_af_press(void *data);
+gboolean cam_camera_key_press(void *data);
+gboolean cam_camera_key_half_press(void *data);
+gboolean cam_camera_key_release(void *data);
+gboolean cam_camera_key_half_release(void *data);
+Eina_Bool cam_volume_key_press(void *data);
+
+Eina_Bool cam_hard_key_up(void *data, int type, void *event_info);
+Eina_Bool cam_hard_key_down(void *data, int type, void *event_info);
+
+Eina_Bool cam_mouse_button_down(void *data, void *event_info);
+Eina_Bool cam_mouse_button_up(void *data, void *event_info);
+
+gboolean cam_handle_value_set(void *data, int type, const GValue *value);
+
+int cam_app_get_latest_mode(void);
+void cam_app_set_config_group(gint mode);
+
+const gchar *cam_app_get_target_path(void);
+gchar *cam_app_get_next_filename(CamFileExtention extention);
+gchar *cam_app_get_last_filename(void);
+
+gboolean cam_callback_init(void *data);
+
+gboolean cam_app_run_media_browser(void *data, gchar *filename);
+/* int cam_quick_waiter(void * data); */
+
+gboolean cam_app_clear_engine_data(void *data, gboolean release);
+
+gboolean cam_app_check_wide_resolution(int id);
+
+gboolean cam_app_is_skip_video_stream(); /* if true , must finish function in stream callback function */
+
+void cam_app_stop_video_stream(); /* This function set skip flag to true, so cam_app_skip_video_stream will be returned true, */
+
+void cam_app_run_video_stream(); /* This function set skip flag to false, for frame process in px or smile shot */
+
+Eina_Bool cam_app_capture_idle_cb(void *yuvdata);
+
+/* progress */
+gboolean cam_app_create_progressbar(void *data);
+gboolean cam_app_set_progressbar_value(void *data, double value);
+gboolean cam_app_set_progressbar_text(void *data, const char *text);
+gboolean cam_app_destroy_progressbar(void *data);
+
+/* timeout */
+gboolean cam_app_timeout_checker_init(void *data);
+gboolean cam_app_timeout_checker_remove(void);
+
+#ifdef USE_FIFO_THREAD
+void *cam_app_FIFO_thread_run(void *data);
+void cam_app_FIFO_thread_exit();
+#endif
+
+gboolean cam_app_create_file_register_thread(void *data);
+void *cam_app_file_register_thread_run(void *data);
+void cam_app_file_register_thread_exit(void *data);
+gboolean cam_app_set_args(void *data, char *args[]);
+gboolean cam_app_init_with_args(void *data);
+
+/* gboolean cam_app_wait_target_state(int target, int wait_time); */
+
+gboolean cam_app_exit(void *data);
+
+gboolean cam_key_grab_init(void *data);
+gboolean cam_key_grab_deinit(void *data);
+
+gboolean cam_app_key_event_init(void *data);
+gboolean cam_app_key_event_deinit(void *data);
+
+gboolean cam_layout_init(void *data);
+gboolean cam_mode_change(void *data, int to_mode);
+gboolean cam_shooting_mode_change(void *data);
+gboolean cam_recording_mode_change(void *data, int rec_mode);
+
+void cam_app_set_progress_value(Evas_Object *pb, double value,
+ const char *message);
+gboolean cam_app_set_vconf_state(int vconf_state);
+gboolean cam_app_get_vconf_state(int *vconf_state);
+
+void cam_app_reset_settings(void *data);
+gboolean cam_toolbar_menu_config_update(void *data);
+
+gboolean cam_app_set_resolution(void *data, int width, int height);
+gboolean cam_app_get_photo_resolution(int *width, int *height);
+gboolean cam_app_reset_resolution(void *data, int width, int height, gboolean force_set);
+int cam_app_get_aenc_bitrate(void *data);
+int cam_app_get_venc_bitrate(void *data, int quality);
+gboolean cam_app_set_video_quality(void *data, int quality);
+gboolean cam_app_set_recording_mode(void *data, int mode);
+gboolean cam_app_set_size_limit(int max_val, int size_limit_type);
+gboolean cam_app_init_attribute(void *data, CamMode mode);
+
+
+
+void cam_app_toggle_indicator(void *data, gboolean hide);
+void cam_app_toggle_toolbar(void *data, gboolean hide);
+void cam_app_get_preview_offset_coordinate(void *data);
+void cam_app_draw_af_box(void *data);
+
+void cam_app_set_blocking_popup();
+void cam_app_free_blocking_popup();
+void cam_app_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
+void cam_app_gps_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
+
+Evas_Object *cam_app_create_win(Evas_Object *parent, const char *name);
+
+Evas_Object *cam_app_load_edj(Evas_Object *parent, const char *file, const char *group);
+
+void cam_app_update_thumbnail();
+
+void cam_set_orient_value(void *data);
+
+
+gboolean cam_app_parse_args(CamExeArgs *args, service_h service);
+
+#ifdef EFL_TEMP_CODE
+void cam_win_transparent_set(void *data);
+#endif
+
+void cam_app_gps_enable_popup(void *data, const char *msg,
+ Eina_Bool (*func) (void *data));
+void cam_app_notice_popup(void *data, const char *msg,
+ void (*func) (void *data,
+ Evas_Object *obj,
+ void *event_info)
+ );
+void cam_app_timeout_notice_response_cb(void *data,
+ Evas_Object *obj,
+ void *event_info);
+void cam_app_lowbattery_close_flash_cb(void *data, Evas_Object *obj,
+ void *event_info);
+gboolean cam_app_run_image_viewer_ug(void *data, char *file_path, gboolean launch_special_view);
+gboolean cam_app_run_location_ug(void *data);
+gboolean cam_image_capture_start(void *data);
+/* update thumbnail to quickview after first launching or return from image viewer */
+void cam_app_update_quickview_icon(void *data);
+/* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+void cam_utils_remove_idler_all(void *data);
+gdouble _get_current_time(void);
+void cam_remove_tmp_file();
+Eina_Bool cam_continuous_af_start(void *data);
+
+Eina_Bool cam_elm_cache_flush();
+void cam_app_mdm_syspopup(void *data);
+gboolean cam_app_lbs_start(void *data);
+gboolean cam_app_lbs_stop(void *data);
+
+Eina_Bool cam_app_focus_guide_create(void *data);
+Eina_Bool cam_app_focus_guide_update(void *data);
+
+Eina_Bool cam_screen_rotate(void *data);
+void cam_app_screen_rotate(void *data);
+
+void cam_app_cancel_timer(void *data);
+
+gboolean cam_condition_check_to_start_camera(void *data);
+
+void cam_app_get_win_size(void* data);
+
+gboolean cam_do_record(void* data);
+gboolean cam_do_capture(void* data);
+
+void cam_reset_focus_mode(void *data);
+
+gboolean cam_set_default_capture_mode(void *data, CamCaptureMode type);
+/* timeout */
+gboolean cam_app_timeout_checker_update();
+gboolean cam_app_hide_progressbar(void *data);
+gint cam_app_get_max_image_size_by_ratio(void *data, int resolution);
+void cam_app_stop_capture(void* data);
+void cam_create_error_popup(void* data);
+
+#endif
diff --git a/include/cam_capacity_type.h b/include/cam_capacity_type.h
new file mode 100755
index 0000000..69c97c2
--- /dev/null
+++ b/include/cam_capacity_type.h
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef _CAM_CAPACITY_TYPE_H_
+#define _CAM_CAPACITY_TYPE_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif // #ifdef __cplusplus
+
+
+// Resolution
+#define CAM_CP_SIZE_176X144 0x00000001
+#define CAM_CP_SIZE_320X240 0x00000002
+#define CAM_CP_SIZE_400X240 0x00000004
+#define CAM_CP_SIZE_640X480 0x00000008
+#define CAM_CP_SIZE_720X480 0x00000010
+#define CAM_CP_SIZE_800X480 0x00000020
+#define CAM_CP_SIZE_800X600 0x00000040
+#define CAM_CP_SIZE_1280X960 0x00000080
+#define CAM_CP_SIZE_1280X720 0x00000100
+#define CAM_CP_SIZE_1392X1392 0x00000200
+#define CAM_CP_SIZE_1600X1200 0x00000400
+#define CAM_CP_SIZE_1920X1080 0x00000800
+#define CAM_CP_SIZE_2048X1152 0x00001000
+#define CAM_CP_SIZE_2048X1536 0x00002000
+#define CAM_CP_SIZE_2800X1920 0x00004000
+#define CAM_CP_SIZE_2560X1440 0x00008000
+#define CAM_CP_SIZE_2560X1536 0x00010000
+#define CAM_CP_SIZE_2560X1920 0x00020000
+#define CAM_CP_SIZE_3264X1836 0x00040000
+#define CAM_CP_SIZE_3264X1960 0x00080000
+#define CAM_CP_SIZE_3264X2176 0x00100000
+#define CAM_CP_SIZE_3264X2448 0x00200000
+
+// White balance
+#define CAM_CP_WB_AUTO 0x00000001
+#define CAM_CP_WB_DAYLIGHT 0x00000002
+#define CAM_CP_WB_INCANDESCENT 0x00000004
+#define CAM_CP_WB_FLUORESCENT 0x00000008
+#define CAM_CP_WB_CLOUDY 0x00000010
+#define CAM_CP_WB_CUSTOM 0x00000020
+#define CAM_CP_WB_SHADE 0x00000040
+#define CAM_CP_WB_FLASH 0x00000080
+#define CAM_CP_WB_HORIZON 0x00000100
+
+// Scene mode
+#define CAM_CP_SCENE_MODE_AUTO 0x00000001
+#define CAM_CP_SCENE_MODE_PORTRAIT 0x00000002
+#define CAM_CP_SCENE_MODE_SPORTS 0x00000004
+#define CAM_CP_SCENE_MODE_PARTY_AND_INDOOR 0x00000008
+#define CAM_CP_SCENE_MODE_BEACH_AND_SNOW 0x00000010
+#define CAM_CP_SCENE_MODE_SUNSET 0x00000020
+#define CAM_CP_SCENE_MODE_DUSK_AND_DAWN 0x00000040
+#define CAM_CP_SCENE_MODE_NIGHTSHOT 0x00000080
+#define CAM_CP_SCENE_MODE_FALLCOLOR 0x00000100
+#define CAM_CP_SCENE_MODE_FIREWORK 0x00000200
+#define CAM_CP_SCENE_MODE_CANDLE_LIGHT 0x00000400
+#define CAM_CP_SCENE_MODE_BACK_LIGHT 0x00000800
+#define CAM_CP_SCENE_MODE_LANDSCAPE 0x00001000
+#define CAM_CP_SCENE_MODE_TEXT 0x00002000
+#define CAM_CP_SCENE_MODE_SHOW_WINDOW 0x00004000
+
+// EFFECT
+#define CAM_CP_EFFECT_NONE 0x00000001
+#define CAM_CP_EFFECT_SEPIA 0x00000002
+#define CAM_CP_EFFECT_NEGATIVE 0x00000004
+#define CAM_CP_EFFECT_MONO 0x00000008
+#define CAM_CP_EFFECT_CARTOON 0x00000010
+#define CAM_CP_EFFECT_WASHED 0x00000020
+#define CAM_CP_EFFECT_SELECTIVE_RED_YELLOW 0x00000040
+#define CAM_CP_EFFECT_SELECTIVE_BLUE 0x00000080
+#define CAM_CP_EFFECT_SELECTIVE_GREEN 0x00000100
+#define CAM_CP_EFFECT_SOLAR 0x00000200
+#define CAM_CP_EFFECT_POSTERIZATION 0x00000400
+#define CAM_CP_EFFECT_VINTAGE_WARM 0x00000800
+#define CAM_CP_EFFECT_VINTAGE_COLD 0x00001000
+
+
+// ISO
+#define CAM_CP_ISO_AUTO 0x00000001
+#define CAM_CP_ISO_50 0x00000002
+#define CAM_CP_ISO_100 0x00000004
+#define CAM_CP_ISO_200 0x00000008
+#define CAM_CP_ISO_400 0x00000010
+#define CAM_CP_ISO_800 0x00000020
+#define CAM_CP_ISO_1600 0x00000040
+#define CAM_CP_ISO_3200 0x00000080
+
+// FLASH
+#define CAM_CP_FLASH_AUTO 0x00000001
+#define CAM_CP_FLASH_ON 0x00000002
+#define CAM_CP_FLASH_OFF 0x00000004
+#define CAM_CP_FLASH_REDEYE 0x00000008
+#define CAM_CP_FLASH_SLOW_SYNC 0x00000010
+#define CAM_CP_FLASH_FRONT_CURTAIN 0x00000020
+#define CAM_CP_FLASH_REAR_CURTAIN 0x00000040
+#define CAM_CP_FLASH_PERMANENT 0x00000080
+
+// METERING
+#define CAM_CP_METERING_MATRIX 0x00000001
+#define CAM_CP_METERING_SPOT 0x00000002
+#define CAM_CP_METERING_CENTERWEIGHT 0x00000004
+
+// SHOT MODE
+#define CAM_CP_SHOT_MODE_SINGLE 0x00000001
+
+// REC MODE
+#define CAM_CP_REC_MODE_NORMAL 0x00000001
+#define CAM_CP_REC_MODE_MMS 0x00000002
+#define CAM_CP_REC_MODE_SLOW_MOTION 0x00000004
+#define CAM_CP_REC_MODE_FAST_MOTION 0x00000008
+
+// FOCUS
+#define CAM_CP_FOCUS_NONE 0x00000001
+#define CAM_CP_FOCUS_AUTO_FOCUS 0x00000002
+#define CAM_CP_FOCUS_CAF 0x00000004
+#define CAM_CP_FOCUS_FACE_DETECTION 0x00000008
+#define CAM_CP_FOCUS_MACRO 0x00000010
+#define CAM_CP_FOCUS_TOUCH_AF 0x00000020
+
+
+// FPS
+#define CAM_CP_FPS_AUTO 0x00000001
+#define CAM_CP_FPS_8 0x00000002
+#define CAM_CP_FPS_15 0x00000004
+#define CAM_CP_FPS_24 0x00000008
+#define CAM_CP_FPS_25 0x00000010
+#define CAM_CP_FPS_30 0x00000020
+#define CAM_CP_FPS_60 0x00000040
+#define CAM_CP_FPS_120 0x00000080
+
+// FUNCTION
+#define CAM_CP_FUNC_BURST_SHOT_MODE 0x00000001
+#define CAM_CP_FUNC_SELF_MODE 0x00000002
+#define CAM_CP_FUNC_FLASH_MODE 0x00000004
+#define CAM_CP_FUNC_SHOT_MODE 0x00000008
+#define CAM_CP_FUNC_REC_MODE 0x00000010
+#define CAM_CP_FUNC_SCENE_MODE 0x00000020
+#define CAM_CP_FUNC_EXPOSURE 0x00000040
+#define CAM_CP_FUNC_FOCUS_MODE 0x00000080
+#define CAM_CP_FUNC_EFFECT_MODE 0x00000100
+#define CAM_CP_FUNC_CAM_RESOLUTION 0x00000200
+#define CAM_CP_FUNC_REC_RESOLUTION 0x00000400
+#define CAM_CP_FUNC_WHITE_BALANCE 0x00000800
+#define CAM_CP_FUNC_ISO 0x00001000
+#define CAM_CP_FUNC_METERING 0x00002000
+#define CAM_CP_FUNC_CAM_ANS 0x00004000
+#define CAM_CP_FUNC_REC_ANS 0x00008000
+#define CAM_CP_FUNC_OUTDOOR 0x00010000
+#define CAM_CP_FUNC_AUTO_CONTRAST 0x00020000
+#define CAM_CP_FUNC_CAPTURE_VOICE 0x00040000
+#define CAM_CP_FUNC_GPS 0x00080000
+#define CAM_CP_FUNC_STORAGE 0x00100000
+#define CAM_CP_FUNC_ZOOM 0x00200000
+#define CAM_CP_FUNC_BRIGHTNESS 0x00400000
+#define CAM_CP_FUNC_FPS 0x00800000
+#define CAM_CP_FUNC_SAVE_AS_FLIP 0x01000000
+
+#define CAM_CP_FUNC_COUNT 25
+// LCD
+#define CAM_CP_LCD_NORMAL 0x00000001
+#define CAM_CP_LCD_WIDE 0x00000002
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // _CAM_CAPACITY_TYPE_H_
+
+
diff --git a/include/cam_config.h b/include/cam_config.h
new file mode 100755
index 0000000..8c3b43f
--- /dev/null
+++ b/include/cam_config.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_CONFIG_H_
+#define _CAM_CONFIG_H_
+
+#include <glib.h>
+/*
+#include "cam_property.h"
+*/
+#define CONFIG_PATH "/opt/usr/ug/data/ug-camera-efl/.camera.ini"
+
+#define EXTERNAL_MODE_SAVE_PATH "/tmp"
+
+typedef enum {
+ CAM_CONFIG_TYPE_COMMON = 0,
+ CAM_CONFIG_TYPE_PREVIEW,
+ CAM_CONFIG_TYPE_SHORTCUTS,
+ CAM_CONFIG_MAX,
+} CamConfigType;
+
+gboolean
+cam_config_set_group_name(CamConfigType config_type,
+ const gchar *set_group_name);
+
+gboolean cam_config_init(GError **error);
+
+void cam_config_finalize(void);
+
+void cam_config_set_group(const gchar *group_name);
+
+const gchar *cam_config_get_group(void);
+
+void cam_config_save(void);
+
+void cam_config_set_control(gboolean enable);
+
+void cam_config_set_int(const gchar *key, int nval);
+
+void cam_config_set_string(const gchar *key, const gchar *strval);
+
+void cam_config_set_boolean(const gchar *key, gboolean bval);
+
+int cam_config_get_int(const gchar *key, int default_value);
+
+gchar *cam_config_get_string(const gchar *key, const gchar *default_value);
+
+gboolean cam_config_get_boolean(const gchar *key, gboolean default_value);
+
+void cam_config_set_int_by_type(CamConfigType config_type, const gchar *key,
+ int nval);
+
+void cam_config_set_string_by_type(CamConfigType config_type, const gchar *key,
+ const gchar *strval);
+
+void cam_config_set_boolean_by_type(CamConfigType config_type,
+ const gchar *key, gboolean bval);
+
+int cam_config_get_int_by_type(CamConfigType config_type, const gchar *key,
+ int default_value);
+
+gchar *cam_config_get_string_by_type(CamConfigType config_type,
+ const gchar *key,
+ const gchar *default_value);
+
+gboolean cam_config_get_boolean_by_type(CamConfigType config_type,
+ const gchar *key,
+ gboolean default_value);
+
+#endif /* _CAM_CONFIG_H_ */
diff --git a/include/cam_continuous_shot.h b/include/cam_continuous_shot.h
new file mode 100755
index 0000000..acffc3b
--- /dev/null
+++ b/include/cam_continuous_shot.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_cam_continuous_shot_H_
+#define __DEF_cam_continuous_shot_H_
+
+#include "cam.h"
+
+#define SAVE_THREAD_EXIT "SAVE_THREAD_EXIT"
+#define SAVE_THREAD_FINISH "SAVE_THREAD_FINISH"
+
+
+typedef struct __FILE_SAVE_INFO {
+ void *buffer;
+ unsigned int buf_size;
+ char *filename;
+ char *cmd;
+} File_Save_Info;
+
+
+void cam_continuous_shot_data_free(void *data);
+void cam_continuous_shot_capture_start(void *data);
+void cam_continuous_shot_capture_callback(camera_image_data_s* image,
+ camera_image_data_s* postview,
+ camera_image_data_s* thumbnail,
+ void *user_data);
+
+gboolean cam_continuous_shot_reg_file(int shot_num, char *file_path[]);
+gboolean cam_continuous_shot_create_file_save_thread(void *data);
+void cam_continuous_shot_file_save_thread_exit(void *data);
+void cam_continuous_shot_update_progress_value(void *data);
+void cam_continuous_shot_finish_save_image();
+
+
+#endif
diff --git a/include/cam_debug.h b/include/cam_debug.h
new file mode 100755
index 0000000..a279c08
--- /dev/null
+++ b/include/cam_debug.h
@@ -0,0 +1,296 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_DEBUG_H_
+#define _CAM_DEBUG_H_
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+
+G_BEGIN_DECLS
+/*
+#define LOG_TO_FILE
+#define ENABLE_TIME_MEASURE
+#define TRACE_OBJECT
+#define ENABLE_TIME_STAMP
+*/
+#define DEBUG_MESSAGE_ON
+#define USE_DLOG_MESSAGE /* for dlog */
+#define TRACE_FENTER_LEAVE
+#define ENABLE_CHECK_MEMORY_OCCUPIED_SIZE
+/* Domain */
+#define LOG_UI "UI" /* about UI, EFL, */
+#define LOG_MM "MM" /* about MSL, */
+#define LOG_FILE "FILE" /* about file */
+#define LOG_SND "SOUND"
+#define LOG_SYS "SYSTEM"
+#define LOG_FWK "FRAMEWROK"
+#define LOG_CONFIG "CONFIG"
+#define LOG_CAM "CAMERA" /* #define LOG_CAMERA 0x00000001 */
+#ifdef DEBUG_MESSAGE_ON
+#define GET_FILE_NAME(p, f) \
+ do { \
+ p = strrchr(f, '/'); \
+ if (p)\
+ p++;\
+ else \
+ p = f;\
+ } while (0)
+/*
+#ifdef ENABLE_CHECK_MEMORY_STATUS
+#define CHECK_MEMORY_STATS(s) fprintf(stderr, "[%s]: %s\n", s , __FUNCTION__); \
+ malloc_stats(); \
+ fprintf(stderr, "------------------\n")
+#else
+#define CHECK_MEMORY_STATS(s) G_STMT_START{ (void)0; }G_STMT_END
+#endif
+*/
+#ifdef ENABLE_CHECK_MEMORY_OCCUPIED_SIZE
+#include <malloc.h>
+struct mallinfo g_mem_info;
+#endif
+
+#ifdef USE_DLOG_MESSAGE
+
+#include <dlog.h>
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "cam-app"
+
+#define DEBUG_TRACE(fmt, arg...) do { if (TRUE) { \
+ LOGD("[%s : %s : %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg); \
+ } } while (0)
+
+#define debug_msg(domain, fmt, arg...) LOGD("[%s : %s : %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg)
+#define cam_debug(domain, fmt, arg...) LOGD("[%s : %s : %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg)
+#define cam_info(domain, fmt, arg...) LOGI("[%s : %s : %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg)
+#define cam_message(domain, fmt, arg...) LOGI("[%s : %s : %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg)
+#define cam_warning(domain, fmt, arg...) LOGW("[%s : %s : %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg)
+#define cam_critical(domain, fmt, arg...) LOGE("[%s : %s: %d] "fmt"\n", __FILE__, __FUNCTION__, __LINE__, ##arg)
+
+#ifdef ENABLE_CHECK_MEMORY_OCCUPIED_SIZE
+#define CHECK_MEMORY_STATS(s) g_mem_info = mallinfo(); \
+ LOGD("\n\n[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.hblkhd + (g_mem_info).uordblks)
+#endif
+/*
+ dlog(MID_CAMERA, DLOG_VERBOSE, "\n\n[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.arena); \
+ dlog(MID_CAMERA, DLOG_VERBOSE, "[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.ordblks); \
+ dlog(MID_CAMERA, DLOG_VERBOSE, "[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.hblks); \
+ dlog(MID_CAMERA, DLOG_VERBOSE, "[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.hblkhd); \
+ dlog(MID_CAMERA, DLOG_VERBOSE, "[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.uordblks); \
+ dlog(MID_CAMERA, DLOG_VERBOSE, "[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.fordblks); \
+ dlog(MID_CAMERA, DLOG_VERBOSE, "[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.keepcost); \
+*/
+
+#else /* #ifdef USE_DLOG_MESSAGE */
+
+void
+cam_log_func(const gchar *_domain, GLogLevelFlags log_level,
+ const char *file_name, const char *func, int line_number,
+ const char *format, ...);
+
+#define debug_msg(category, fmt, arg...) cam_log_func(category, G_LOG_LEVEL_DEBUG, __FILE__, __func__, __LINE__, fmt, ##arg)
+#define cam_debug(category, fmt, arg...) cam_log_func(category, G_LOG_LEVEL_DEBUG, __FILE__, __func__, __LINE__, fmt, ##arg)
+#define cam_info(category, fmt, arg...) cam_log_func(category, G_LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, fmt, ##arg)
+#define cam_message(category, fmt, arg...) cam_log_func(category, G_LOG_LEVEL_MESSAGE, __FILE__, __func__, __LINE__, fmt, ##arg)
+#define cam_warning(category, fmt, arg...) cam_log_func(category, G_LOG_LEVEL_WARNING, __FILE__, __func__, __LINE__, fmt, ##arg)
+#define cam_critical(category, fmt, arg...) cam_log_func(category, G_LOG_LEVEL_CRITICAL, __FILE__, __func__, __LINE__, fmt, ##arg)
+
+#ifdef ENABLE_CHECK_MEMORY_OCCUPIED_SIZE
+#define CHECK_MEMORY_STATS(s) g_mem_info = mallinfo(); \
+ cam_debug(LOG_SYS, "\n\n[[[[[[[[[[ %s : mem size is %d ]]]]]]]]]]\n", s, g_mem_info.hblkhd + (g_mem_info).uordblks)
+#endif
+
+#endif /* DEBUG MESSAGE ON */
+
+#else
+#define debug_msg(domain, fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define cam_debug(domain, fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define cam_info(domain, fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define cam_message(domain, fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define cam_warning(domain, fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define cam_critical(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#ifdef ENABLE_CHECK_MEMORY_OCCUPIED_SIZE
+#define CHECK_MEMORY_STATS(s) G_STMT_START{ (void)0; } G_STMT_END
+#endif
+#endif /* #ifdef DEBUG_MESSAGE_ON */
+#define warn_msg cam_warning
+#define critical_msg cam_critical
+/* Trace function enter/leave
+ */
+#ifdef TRACE_FENTER_LEAVE
+#define debug_fenter(domain) cam_debug(domain, " started");
+#define debug_fleave(domain) cam_debug(domain, " leaved");
+#else
+#define debug_fenter(domain) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_fleave(domain) G_STMT_START{ (void)0; } G_STMT_END
+#endif
+#define cam_ret_if(expr) do { \
+ if (expr) { \
+ return; \
+ } \
+} while (0)
+#define cam_retv_if(expr, val) do { \
+ if (expr) { \
+ return (val); \
+ } \
+} while (0)
+#define cam_retm_if(expr, fmt, arg...) do { \
+ if (expr) { \
+ cam_warning(LOG_UI, fmt, ##arg); \
+ return; \
+ } \
+} while (0)
+#define cam_retvm_if(expr, val, fmt, arg...) do { \
+ if (expr) { \
+ cam_warning(LOG_UI, fmt, ##arg); \
+ return (val); \
+ } \
+} while (0)
+/* Trace module elapsed time
+ */
+#ifdef ENABLE_TIME_MEASURE
+ typedef enum {
+ NORMAL_MEASURE_TYPE = 0,
+ APP_LAUNCHING_TYPE,
+ CAPTURE_MEASURE_TYPE,
+ REGISTER_MEASURE_TYPE,
+ REC_START_MEASURE_TYPE,
+ REC_COMMIT_MEASURE_TYPE,
+ REVIEW_MEASURE_TYPE,
+ AUTO_FOCUSE_TIME,
+ MEASURE_TYPE_MAX,
+} cam_time_meature_type;
+
+void debug_measure_start(cam_time_meature_type meature_type,
+ const gchar *format, ...);
+void debug_measure_stop(cam_time_meature_type meature_type,
+ const gchar *format, ...);
+void debug_measure_init();
+void debug_measure_close();
+
+void debug_time_measure_start(const gchar *format, ...);
+void debug_time_measure_stop(void);
+void debug_time_measure_log(const gchar *format, ...);
+
+#define debug_time_measure_fenter(fmt, arg...) debug_time_measure_log("%s(). LINE :%d ", __FUNCTION__, __LINE__, ##arg)
+#define debug_time_measure_fleave(fmt, arg...) debug_time_measure_log("%s(). LINE :%d", __FUNCTION__, __LINE__, ##arg)
+
+#else
+#define debug_time_measure_start(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_time_measure_stop() G_STMT_START{ (void)0; } G_STMT_END
+#define debug_time_measure_log(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_time_measure_fenter(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_time_measure_fleave(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_measure_start(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_measure_stop(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_measure_init() G_STMT_START{ (void)0; } G_STMT_END
+#define debug_measure_close() G_STMT_START{ (void)0; } G_STMT_END
+#endif /*ENABLE_TIME_MEASURE */
+#ifdef ENABLE_TIME_STAMP
+#include <sys/time.h>
+#include <linux/unistd.h>
+ enum {
+ CAM_MSG_COLOR_DEFAULT = 0,
+ CAM_MSG_COLOR_BLACK = 30,
+ CAM_MSG_COLOR_RED = 31,
+ CAM_MSG_COLOR_GREEN = 32,
+ CAM_MSG_COLOR_YELLOW = 33,
+ CAM_MSG_COLOR_BLUE = 34,
+ CAM_MSG_COLOR_MAGENTA = 35,
+ CAM_MSG_COLOR_CYAN = 36,
+ CAM_MSG_COLOR_WHITE = 37,
+};
+
+static long s_time_sec = 0L;
+static long s_time_usec = 0L;
+static struct timeval s_cur_time;
+
+static pid_t gettid(void)
+{
+ return syscall(__NR_gettid);
+}
+
+#define debug_time_reset(fmt, arg...) \
+ do { \
+ struct timeval time; \
+ gettimeofday(&time, NULL); \
+ s_cur_time = time; \
+ s_time_sec = time.tv_sec; \
+ s_time_usec = time.tv_usec; \
+ debug_color(CAM_MSG_COLOR_RED, "[TIMER],<%03ld.%03ld>, \t000.000 sec (reset timer)\t000.000\t[%-20.20s:%4d]" fmt "\n", s_time_sec, s_time_usec, __FUNCTION__, __LINE__, ##arg); \
+ } while (0)
+
+#define debug_time_stamp(fmt, arg...) \
+ do { \
+ struct timeval time; \
+ long sec, usec; \
+ long a_sec, a_usec; \
+ gettimeofday(&time, NULL); \
+ a_sec = time.tv_sec - s_cur_time.tv_sec; \
+ if (s_cur_time.tv_usec > time.tv_usec) { \
+ a_usec = 1000000L - s_cur_time.tv_usec + time.tv_usec; \
+ a_sec--; \
+ } else { \
+ a_usec = time.tv_usec - s_cur_time.tv_usec; \
+ } \
+ s_cur_time = time; \
+ sec = time.tv_sec - s_time_sec; \
+ if (s_time_usec > time.tv_usec) { \
+ usec = 1000000L - s_time_usec + time.tv_usec; \
+ sec--; \
+ } else { \
+ usec = time.tv_usec - s_time_usec; \
+ } \
+ debug_color(CAM_MSG_COLOR_RED, "[TIMER],<%03ld.%03ld>, %03ld.%03ld sec (time stamp) %03ld.%03ld\t[%-20.20s:%4d]" fmt "\n", time.tv_sec, time.tv_usec, sec, usec / 1000, a_sec, a_usec/1000, __FUNCTION__, __LINE__, ##arg); \
+ } while (0)
+
+#define debug_time_stamp_simple(fmt, arg...) \
+ do { \
+ struct timeval time; \
+ gettimeofday(&time, NULL); \
+ debug_color(CAM_MSG_COLOR_RED, "[TIMER],<%03ld.%03ld> (reset timer), [%-20.20s:%4d], TID=%d" fmt "\n", time.tv_sec, time.tv_usec, __FUNCTION__, __LINE__, gettid(), ##arg); \
+ } while (0)
+
+#define debug_color(color, fmt, arg...) \
+ do { \
+ fprintf(stderr, "\033[%dm", color); \
+ fprintf(stderr, fmt, ##arg); \
+ fprintf(stderr, "\033[%dm", CAM_MSG_COLOR_DEFAULT); \
+ \
+ } while (0)
+#else
+/*
+ * NO PROFILING MESSAGE
+ */
+#define debug_time_reset(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_time_stamp(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#define debug_time_stamp_simple(fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#endif
+/* Trace GObject deletion
+ */
+#ifdef TRACE_OBJECT
+void cam_debug_trace_object(gpointer obj, const gchar *format, ...);
+#else
+#define cam_debug_trace_object(obj, fmt, arg...) G_STMT_START{ (void)0; } G_STMT_END
+#endif
+#define cam_debug_trace_alloc cam_debug_trace_object
+ G_END_DECLS
+#endif /*_CAM_DEBUG_H_*/
diff --git a/include/cam_device_capacity.h b/include/cam_device_capacity.h
new file mode 100755
index 0000000..39833da
--- /dev/null
+++ b/include/cam_device_capacity.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CAM_DEVICE_CAPACITY_H_
+#define _CAM_DEVICE_CAPACITY_H_
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+void ResetCaps();
+
+void GetCamDevFuncCaps(unsigned int *eType, void *user_data);
+
+bool GetCamDevCamResolutionCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevRecResolutionCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevFocusCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevEffectCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevWBCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevSceneModeCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevMeteringCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevISOCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevFlashCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDebFpsCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevShotModeCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevRecModeCaps(unsigned int *uCapacity, void *user_data);
+bool GetCamDevZoomCaps(int *min, int *max);
+bool GetCamDevEvCaps(int *min, int *max);
+bool GetCamDevBrCaps(int *min, int *max);
+
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/include/cam_error.h b/include/cam_error.h
new file mode 100755
index 0000000..09ad3e2
--- /dev/null
+++ b/include/cam_error.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <glib.h>
+#include <errno.h>
+
+#ifndef CAMERROR_H_
+#define CAMERROR_H_
+
+#define CAM_ERROR_CLASS_COMMON 0x90000000
+#define CAM_ERROR_CLASS_SYSTEM 0x90000100
+#define CAM_ERROR_CLASS_FILE 0x90000200
+#define CAM_ERROR_CLASS_MMCAMCORDER 0x90000400
+#define CAM_ERROR_CLASS_MMPLAYER 0x90000800
+#define CAM_ERROR_CLASS_MISC 0x90001600
+
+enum {
+ CAM_ERROR_NONE = 0,
+
+ CAM_ERROR_BATTERY_NOT_ENOUGH = CAM_ERROR_CLASS_SYSTEM,
+ CAM_ERROR_MULTIPLE_INSTANCE,
+ CAM_ERROR_ENTER_REJECTED,
+ CAM_ERROR_DEVICE,
+ CAM_ERROR_STORAGE_UNAVAILABLE,
+ CAM_ERROR_STORAGE_INSUFFICIENT,
+
+ CAM_ERROR_FILE = CAM_ERROR_CLASS_FILE,
+ CAM_ERROR_FILE_MANAGER,
+ CAM_ERROR_FILE_MOVE_FAILED,
+ CAM_ERROR_FILE_REGISTER_FAILED,
+ CAM_ERROR_FILE_NOT_EXISTS,
+ CAM_ERROR_FILE_RENAME_FAILED,
+ CAM_ERROR_FILE_DELETE_FAILED,
+
+ CAM_ERROR_MM_CAMCORDER = CAM_ERROR_CLASS_MMCAMCORDER,
+ CAM_ERROR_AUTO_FOCUSING,
+ CAM_ERROR_MISC = CAM_ERROR_CLASS_MISC,
+ CAM_ERROR_QUERY_DB,
+ CAM_ERROR_PANORAMA_LIB,
+ CAM_ERROR_NCR_LIB,
+ CAM_ERROR_NORMAL,
+ CAM_ERROR_DEVICE_OFF,
+ CAM_ERROR_MEMORY,
+ CAM_ERROR_UNKNOWN,
+};
+
+#define CAMERA_ERROR_QUARK g_quark_from_static_string("camera-error-quark")
+
+#define cam_error_new(code, fmt, arg...) g_error_new(CAMERA_ERROR_QUARK, code, fmt, ##arg)
+#define cam_error_new_literal(code, msg) g_error_new_literal(CAMERA_ERROR_QUARK, code, msg)
+#define cam_set_error(error, code, fmt, arg...) g_set_error(error, CAMERA_ERROR_QUARK, code, fmt, ##arg)
+
+#endif /* CAMERROR_H_ */
diff --git a/include/cam_exif_info.h b/include/cam_exif_info.h
new file mode 100644
index 0000000..0bdf820
--- /dev/null
+++ b/include/cam_exif_info.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __CAM_EXIF_INFO_H__
+#define __CAM_EXIF_INFO_H__
+
+#include "glib.h"
+#include <libexif/exif-data.h>
+
+
+
+ExifData* cam_exif_get_exif_from_data(unsigned char *data, unsigned int data_size);
+gboolean cam_exif_set_entry(ExifData *in_exif, ExifIfd ifd, ExifTag tag, ExifFormat format, unsigned long components, unsigned char *data);
+gboolean cam_exif_get_data_from_exif(unsigned char *out_data, unsigned int out_size, ExifData *in_exif);
+gboolean cam_exif_change_thumb_info(unsigned char *exif_raw, unsigned int exif_raw_size, unsigned char *thumb_data
+ , int thumb_w, int thumb_h, unsigned int thumb_size);
+gboolean cam_exif_write_to_jpeg(unsigned char *in_data, unsigned int in_size, unsigned char *exif_data, unsigned int exif_size
+ ,unsigned char **out_data, unsigned int *out_size);
+
+#endif
+
diff --git a/include/cam_face_detection_focus.h b/include/cam_face_detection_focus.h
new file mode 100644
index 0000000..218f5aa
--- /dev/null
+++ b/include/cam_face_detection_focus.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_FACE_DETECTION_FOCUS_H_
+#define _CAM_FACE_DETECTION_FOCUS_H_
+#include "cam_property.h"
+#include "camera_utils.h"
+
+
+#define MAX_FACE_COUNT 10
+typedef struct _cam_face_info CamFaceInfo;
+
+struct _cam_face_info {
+ camera_detected_face_s faces[MAX_FACE_COUNT];
+ int count;
+
+};
+
+
+/**
+ * @brief called by preview callback function
+ * @param[in] preview_frame the camera preview image stream
+ * @param[in] user_data user_data set for preview callback
+ * @return void
+ */
+void cam_face_detection_focus_start_stream(camera_preview_data_s *preview_frame, void *user_data);
+/**
+ * @brief init face deteciton pthread variables
+ * @return void
+ */
+gboolean cam_face_detection_focus_init(void);
+/**
+ * @brief delete face deteciton pthread variables
+ * @return void
+ */
+gboolean cam_face_detection_focus_finish(void);
+/**
+ * @brief called while face detected
+ * @param[in] faces camera_detected_face_s array
+ * @param[in] count face count
+ * @param[in] user_data user_data set for preview callback
+ * @return void
+ */
+void cam_face_detection_focus_face_detected_cb(camera_detected_face_s *faces, int count, void *user_data);
+/**
+ * @brief in face detection mode, set mouse click coordinate for cacluate the faceid by xy
+ * @param[in] x mouse x when doulbe click
+ * @param[in] y mouse y when doulbe click
+ * @return void
+ */
+void cam_common_set_mouse_double_click_xy(Evas_Coord x, Evas_Coord y);
+
+void cam_face_detection_reset();
+
+#endif /* _CAM_FACE_DETECTION_FOCUS_H_ */
+
diff --git a/include/cam_file.h b/include/cam_file.h
new file mode 100755
index 0000000..605eb66
--- /dev/null
+++ b/include/cam_file.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef CAM_FILE_H_
+#define CAM_FILE_H_
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include "cam.h"
+#define INTERNAL_FILE_PATH "/opt/usr/media/Camera"
+#define EXTERNAL_FILE_PATH "/opt/storage/sdcard/Camera"
+
+typedef enum {
+ MEDIA_TYPE_JPEG,
+ MEDIA_TYPE_MP4,
+ MEDIA_TYPE_3GP,
+ MEDIA_TYPE_LAST
+} media_type_t;
+
+gboolean cam_file_init(GError **error);
+void cam_file_finalize();
+gboolean cam_file_get_size(const char *filename, guint64 *size);
+gboolean cam_file_check_exists(gchar *filename);
+gboolean cam_file_get_size(const char *filename, guint64 *size);
+
+gboolean cam_file_register(const char *filename, GError **error);
+gboolean cam_file_register_to_DCF(const char *filename, GError **error);
+gboolean cam_file_delete(const gchar *filename, GError **error);
+gboolean cam_file_rename(const gchar *filename, const gchar *new_name,
+ GError **error);
+const gchar *cam_file_get_dcim_path(void);
+const gchar *cam_file_get_internal_image_path(void);
+const gchar *cam_file_get_internal_video_path(void);
+const gchar *cam_file_get_external_image_path(void);
+const gchar *cam_file_get_external_video_path(void);
+
+gchar *cam_file_get_next_filename_for_multishot(const gchar *storage_root, const gchar *first_file_name, const gint shot_num, const gchar *suffix);
+
+gchar *cam_file_get_next_filename(const gchar *storage_root,
+ const gchar *prefix_string,
+ const gchar *suffix);
+gchar *cam_file_get_next_dcim_filename(const gchar *storage_root, media_type_t media_type);
+/**
+ * @brief get latest file path in @storage_root folder
+ * @param[in] data camera appdata structure
+ * @param[in] storage_root folder path (full path)
+ * @return Operation result
+ * @retval NOT NULL lateset file path in @storage_root
+ * @retval NULL Error or no file
+ */
+gchar *cam_file_get_last_file_path (void *data, const gchar *storage_root);
+/**
+ * @brief get latest file path folder id in @storage_root folder,folder id is for media-content api
+ * @param[in] storage_root folder path (full path)
+ * @return Operation result
+ * @retval NOT NULL folder id for @storage_root
+ * @retval NULL Error
+ */
+char *cam_file_get_cam_storage_folder_id(const gchar *storage_root);
+/**
+ * @brief get thumbnail full path of @file_path,folder id is for media-content api
+ * @param[in] file_path file path (full path)
+ * @param[out] file_path thumbnail_path of @file_path (full path)
+ * @return Operation result
+ * @retval TRUE succeed
+ * @retval FALSE Error
+ */
+gboolean cam_file_get_cam_file_thumbnail_path(const gchar *file_path, gchar **thumbnail_path);
+
+gboolean cam_check_dir();
+
+
+#endif
diff --git a/include/cam_lbs.h b/include/cam_lbs.h
new file mode 100755
index 0000000..122b2d4
--- /dev/null
+++ b/include/cam_lbs.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_cam_lbs_H_
+#define __DEF_cam_lbs_H_
+
+#include <glib.h>
+
+typedef enum {
+ CAM_LBS_STATE_DISABLE = 0, /* disable or stop */
+ CAM_LBS_STATE_SERVICE_START, /* start */
+ CAM_LBS_STATE_SERVICE_ENABLE, /* enable service */
+ CAM_LBS_STATE_ACCURANCY_ROUGH, /* rough, if < LOCATION_ACCURACY_LEVEL_STREET */
+ CAM_LBS_STATE_ACCURANCY_DETAILED, /* detail, if >= LOCATION_ACCURACY_LEVEL_STREET */
+ CAM_LBS_STATE_NUM
+} CamLBSState;
+
+gboolean cam_lbs_init(void);
+gboolean cam_lbs_finialize(void);
+gboolean cam_lbs_start(void (*lbs_update_cb) (void *data, int lbs_state),
+ void *data);
+gboolean cam_lbs_stop(void);
+
+gboolean cam_lbs_is_valid(void);
+
+gboolean cam_lbs_get_current_position(double *longitude, double *latitude,
+ double *altitude, time_t *time_stamp);
+gboolean cam_lbs_get_address(char *address, int max_length);
+
+int cam_lbs_get_state(void);
+
+#endif /* __DEF_cam_lbs_H_ */
diff --git a/include/cam_long_press.h b/include/cam_long_press.h
new file mode 100644
index 0000000..0c0014a
--- /dev/null
+++ b/include/cam_long_press.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __CAM_LONG_PRESS_H_DEF__
+#define __CAM_LONG_PRESS_H_DEF__
+
+typedef int (*LONG_PRESS_START_CALLBACK)(void*, int, int);
+typedef int (*LONG_PRESS_CANCEL_CALLBACK)(void*, int, int);
+int cam_long_press_register(int index, double time,
+ LONG_PRESS_START_CALLBACK start_func,
+ LONG_PRESS_CANCEL_CALLBACK end_func,
+ void *data);
+int cam_long_press_unregister(int index);
+void cam_long_press_trigger(int index, Evas_Coord x, Evas_Coord y);
+void cam_long_press_validate(int index, Evas_Coord x, Evas_Coord y);
+void cam_long_press_cancel(int index);
+bool cam_get_long_press_running_state(int index);
+
+enum {
+ LONG_PRESS_ID_EDIT = 0,
+ LONG_PRESS_ID_SCROLL,
+ LONG_PRESS_ID_MAX_NUMS,
+};
+#endif /*__CAM_LONG_PRESS_H_DEF__*/
+
+
diff --git a/include/cam_menu_composer.h b/include/cam_menu_composer.h
new file mode 100755
index 0000000..ae586ba
--- /dev/null
+++ b/include/cam_menu_composer.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_MENU_COMPOSER_H_
+#define _CAM_MENU_COMPOSER_H_
+
+#include "cam_property.h"
+#include "cam.h"
+
+
+void cam_compose_setting_menu(void *data, cam_menu_composer* composer);
+void cam_compose_list_menu(void *data, int menu_type, cam_menu_composer* composer);
+void cam_compose_menu_shooting_mode(void *data, cam_menu_composer* composer);
+void cam_compose_menu_scene_mode(void *data, cam_menu_composer* composer);
+void cam_compose_menu_photo_resolution(void *data, cam_menu_composer* composer);
+void cam_compose_menu_video_resolution(void *data, cam_menu_composer* composer);
+void cam_compose_menu_effect(void *data, cam_menu_composer* composer);
+void cam_compose_menu_wb(void *data, cam_menu_composer* composer);
+void cam_compose_menu_focus_mode(void *data, cam_menu_composer* composer);
+void cam_compose_menu_iso(void *data, cam_menu_composer* composer);
+void cam_compose_menu_metering(void *data, cam_menu_composer* composer);
+void cam_compose_menu_flash(void *data, cam_menu_composer* composer);
+void cam_compose_menu_recording_mode(void *data, cam_menu_composer* composer);
+void cam_compose_menu_storage(void* data, cam_menu_composer* composer);
+void cam_compose_menu_timer_mode(void* data, cam_menu_composer* composer);
+void cam_compose_menu_volume_key(void* data, cam_menu_composer* composer);
+
+void cam_compose_free(cam_menu_composer* composer);
+gboolean cam_is_enabled_menu(void *data, const CAM_MENU_ITEM item);
+
+#endif
diff --git a/include/cam_mm.h b/include/cam_mm.h
new file mode 100755
index 0000000..b7bda5f
--- /dev/null
+++ b/include/cam_mm.h
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef CAM_MM_H_
+#define CAM_MM_H_
+
+#include <glib.h>
+#include <sound_manager.h>
+#include <devman_managed.h>
+#include "cam.h"
+#include "cam_capacity_type.h"
+
+
+/*
+#include "cam_property.h"
+*/
+
+#define CAMERA_ERROR_MM_QUARK g_quark_from_static_string("camera-error-mm")
+#define cam_set_mm_error(error, code, fmt, arg...) \
+ g_set_error(error, CAMERA_ERROR_MM_QUARK, code, fmt, ##arg)
+
+#define ERROR_CHECK
+
+#ifdef ERROR_CHECK
+#define CHECK_MM_ERROR(expr) \
+{\
+ int ret = 0; \
+ ret = expr; \
+ if (ret != CAMERA_ERROR_NONE) {\
+ cam_debug(LOG_MM,"[%s:%d] error code : %x \n", __func__, __LINE__, ret); \
+ return FALSE; \
+ } \
+}
+#else
+#define CHECK_MM_ERROR(expr) (expr)
+#endif
+
+gboolean cam_mm_set_camera_interrupted_cb(camera_interrupted_cb callback, void *data);
+gboolean cam_mm_set_recorder_interrupted_cb(recorder_interrupted_cb callback, void *data);
+gboolean cam_mm_get_brightless_valid_intrange(int *min, int *max);
+gboolean cam_mm_get_exposure_valid_intrange(int *min, int *max);
+gboolean cam_mm_recorder_set_state_changed_cb(recorder_state_changed_cb callback, void* user_data);
+gboolean cam_mm_recorder_unset_state_changed_cb(void);
+
+gboolean cam_mm_recorder_set_recording_status_cb(recorder_recording_status_cb callback, void* user_data);
+
+gboolean cam_mm_recorder_unset_recording_status_cb(void);
+
+gboolean cam_mm_recorder_set_recording_limit_reached_cb(recorder_recording_limit_reached_cb callback, void* user_data);
+
+gboolean cam_mm_recorder_unset_recording_limit_reached_cb(void);
+
+gboolean cam_mm_set_error_cb(camera_error_cb error_cb, void *data);
+gboolean cam_mm_unset_error_cb(void);
+gboolean cam_mm_set_state_changed_cb(camera_state_changed_cb state_cb, void *data);
+gboolean cam_mm_unset_state_changed_cb(void);
+gboolean cam_mm_set_focus_changed_cb(camera_focus_changed_cb focus_cb, void *data);
+gboolean cam_mm_unset_focus_changed_cb(void);
+gboolean cam_mm_set_preview_cb(camera_preview_cb preview_cb, void *data);
+gboolean cam_mm_unset_preview_cb(void);
+
+int cam_mm_get_state(void);
+int cam_mm_get_cam_state(void);
+int cam_mm_get_rec_state(void);
+
+
+gboolean cam_mm_set_delay_setting(gboolean value);
+gboolean cam_mm_get_video_device(int *device);
+gboolean cam_mm_get_video_size(int *width, int *height);
+gboolean cam_mm_set_video_size(int width, int height);
+gboolean cam_mm_get_zoom(int *value);
+gboolean cam_mm_set_zoom(int value);
+gboolean cam_mm_get_wdr(int *value);
+gboolean cam_mm_set_wdr(int value);
+gboolean cam_mm_get_auto_exposure(int *value);
+gboolean cam_mm_is_support_anti_hand_shake();
+gboolean cam_mm_get_anti_hand_shake(gboolean *value);
+gboolean cam_mm_set_anti_hand_shake(gboolean value);
+
+gboolean cam_mm_set_auto_exposure(int value);
+gboolean cam_mm_set_fps(camera_attr_fps_e value);
+gboolean cam_mm_get_iso(int *value);
+gboolean cam_mm_set_iso(int value);
+gboolean cam_mm_get_focus_mode(int *value);
+gboolean cam_mm_set_focus_mode(int value);
+gboolean cam_mm_get_zoom_valid_intrange(int *min, int *max);
+
+gboolean cam_mm_set_af_area(int x, int y, int w, int h);
+gboolean cam_mm_get_detect_mode(int *value);
+gboolean cam_mm_set_detect_mode(int value);
+gboolean cam_mm_get_image_enc_quality(int *value);
+gboolean cam_mm_set_image_enc_quality(int value);
+gboolean cam_mm_get_flash(int *value);
+gboolean cam_mm_set_flash(int value);
+gboolean cam_mm_get_brightness(int *value);
+gboolean cam_mm_set_brightness(int value);
+gboolean cam_mm_get_white_balance(int *value);
+gboolean cam_mm_set_white_balance(int value);
+gboolean cam_mm_get_effect(int *value);
+gboolean cam_mm_set_effect(int value);
+gboolean cam_mm_get_program_mode(int *value);
+gboolean cam_mm_set_program_mode(int value);
+gboolean cam_mm_set_audio_recording(gboolean b_on);
+gboolean cam_mm_set_outdoor_visibility(gboolean on);
+gboolean cam_mm_get_outdoor_visibility(gboolean *on);
+gboolean cam_mm_is_supported_outdoor_visibility(void);
+gboolean cam_mm_set_mdnie_mode(gboolean on);
+gboolean cam_mm_get_mdnie_mode(int *val);
+gboolean cam_mm_get_image_count(int *value);
+gboolean cam_mm_set_image_count(int value);
+gboolean cam_mm_get_recommanded_preview_size(int *width, int *height);
+gboolean cam_mm_get_image_size(int *width, int *height);
+gboolean cam_mm_set_image_size(int width, int height);
+gboolean cam_mm_set_video_encoder_bitrate(int bitrate);
+gboolean cam_mm_set_audio_encoder_bitrate(int bitrate);
+gboolean cam_mm_set_display_device(int display_device, void *xid);
+gboolean cam_mm_set_display_id(void *xid, int size);
+gboolean cam_mm_set_display_rotate(int rotate);
+gboolean cam_mm_set_camera_rotate(int camera_rotate);
+gboolean cam_mm_set_display_scale(int scale);
+gboolean cam_mm_get_front_cam_display_rotate_value(int *display_rotation, int *rotate);
+gboolean cam_mm_get_display_geometry_method(int *value);
+gboolean cam_mm_set_display_geometry_method(int value);
+gboolean cam_mm_set_display_visible(gboolean visible);
+gboolean cam_mm_set_filename(const gchar *filename);
+gboolean cam_mm_get_filename(char **filename, gint *size);
+gboolean cam_mm_get_max_time(int *value);
+gboolean cam_mm_set_max_time(int max_val);
+gboolean cam_mm_get_tag_enable(int *value);
+gboolean cam_mm_set_tag_enable(gboolean bvalue);
+gboolean cam_mm_set_tag_img_orient(int orient);
+gboolean cam_mm_set_file_format(int format);
+gboolean cam_mm_set_video_profile(void);
+gboolean cam_mm_set_codec(int audio_codec, int video_codec);
+gboolean cam_mm_set_audio_source(int sample_rate, int channel);
+gboolean cam_mm_set_video_source_format(int format);
+gboolean cam_mm_set_shutter_sound(int value);
+gboolean cam_mm_get_shutter_sound(int *value);
+gboolean cam_mm_enable_geo_tag(gboolean value);
+gboolean cam_mm_remove_geo_tag(void);
+
+gboolean cam_mm_get_video_source_format(const char *attribute_name,
+ int *format);
+gboolean cam_mm_set_conti_shot_break(gboolean bvalue);
+gboolean cam_mm_get_scene_mode(camera_attr_scene_mode_e *mode);
+gboolean cam_mm_set_scene_mode(camera_attr_scene_mode_e mode);
+
+gboolean cam_mm_set_capture_format(int value);
+gboolean cam_mm_set_capture_interval(int value);
+gboolean cam_mm_reset_recording_motion_fps(void);
+gboolean cam_mm_get_recording_motion_fps(int *value);
+gboolean cam_mm_set_gps_data(double lat, double lon, double alt);
+
+gint cam_mm_realize(void);
+gboolean cam_mm_is_preview_started(int mode);
+gboolean cam_mm_preview_start(int mode);
+gboolean cam_mm_unrealize(void);
+gboolean cam_mm_preview_stop(int mode);
+gboolean cam_mm_is_created(void);
+gboolean cam_mm_create(int camera_type, int mode);
+gboolean cam_mm_destory(void);
+gboolean cam_mm_continuous_capture_start(int count, int interval, camera_capturing_cb capturing_cb, camera_capture_completed_cb completed_cb , void *user_data);
+gboolean cam_mm_capture_start(camera_capturing_cb capturing_cb , camera_capture_completed_cb completed_cb , void *user_data);
+gboolean cam_mm_capture_stop(gboolean skip_preview, CamMode mode);
+gboolean cam_mm_rec_start();
+gboolean cam_mm_rec_stop(gboolean to_stop);
+gboolean cam_mm_rec_pause();
+gboolean cam_mm_rec_cancel();
+gboolean cam_mm_start_focusing(gint af_mode);
+gboolean cam_mm_stop_focusing();
+gboolean cam_mm_set_recording_motion(double rate);
+gboolean cam_mm_session_init(sound_session_type_e session_type);
+
+/**
+ * @brief set auto contrast on/off
+ * @param[in] enable true: turn on auto contrast;false: turn off auto contrast
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_enable_auto_contrast(gboolean enable);
+/**
+ * @brief get auto contrast on/off
+ * @param[out] enable true: auto contrast is on;false: auto contrast is off
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_is_enabled_auto_contrast(gboolean *enable);
+
+/**
+ * @brief start camera focus mode: face detection mode
+ * @param[in] callback called while face detected
+ * @param[in] data user data for callback
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_start_camera_face_detection(camera_face_detected_cb callback, void *data);
+/**
+ * @brief stop camera focus mode: face detection mode
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_stop_camera_face_detection(void);
+/**
+ * @brief get camera H/W whether suppor face detection auto focus
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_is_supported_face_detection(void);
+/**
+ * @brief in face detection focus mode, set @face_id face zoom
+ * @param[in] face_id face id
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_set_camera_face_zoom(int face_id);
+/**
+ * @brief in face detection focus mode, cancel face zoom
+ * @return Operation result
+ * @retval true Success
+ * @retval false Error
+ */
+gboolean cam_mm_camera_cancel_face_zoom(void);
+
+gboolean cam_mm_get_caps_range(unsigned int type, unsigned int *caps, void *user_data);
+gboolean cam_mm_get_caps_minmax(unsigned int type, int *min, int *max);
+const int cam_mm_get_caps_cb_cnt();
+
+gboolean cam_mm_set_image_flip(gboolean value);
+
+gboolean cam_mm_is_support_front_camera(void);
+
+#endif /* CAM_MM_H_ */
diff --git a/include/cam_popup.h b/include/cam_popup.h
new file mode 100755
index 0000000..97540f6
--- /dev/null
+++ b/include/cam_popup.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef CAM_POPUP_H_
+#define CAM_POPUP_H_
+
+#include <Elementary.h>
+#include <glib.h>
+
+/* define USE_ELM_POPUP */
+void cam_popup_remove(Evas_Object *popup);
+void cam_popup_remove_all(void);
+
+#ifdef USE_ELM_POPUP
+typedef void (*cam_popup_respons_cb) (void *user_data, Evas_Object *obj,
+ void *event_info);
+
+/* popup with one button, ELM_POPUP_RESPONSE_OK is sent along with response signal. */
+void cam_popup_confirm_add(Evas_Object *window, const char *message,
+ const char *btn_name, cam_popup_respons_cb callback,
+ void *user_data);
+
+/* popup with two button, ELM_POPUP_RESPONSE_OK/ELM_POPUP_RESPONSE_CANCEL is sent along with response signal. */
+void cam_popup_question_add(Evas_Object *window, const char *message,
+ const char *btn_n_1, const char *btn_n_2,
+ cam_popup_respons_cb callback, void *user_data);
+
+#else
+
+/* popup with one button */
+void
+cam_popup_confirm_add(Evas_Object *window, const char *message,
+ const char *btn_name,
+ void (*btn_cb) (void *data, Evas_Object *obj,
+ void *event_info));
+
+/* popup with two button */
+void
+cam_popup_question_add(Evas_Object *window, const char *message,
+ const char *lbtn_name,
+ void (*left_btn_cb) (void *data, Evas_Object *obj,
+ void *event_info),
+ const char *rbtn_name, void (*right_btn_cb) (void *data,
+ Evas_Object
+ *obj,
+ void
+ *event_info));
+
+Evas_Object *cam_popup_guide_screen_add(Evas_Object *window,
+ const char *message);
+
+#endif
+
+gboolean cam_popup_create(void *data);
+gboolean cam_popup_add_progress_bar(void *data);
+gboolean cam_popup_set_text(void *data, char *text);
+gboolean cam_popup_set_bar_value(void *data, double value);
+gboolean cam_popup_delete(void *data);
+void cam_popup_rotate(void *data);
+gboolean cam_popup_for_burst_create(void *data);
+
+#endif
diff --git a/include/cam_property.h b/include/cam_property.h
new file mode 100755
index 0000000..d7bb9b1
--- /dev/null
+++ b/include/cam_property.h
@@ -0,0 +1,954 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_CAM_PROPERTY_H_
+#define __DEF_CAM_PROPERTY_H_
+
+#include <glib.h>
+/*#include <mmf/mm_camcorder.h>*/
+#include <camera.h>
+#include <recorder.h>
+#include <Evas.h>
+#include <Eina.h>
+
+
+#define CAM_LCD_WVGA
+
+#define PI (4 * atan(1))
+#define NEW_GUI
+/* Macros
+ */
+#define HIWORD(x) ((x) >> 16)
+#define LOWORD(y) (((y) << 16) >> 16)
+#define MAKE_DWORD(x, y) ((x) << 16 | (y))
+
+/* Resolution
+ */
+#define PREVIEW_W (640)
+#define PREVIEW_WIDE_W (800)
+#define PREVIEW_H (480)
+
+#define CAM_RESOLUTION(w, h) MAKE_DWORD(w, h)
+#define CAM_RESOLUTION_W(r) HIWORD(r)
+#define CAM_RESOLUTION_H(r) LOWORD(r)
+
+#define CAM_RESOLUTION_3264x2448 /*8M*/ CAM_RESOLUTION(3264, 2448)
+#define CAM_RESOLUTION_3264x2176 /*7M_WIDE*/ CAM_RESOLUTION(3264, 2176)
+#define CAM_RESOLUTION_3264x1960 /*6M_WIDE*/ CAM_RESOLUTION(3264, 1960)
+#define CAM_RESOLUTION_3264x1836 /*6M_WIDE*/ CAM_RESOLUTION(3264, 1836)
+#define CAM_RESOLUTION_2800x1920 /*5M_WIDE*/ CAM_RESOLUTION(2800, 1920)
+#define CAM_RESOLUTION_2560x1920 /*5M*/ CAM_RESOLUTION(2560, 1920)
+#define CAM_RESOLUTION_2560x1536 /*4M_WIDE*/ CAM_RESOLUTION(2560, 1536)
+#define CAM_RESOLUTION_2560x1440 /*3M_WIDE*/ CAM_RESOLUTION(2560, 1440)
+#define CAM_RESOLUTION_2048x1536 /*3M*/ CAM_RESOLUTION(2048, 1536)
+#define CAM_RESOLUTION_2048x1152 /*2.4M*/ CAM_RESOLUTION(2048, 1152)
+#define CAM_RESOLUTION_1920x1080 /*2M_WIDE*/ CAM_RESOLUTION(1920, 1080)
+#define CAM_RESOLUTION_1600x1200 /*2M*/ CAM_RESOLUTION(1600, 1200)
+#define CAM_RESOLUTION_1392x1392 /*2M*/ CAM_RESOLUTION(1392, 1392)
+#define CAM_RESOLUTION_1280x720 /*0.9M*/ CAM_RESOLUTION(1280, 720)
+#define CAM_RESOLUTION_1280x960 /*1M*/ CAM_RESOLUTION(1280, 960)
+
+
+#define CAM_RESOLUTION_FULLHD CAM_RESOLUTION(1920, 1080)
+#define CAM_RESOLUTION_HD CAM_RESOLUTION(1280, 720)
+#define CAM_RESOLUTION_SVGA CAM_RESOLUTION(800, 600)
+#define CAM_RESOLUTION_WVGA CAM_RESOLUTION(800, 480)
+#define CAM_RESOLUTION_WVGA2 CAM_RESOLUTION(720, 480)
+#define CAM_RESOLUTION_VGA CAM_RESOLUTION(640, 480)
+#define CAM_RESOLUTION_WQVGA CAM_RESOLUTION(400, 240)
+#define CAM_RESOLUTION_QVGA CAM_RESOLUTION(320, 240)
+#define CAM_RESOLUTION_CIF CAM_RESOLUTION(352, 288)
+#define CAM_RESOLUTION_QCIF CAM_RESOLUTION(176, 144)
+
+/* resolution string for camera ug */
+#define CAM_CAPTURE_RES_VGA "VGA"
+#define CAM_RECORDING_RES_QCIF "QCIF"
+
+#define MAX_CONTINUOUS_SHOT (20)
+#define MAX_BEST_PHOTO (8)
+#define CONTINUOUS_SHOT_INTERVAL (150)
+
+#define LONG_PRESS_TIME (0.50)
+
+#define CAM_REC_NORMAL_MAX_SIZE (4*1024*1024) /* kbyte */
+#define CAM_REC_MMS_MAX_SIZE (295) /* kbyte */
+
+#define STILL_MINIMAL_SPACE (100*1024) /* byte */
+#define REC_MMS_MIN_SPACE (300*1024) /* byte */
+
+#define CAM_TIME_FORMAT "u:%02u:%02u"
+#define CAM_TIME_FORMAT2 "02u:%02u"
+
+#define CAM_TIME_ARGS(t) \
+ (uint) (t / (60*60)), \
+ (uint) ((t / 60) % 60), \
+ (uint) (t % 60)
+
+#define CAM_TIME_ARGS2(t) \
+ (uint) ((t / 60) % 60), \
+ (uint) (t % 60)
+
+#define REMOVE_TIMER(timer) \
+ if (timer != NULL) {\
+ ecore_timer_del(timer); \
+ timer = NULL; \
+ }
+
+#define REMOVE_IDLER(idler) \
+ if (idler != NULL) {\
+ ecore_idler_del(idler); \
+ idler = NULL; \
+ }
+
+#define DEL_EVAS_OBJECT(eo) \
+ if (eo != NULL) {\
+ evas_object_del(eo); \
+ eo = NULL; \
+ }
+#define HIDE_EVAS_OBJECT(eo) \
+ if (eo != NULL) {\
+ evas_object_hide(eo); \
+ }
+#define SHOW_EVAS_OBJECT(eo) \
+ if (eo != NULL) {\
+ evas_object_show(eo); \
+ }
+
+#define SCALED_W(w) (int)((double)w/MAIN_W*((struct appdata *)cam_appdata_get())->win_width)
+#define SCALED_H(h) (int)((double)h/MAIN_H*((struct appdata *)cam_appdata_get())->win_height)
+
+/* set line byte */
+#define LINEBYTES_BGR565(w) (((w) * 2 + 3) >> 2 << 2)
+#define LINEBYTES_YUV420(w) (((w) + 3) >> 2 << 2)
+#define LINEBYTES_YUV422(w) (((w) * 2))
+#define LINEBYTES_RGB888(w) (((w) * 3))
+
+#define CAMERA_APP_TIMEOUT (120.0) /* No input for 2 minite, Auto close camera app */
+#define CAM_SETTING_POPUP_TIMEOUT (10)
+#ifndef ABS
+#define ABS(x) ((x) < 0 ? -(x) : (x))
+#endif
+
+#ifndef CLAMP
+#define CLAMP(x, min, max) (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x)))
+#endif
+
+#ifndef MIN
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef CAM_LCD_WVGA
+#define FIT_TO_RESOLUTION(p1, p2) (p1)
+#else
+#define FIT_TO_RESOLUTION(p1, p2) (((p2) == -1) ? ((p1) * 2) : (p2))
+#endif
+
+#ifndef CAM_LCD_WVGA
+#define FIT_TO_FONT_SIZE(s1, s2) (s1)
+#else
+#define FIT_TO_FONT_SIZE(s1, s2) (((s2) == -1) ? (s1) : (s2))
+#endif
+
+/* temporary code */
+#ifndef YUV422_SIZE
+#define YUV422_SIZE(width, height) ((width) * (height) * 2)
+#endif /* YUV422_SIZE */
+
+#ifndef YUV420_SIZE
+#define YUV420_SIZE(width, height) ((width) * (height) * 3 / 2)
+#endif /* YUV420_SIZE */
+
+#define CAM_AUDIO_BITRATE_MMS (12200)
+#define CAM_AUDIO_BITRATE_NORMAL (288000)
+
+#define MODE_DEFAULT CAM_CAMERA_MODE
+#define SHOTMODE_DEFAULT CAM_SINGLE_MODE
+#define RECMODE_DEFAULT CAM_RECORD_NORMAL
+#define PG_MODE_DEFAULT CAM_SCENE_NONE
+#define RESOLUTION_DEFAULT CAM_RESOLUTION_VGA
+#define REC_RESOLUTION_DEFAULT CAM_RESOLUTION_FULLHD
+#define IMAGE_RESOLUTION_DEFAULT CAM_RESOLUTION_3264x2448
+#define SELF_REC_RESOLUTION_DEFAULT CAM_RESOLUTION_HD
+#define SELF_IMAGE_RESOLUTION_DEFAULT CAM_RESOLUTION_1392x1392
+#define WB_DEFAULT CAM_SETTINGS_WB_AWB
+#define ISO_DEFAULT CAM_ISO_AUTO
+#define AE_DEFAULT CAM_METERING_CENTER_WEIGHTED
+#define EFFECT_DEFAULT CAM_SETTINGS_EFFECTS_NOR
+#define AF_DEFAULT CAM_FOCUS_AUTO
+#define AHS_DEFAULT CAM_AHS_OFF
+#define WDR_DEFAULT CAM_WDR_OFF
+#define FLASH_DEFAULT CAM_FLASH_AUTO
+#define GUIDE_LINE_DEFAULT FALSE
+#define REC_FLASH_DEFAULT CAM_FLASH_OFF
+#define BRIGHTNESS_DEFAULT 4 /* should get from caps query */
+#define TIMER_DEFAULT CAM_SETTINGS_TIMER_OFF
+#define ZOOM_DEFAULT (0)
+#define QUALITY_DEFAULT CAM_QUALITY_HIGH
+#define FPS_DEFAULT (30)
+#define FPS_SLOW (15)
+#define IMAGE_COUNT_DEFAULT (1)
+#define AUDIOREC_DEFAULT TRUE
+#define STORAGE_DEFAULT CAM_STORAGE_INTERNAL
+#define REC_SIZE_LIMIT_DEFAULT CAM_REC_NORMAL_MAX_SIZE
+#define SHUTTER_SOUND_DEFAULT CAM_SETTINGS_SOUND_1
+#define SOUND_DEFAULT TRUE
+#define BURST_SHOT_DEFAULT TRUE
+
+#define POP_TIP_DEFAULT TRUE
+
+
+#define REC_MAX_TIME_LIMITED (60*60) /* one hour */
+#define DEFAULT_REC_FPS (1.0)
+#define SLOW_MOTION_REC_FPS (120)
+#define FAST_MOTION_REC_FPS (30)
+#define SLOW_MOTION_PLAY_FPS (0.25)
+#define FAST_MOTION_PLAY_FPS (4)
+#define CAM_EPSINON (0.000001)
+
+/*note: for focus edje zoom effect */
+#define CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE (1.0)
+#define CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE (1.5)
+#define CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION (0.20)
+/*note: for thumbnail effect*/
+#define CAM_THUMBNAIL_ANTIMATION_EFFECT_DURATION (0.25)
+/*note: for icons animation effect*/
+#define CAM_ROTATE_ICONS_ANTIMATION_DURATION (0.35)
+
+#define EDIT_SHORTCUTS_TIP_WIDTH (680)
+#define EDIT_SHORTCUTS_TIP_HEIGHT (546)
+#define EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y (320)
+#define EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X (20)
+
+#define EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X (320)
+#define EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y (87)
+
+typedef struct _cam_rectangle CamRectangle;
+
+struct _cam_rectangle {
+ int x, y, width, height;
+};
+
+/* face */
+typedef struct _cam_face_data CamFaceData;
+struct _cam_face_data {
+ CamRectangle *pFaceRect;
+ int nFace; /* face count. */
+ int faceOrient; /* the face angle 1:0angle 2:90angle, 3:270 angle */
+};
+
+/* Eyes */
+typedef struct _cam_eyes_data CamEyesData;
+struct _cam_eyes_data {
+ CamRectangle *pEyesRect;
+ int *nClosedEyesFlag; /* true is closed eyes otherwise false */
+ int nEyes;
+};
+
+typedef struct _cam_exe_args CamExeArgs;
+struct _cam_exe_args {
+ int cam_mode;
+ int resolution;
+ int width;
+ int height;
+ int size_limit;
+ gboolean review;
+ char *caller;
+};
+
+enum _CamAppProperty {
+ PROP_MODE, // 0
+ PROP_SELF_PORTRAIT,
+ PROP_SHOT_MODE,
+ PROP_REC_MODE,
+ PROP_SCENE_MODE,
+ PROP_PHOTO_RESOLUTION, // 5
+ PROP_VIDEO_RESOLUTION,
+ PROP_FPS,
+ PROP_BRIGHTNESS,
+ PROP_WB,
+ PROP_ISO, // 10
+ PROP_AUTO_CONTRAST,
+ PROP_METERING,
+ PROP_EFFECT,
+ PROP_AF_MODE,
+ PROP_AHS, // 15
+ PROP_WDR,
+ PROP_FLASH,
+ PROP_TIMER,
+ PROP_IMAGE_QUALITY,
+ PROP_VIDEO_QUALITY, // 20
+ PROP_AUDIO_REC,
+ PROP_AUDIO_QUALITY,
+ PROP_BATTERY_LEVEL,
+ PROP_BATTERY_CHARG,
+ PROP_GPS_LEVEL, // 25
+ PROP_ZOOM,
+ PROP_STORAGE,
+ PROP_GUIDELINE,
+ PROP_GPS,
+ PROP_REVIEW, // 30
+ PROP_IMAGE_COUNT,
+ PROP_SHUTTER_SOUND,
+ PROP_SIZE_LIMIT,
+ PROP_SIZE_LIMIT_TYPE,
+ PROP_REC_TIME, // 35
+ PROP_REC_FILE_SIZE,
+ PROP_OUTDOOR_VISIBILITY,
+ PROP_VOLUME_KEY,
+ PROP_SAVE_AS_FLIP,
+ PROP_BURST_SHOT, // 40
+
+ PROP_NUMS
+};
+
+#define PROP_MODE_NAME "mode"
+#define PROP_SELF_PORTRAIT_NAME "self_portrait"
+#define PROP_SCENE_MODE_NAME "scene_mode"
+#define PROP_PHOTO_RESOLUTION_NAME "photo_resolution"
+#define PROP_VIDEO_RESOLUTION_NAME "video_resolution"
+#define PROP_SELF_PHOTO_RESOLUTION_NAME "self_photo_resolution"
+#define PROP_SELF_VIDEO_RESOLUTION_NAME "self_video_resolution"
+#define PROP_WB_NAME "wb"
+#define PROP_ISO_NAME "iso"
+#define PROP_AUTO_CONTRAST_NAME "auto_contrast"
+#define PROP_METERING_NAME "metering"
+#define PROP_AF_NAME "af_mode"
+#define PROP_AHS_NAME "ahs"
+#define PROP_WDR_NAME "wdr"
+#define PROP_FLASH_NAME "flash"
+#define PROP_STORAGE_NAME "storage"
+#define PROP_GUIDELINE_NAME "guideline"
+#define PROP_GPS_NAME "gps"
+#define PROP_REVIEW_NAME "review"
+#define PROP_VOLUME_KEY_NAME "volume_key"
+#define PROP_BURST_SHOT_NAME "burst_shot"
+
+#define PROP_TOOLBAR_0_TYPE_NAME "toolbar_0"
+#define PROP_TOOLBAR_1_TYPE_NAME "toolbar_1"
+#define PROP_TOOLBAR_2_TYPE_NAME "toolbar_2"
+#define PROP_TOOLBAR_3_TYPE_NAME "toolbar_3"
+#define PROP_TOOLBAR_4_TYPE_NAME "toolbar_4"
+
+/*NOTE: edit shortcuts*/
+#define PROP_SHOW_POP_TIP "pop_tip"
+#define PROP_SHORTCUTS_INIT_PART_INDEX "init_part_index"
+
+#define PROP_SHORTCUTS_PART_INDEX_0 "part_index_0"
+#define PROP_SHORTCUTS_PART_INDEX_1 "part_index_1"
+#define PROP_SHORTCUTS_PART_INDEX_2 "part_index_2"
+#define PROP_SHORTCUTS_PART_INDEX_3 "part_index_3"
+
+#define PROP_SHORTCUTS_PART_INDEX_4 "part_index_4"
+#define PROP_SHORTCUTS_PART_INDEX_5 "part_index_5"
+#define PROP_SHORTCUTS_PART_INDEX_6 "part_index_6"
+#define PROP_SHORTCUTS_PART_INDEX_7 "part_index_7"
+
+#define PROP_SHORTCUTS_PART_INDEX_8 "part_index_8"
+#define PROP_SHORTCUTS_PART_INDEX_9 "part_index_9"
+#define PROP_SHORTCUTS_PART_INDEX_10 "part_index_10"
+#define PROP_SHORTCUTS_PART_INDEX_11 "part_index_11"
+
+#define PROP_SHORTCUTS_PART_INDEX_12 "part_index_12"
+#define PROP_SHORTCUTS_PART_INDEX_13 "part_index_13"
+#define PROP_SHORTCUTS_PART_INDEX_14 "part_index_14"
+#define PROP_SHORTCUTS_PART_INDEX_15 "part_index_15"
+
+#define PROP_SHORTCUTS_PART_INDEX_16 "part_index_16"
+#define PROP_SHORTCUTS_PART_INDEX_17 "part_index_17"
+#define PROP_SHORTCUTS_PART_INDEX_18 "part_index_18"
+#define PROP_SHORTCUTS_PART_INDEX_19 "part_index_19"
+
+
+#define STR_MOVE_PREV "move,prev"
+#define STR_MOVE_NEXT "move,next"
+#define STR_ANI_RETURN "ani,return"
+
+
+typedef enum _CamDeviceType {
+ CAM_DEVICE_MEGA = CAMERA_DEVICE_CAMERA0,
+ CAM_DEVICE_VGA = CAMERA_DEVICE_CAMERA1,
+} CamDeviceType;
+
+typedef enum _CamLaunchingMode {
+ CAM_LAUNCHING_MODE_NORMAL = 0,
+ CAM_LAUNCHING_MODE_EXTERNAL,
+ CAM_LAUNCHING_MODE_NUMS,
+} CamLaunchingMode;
+
+#define CAMCORDER_MODE_IMAGE 1
+#define CAMCORDER_MODE_VIDEO 2
+typedef enum _CamMode {
+ CAM_CAMERA_MODE = CAMCORDER_MODE_IMAGE,
+ CAM_CAMCORDER_MODE = CAMCORDER_MODE_VIDEO,
+ CAM_MODE_NUMS = CAM_CAMCORDER_MODE
+} CamMode;
+
+typedef enum __CAM_MENU_ITEM{
+ CAM_MENU_EMPTY = -1,
+ CAM_MENU_SHORTCUTS = 0,
+ CAM_MENU_VOLUME_KEY,
+ CAM_MENU_BURST_SHOT_MODE,
+ CAM_MENU_SELF_PORTRAIT,
+ CAM_MENU_FLASH,
+ CAM_MENU_SHOOTING_MODE,
+ CAM_MENU_RECORDING_MODE,
+ CAM_MENU_SCENE_MODE,
+ CAM_MENU_EXPLOSURE_VALUE,
+ CAM_MENU_FOCUS_MODE,
+ CAM_MENU_TIMER,
+ CAM_MENU_EFFECTS,
+ CAM_MENU_PHOTO_RESOLUTION,
+ CAM_MENU_VIDEO_RESOLUTION,
+ CAM_MENU_WHITE_BALANCE,
+ CAM_MENU_ISO,
+ CAM_MENU_METERING,
+ CAM_MENU_ANTI_SHAKE,
+ CAM_MENU_OUTDOOR_VISIBILITY,
+ CAM_MENU_AUTO_CONTRAST,
+ CAM_MENU_GUIDELINES,
+ CAM_MENU_CAPTURE_VOICE,
+ CAM_MENU_GPS_TAG,
+ CAM_MENU_SAVE_AS_FLIP,
+ CAM_MENU_STORAGE,
+ CAM_MENU_RESET,
+ CAM_MENU_SCENE_AUTO, /* scene */
+ CAM_MENU_SCENE_PORTRAIT,
+ CAM_MENU_SCENE_LANDSCAPE,
+ CAM_MENU_SCENE_NIGHT,
+ CAM_MENU_SCENE_SPORTS,
+ CAM_MENU_SCENE_PARTY,
+ CAM_MENU_SCENE_BEACHSNOW,
+ CAM_MENU_SCENE_SUNSET,
+ CAM_MENU_SCENE_DUSKDAWN,
+ CAM_MENU_SCENE_FALL,
+ CAM_MENU_SCENE_FIREWORK,
+ CAM_MENU_SCENE_TEXT,
+ CAM_MENU_SCENE_CANDLELIGHT,
+ CAM_MENU_SCENE_BACKLIGHT,
+ CAM_MENU_SCENE_SHOW_WINDOW,
+ CAM_MENU_SHOOTING_SINGLE, /*shooting mode*/
+ CAM_MENU_SHOOTING_SELF_SINGLE,
+ CAM_MENU_VIDEO_RESOLUTION_FULLHD, /* video resolution */
+ CAM_MENU_VIDEO_RESOLUTION_HD,
+ CAM_MENU_VIDEO_RESOLUTION_WVGA,
+ CAM_MENU_VIDEO_RESOLUTION_VGA,
+ CAM_MENU_VIDEO_RESOLUTION_QVGA,
+ CAM_MENU_VIDEO_RESOLUTION_QCIF,
+ CAM_MENU_PHOTO_RESOLUTION_3264x2448, /* photo resolution */
+ CAM_MENU_PHOTO_RESOLUTION_3264x1960,
+ CAM_MENU_PHOTO_RESOLUTION_3264x1836,
+ CAM_MENU_PHOTO_RESOLUTION_2800x1920,
+ CAM_MENU_PHOTO_RESOLUTION_2560x1920,
+ CAM_MENU_PHOTO_RESOLUTION_2560x1536,
+ CAM_MENU_PHOTO_RESOLUTION_2560x1440,
+ CAM_MENU_PHOTO_RESOLUTION_2048x1536,
+ CAM_MENU_PHOTO_RESOLUTION_2048x1152,
+ CAM_MENU_PHOTO_RESOLUTION_1920x1080,
+ CAM_MENU_PHOTO_RESOLUTION_1600x1200,
+ CAM_MENU_PHOTO_RESOLUTION_1392x1392,
+ CAM_MENU_PHOTO_RESOLUTION_1280x960,
+ CAM_MENU_PHOTO_RESOLUTION_1280x720,
+ CAM_MENU_PHOTO_RESOLUTION_640x480,
+ CAM_MENU_WB_AWB, /* WB */
+ CAM_MENU_WB_INCANDESCENT,
+ CAM_MENU_WB_FLUORESCENT,
+ CAM_MENU_WB_DAYLIGHT,
+ CAM_MENU_WB_CLOUDY,
+ CAM_MENU_WB_SHADE,
+ CAM_MENU_WB_HORIZON,
+ CAM_MENU_WB_FLASH,
+ CAM_MENU_WB_CUSTOM,
+ CAM_MENU_EFFECT_NONE,
+ CAM_MENU_EFFECT_NEGATIVE,
+ CAM_MENU_EFFECT_BLACKANDWHITE,
+ CAM_MENU_EFFECT_SEPIA,
+ CAM_MENU_FOCUS_AUTO, /* Focus mode */
+ CAM_MENU_FOCUS_MACRO,
+ CAM_MENU_FOCUS_FACE_DETECTION,
+ CAM_MENU_RECORDING_MODE_NORMAL, /* Recording mode */
+ CAM_MENU_RECORDING_MODE_LIMIT,
+ CAM_MENU_RECORDING_MODE_SLOW,
+ CAM_MENU_RECORDING_MODE_FAST,
+ CAM_MENU_RECORDING_MODE_SELF_NORMAL,
+ CAM_MENU_RECORDING_MODE_SELF_LIMIT,
+ CAM_MENU_FLASH_OFF, /* Flash */
+ CAM_MENU_FLASH_ON,
+ CAM_MENU_FLASH_AUTO,
+ CAM_MENU_METERING_MATRIX, /* Metering */
+ CAM_MENU_METERING_CENTER_WEIGHTED,
+ CAM_MENU_METERING_SPOT,
+ CAM_MENU_ISO_AUTO, /* ISO */
+ CAM_MENU_ISO_50,
+ CAM_MENU_ISO_100,
+ CAM_MENU_ISO_200,
+ CAM_MENU_ISO_400,
+ CAM_MENU_ISO_80O,
+ CAM_MENU_ISO_1600,
+ CAM_MENU_ISO_320O,
+ CAM_MENU_TIMER_OFF, /*TIMER*/
+ CAM_MENU_TIMER_2SEC,
+ CAM_MENU_TIMER_5SEC,
+ CAM_MENU_TIMER_10SEC,
+ CAM_MENU_STORAGE_PHONE,
+ CAM_MENU_STORAGE_MMC,
+ CAM_MENU_VOLUME_KEY_ZOOM,
+ CAM_MENU_VOLUME_KEY_SHUTTER,
+ CAM_MENU_MAX_NUMS,
+}CAM_MENU_ITEM;
+
+typedef enum _CamStorage {
+ CAM_STORAGE_INTERNAL = 0,
+ CAM_STORAGE_EXTERNAL,
+ CAM_STORAGE_DCF,
+ CAM_STORAGE_NUM,
+} CamStorage;
+
+typedef enum _CamToolbarButton {
+ CAM_TOOLBAR_BUTTON_MODE,
+ CAM_TOOLBAR_BUTTON_SHOT,
+ CAM_TOOLBAR_BUTTON_RECORD,
+ CAM_TOOLBAR_BUTTON_SCENE,
+ CAM_TOOLBAR_BUTTON_SETTINGS,
+
+ CAM_TOOLBAR_BUTTON_BACK,
+ CAM_TOOLBAR_BUTTON_FLASH,
+ CAM_TOOLBAR_BUTTON_BRIGHTNESS,
+ CAM_TOOLBAR_BUTTON_QUICKVIEW,
+
+ CAM_TOOLBAR_BUTTON_NUM,
+} CamToolbarButton;
+
+typedef enum _CamShotMode {
+ CAM_SINGLE_MODE,
+ /* self shooting mode */
+ CAM_SELF_SINGLE_MODE,
+ CAM_SHOT_MODE_NUMS
+} CamShotMode;
+
+enum _CamRecordMode {
+ CAM_RECORD_NORMAL,
+ CAM_RECORD_SLOW,
+ CAM_RECORD_FAST,
+ CAM_RECORD_MMS,
+ /* self recording mode */
+ CAM_RECORD_SELF,
+ CAM_RECORD_SELF_MMS,
+ CAM_RECORD_MODE_NUMS,
+};
+
+typedef enum _CamSceneMode {
+ CAM_SCENE_NONE = CAMERA_ATTR_SCENE_MODE_NORMAL,
+ CAM_SCENE_PORTRAIT = CAMERA_ATTR_SCENE_MODE_PORTRAIT,
+ CAM_SCENE_LANDSCAPE = CAMERA_ATTR_SCENE_MODE_LANDSCAPE,
+ CAM_SCENE_SPORTS = CAMERA_ATTR_SCENE_MODE_SPORTS,
+ CAM_SCENE_PARTY = CAMERA_ATTR_SCENE_MODE_PARTY_N_INDOOR,
+ CAM_SCENE_BEACHSNOW = CAMERA_ATTR_SCENE_MODE_BEACH_N_INDOOR,
+ CAM_SCENE_SUNSET = CAMERA_ATTR_SCENE_MODE_SUNSET,
+ CAM_SCENE_DUSKDAWN = CAMERA_ATTR_SCENE_MODE_DUSK_N_DAWN,
+ CAM_SCENE_FALL = CAMERA_ATTR_SCENE_MODE_FALL_COLOR,
+ CAM_SCENE_NIGHT = CAMERA_ATTR_SCENE_MODE_NIGHT_SCENE,
+ CAM_SCENE_FIREWORK = CAMERA_ATTR_SCENE_MODE_FIREWORK,
+ CAM_SCENE_TEXT = CAMERA_ATTR_SCENE_MODE_TEXT,
+ CAM_SCENE_SHOW_WINDOW = CAMERA_ATTR_SCENE_MODE_SHOW_WINDOW,
+ CAM_SCENE_CANDLELIGHT = CAMERA_ATTR_SCENE_MODE_CANDLE_LIGHT,
+ CAM_SCENE_BACKLIGHT = CAMERA_ATTR_SCENE_MODE_BACKLIGHT,
+
+} CamSceneMode;
+
+typedef enum _CamIso {
+ CAM_ISO_AUTO = CAMERA_ATTR_ISO_AUTO,
+ CAM_ISO_50 = CAMERA_ATTR_ISO_50,
+ CAM_ISO_100 = CAMERA_ATTR_ISO_100,
+ CAM_ISO_200 = CAMERA_ATTR_ISO_200,
+ CAM_ISO_400 = CAMERA_ATTR_ISO_400,
+ CAM_ISO_800 = CAMERA_ATTR_ISO_800,
+ CAM_ISO_1600 = CAMERA_ATTR_ISO_1600,
+ CAM_ISO_3200 = CAMERA_ATTR_ISO_3200,
+}CamIso;
+
+typedef enum _CamMetering {
+ CAM_METERING_MATRIX = CAMERA_ATTR_EXPOSURE_MODE_ALL,
+ CAM_METERING_CENTER_WEIGHTED = CAMERA_ATTR_EXPOSURE_MODE_CENTER,
+ CAM_METERING_SPOT = CAMERA_ATTR_EXPOSURE_MODE_SPOT,
+}CamMetering;
+
+#define CAMCORDER_WDR_OFF 0
+#define CAMCORDER_WDR_ON 1
+enum _CamWDR {
+ CAM_WDR_OFF =CAMCORDER_WDR_OFF, /*TODO:now capi not surpprot this attribute*/
+ CAM_WDR_ON = CAMCORDER_WDR_ON,
+};
+#define CAMCORDER_AHS_OFF 0
+#define CAMCORDER_AHS_ON 1
+enum _CamAHS { /*TODO:now capi not surpprot this attribute*/
+ CAM_AHS_OFF = CAMCORDER_AHS_OFF,
+ CAM_AHS_ON = CAMCORDER_AHS_ON,
+};
+
+typedef enum _CamFlashMode {
+ CAM_FLASH_OFF = CAMERA_ATTR_FLASH_MODE_OFF,
+ CAM_FLASH_ON = CAMERA_ATTR_FLASH_MODE_ON,
+ CAM_FLASH_AUTO = CAMERA_ATTR_FLASH_MODE_AUTO,
+ CAM_FLASH_MOVIE_ON = CAMERA_ATTR_FLASH_MODE_PERMANENT,
+} CamFlashMode;
+
+typedef enum _CamFocusMode {
+ CAM_FOCUS_NONE = CAMERA_ATTR_AF_NONE,
+ CAM_FOCUS_AUTO = CAMERA_ATTR_AF_NORMAL,
+ CAM_FOCUS_MACRO = CAMERA_ATTR_AF_MACRO,
+ CAM_FOCUS_CAF = CAMERA_ATTR_AF_FULL,
+ CAM_FOCUS_FACE = 100, /* It is not focus mode in MMF, set detect mode */
+} CamFocusMode;
+
+typedef enum _CamFocusStatus {
+ CAM_FOCUS_STATUS_RELEASED = 0,
+ /**< AF status released.*/
+ CAM_FOCUS_STATUS_ONGOING, /**< AF in pregress*/
+ CAM_FOCUS_STATUS_FOCUSED, /**< AF success*/
+ CAM_FOCUS_STATUS_FAILED, /**< AF fail*/
+ CAM_FOCUS_STATUS_NUM, /**< Number of AF status*/
+} CamFocusStatus;
+
+typedef enum _CamTouchAFState {
+ CAM_TOUCH_AF_STATE_NONE,
+ CAM_TOUCH_AF_STATE_READY,
+ CAM_TOUCH_AF_STATE_DOING,
+}CamTouchAFState;
+
+typedef enum _CamContinuousShotStatus {
+ CAM_CONTI_SHOT_STATUS_DEFAULT = 0, /**< NOT Started */
+ CAM_CONTI_SHOT_STATUS_CAPTURING,/**< NOW Capturing */
+ CAM_CONTI_SHOT_STATUS_STOPPING, /**< NOW Stopping */
+ CAM_CONTI_SHOT_STATUS_STOPPED, /**< Ignore Capture data */
+ CAM_CONTI_SHOT_STATUS_NUM, /**< Number of Continuous shot status*/
+} CamContinuousShotStatus;
+
+typedef enum _CamContinuousShotError {
+ CAM_CONTI_SHOT_ERROR_NONE = 0, /**< NOT Started */
+ CAM_CONTI_SHOT_ERROR_ENCODING, /**< JPEG Encoding error*/
+ CAM_CONTI_SHOT_ERROR_MMC_REMOVED,
+ /**< MMC is removed */
+ CAM_CONTI_SHOT_ERROR_FILE_WRITE,
+ /**< File write failed */
+ CAM_CONTI_SHOT_ERROR_NUM, /**< Number of Continuous shot status*/
+} CamContinuousShotError;
+
+typedef enum _CamSettingOnOff {
+ CAM_SETTINGS_OFF,
+ CAM_SETTINGS_ON,
+} CamSettingsOnOff;
+
+typedef enum _CamSettingsTimer {
+ CAM_SETTINGS_TIMER_OFF,
+ CAM_SETTINGS_TIMER_2SEC,
+ CAM_SETTINGS_TIMER_5SEC,
+ CAM_SETTINGS_TIMER_10SEC,
+ CAM_SETTINGS_TIMER_NUMS
+} CamSettingsTimer;
+
+typedef enum _CamSettingsWB {
+ CAM_SETTINGS_WB_AWB = CAMERA_ATTR_WHITE_BALANCE_AUTOMATIC,
+ CAM_SETTINGS_WB_INCANDESCENT = CAMERA_ATTR_WHITE_BALANCE_INCANDESCENT,
+ CAM_SETTINGS_WB_FLUORESCENT = CAMERA_ATTR_WHITE_BALANCE_FLUORESCENT,
+ CAM_SETTINGS_WB_DAYLIGHT = CAMERA_ATTR_WHITE_BALANCE_DAYLIGHT,
+ CAM_SETTINGS_WB_CLOUDY = CAMERA_ATTR_WHITE_BALANCE_CLOUDY,
+ CAM_SETTINGS_WB_SHADE = CAMERA_ATTR_WHITE_BALANCE_SHADE,
+ CAM_SETTINGS_WB_HORIZON = CAMERA_ATTR_WHITE_BALANCE_HORIZON,
+ CAM_SETTINGS_WB_FLASH = CAMERA_ATTR_WHITE_BALANCE_FLASH,
+ CAM_SETTINGS_WB_CUSTOM = CAMERA_ATTR_WHITE_BALANCE_CUSTOM,
+} CamSettingsWB;
+
+typedef enum _CamSettingsEffects {
+ /*
+ CAM_SETTINGS_EFFECTS_NOR = MM_CAMCORDER_COLOR_TONE_NORMAL,
+ */
+
+ CAM_SETTINGS_EFFECTS_NOR = CAMERA_ATTR_EFFECT_NONE, /**< None */
+ CAM_SETTINGS_EFFECTS_MONO = CAMERA_ATTR_EFFECT_MONO, /**< Mono */
+ CAM_SETTINGS_EFFECTS_SEPIA = CAMERA_ATTR_EFFECT_SEPIA, /**< Sepia */
+ CAM_SETTINGS_EFFECTS_NEGATIVE = CAMERA_ATTR_EFFECT_NEGATIVE, /**< Negative */
+ CAM_SETTINGS_EFFECTS_BLUE = CAMERA_ATTR_EFFECT_BLUE, /**< Blue */
+ CAM_SETTINGS_EFFECTS_GREEN = CAMERA_ATTR_EFFECT_GREEN, /**< Green */
+ CAM_SETTINGS_EFFECTS_AQUA = CAMERA_ATTR_EFFECT_AQUA, /**< Aqua */
+ CAM_SETTINGS_EFFECTS_VIOLET = CAMERA_ATTR_EFFECT_VIOLET, /**< Violet (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_ORANGE = CAMERA_ATTR_EFFECT_ORANGE, /**< Orange (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_GRAY = CAMERA_ATTR_EFFECT_GRAY, /**< Gray (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_RED = CAMERA_ATTR_EFFECT_RED, /**< Red (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_ANTIQUE = CAMERA_ATTR_EFFECT_ANTIQUE, /**< Antique (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_WARM = CAMERA_ATTR_EFFECT_WARM, /**< Warm (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_PINK = CAMERA_ATTR_EFFECT_PINK, /**< Pink (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_YELLOW = CAMERA_ATTR_EFFECT_YELLOW, /**< Yellow (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_PURPLE = CAMERA_ATTR_EFFECT_PURPLE, /**< Purple (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_EMBOSS = CAMERA_ATTR_EFFECT_EMBOSS, /**< Emboss (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_OUTLINE = CAMERA_ATTR_EFFECT_OUTLINE, /**< Outline (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_SOLARIZATION= CAMERA_ATTR_EFFECT_SOLARIZATION, /**< Solarization (Samsung Extension)*/
+ CAM_SETTINGS_EFFECTS_SKETCH_1 = CAMERA_ATTR_EFFECT_SKETCH, /**< Sketch (Samsung Extension/secondary camera only)*/
+ CAM_SETTINGS_EFFECTS_WASHED = CAMERA_ATTR_EFFECT_WASHED, /**< Washed */
+ CAM_SETTINGS_EFFECTS_VINTAGE_WARM = CAMERA_ATTR_EFFECT_VINTAGE_WARM, /**< Vintage warm */
+ CAM_SETTINGS_EFFECTS_VINTAGE_COLD = CAMERA_ATTR_EFFECT_VINTAGE_COLD, /**< Vintage cold */
+ CAM_SETTINGS_EFFECTS_POSTERIZATION = CAMERA_ATTR_EFFECT_POSTERIZATION, /**< Posterization */
+ CAM_SETTINGS_EFFECTS_CARTOON = CAMERA_ATTR_EFFECT_CARTOON, /**< Cartoon */
+ CAM_SETTINGS_EFFECTS_SELECTIVE_RED = CAMERA_ATTR_EFFECT_SELECTIVE_RED, /**< Selective color - Red */
+ CAM_SETTINGS_EFFECTS_SELECTIVE_GREEN = CAMERA_ATTR_EFFECT_SELECTIVE_GREEN, /**< Selective color - Green */
+ CAM_SETTINGS_EFFECTS_SELECTIVE_BLUE = CAMERA_ATTR_EFFECT_SELECTIVE_BLUE, /**< Selective color - Blue */
+ CAM_SETTINGS_EFFECTS_SELECTIVE_YELLOW = CAMERA_ATTR_EFFECT_SELECTIVE_YELLOW, /**< Selective color - Yellow */
+ CAM_SETTINGS_EFFECTS_SELECTIVE_RED_YELLOW = CAMERA_ATTR_EFFECT_SELECTIVE_RED_YELLOW, /**< Selective color - Red and Yellow */
+
+} CamSettingsEffects;
+
+enum _CamMMSizeLimit {
+ CAM_MM_SIZE_LIMIT_TYPE_BYTE,
+ CAM_MM_SIZE_LIMIT_TYPE_SECOND,
+};
+
+enum _CamQuality {
+ CAM_QUALITY_BEST = 100,
+ CAM_QUALITY_HIGH = 95, /* still only */
+ CAM_QUALITY_MEDIUM = 80,
+ CAM_QUALITY_LOW = 65,
+};
+
+enum _CamSound {
+ CAM_SETTINGS_SOUND_OFF = -1,
+ CAM_SETTINGS_SOUND_1,
+ CAM_SETTINGS_SOUND_2,
+ CAM_SETTINGS_SOUND_3,
+};
+
+typedef enum _CamVolumeKeyMode {
+ CAM_VOLUME_KEY_ZOOM,
+ CAM_VOLUME_KEY_SHUTTER,
+} CamVolumeKeyMode;
+
+typedef enum _CamZoomValue {
+ CAM_ZOOM_VALUE_MIN,
+
+ CAM_ZOOM_VALUE_01,
+ CAM_ZOOM_VALUE_02,
+ CAM_ZOOM_VALUE_03,
+ CAM_ZOOM_VALUE_04,
+ CAM_ZOOM_VALUE_05,
+ CAM_ZOOM_VALUE_06,
+ CAM_ZOOM_VALUE_07,
+ CAM_ZOOM_VALUE_08,
+ CAM_ZOOM_VALUE_09,
+ CAM_ZOOM_VALUE_10,
+ CAM_ZOOM_VALUE_11,
+ CAM_ZOOM_VALUE_12,
+ CAM_ZOOM_VALUE_13,
+ CAM_ZOOM_VALUE_14,
+ CAM_ZOOM_VALUE_15,
+ CAM_ZOOM_VALUE_16,
+ CAM_ZOOM_VALUE_17,
+ CAM_ZOOM_VALUE_18,
+ CAM_ZOOM_VALUE_19,
+ CAM_ZOOM_VALUE_20,
+ CAM_ZOOM_VALUE_21,
+ CAM_ZOOM_VALUE_22,
+ CAM_ZOOM_VALUE_23,
+ CAM_ZOOM_VALUE_24,
+ CAM_ZOOM_VALUE_25,
+ CAM_ZOOM_VALUE_26,
+ CAM_ZOOM_VALUE_27,
+ CAM_ZOOM_VALUE_28,
+ CAM_ZOOM_VALUE_29,
+ CAM_ZOOM_VALUE_30,
+ CAM_ZOOM_VALUE_4x,
+
+ CAM_ZOOM_VALUE_MAX
+} CamZoomValue;
+
+/* Continuous Shot */
+typedef struct _CamContinuousShotData {
+ int shot_num;
+ int lock;
+ CamContinuousShotStatus capture_status;
+ GError *error;
+ char *first_filename;
+ char *file_path[MAX_CONTINUOUS_SHOT];
+ char *thumbnail_file_path[MAX_CONTINUOUS_SHOT];
+} CamContinuousShotData;
+
+enum _CamRecStopType {
+ CAM_REC_STOP_UNEXPECTED = 0,
+ CAM_REC_STOP_NORMAL,
+ CAM_REC_STOP_LOW_BATTERY,
+ CAM_REC_STOP_ASM,
+ CAM_REC_STOP_MAX_SIZE,
+ CAM_REC_STOP_TIME_LIMIT,
+ CAM_REC_STOP_NO_SPACE,
+ CAM_REC_STOP_USB_CONN,
+ CAM_REC_STOP_POWER_KEY,
+
+ CAM_REC_STOP_NUM,
+};
+
+typedef enum _CamUgState {
+ CAM_UG_PAUSE_STATE = 1,
+ CAM_UG_RESUME_STATE,
+ CAM_UG_RESET_STATE,
+ CAM_UG_TERMINATE_STATE,
+} CamUgState;
+
+typedef enum _CamFoucusMode {
+ CAM_FOCUS_MODE_TOUCH_AUTO = 0,
+ CAM_FOCUS_MODE_HALFSHUTTER = 1,
+ CAM_FOCUS_MODE_CONTINUOUS = 2,
+} CamAppFocusMode;
+
+typedef struct __ShortCutData {
+ /*fixed*/
+ Evas_Object *icon;
+ Evas_Object_Event_Cb func;
+ CAM_MENU_ITEM setting_type;
+ char *icon_filepath;
+ char *name;
+ /*if change, should swap*/
+ int menu_bar_no;/*-1,if -1, not in menubar;0,1,2,3,4, from left to right; now: 0 be always setting */
+ gboolean is_on_menu_bar;
+ gboolean is_virtual;
+ /*varible*/
+ Evas_Coord x, y, w, h;
+ int part_index;/*part index*/
+ int list_index; /*list index*/
+ int row;/*unused*/
+ int col;/*unused*/
+
+} ShortCutData;
+
+
+typedef struct __MenuBar_Shortcut {
+ Evas_Object *icon;
+ Evas_Object *icon_button;
+ Evas_Object_Event_Cb func;
+ CAM_MENU_ITEM setting_type;
+ int menu_bar_no;
+}MenuBar_Shortcut;
+
+typedef struct __Ecore_Pipe_Data_Info {
+ void *data;
+ unsigned int cmd;
+} Ecore_Pipe_Data_Info;
+
+enum {
+ CAM_MENU_BAR_LEFT_INVALID = -1,
+ CAM_MENU_BAR_LEFT_0 = 0,
+ CAM_MENU_BAR_LEFT_1,
+ CAM_MENU_BAR_LEFT_2,
+ CAM_MENU_BAR_LEFT_3,
+ CAM_MENU_BAR_LEFT_4,
+ CAM_MENU_BAR_LEFT_MAX_NUM,
+};
+
+enum {
+ CAM_MAIN_PIPE_OP_TYPE_INVAILD = -1,
+ CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL, /*update thumbnail type*/
+ CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL_NO_ANI, /*update thumbnail type*/
+ CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR, /*rotate target, start rotate icons*/
+ CAM_MAIN_PIPE_OP_TYPE_SHUTTER_ANIMATION, /*shutter: show rect and thumbnail effect*/
+ CAM_MAIN_PIPE_OP_TYPE_BURST_SHOT_UPDATE_PROGRESS, /*burstshot: update capture progress*/
+ CAM_MAIN_PIPE_OP_TYPE_BURST_SHOT_DISPLAY_POPUP,
+ CAM_MAIN_PIPE_OP_TYPE_BEST_SHOT_IMAGE_HANDLE,
+ CAM_MAIN_PIPE_OP_TYPE_UPDATE_VIEW,
+ CAM_MAIN_PIPE_OP_TYPE_ERROR_POPUP, /*error popup*/
+ CAM_MAIN_PIPE_OP_TYPE_VIDEO_CAPTURE_HANDLE,
+ CAM_MAIN_PIPE_OP_TYPE_RUN_IMAGE_VIEWER,
+ CAM_MAIN_PIPE_OP_TYPE_MAX_NUM,
+}; /*note: this define for main pipe operation type*/
+
+
+typedef enum __CAM_EDIT_SHORTCUTS_INDEX{
+ CAM_EDIT_SHORTCUTS_INDEX_INVALID = -1,
+ CAM_EDIT_SHORTCUTS_INDEX_0 = 0,/*row 1*/
+ CAM_EDIT_SHORTCUTS_INDEX_1,
+ CAM_EDIT_SHORTCUTS_INDEX_2,
+ CAM_EDIT_SHORTCUTS_INDEX_3,
+ CAM_EDIT_SHORTCUTS_INDEX_4,/*row 2*/
+ CAM_EDIT_SHORTCUTS_INDEX_5,
+ CAM_EDIT_SHORTCUTS_INDEX_6,
+ CAM_EDIT_SHORTCUTS_INDEX_7,
+ CAM_EDIT_SHORTCUTS_INDEX_8,/*row 3*/
+ CAM_EDIT_SHORTCUTS_INDEX_9,
+ CAM_EDIT_SHORTCUTS_INDEX_10,
+ CAM_EDIT_SHORTCUTS_INDEX_11,
+ CAM_EDIT_SHORTCUTS_INDEX_12,/*row 4*/
+ CAM_EDIT_SHORTCUTS_INDEX_13,
+ CAM_EDIT_SHORTCUTS_INDEX_14,
+ CAM_EDIT_SHORTCUTS_INDEX_15,
+ CAM_EDIT_SHORTCUTS_INDEX_16,/*row 5*/
+ CAM_EDIT_SHORTCUTS_INDEX_17,
+ CAM_EDIT_SHORTCUTS_INDEX_18,
+ CAM_EDIT_SHORTCUTS_INDEX_19,
+ CAM_EDIT_SHORTCUTS_INDEX_MAX,
+} CAM_EDIT_SHORTCUTS_INDEX;
+
+typedef enum _CamTargetDirection {
+ CAM_TARGET_DIRECTION_LANDSCAPE = 0,
+ CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE,
+ CAM_TARGET_DIRECTION_PORTRAIT,
+ CAM_TARGET_DIRECTION_PORTRAIT_INVERSE,
+ CAM_TARGET_DIRECTION_MAX,
+}CamTargetDirection;
+
+typedef struct __cam_menu_composer {
+ const char* title;
+ Eina_Array* array;
+} cam_menu_composer;
+
+typedef struct __Edit_ShortCuts_Rect {
+ Evas_Coord x;
+ Evas_Coord y;
+ Evas_Coord w;
+ Evas_Coord h;
+} CAM_Edit_ShortCuts_Rect;
+
+typedef struct __cam_menubar_data {
+ Evas_Object *icon;
+ int menu_type;
+} cam_menubar_data;
+
+typedef struct __cam_reserved_setting_data {
+ gint front_shooting_mode;
+ gint front_recording_mode;
+ gint rear_shooting_mode;
+ gint rear_recording_mode;
+
+ gint front_photo_resolution;
+ gint front_video_resolution;
+ gint rear_photo_resolution;
+ gint rear_video_resolution;
+
+ gint front_effect;
+ gint rear_effect;
+
+ gint front_wb;
+ gint rear_wb;
+} cam_reserved_setting_data;
+
+typedef enum _CamErrorType {
+ CAM_ERROR_TYPE_NONE = 0,
+ CAM_ERROR_TYPE_UNABLE_TO_LAUNCH,
+} CamErrorType;
+
+typedef enum _CamTipPopupType {
+ CAM_TIP_POPUP_NONE = -1,
+ CAM_TIP_POPUP_BURSTSHOT_HELP = 0,
+ CAM_TIP_POPUP_VOLUMEKEY_HELP,
+ CAM_TIP_POPUP_MAX,
+} CamTipPopupType;
+
+#endif /* __DEF_CAM_PROPERTY_H_ */
diff --git a/include/cam_rec.h b/include/cam_rec.h
new file mode 100755
index 0000000..3fb241e
--- /dev/null
+++ b/include/cam_rec.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_cam_rec_H_
+#define __DEF_cam_rec_H_
+
+/* #include <applog.h> */
+#include <Elementary.h>
+/* #include <Imlib2.h> */
+#include <utilX.h>
+#include <glib.h>
+#include <glib-object.h>
+/*#include <mmf/mm_camcorder.h>*/
+
+#include "cam_property.h"
+#define TMPFILE_PATH "/tmp/"
+#define TMPFILE_PREFIX "/.camera_recording_tmp"
+#define TMPFILE_EXTENTION ".3gp"
+
+/* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+Eina_Bool cam_video_capture_handle_idler(void *item);
+Eina_Bool cam_video_capture_handle(void *data);
+gboolean cam_video_record_cancel(void *data);
+gboolean cam_video_record_resume(void *data);
+gboolean cam_video_record_pause(void *data);
+gboolean cam_video_record_start(void *data);
+gboolean cam_video_record_stop(void *data);
+Eina_Bool cam_video_idler_record_stop(void *data);
+gboolean cam_rec_save_and_register_video_file(void *data);
+
+#endif
diff --git a/include/cam_sound.h b/include/cam_sound.h
new file mode 100755
index 0000000..819468c
--- /dev/null
+++ b/include/cam_sound.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_SOUND_H_
+#define _CAM_SOUND_H_
+
+#include <glib.h>
+
+#define SOUND_PATH "/usr/ug/res/sounds/ug-camera-efl/sounds"
+
+enum _CamSoundEffect {
+ CAM_SOUND_EFFECT_SHUTTER1,
+ CAM_SOUND_EFFECT_SHUTTER2,
+ CAM_SOUND_EFFECT_SHUTTER3,
+ CAM_SOUND_EFFECT_CONTINUOUS_SHUTTER,
+ CAM_SOUND_EFFECT_CONTINUOUS_READY,
+ CAM_SOUND_EFFECT_REC_START1,
+ CAM_SOUND_EFFECT_REC_START2,
+ CAM_SOUND_EFFECT_REC_START3,
+ CAM_SOUND_EFFECT_REC_PAUSE,
+ CAM_SOUND_EFFECT_REC_RESUME,
+ CAM_SOUND_EFFECT_REC_CANCEL,
+ CAM_SOUND_EFFECT_REC_COMMIT1,
+ CAM_SOUND_EFFECT_REC_COMMIT2,
+ CAM_SOUND_EFFECT_REC_COMMIT3,
+ CAM_SOUND_EFFECT_TICK,
+ CAM_SOUND_EFFECT_AF_OK,
+ CAM_SOUND_EFFECT_AF_FAIL,
+ CAM_SOUND_EFFECT_NUM,
+};
+
+gboolean cam_sound_init(GError **error);
+void cam_sound_finalize(void);
+void cam_sound_set(int index, const gchar *file);
+const gchar *cam_sound_get(int index);
+gboolean cam_sound_is_silent_mode(void);
+/*change audio rute api */
+gboolean cam_sound_set_mic();
+gboolean cam_sound_play(int index, void *data);
+
+#endif /*_CAM_SOUND_H_*/
diff --git a/include/cam_ta.h b/include/cam_ta.h
new file mode 100755
index 0000000..2064ab4
--- /dev/null
+++ b/include/cam_ta.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_TA_H_
+#define _CAM_TA_H_
+
+#define ENABLE_TA
+#ifdef ENABLE_TA
+#define CAM_TA_MAX_CHECKPOINT 500
+#define CAM_TA_MAX_ACCUM 500
+
+typedef struct _cam_ta_checkpoint {
+ unsigned long timestamp;
+ char *name;
+} cam_ta_checkpoint;
+
+typedef struct _cam_ta_accum_item {
+ unsigned long elapsed_accum;
+ unsigned long num_calls;
+ unsigned long elapsed_min;
+ unsigned long elapsed_max;
+ unsigned long first_start;
+ unsigned long last_end;
+
+ char *name;
+
+ unsigned long timestamp;
+ int on_estimate;
+ int num_unpair;
+} cam_ta_accum_item;
+
+#define CAM_TA_SHOW_STDOUT 0
+#define CAM_TA_SHOW_STDERR 1
+#define CAM_TA_SHOW_FILE 2
+#define CAM_TA_RESULT_FILE "/tmp/cam-ta.log"
+
+int cam_ta_init(void);
+int cam_ta_release(void);
+void cam_ta_set_enable(int enable);
+char *cam_ta_fmt(const char *fmt, ...);
+
+int cam_ta_add_checkpoint(char *name, int show, char *filename, int line);
+void cam_ta_show_checkpoints(void);
+void cam_ta_show_diff(char *name1, char *name2);
+
+int cam_ta_get_numof_checkpoints();
+unsigned long cam_ta_get_diff(char *name1, char *name2);
+char *cam_ta_get_name(int idx);
+
+int cam_ta_accum_item_begin(char *name, int show, char *filename, int line);
+int cam_ta_accum_item_end(char *name, int show, char *filename, int line);
+void cam_ta_accum_show_result(int direction);
+
+#define CAM_TA_INIT() (cam_ta_init())
+#define CAM_TA_RELEASE() (cam_ta_release())
+#define CAM_TA_SET_ENABLE(enable) (cam_ta_set_enable(enable))
+
+#define CAM_TA_ADD_CHECKPOINT(name, show) (cam_ta_add_checkpoint(name, show, __FILE__, __LINE__))
+#define CAM_TA_SHOW_CHECKPOINTS() (cam_ta_show_checkpoints())
+#define CAM_TA_SHOW_DIFF(name1, name2) (cam_ta_show_diff(name1, name2))
+#define CAM_TA_GET_NUMOF_CHECKPOINTS() (cam_ta_get_numof_checkpoints())
+#define CAM_TA_GET_DIFF(name1, name2) (cam_ta_get_diff(name1, name2))
+#define CAM_TA_GET_NAME(idx) (cam_ta_get_name(idx))
+
+#define CAM_TA_ACUM_ITEM_BEGIN(name, show) (cam_ta_accum_item_begin(name, show, __FILE__, __LINE__))
+#define CAM_TA_ACUM_ITEM_END(name, show) (cam_ta_accum_item_end(name, show, __FILE__, __LINE__))
+#define CAM_TA_ACUM_ITEM_SHOW_RESULT() (cam_ta_accum_show_result(CAM_TA_SHOW_STDOUT))
+#define CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(x) (cam_ta_accum_show_result(x))
+
+#define __cam_ta__(name, x) \
+CAM_TA_ACUM_ITEM_BEGIN(name, 0); \
+x \
+CAM_TA_ACUM_ITEM_END(name, 0);
+
+#define __cam_tafmt__(fmt, args...) (cam_ta_fmt(fmt, ##args))
+
+#else
+
+#define CAM_TA_INIT()
+#define CAM_TA_RELEASE()
+#define CAM_TA_SET_ENABLE(enable)
+
+#define CAM_TA_ADD_CHECKPOINT(name, show)
+#define CAM_TA_SHOW_CHECKPOINTS()
+#define CAM_TA_SHOW_DIFF(name1, name2)
+#define CAM_TA_GET_NUMOF_CHECKPOINTS()
+#define CAM_TA_GET_DIFF(name1, name2)
+#define CAM_TA_GET_NAME(idx)
+
+#define CAM_TA_ACUM_ITEM_BEGIN(name, show)
+#define CAM_TA_ACUM_ITEM_END(name, show)
+#define CAM_TA_ACUM_ITEM_SHOW_RESULT()
+#define CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(x)
+#define __cam_ta__(name, x) x
+#define __cam_tafmt__(fmt, args...)
+
+#endif
+#endif
diff --git a/include/cam_typeconverter.h b/include/cam_typeconverter.h
new file mode 100644
index 0000000..55e37cb
--- /dev/null
+++ b/include/cam_typeconverter.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef CAM_TYPECONVERTER_H_
+#define CAM_TYPECONVERTER_H_
+
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+
+#include "camera.h"
+#include "cam_property.h"
+
+
+unsigned int cam_iso_dev_convert_caps(camera_attr_iso_e iso);
+unsigned int cam_effect_dev_convert_caps(camera_attr_effect_mode_e effect);
+unsigned int cam_fps_dev_convert_caps(camera_attr_fps_e fps);
+unsigned int cam_wb_dev_convert_caps(camera_attr_whitebalance_e wb);
+unsigned int cam_metering_dev_convert_caps(camera_attr_exposure_mode_e metering);
+unsigned int cam_scene_dev_convert_caps(camera_attr_scene_mode_e scene);
+unsigned int cam_flash_dev_convert_caps(camera_attr_flash_mode_e flash);
+unsigned int cam_focus_dev_convert_caps(camera_attr_af_mode_e focus);
+
+unsigned int cam_iso_cam_convert_caps(CamIso iso);
+unsigned int cam_effect_cam_convert_caps(CamSettingsEffects effect);
+unsigned int cam_wb_cam_convert_caps(CamSettingsWB wb);
+unsigned int cam_metering_cam_convert_caps(CamMetering metering);
+unsigned int cam_scene_cam_convert_caps(CamSceneMode scene);
+unsigned int cam_flash_cam_convert_caps(CamFlashMode flash);
+unsigned int cam_focus_cam_convert_caps(CamFocusMode focus);
+unsigned int cam_resolution_cam_convert_caps(unsigned int res);
+
+#ifdef _cplusplus
+}
+#endif
+
+
+
+#endif /* CAM_TYPECONVERTER_H_ */
diff --git a/include/cam_ui_effect_utils.h b/include/cam_ui_effect_utils.h
new file mode 100644
index 0000000..28a181d
--- /dev/null
+++ b/include/cam_ui_effect_utils.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_CAM_UI_EFFECT_UTILS_H__
+#define __H_CAM_UI_EFFECT_UTILS_H__
+
+#include "cam.h"
+/*
+* for thumbnail animation
+*/
+struct cam_ui_effect_custom_effect
+{
+ Evas_Coord x, y;
+ struct _size
+ {
+ Evas_Coord w, h;
+ } from, to;
+};
+
+/**
+ * @brief get @focus object zoom or origin state
+ * @return Operation result
+ * @return TRUE: origin state, not zoom; FALSE: zoom state.
+ */
+gboolean cam_ui_effect_utils_get_zoom_state();
+/**
+ * @brief set @obj zoom from @from_rate to @to_rate and then go back origin size
+ * @param[in] obj The object to be set
+ * @param[in] from_rate start size
+ * @param[in] to_rate end size
+ * @param[in] duration effect duration time
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_effect_utils_set_zoom_inout_effect(Evas_Object *obj, float from_rate, float to_rate, double duration);
+/**
+ * @brief set @obj zoom from @from_rate to @to_rate
+ * @param[in] obj The object to be set
+ * @param[in] from_rate start size
+ * @param[in] to_rate end size
+ * @param[in] duration effect duration time
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_effect_utils_set_zoom_effect(Evas_Object *obj, float from_rate, float to_rate, double duration);
+
+/**
+ * @brief set @obj resize at x,y h: fixed value @h; w: from 0 to @w
+ * @param[in] obj The object to be set
+ * @param[in] x x coordinate
+ * @param[in] y y coordinate
+ * @param[in] w @obj max width
+ * @param[in] h @obj max height
+ * @param[in] duration effect duration time
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_effect_utils_set_thumbnail_effect(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y,
+ Evas_Coord w,
+ Evas_Coord h,
+ double duration);
+/**
+ * @brief stop zoom effect transit pointer, created by cam_ui_effect_utils_set_zoom_effect
+ * @param[in] void
+ * @return void
+ */
+void cam_ui_effect_utils_stop_zoom_effect(void);
+
+#endif /* __H_CAM_UI_EFFECT_UTILS_H__ */
+//end file
diff --git a/include/cam_ui_rotate_utils.h b/include/cam_ui_rotate_utils.h
new file mode 100644
index 0000000..04f874d
--- /dev/null
+++ b/include/cam_ui_rotate_utils.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __H_CAM_UI_ROTATE_UTILS_H__
+#define __H_CAM_UI_ROTATE_UTILS_H__
+
+#include "cam.h"
+
+struct cam_ui_rotate_obj_params
+{
+ Evas_Coord x, y;/*start_x, start_y*/
+ double degree;
+
+ Evas_Object *obj;
+};
+
+/**
+ * @brief set @obj rotate @degree, the @obj left_top coordinate (start_x, start_y)
+ * @param[in] obj The object to be set
+ * @param[in] start_x left_top coordinate x,
+ * @param[in] start_y left_top coordinate y,
+ * @param[in] degree the rotate angle
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_rotate_utils_map_rotate(Evas_Object *obj,
+ Evas_Coord start_x,
+ Evas_Coord start_y,
+ double degree);
+/**
+ * @brief set @obj rotate from@from_degree to @to_degree, the time is @duration
+ * @param[in] obj The object to be set
+ * @param[in] from_degree start angle
+ * @param[in] to_degree end angle
+ * @param[in] duration effect duration time
+ * @param[in] cb callback function, it will be called in the rotation end
+ * @param[in] data @cb user data.
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_rotate_utils_rotation_effect(Evas_Object *obj,
+ float from_degree,
+ float to_degree,
+ double duration,
+ void (*cb) (void *data, Elm_Transit *transit),
+ void *data);
+/**
+ * @brief set @setting popup rotate, @degree, the @obj left_top coordinate (start_x, start_y)
+ * @param[in] obj The object to be set
+ * @param[in] start_x left_top coordinate x,
+ * @param[in] start_y left_top coordinate y,
+ * @param[in] degree the rotate angle
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_rotate_utils_map_setting_popup_rotate(Evas_Object *obj,
+ Evas_Coord start_x,
+ Evas_Coord start_y,
+ double degree);
+/**
+ * @brief @data appdata, rotate the camera ui icons
+ * @param[in] data appdata
+ * @param[in] duration effect duration time
+ * @return Operation result
+ * @return void
+ */
+gboolean cam_ui_rotate_utils_rotate_start(void *data, double duration);
+/**
+ * @brief set @obj, self rotate @degree, using evas_map.
+ * @param[in] obj The object to be set
+ * @param[in] degree the rotate angle
+ * @return Operation result
+ * @return void
+ */
+void cam_ui_rotate_utils_map_self_rotate(Evas_Object *obj,
+ double degree);
+/**
+ * @brief @data appdata, rotate the camera ui:toolbar shortcust icons
+ * @param[in] data appdata
+ * @param[in] duration effect duration time
+ * @return Operation result
+ * @return void
+ */
+gboolean cam_ui_rotate_utils_rotate_toolbar_shortcuts(void *data, double duration);
+
+#endif /* __H_CAM_UI_ROTATE_UTILS_H__ */
+//end file
diff --git a/include/cam_voice_command.h b/include/cam_voice_command.h
new file mode 100644
index 0000000..4a507a1
--- /dev/null
+++ b/include/cam_voice_command.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CAM_VOICE_COMMAND_H__
+#define __CAM_VOICE_COMMAND_H__
+
+#include "glib.h"
+
+typedef enum {
+ CAM_VIOCE_CMD_MIN,
+ CAM_VOICE_CMD_READY,
+ CAM_VOICE_CMD_REJECT,
+ CAM_VOICE_CMD_ERROR,
+ CAM_VOICE_CMD_MAX
+}CamVoiceCmdState;
+
+
+typedef void (*cam_voice_cmd_cb)(CamVoiceCmdState state, void* data);
+
+gboolean cam_voice_cmd_create(cam_voice_cmd_cb cmd_cb, void *data);
+void cam_voice_cmd_destroy();
+
+#endif
+
diff --git a/include/camera_utils.h b/include/camera_utils.h
new file mode 100755
index 0000000..36e7da3
--- /dev/null
+++ b/include/camera_utils.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_camera_utils_H_
+#define __DEF_camera_utils_H_
+
+#include <sys/vfs.h>
+
+#include "cam.h"
+
+typedef unsigned char byte;
+
+/* GPS */
+typedef enum {
+ CAM_IMG_ROTATION_LEFT = 0,
+ CAM_IMG_ROTATION_RIGHT,
+} CamRorationAngle;
+
+gboolean cam_utils_check_battery_warning_low(void);
+gboolean cam_utils_check_battery_critical_low(void);
+gboolean cam_utils_check_call_running(void);
+
+
+int cam_utils_get_battery_level(void);
+
+gint cam_utils_get_charging_status(void);
+
+void *cam_utils_YUV422_to_ARGB(byte *frame, int width, int height);
+
+void *cam_utils_IYUV_to_ARGB(byte *frame, int width, int height);
+
+gboolean
+cam_utils_save_to_jpg_file(int storage_id, gchar *filename, void *frame,
+ int width, int height, GError **error);
+
+gboolean
+cam_utils_save_to_jpg_memory(byte **memory, unsigned int *size, void *src_frame,
+ int width, int height);
+
+void
+cam_utils_draw_guide_rectangle(void *data, void *frame, int x_org, int y_org,
+ int width, int height);
+
+void cam_utils_convert_YUYV_to_UYVY(unsigned char *dst, unsigned char *src, gint length); /* fast convert , but lost 1pixel Y data. */
+
+void cam_utils_convert_UYVY_to_YUYV(char *dst, char *src, gint length);
+
+#if 1
+void
+cam_utils_convert_YUYV_to_YUV420P(unsigned char *pInBuf, unsigned char *pOutBuf,
+ int width, int height);
+#else
+void
+cam_utils_convert_YUYV_to_YUV420P(byte *src, byte *dst, gint width,
+ gint height);
+#endif
+
+void *cam_utils_load_fake_yuv_image(); /* This function load memory address of 640*480 yuyv (16bit) image */
+
+void *cam_utils_get_fake_yuv_image();
+
+void cam_utils_free_fake_yuv_image();
+
+guint64 cam_system_get_remain_rec_time(void *data);
+
+gint64 cam_system_get_still_count_by_resolution(void *data);
+
+gint64 cam_get_free_space(const gchar *path);
+
+gint64 cam_get_capacity_space(const gchar *path);
+
+void *cam_utils_load_temp_file(gchar *filepath, gint *pfilesize);
+
+gboolean cam_utils_check_torchlight_status(void *data);
+
+gboolean cam_utils_check_mmc_for_writing(GError **error);
+
+gboolean cam_utils_check_mmc_for_inserted_stats(void *data);
+
+int cam_utils_check_mmc_status(void);
+
+int cam_utils_get_storage_id_from_filepath(const char *filepath);
+
+gboolean cam_utils_safety_file_copy(const char *dst, const char *src,
+ GError **error);
+
+gboolean cam_utils_check_wide_resolution(int resol_w, int resol_h);
+
+gboolean cam_utils_parse_args(int argc, char *argv[], CamExeArgs *args);
+
+gboolean cam_utils_check_fake_image_exist(const char *fake_image_path);
+
+gboolean cam_utils_image_rotate(char *src, int src_width, int src_height,
+ char *dst, int *dst_width, int *dst_height,
+ int degree);
+gboolean cam_utils_set_guide_rect_color(void *data);
+/**
+ * @brief change video stream xy to windos xy
+ * while target is 0 degree(landscape):the coordinate sytem:
+ * win ----------------------------------(width:horizontal)
+ * -offset - video -offset -
+ * -<--->-<--------------->-<----->-
+ * - - - -
+ *height(vertical)----------------------------------
+ * @param[in] faces camera_detected_face_s array
+ * @param[in] count face count
+ * @param[in] data user_data, it should be appdata
+ * @return void
+ */
+void cam_utils_set_videos_xy_to_windows_xy(CamVideoRectangle src,
+ CamVideoRectangle *result,
+ void *data);
+/**
+ * @brief change windos stream xy to video xy
+ * while target is 0 degree(landscape):the coordinate sytem:
+ * win ----------------------------------(width:horizontal)
+ * -offset - video -offset -
+ * -<--->-<--------------->-<----->-
+ * - - - -
+ *height(vertical)----------------------------------
+ * @param[in] faces camera_detected_face_s array
+ * @param[in] count face count
+ * @param[in] data user_data, it should be appdata
+ * @return void
+ */
+
+void cam_utils_set_windows_xy_to_videos_xy(CamVideoRectangle src,
+ CamVideoRectangle *result,
+ void *data);
+/**
+ * @brief send request from child thread to main thread
+ * @param[in] data user_data, it should be appdata
+ * @param[in] pipe_data passing data : child thread to main thread
+ * @param[in] cmd the operation command
+ * @return void
+ */
+gboolean cam_utils_request_main_pipe_handler(void *data, void *pipe_data, int cmd);
+
+#endif /* __DEF_camera_utils_H__ */
diff --git a/include/edc-callback/cam_common_edc_callback.h b/include/edc-callback/cam_common_edc_callback.h
new file mode 100755
index 0000000..9b4f626
--- /dev/null
+++ b/include/edc-callback/cam_common_edc_callback.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_camera_common_edc_H_
+#define __DEF_camera_common_edc_H_
+/* #include "cam_property.h" */
+void cam_layout_del_all(void *data);
+
+int cam_get_menu_item_to_index(void* data, int menu_type, int item);
+int cam_get_value_to_index(void* data, int menu_type, int value);
+
+int cam_convert_menu_item_to_mmfw_value(int mode);
+int cam_convert_shot_mode_to_menu_item(int mode);
+int cam_convert_flash_to_menu_item(int mode);
+int cam_convert_recording_mode_to_menu_item(int mode);
+int cam_convert_video_resolution_to_menu_item(int mode);
+int cam_convert_photo_resolution_to_menu_item(int mode);
+int cam_convert_iso_to_menu_item(int mode);
+int cam_convert_focus_to_menu_item(int mode);
+int cam_convert_timer_to_menu_item(int mode);
+int cam_convert_scene_mode_to_menu_item(int mode);
+int cam_convert_wb_to_menu_item(int mode);
+int cam_convert_effect_to_menu_item(int mode);
+int cam_convert_metering_to_menu_item(int mode);
+int cam_convert_storage_to_menu_item(int mode);
+int cam_convert_volume_key_to_menu_item(int mode);
+
+
+/* Evas_Object* create_image_for_smart(Evas *evas, Evas_Object *obj, const char *edj_file, const char *image_name); */
+void define_mouse_callback(void *data);
+int shot_mode_set(void *data, int mode);
+#endif /* __DEF_camera_common_edc_H_ */
diff --git a/include/edc-callback/cam_ev_edc_callback.h b/include/edc-callback/cam_ev_edc_callback.h
new file mode 100755
index 0000000..8274c82
--- /dev/null
+++ b/include/edc-callback/cam_ev_edc_callback.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_camera_ev_H_
+#define __DEF_camera_ev_H_
+
+#include "cam_property.h"
+
+gboolean load_ev_edje(struct appdata *ad);
+gboolean update_ev_edje(struct appdata *ad);
+gboolean unload_ev_edje(struct appdata *ad);
+#endif /* __DEF_camera_ev_H_ */
diff --git a/include/edc-callback/cam_indicator_edc_callback.h b/include/edc-callback/cam_indicator_edc_callback.h
new file mode 100755
index 0000000..6cd69f4
--- /dev/null
+++ b/include/edc-callback/cam_indicator_edc_callback.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_camera_indicator_H_
+#define __DEF_camera_indicator_H_
+int cam_indicator_create(struct appdata *ad);
+int cam_indicator_destory(struct appdata *ad);
+int cam_indicator_rotate(struct appdata *ad);
+void cam_indicator_update(struct appdata *ad);
+
+void indicator_toggle(struct appdata *ad, gboolean hide);
+void indicator_update_storage(struct appdata *ad);
+void indicator_update_remain_count(struct appdata *ad);
+void indicator_update_gps(struct appdata *ad);
+void indicator_update_gps_level(struct appdata *ad);
+void indicator_update_battery(struct appdata *ad, int level);
+void indicator_update_mute_icon(struct appdata *ad);
+void cam_indicator_set_show_state(struct appdata *ad, bool show);
+
+#endif /* __DEF_camera_indicator_H_ */
+
diff --git a/include/edc-callback/cam_recording_edc_callback.h b/include/edc-callback/cam_recording_edc_callback.h
new file mode 100755
index 0000000..f6e702d
--- /dev/null
+++ b/include/edc-callback/cam_recording_edc_callback.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_camera_recording_H_
+#define __DEF_camera_recording_H_
+int load_recording_edje(struct appdata *ad);
+int unload_recording_edje(struct appdata *ad);
+int cam_recording_rotate(struct appdata *ad);
+
+/* you can use this function to set time text for recording */
+void recording_set_time(void *data, int hh, int mm, int ss);
+
+#endif /* __DEF_camera_recording_H_ */
+
diff --git a/include/edc-callback/cam_toolbar_edc_callback.h b/include/edc-callback/cam_toolbar_edc_callback.h
new file mode 100755
index 0000000..90f0f18
--- /dev/null
+++ b/include/edc-callback/cam_toolbar_edc_callback.h
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_CAM_TOOLBAR_EDC_H_
+#define __DEF_CAM_TOOLBAR_EDC_H_
+
+#include "cam_property.h"
+#include "cam.h"
+
+typedef enum {
+ BUTTON_STATE_NORMAL,
+ BUTTON_STATE_PRESS,
+ BUTTON_STATE_DIM,
+} ButtonState;
+
+typedef enum {
+ TOOLBAR_ITEM_STATE_NORMAL,
+ TOOLBAR_ITEM_STATE_PRESS,
+ TOOLBAR_ITEM_STATE_EDIT,
+ TOOLBAR_ITEM_STATE_DIM,
+ TOOLBAR_ITEM_STATE_INVISIBLE,
+} ToolbarItemState;
+
+typedef struct __Shortcuts_List_Prop {
+ CAM_EDIT_SHORTCUTS_INDEX index;
+ char prop_name[16];
+} Shortcuts_List_Prop;
+
+int cam_toolbar_create(struct appdata *ad);
+void cam_toolbar_destroy(struct appdata *ad);
+void cam_toolbar_update(struct appdata *ad);
+int cam_toolbar_rotate(struct appdata *ad);
+int show_toolbar_edje(struct appdata *ad);
+int hide_toolbar_edje(struct appdata *ad);
+
+gboolean toolbar_update_quickview_thumbnail(struct appdata *ad);
+/**
+ * @brief update thumbnail
+ * @param[in] data appdata
+ * @return Operation result
+ * @return gboolean
+ */
+gboolean toolbar_update_quickview_thumbnail_no_animation(struct appdata *ad);
+
+#ifdef ENABLE_CAPTURE_ANIMATION
+int toolbar_update_quickview_thumbnail_by_screennail(struct appdata *ad);
+#endif
+
+int cam_toolbar_setting_popup_create(struct appdata *ad);
+void cam_toolbar_setting_popup_update(struct appdata *ad);
+void cam_toolbar_setting_popup_destroy(struct appdata *ad);
+
+Eina_Bool cam_animation_effect(void *data, char *type, Evas_Object *obj);
+Eina_Bool cam_icon_animation_effect(void *data);
+int toolbar_shot_guide_popup_create(struct appdata *ad, int shot_mode);
+int toolbar_shot_guide_popup_destory(struct appdata *ad);
+int toolbar_shot_guide_popup_move();
+
+Eina_Bool cam_show_setting_menu(void *data);
+Eina_Bool cam_show_setting_menu_option_popup(void *data);
+gboolean cam_check_timer_is_running(void *data);
+int cam_guideline_create(struct appdata *ad);
+void settings_guideline_refresh(struct appdata *ad);
+void toolbar_destroy_shortcuts_popup(struct appdata *ad);
+void cam_toolbar_shutter_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void cam_toolbar_recording_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void cam_toolbar_recording_stop_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+
+
+/**
+ * @brief create tip popup
+ * @param[in] ad cam appdata handle
+ * @param[in] ad tip popup type
+ * @return Operation result
+ * @return void
+ */
+void cam_tip_popup_create(struct appdata *ad, const CamTipPopupType type);
+
+/**
+ * @brief destroy tip popup
+ * @param[in] ad cam appdata handle
+ * @return Operation result
+ * @return void
+ */
+void cam_tip_popup_destroy(struct appdata *ad);
+
+/**
+ * @brief rotate tip popup
+ * @param[in] ad cam appdata handle
+ * @return Operation result
+ * @return void
+ */
+void cam_tip_popup_rotate(struct appdata *ad);
+
+/**
+ * @brief set show state of caf button
+ * @param[in] ad cam appdata handle
+ * @param[in] show caf button show state
+ * @return Operation result
+ * @return void
+ */
+void cam_toolbar_show_cafbutton(struct appdata *ad, gboolean show);
+void cam_toolbar_update_shutter_button(struct appdata *ad, ToolbarItemState state);
+
+#endif /* __DEF_CAM_TOOLBAR_EDC_H_ */
+
diff --git a/include/edc-callback/cam_zoom_edc_callback.h b/include/edc-callback/cam_zoom_edc_callback.h
new file mode 100755
index 0000000..34d9774
--- /dev/null
+++ b/include/edc-callback/cam_zoom_edc_callback.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_camera_zoom_H_
+#define __DEF_camera_zoom_H_
+
+#include "cam_property.h"
+int zoom_in(struct appdata *ad, gboolean zoom_in, int zoom_gap);
+gboolean cam_pinch_zoom_in(struct appdata* ad,gboolean is_zoom_in,int zoom_value);
+
+gboolean load_zoom_edje(struct appdata *ad);
+gboolean update_zoom_edje(struct appdata *ad);
+gboolean unload_zoom_edje(struct appdata *ad);
+void cam_zoom_create_pinch_edje(struct appdata *data);
+
+#endif /* __DEF_camera_zoom_H_ */
diff --git a/include/edc_image_name.h b/include/edc_image_name.h
new file mode 100755
index 0000000..7b19d7a
--- /dev/null
+++ b/include/edc_image_name.h
@@ -0,0 +1,402 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_edc_image_name_H_
+#define __DEF_edc_image_name_H_
+
+
+/**** tmp image shoud be removed ****/
+
+/**cam_recording_edje.edj**/
+#define RECORDING_IMAGE_REC_IMAGE "indicator/camera_rec.png"
+#define SHUTTER_REC_NORMAL_IMAGE "tmp/11_camera_mode_recording_normal.png"
+#define SHUTTER_REC_PRESS_IMAGE "tmp/11_camera_mode_recording_press.png"
+#define SHUTTER_REC_NORMAL_VERTICAL_IMAGE "tmp/11_camera_mode_recording_normal_ver.png"
+#define SHUTTER_REC_PRESS_VERTICAL_IMAGE "tmp/11_camera_mode_recording_press_ver.png"
+#define RECORDING_PRESS_IMAGE_ANI "tmp/11_camcorder_standby_press.png"
+#define RECORDING_PRESS_IMAGE_ANI_VER "tmp/11_camcorder_standby_press_ver.png"
+#define CAF_BUTTON_NORMAL_IMAGE "camera_recording_btn_caf.png"
+#define CAF_BUTTON_PRESS_IMAGE "camera_recording_btn_caf_press.png"
+
+/** cam_toolbar_layout.edj **/
+/* toolbar bg */
+#define LEFT_TOOLBAR_BG_IMAGE "camera_normal_opacity_l_bg.png"
+#define RIGHT_TOOLBAR_BG_IMAGE "camera_normal_opacity_r_bg.png"
+#define LEFT_TOOLBAR_BG_VER_IMAGE "vertical/camera_normal_bg_ver_01.png"
+#define RIGHT_TOOLBAR_BG_VER_IMAGE "vertical/camera_normal_bg_ver2_01.png"
+/* item_button */
+#define BUTTON_BG_NORMAL_IMAGE "camera_menu_bg.png"
+#define BUTTON_BG_PRESS_IMAGE "camera_menu_tab_hold.png"
+/* mode item icons */
+#define MODE_BG_IMAGE "tmp/11_camera_mode_bg.png"
+#define MODE_BUTTON_IMAGE "tmp/11_camera_mode_button.png"
+#define MODE_BG_VER_IMAGE "tmp/11_camera_mode_bg_ver.png"
+#define MODE_BUTTON_VER_IMAGE "tmp/11_camera_mode_button_ver.png"
+/* shutter button */
+#define SHUTTER_NORMAL_IMAGE "camera_mode_shutter_normal.png"
+#define SHUTTER_NORMAL_INVERSE_IMAGE "camera_mode_shutter_normal_inverse.png"
+#define SHUTTER_NORMAL_VER_IMAGE "vertical/camera_mode_shutter_normal_ver.png"
+#define SHUTTER_NORMAL_VER_INVERSE_IMAGE "vertical/camera_mode_shutter_norma_ver_inverse.png"
+#define SHUTTER_PRESS_IMAGE "camera_mode_shutter_press.png"
+#define SHUTTER_PRESS_VER_IMAGE "vertical/camera_mode_shutter_press_ver.png"
+#define SHUTTER_DIM_IMAGE "camera_mode_shutter_dim.png"
+#define SHUTTER_DIM_VER_IMAGE "vertical/camera_mode_shutter_dim_ver.png"
+#define CAMERA_SHUTTER_ICON_IMAGE "camera_mode_shutter_icon.png"
+#define CAMCORDER_SHUTTER_ICON_IMAGE "camcorder_standby_shutter.png"
+#define CAMCORDER_SHUTTER_ICON_PRESS_IMAGE "camcorder_standby_shutter_press.png"
+#define CAMCORDER_SHUTTER_ICON_DIM_IMAGE "camcorder_standby_shutter_dim.png"
+#define CAMCORDER_PAUSE_ICON_IMAGE "camcorder_recording_pause.png"
+#define CAMCORDER_PAUSE_ICON_PRESS_IMAGE "camcorder_recording_pause_press.png"
+#define CAMCORDER_STOP_ICON_IMAGE "camcorder_recording_stop.png"
+#define CAMCORDER_STOP_ICON_PRESS_IMAGE "camcorder_recording_stop_press.png"
+#define SNAPSHOT_PRESS_IMAGE "tmp/11_camera_snapshot_press.png"
+#define SNAPSHOT_NORMAL_IMAGE "tmp/11_camera_snapshot.png"
+/* thumbnail */
+#define THUMBNAIL_BG_NORMAL_IMAGE "camera_mode_thumbnail_bg.png"
+#define THUMBNAIL_BG_PRESS_IMAGE "camera_mode_thumbnail_bg_press.png"
+/* back button */
+#define BACK_BUTTON_NORMAL_IMAGE "camara_back_button.png"
+#define BACK_BUTTON_PRESS_IMAGE "camara_back_button_press.png"
+
+/** cam_util.edj **/
+#define FOCUS_GUIDE_NOTREADY_IMAGE "touch_af_focus_rect_01.png"
+#define FOCUS_GUIDE_FOCUSED_IMAGE "touch_af_focus_rect_03.png"
+#define FOCUS_GUIDE_FAILED_IMAGE "touch_af_focus_rect_02.png"
+#define TIMER_ICON_BG_IMAGE "camera_timer_popup.png"
+
+/* guide line image */
+#define GUDIE_LINE_1_IMAGE "tmp/37_guideline_1.png"
+#define GUDIE_LINE_2_IMAGE "tmp/37_guideline_2.png"
+#define GUDIE_OPA_LINE_1_IMAGE "tmp/37_guideline_opa_1.png"
+#define GUDIE_OPA_LINE_2_IMAGE "tmp/37_guideline_opa_2.png"
+
+/* shortcut image */
+#define SHOTCUTS_LINE_H_IMAGE "camera_shortcut_line_h_01.png"
+#define SHOTCUTS_LINE_V_IMAGE "camera_shortcut_line_v_01.png"
+#define SHOTCUTS_EDIT_BG_H_IMAGE "camera_shrtcut_edit_bg.png"
+#define SHOTCUTS_EDIT_BG_V_IMAGE "vertical/camera_shrtcut_edit_bg_ver.png"
+#define SHOTCUTS_EDIT_MENU_BG_H_IMAGE "camera_shrtcut_menubar_bg.png"
+#define SHOTCUTS_EDIT_MENU_BG_V_IMAGE "vertical/camera_shrtcut_menubar_bg_ver.png"
+#define SHOTCUTS_TEXT_BG_IMAGE "camera_shrtcut_text_bg.png"
+
+/* popup bg image */
+#define SHOTTING_MODE_POPUP_BG_IMAGE "tmp/37_shootingmode_popup_bg.png"
+
+/** cam_zoom_layout.edj **/
+#define ZOOM_BG_IMAGE "camera_popup_zoom.png"
+#define ZOOM_BG_VER_IMAGE "vertical/camera_popup_zoom_ver.png"
+#define ZOOM_PINCH_IMAGE "touch_af_focus_rect_01.png"
+
+
+/** style_ctxpopuup_camera_with_radio.edj **/
+#define CTXPOPUP_BG_IMAGE "camera_option_popup_bg.png"
+#define CTXPOPUP_BG_2DEPTH_IMAGE "camera_option_popup_bg_2depth.png"
+#define CTXPOPUP_LEFT_ARROW_IMAGE "camera_option_popup_anker.png"
+#define CTXPOPUP_RIGHTT_ARROW_IMAGE "camera_option_popup_anker_inverse.png"
+#define CTXPOPUP_TOP_ARROW_IMAGE "vertical/camera_option_popup_anker_vertical.png"
+#define CTXPOPUP_BOTTOM_ARROW_IMAGE "vertical/camera_option_popup_anker_vertical_inverse.png"
+
+#define SETTING_POPUP_RADIO_BUTTON_ON_IMAGE "camera_radio_btn_on.png"
+#define SETTING_POPUP_RADIO_BUTTON_OFF_IMAGE "camera_radio_btn_off.png"
+
+/** style_slider_camera.edj **/
+#define SLIDER_BAR_IMAGE "camera_popup_zoom_bar.png"
+#define SLIDER_BAR_VER_IMAGE "vertical/camera_popup_zoom_bar_ver.png"
+#define SLIDER_HANDLER_IMAGE "camera_handle.png"
+
+
+#define SETTING_POPUP_CHECK_BUTTON_ON_IMAGE "camera_button_on.png"
+#define SETTING_POPUP_CHECK_BUTTON_OFF_IMAGE "camera_button_off.png"
+
+/** Source images **/
+/* Burst shot */
+#define BURST_SHOT_MODE_ON_NORMAL_ICON "shortcut/camera_mode_burstshot_on_nor.png"
+#define BURST_SHOT_MODE_ON_PRESS_ICON "shortcut/camera_mode_burstshot_on_press.png"
+#define BURST_SHOT_MODE_OFF_NORMAL_ICON "shortcut/camera_mode_burstshot_off_nor.png"
+#define BURST_SHOT_MODE_OFF_PRESS_ICON "shortcut/camera_mode_burstshot_off_press.png"
+
+/* Self portrait */
+#define CAMERA_SELF_PORTRAIT_NORMAL_ICON "shortcut/camera_mode_self_shot_nor.png"
+#define CAMERA_SELF_PORTRAIT_PRESS_ICON "shortcut/camera_mode_self_shot_press.png"
+#define CAMCORDER_SELF_PORTRAIT_NORMAL_ICON "shortcut/camera_mode_self_rec_nor.png"
+#define CAMCORDER_SELF_PORTRAIT_PRESS_ICON "shortcut/camera_mode_self_rec_press.png"
+
+/* Flash */
+#define FLASH_AUTO_NORMAL_ICON "shortcut/camera_mode_flash_auto_nor.png"
+#define FLASH_AUTO_PRESS_ICON "shortcut/camera_mode_flash_auto_press.png"
+#define FLASH_OFF_NORMAL_ICON "shortcut/camera_mode_flash_off_nor.png"
+#define FLASH_OFF_PRESS_ICON "shortcut/camera_mode_flash_off_press.png"
+#define FLASH_ON_NORMAL_ICON "shortcut/camera_mode_flash_on_nor.png"
+#define FLASH_ON_PRESS_ICON "shortcut/camera_mode_flash_on_press.png"
+
+/* Shooting mode */
+#define SHOOTING_MODE_SINGLE_NORMAL_ICON "shortcut/camera_mode_shooting_mode_single_shot_nor.png"
+#define SHOOTING_MODE_SINGLE_PRESS_ICON "shortcut/camera_mode_shooting_mode_single_shot_press.png"
+
+/* Recording mode */
+#define RECORDING_MODE_NORMAL_NORMAL_ICON "shortcut/camera_mode_recording_normal_nor.png"
+#define RECORDING_MODE_NORMAL_PRESS_ICON "shortcut/camera_mode_recording_normal_press.png"
+#define RECORDING_MODE_LIMIT_MMS_NORMAL_ICON "shortcut/camera_mode_recording_limit_for_mms_nor.png"
+#define RECORDING_MODE_LIMIT_MMS_PRESS_ICON "shortcut/camera_mode_recording_limit_for_mms_press.png"
+#define RECORDING_MODE_SLOW_MOTION_NORMAL_ICON "shortcut/camera_mode_recording_slowmotion_nor.png"
+#define RECORDING_MODE_SLOW_MOTION_PRESS_ICON "shortcut/camera_mode_recording_slowmotion_press.png"
+#define RECORDING_MODE_FAST_MOTION_NORMAL_ICON "shortcut/camera_mode_recording_fast_nor.png"
+#define RECORDING_MODE_FAST_MOTION_PRESS_ICON "shortcut/camera_mode_recording_fast_press.png"
+
+/* Scene mode */
+#define SCENE_MODE_AUTO_NORMAL_ICON "shortcut/camera_mode_shooting_mode_scene_none_nor.png"
+#define SCENE_MODE_AUTO_PRESS_ICON "shortcut/camera_mode_shooting_mode_scene_none_nor.png"
+#define SCENE_MODE_PORTRAIT_NORMAL_ICON "shortcut/camera_mode_shooting_mode_portrait_nor.png"
+#define SCENE_MODE_PORTRAIT_PRESS_ICON "shortcut/camera_mode_shooting_mode_portrait_press.png"
+#define SCENE_MODE_LANDSCAPE_NORMAL_ICON "shortcut/camera_mode_shooting_mode_landscape_nor.png"
+#define SCENE_MODE_LANDSCAPE_PRESS_ICON "shortcut/camera_mode_shooting_mode_landscape_press.png"
+#define SCENE_MODE_NIGHT_NORMAL_ICON "shortcut/camera_mode_shooting_mode_night_nor.png"
+#define SCENE_MODE_NIGHT_PRESS_ICON "shortcut/camera_mode_shooting_mode_night_press.png"
+#define SCENE_MODE_SPORTS_NORMAL_ICON "shortcut/camera_mode_shooting_mode_sports_nor.png"
+#define SCENE_MODE_SPORTS_PRESS_ICON "shortcut/camera_mode_shooting_mode_sports_press.png"
+#define SCENE_MODE_PARTY_NORMAL_ICON "shortcut/camera_mode_shooting_mode_party_indoor_nor.png"
+#define SCENE_MODE_PARTY_PRESS_ICON "shortcut/camera_mode_shooting_mode_party_indoor_press.png"
+#define SCENE_MODE_BEACHSNOW_NORMAL_ICON "shortcut/camera_mode_shooting_mode_beach_snow_nor.png"
+#define SCENE_MODE_BEACHSNOW_PRESS_ICON "shortcut/camera_mode_shooting_mode_beach_snow_press.png"
+#define SCENE_MODE_SUNSET_NORMAL_ICON "shortcut/camera_mode_shooting_mode_sunset_nor.png"
+#define SCENE_MODE_SUNSET_PRESS_ICON "shortcut/camera_mode_shooting_mode_sunset_press.png"
+#define SCENE_MODE_DUSKDAWN_NORMAL_ICON "shortcut/camera_mode_shooting_mode_dawn_nor.png"
+#define SCENE_MODE_DUSKDAWN_PRESS_ICON "shortcut/camera_mode_shooting_mode_dawn_press.png"
+#define SCENE_MODE_FALL_NORMAL_ICON "shortcut/camera_mode_shooting_mode_fall_nor.png"
+#define SCENE_MODE_FALL_PRESS_ICON "shortcut/camera_mode_shooting_mode_fall_press.png"
+#define SCENE_MODE_FIREWORK_NORMAL_ICON "shortcut/camera_mode_shooting_mode_firework_nor.png"
+#define SCENE_MODE_FIREWORK_PRESS_ICON "shortcut/camera_mode_shooting_mode_firework_press.png"
+#define SCENE_MODE_TEXT_NORMAL_ICON "shortcut/camera_mode_shooting_mode_text_nor.png"
+#define SCENE_MODE_TEXT_PRESS_ICON "shortcut/camera_mode_shooting_mode_text_press.png"
+#define SCENE_MODE_CANDLELIGHT_NORMAL_ICON "shortcut/camera_mode_shooting_mode_candlelight_nor.png"
+#define SCENE_MODE_CANDLELIGHT_PRESS_ICON "shortcut/camera_mode_shooting_mode_candlelight_press.png"
+#define SCENE_MODE_BACKLIGHT_NORMAL_ICON "shortcut/camera_mode_shooting_mode_Backlight_nor.png"
+#define SCENE_MODE_BACKLIGHT_PRESS_ICON "shortcut/camera_mode_shooting_mode_Backlight_press.png"
+
+/* Exposure value */
+#define EXPOSURE_VALUE_MINUS_2_0_ICON "shortcut/camera_mode_exposure_9_nor.png"
+#define EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON "shortcut/camera_mode_exposure_9_press.png"
+#define EXPOSURE_VALUE_MINUS_1_5_ICON "shortcut/camera_mode_exposure_8_nor.png"
+#define EXPOSURE_VALUE_MINUS_1_5_PRESS_ICON "shortcut/camera_mode_exposure_8_press.png"
+#define EXPOSURE_VALUE_MINUS_1_0_ICON "shortcut/camera_mode_exposure_7_nor.png"
+#define EXPOSURE_VALUE_MINUS_1_0_PRESS_ICON "shortcut/camera_mode_exposure_7_press.png"
+#define EXPOSURE_VALUE_MINUS_0_5_ICON "shortcut/camera_mode_exposure_6_nor.png"
+#define EXPOSURE_VALUE_MINUS_0_5_PRESS_ICON "shortcut/camera_mode_exposure_6_press.png"
+#define EXPOSURE_VALUE_0_ICON "shortcut/camera_mode_exposure_5_nor.png"
+#define EXPOSURE_VALUE_0_PRESS_ICON "shortcut/camera_mode_exposure_5_press.png"
+#define EXPOSURE_VALUE_PLUS_0_5_ICON "shortcut/camera_mode_exposure_4_nor.png"
+#define EXPOSURE_VALUE_PLUS_0_5_PRESS_ICON "shortcut/camera_mode_exposure_4_press.png"
+#define EXPOSURE_VALUE_PLUS_1_0_ICON "shortcut/camera_mode_exposure_3_nor.png"
+#define EXPOSURE_VALUE_PLUS_1_0_PRESS_ICON "shortcut/camera_mode_exposure_3_press.png"
+#define EXPOSURE_VALUE_PLUS_1_5_ICON "shortcut/camera_mode_exposure_2_nor.png"
+#define EXPOSURE_VALUE_PLUS_1_5_PRESS_ICON "shortcut/camera_mode_exposure_2_press.png"
+#define EXPOSURE_VALUE_PLUS_2_0_ICON "shortcut/camera_mode_exposure_1_nor.png"
+#define EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON "shortcut/camera_mode_exposure_1_press.png"
+
+/* Focus mode */
+#define FOCUS_MODE_AUTO_NORMAL_ICON "shortcut/camera_mode_focus_auto_nor.png"
+#define FOCUS_MODE_AUTO_PRESS_ICON "shortcut/camera_mode_focus_auto_press.png"
+#define FOCUS_MODE_MACRO_NORMAL_ICON "shortcut/camera_mode_focus_macro_nor.png"
+#define FOCUS_MODE_MACRO_PRESS_ICON "shortcut/camera_mode_focus_macro_press.png"
+#define FOCUS_MODE_FACE_DETECTION_NORMAL_ICON "shortcut/camera_mode_focus_face_detection_nor.png"
+#define FOCUS_MODE_FACE_DETECTION_PRESS_ICON "shortcut/camera_mode_focus_face_detection_press.png"
+
+/* Timer */
+#define TIMER_OFF_NORMAL_ICON "shortcut/camera_mode_timer_off_nor.png"
+#define TIMER_OFF_PRESS_ICON "shortcut/camera_mode_timer_off_press.png"
+#define TIMER_2SEC_NORMAL_ICON "shortcut/camera_mode_timer_2_nor.png"
+#define TIMER_2SEC_PRESS_ICON "shortcut/camera_mode_timer_2_press.png"
+#define TIMER_5SEC_NORMAL_ICON "shortcut/camera_mode_timer_5_nor.png"
+#define TIMER_5SEC_PRESS_ICON "shortcut/camera_mode_timer_5_press.png"
+#define TIMER_10SEC_NORMAL_ICON "shortcut/camera_mode_timer_10_nor.png"
+#define TIMER_10SEC_PRESS_ICON "shortcut/camera_mode_timer_10_press.png"
+
+/* Effect */
+#define EFFECTS_NONE_NORMAL_ICON "shortcut/camera_mode_effect_none_nor.png"
+#define EFFECTS_NONE_PRESS_ICON "shortcut/camera_mode_effect_none_press.png"
+#define EFFECTS_NEGATIVE_NORMAL_ICON "shortcut/camera_mode_effect_negative_nor.png"
+#define EFFECTS_NEGATIVE_PRESS_ICON "shortcut/camera_mode_effect_negative_press.png"
+#define EFFECTS_BLACKANDWHITE_NORMAL_ICON "shortcut/camera_mode_effect_Black and white_nor.png"
+#define EFFECTS_BLACKANDWHITE_PRESS_ICON "shortcut/camera_mode_effect_Black and white_press.png"
+#define EFFECTS_SEPIA_NORMAL_ICON "shortcut/camera_mode_effect_sepia_nor.png"
+#define EFFECTS_SEPIA_PRESS_ICON "shortcut/camera_mode_effect_sepia_press.png"
+
+/* Camera resolution */
+#define CAM_RESOLUTION_8M_NORMAL_ICON "shortcut/camera_mode_resolution_8m_nor.png"
+#define CAM_RESOLUTION_8M_PRESS_ICON "shortcut/camera_mode_resolution_8m_press.png"
+#define CAM_RESOLUTION_5M_NORMAL_ICON "shortcut/camera_mode_resolution_5m_nor.png"
+#define CAM_RESOLUTION_5M_PRESS_ICON "shortcut/camera_mode_resolution_5m_press.png"
+#define CAM_RESOLUTION_3_2M_NORMAL_ICON "shortcut/camera_mode_resolution_3_2m_nor.png"
+#define CAM_RESOLUTION_3_2M_PRESS_ICON "shortcut/camera_mode_resolution_3_2m_press.png"
+#define CAM_RESOLUTION_2M_NORMAL_ICON "shortcut/camera_mode_resolution_2m_nor.png"
+#define CAM_RESOLUTION_2M_PRESS_ICON "shortcut/camera_mode_resolution_2m_press.png"
+#define CAM_RESOLUTION_1_3M_NORMAL_ICON "shortcut/camera_mode_resolution_1_3m_nor.png"
+#define CAM_RESOLUTION_1_3M_PRESS_ICON "shortcut/camera_mode_resolution_1_3m_press.png"
+#define CAM_RESOLUTION_0_3M_NORMAL_ICON "shortcut/camera_mode_resolution_0_3m_nor.png"
+#define CAM_RESOLUTION_0_3M_PRESS_ICON "shortcut/camera_mode_resolution_0_3m_press.png"
+#define CAM_RESOLUTION_W6M_NORMAL_ICON "shortcut/camera_mode_resolution_w6m_nor.png"
+#define CAM_RESOLUTION_W6M_PRESS_ICON "shortcut/camera_mode_resolution_w6m_press.png"
+#define CAM_RESOLUTION_W5_7M_NORMAL_ICON "shortcut/camera_mode_resolution_w5_7m_nor.png"
+#define CAM_RESOLUTION_W5_7M_PRESS_ICON "shortcut/camera_mode_resolution_w5_7m_press.png"
+#define CAM_RESOLUTION_W2_4M_NORMAL_ICON "shortcut/camera_mode_resolution_w2_4m_nor.png"
+#define CAM_RESOLUTION_W2_4M_PRESS_ICON "shortcut/camera_mode_resolution_w2_4m_press.png"
+#define CAM_RESOLUTION_W2M_NORMAL_ICON "shortcut/camera_mode_resolution_w2m_nor.png"
+#define CAM_RESOLUTION_W2M_PRESS_ICON "shortcut/camera_mode_resolution_w2m_press.png"
+#define CAM_RESOLUTION_W0_9M_NORMAL_ICON "shortcut/camera_mode_resolution_w0_9m_nor.png"
+#define CAM_RESOLUTION_W0_9M_PRESS_ICON "shortcut/camera_mode_resolution_w0_9m_press.png"
+
+/* Camcorder resolution */
+#define REC_RESOLUTION_FULLHD_NORMAL_ICON "shortcut/camera_mode_resolution_1920X1080_nor.png"
+#define REC_RESOLUTION_FULLHD_PRESS_ICON "shortcut/camera_mode_resolution_1920X1080_press.png"
+#define REC_RESOLUTION_HD_NORMAL_ICON "shortcut/camera_mode_resolution_1280X720_nor.png"
+#define REC_RESOLUTION_HD_PRESS_ICON "shortcut/camera_mode_resolution_1280X720_press.png"
+#define REC_RESOLUTION_WVGA_NORMAL_ICON "shortcut/camera_mode_resolution_720X480_nor.png"
+#define REC_RESOLUTION_WVGA_PRESS_ICON "shortcut/camera_mode_resolution_720X480_press.png"
+#define REC_RESOLUTION_VGA_NORMAL_ICON "shortcut/camera_mode_resolution_640X480_nor.png"
+#define REC_RESOLUTION_VGA_PRESS_ICON "shortcut/camera_mode_resolution_640X480_press.png"
+#define REC_RESOLUTION_QVGA_NORMAL_ICON "shortcut/camera_mode_resolution_320X240_nor.png"
+#define REC_RESOLUTION_QVGA_PRESS_ICON "shortcut/camera_mode_resolution_320X240_press.png"
+#define REC_RESOLUTION_QCIF_NORMAL_ICON "shortcut/camera_mode_resolution_176X144_nor.png"
+#define REC_RESOLUTION_QCIF_PRESS_ICON "shortcut/camera_mode_resolution_176X144_press.png"
+
+/* White balance */
+#define WHITE_BALANCE_AUTO_NORMAL_ICON "shortcut/camera_mode_whitebalance_auto_nor.png"
+#define WHITE_BALANCE_AUTO_PRESS_ICON "shortcut/camera_mode_whitebalance_auto_press.png"
+#define WHITE_BALANCE_INCANDESCENT_NORMAL_ICON "shortcut/camera_mode_whitebalance_incandescent_nor.png"
+#define WHITE_BALANCE_INCANDESCENT_PRESS_ICON "shortcut/camera_mode_whitebalance_incandescent_press.png"
+#define WHITE_BALANCE_FLUORESCENT_NORMAL_ICON "shortcut/camera_mode_whitebalance_fluorescent_nor.png"
+#define WHITE_BALANCE_FLUORESCENT_PRESS_ICON "shortcut/camera_mode_whitebalance_fluorescent_press.png"
+#define WHITE_BALANCE_DAYLIGHT_NORMAL_ICON "shortcut/camera_mode_whitebalance_day_light_nor.png"
+#define WHITE_BALANCE_DAYLIGHT_PRESS_ICON "shortcut/camera_mode_whitebalance_day_light_press.png"
+#define WHITE_BALANCE_CLOUDY_NORMAL_ICON "shortcut/camera_mode_whitebalance_cloudy_nor.png"
+#define WHITE_BALANCE_CLOUDY_PRESS_ICON "shortcut/camera_mode_whitebalance_cloudy_press.png"
+#define WHITE_BALANCE_SHADE_NORMAL_ICON "shortcut/camera_mode_whitebalance_shade_nor.png"
+#define WHITE_BALANCE_SHADE_PRESS_ICON "shortcut/camera_mode_whitebalance_shade_press.png"
+#define WHITE_BALANCE_HORIZON_NORMAL_ICON "shortcut/camera_mode_whitebalance_horizon_nor.png"
+#define WHITE_BALANCE_HORIZON_PRESS_ICON "shortcut/camera_mode_whitebalance_horizon_press.png"
+
+/* ISO */
+#define ISO_AUTO_NORMAL_ICON "shortcut/camera_mode_iso_auto_nor.png"
+#define ISO_AUTO_PRESS_ICON "shortcut/camera_mode_iso_auto_press.png"
+#define ISO_50_NORMAL_ICON "shortcut/camera_mode_iso_50_nor.png"
+#define ISO_50_PRESS_ICON "shortcut/camera_mode_iso_50_press.png"
+#define ISO_100_NORMAL_ICON "shortcut/camera_mode_iso_100_nor.png"
+#define ISO_100_PRESS_ICON "shortcut/camera_mode_iso_100_press.png"
+#define ISO_200_NORMAL_ICON "shortcut/camera_mode_iso_200_nor.png"
+#define ISO_200_PRESS_ICON "shortcut/camera_mode_iso_200_press.png"
+#define ISO_400_NORMAL_ICON "shortcut/camera_mode_iso_400_nor.png"
+#define ISO_400_PRESS_ICON "shortcut/camera_mode_iso_400_press.png"
+#define ISO_800_NORMAL_ICON "shortcut/camera_mode_iso_800_nor.png"
+#define ISO_800_PRESS_ICON "shortcut/camera_mode_iso_800_press.png"
+
+/* Metering */
+#define METERING_MATRIX_NORMAL_ICON "shortcut/camera_mode_metering_matrix_nor.png"
+#define METERING_MATRIX_PRESS_ICON "shortcut/camera_mode_metering_matrix_press.png"
+#define METERING_CENTER_WEIGHTED_NORMAL_ICON "shortcut/camera_mode_metering_center_weighted_nor.png"
+#define METERING_CENTER_WEIGHTED_PRESS_ICON "shortcut/camera_mode_metering_center_weighted_press.png"
+#define METERING_SPOT_NORMAL_ICON "shortcut/camera_mode_metering_spot_nor.png"
+#define METERING_SPOT_PRESS_ICON "shortcut/camera_mode_metering_spot_press.png"
+
+/* Anti shake */
+#define ANTISHAKE_ON_NORMAL_ICON "shortcut/camera_mode_anti_shake_on_nor.png"
+#define ANTISHAKE_ON_PRESS_ICON "shortcut/camera_mode_anti_shake_on_press.png"
+#define ANTISHAKE_OFF_NORMAL_ICON "shortcut/camera_mode_anti_shake_off_nor.png"
+#define ANTISHAKE_OFF_PRESS_ICON "shortcut/camera_mode_anti_shake_off_press.png"
+
+/* Outdoor visibility */
+#define OUTDOOR_VISIBILITY_ON_NORMAL_ICON "shortcut/camera_mode_outdoor_visibility_on_nor.png"
+#define OUTDOOR_VISIBILITY_ON_PRESS_ICON "shortcut/camera_mode_outdoor_visibility_on_press.png"
+#define OUTDOOR_VISIBILITY_OFF_NORMAL_ICON "shortcut/camera_mode_outdoor_visibility_off_nor.png"
+#define OUTDOOR_VISIBILITY_OFF_PRESS_ICON "shortcut/camera_mode_outdoor_visibility_off_press.png"
+
+/* Auto contrast */
+#define AUTO_CONTRAST_ON_NORMAL_ICON "shortcut/camera_mode_auto_contrast_on_nor.png"
+#define AUTO_CONTRAST_ON_PRESS_ICON "shortcut/camera_mode_auto_contrast_on_press.png"
+#define AUTO_CONTRAST_OFF_NORMAL_ICON "shortcut/camera_mode_auto_contrast_off_nor.png"
+#define AUTO_CONTRAST_OFF_PRESS_ICON "shortcut/camera_mode_auto_contrast_off_press.png"
+
+/* Guide lines */
+#define GUIDELINE_ON_NORMAL_ICON "shortcut/camera_mode_guidelines_on_nor.png"
+#define GUIDELINE_ON_PRESS_ICON "shortcut/camera_mode_guidelines_on_press.png"
+#define GUIDELINE_OFF_NORMAL_ICON "shortcut/camera_mode_guidelines_off_nor.png"
+#define GUIDELINE_OFF_PRESS_ICON "shortcut/camera_mode_guidelines_off_press.png"
+
+/* Capture with voice */
+#define CAPTURE_WITH_VOICE_ON_NORMAL_ICON "shortcut/camera_mode_capture_voice_on_nor.png"
+#define CAPTURE_WITH_VOICE_ON_PRESS_ICON "shortcut/camera_mode_capture_voice_on_press.png"
+#define CAPTURE_WITH_VOICE_OFF_NORMAL_ICON "shortcut/camera_mode_capture_voice_off_nor.png"
+#define CAPTURE_WITH_VOICE_OFF_PRESS_ICON "shortcut/camera_mode_capture_voice_off_press.png"
+
+/* GPS */
+#define GPS_ON_NORMAL_ICON "shortcut/camera_mode_gps_on_nor.png"
+#define GPS_ON_PRESS_ICON "shortcut/camera_mode_gps_on_press.png"
+#define GPS_OFF_NORMAL_ICON "shortcut/camera_mode_gps_off_nor.png"
+#define GPS_OFF_PRESS_ICON "shortcut/camera_mode_gps_off_press.png"
+
+/* Save as flip */
+#define SAVE_AS_FLIP_ON_NORMAL_ICON "shortcut/camera_mode_guidelines_on_nor.png"
+#define SAVE_AS_FLIP_ON_PRESS_ICON "shortcut/camera_mode_guidelines_on_press.png"
+#define SAVE_AS_FLIP_OFF_NORMAL_ICON "shortcut/camera_mode_guidelines_off_nor.png"
+#define SAVE_AS_FLIP_OFF_PRESS_ICON "shortcut/camera_mode_guidelines_off_press.png"
+
+/* Storage */
+#define STORAGE_MYDEVICE_NORMAL_ICON "shortcut/camera_mode_storage_mydevice_nor.png"
+#define STORAGE_MYDEVICE_PRESS_ICON "shortcut/camera_mode_storage_mydevice_press.png"
+#define STORAGE_CARD_NORMAL_ICON "shortcut/camera_mode_storage_storagecard_nor.png"
+#define STORAGE_CARD_PRESS_ICON "shortcut/camera_mode_storage_storagecard_press.png"
+
+/* Reset setting */
+#define RESET_SETTING_NORMAL_ICON "shortcut/camera_mode_reset_nor.png"
+#define RESET_SETTING_PRESS_ICON "shortcut/camera_mode_reset_press.png"
+
+/* Setting */
+#define SETTING_NORMAL_ICON "shortcut/camera_mode_setting_nor.png"
+#define SETTING_PRESS_ICON "shortcut/camera_mode_setting_press.png"
+
+/* Indicator */
+#define INDICATOR_STORAGE_INTERNAL_ICON "indicator/camera_indicator_storage_in.png"
+#define INDICATOR_STORAGE_CARD_ICON "indicator/camera_indicator_storage_t_flash.png"
+#define INDICATOR_BATTERY_LEVEL_00_ICON "indicator/camera_indicator_battery_00.png"
+#define INDICATOR_BATTERY_LEVEL_01_ICON "indicator/camera_indicator_battery_01.png"
+#define INDICATOR_BATTERY_LEVEL_02_ICON "indicator/camera_indicator_battery_02.png"
+#define INDICATOR_BATTERY_LEVEL_03_ICON "indicator/camera_indicator_battery_03.png"
+#define INDICATOR_BATTERY_LEVEL_04_ICON "indicator/camera_indicator_battery_04.png"
+#define INDICATOR_BATTERY_LEVEL_05_ICON "indicator/camera_indicator_battery_05.png"
+#define INDICATOR_BATTERY_FULL_ICON "indicator/camera_indicator_battery_full.png"
+#define INDICATOR_BATTERY_CHARGE_ICON "indicator/camera_indicator_battery_charge.png"
+#define INDICATOR_GPS_STATE_OFF_ICON "indicator/camera_indicator_gps_off.png"
+#define INDICATOR_GPS_STATE_ON_ICON "indicator/camera_indicator_gps_on.png"
+#define INDICATOR_GPS_STATE_CONNECT_ANI01_ICON "indicator/camera_indicator_gps_connection01.png"
+#define INDICATOR_GPS_STATE_CONNECT_ANI02_ICON "indicator/camera_indicator_gps_connection02.png"
+#define INDICATOR_GPS_STATE_CONNECT_ANI03_ICON "indicator/camera_indicator_gps_connection03.png"
+#define INDICATOR_MUTE_ICON "indicator/camera_indicator_mute.png"
+
+/* Shutter icon */
+#define CAMERA_SHUTTER_ICON "camera_mode_shutter_icon.png"
+#define CAMERA_SHUTTER_ICON_DIM "camera_mode_shutter_icon_dim.png"
+
+/* Volume key */
+#define VOLUME_KEY_AS_ZOOM_NORMAL_ICON "shortcut/camera_mode_zoom.png"
+#define VOLUME_KEY_AS_ZOOM_PRESS_ICON "shortcut/camera_mode_zoom_press.png"
+#define VOLUME_KEY_AS_SHUTTER_NORMAL_ICON "shortcut/camera_mode_shutter.png"
+#define VOLUME_KEY_AS_SHUTTER_PRESS_ICON "shortcut/camera_mode_shutter_press.png"
+
+/* Tip popup */
+#define TIP_POPUP_BURSTSHOT_HELP_IMAGE "camera_help_image.png"
+#define TIP_POPUP_VOLUMEKEY_HELP_IMAGE "camera_help_image.png"
+
+#endif
diff --git a/include/edc_string.h b/include/edc_string.h
new file mode 100755
index 0000000..5708940
--- /dev/null
+++ b/include/edc_string.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __DEF_STRING_H_
+#define __DEF_STRING_H_
+
+/* share between EDC and C code. */
+/* #define NEW_RECORDING_LAYOUT */
+
+#define INVALID_INDEX -1
+
+#define CAM_COMMON_STRING_LEN 80
+
+#define CAM_UI_LOG(fmt, args...) cam_debug(LOG_UI, fmt, ##args)
+
+#define BG_BLACK 40
+#define FG_RED 31
+#define FG_GREEN 32
+#define FG_YELLOW 33
+#define FG_PUPPLE 35
+#define FG_CYAN 36
+#define FG_BLUE 34
+
+#define UI_TEST_LOG(fmt, args...) \
+ do { \
+ printf("\x1b[%dm\x1b[%dm[CAM_UI_LOG] [%s:%d] : "fmt, BG_BLACK, FG_GREEN, __func__, __LINE__, ##args); \
+ printf("\x1b[0m\n"); \
+ } while (0)
+
+#define MAIN_W 1280
+#define MAIN_H 720
+#define VER_MAIN_W MAIN_H
+#define VER_MAIN_H MAIN_W
+
+#define MAIN_W_AUTO 800
+#define MAIN_H_AUTO 480
+#define VER_MAIN_W_AUTO MAIN_H_AUTO
+#define VER_MAIN_H_AUTO MAIN_W_AUTO
+
+
+#define TOOLBAR_W 160
+#define TOOLBAR_RIGHT_ITEM_H 225
+
+/* camera focus */
+#define CAMERA_FOCUS_W 150
+#define CAMERA_FOCUS_H 97
+
+#define SETTINGS_TAB_BACK_W 71
+#define SETTINGS_TAB_BACK_H 71
+
+#define INDICATOR_GPS "INDICATOR_GPS"
+#define INDICATOR_BATTERY "INDICATOR_BATTERY"
+#define INDICATOR_NUM "INDICATOR_NUM"
+#define INDICATOR_STORAGE "INDICATOR_STORAGE"
+
+#define INDI_REC_GPS "INDI_REC_GPS"
+#define INDI_REC_BATTERY "INDI_REC_BATTERY"
+#define INDI_REC_STORAGE "INDI_REC_STORAGE"
+#define INDI_REC_MUTE "INDI_REC_MUTE"
+
+
+/* recording */
+#define RECORDING_IMAGE "recording_image"
+#define RECORDING_TEXT "recording_text"
+#define RECORDING_LEFT_TEXT "recording_left_text"
+
+/* haptic */
+#define HAPTIC_SIG_SRC "HAPTIC_SIG_SRC"
+#define HAPTIC_SIG "HAPTIC_SIG"
+
+#define CONTI_REVIEW_BACK "conti_review_back"
+#define CONTI_REVIEW_THUMB "conti_review_thumb"
+#define CONTI_REVIEW_BTN_SIG_SRC "conti_review_sig_source"
+#define CONTI_REVIEW_BACK_BTN_SIG "conti_review_back_SIG"
+
+/* captured image */
+#define CAPTURED_IMAGE_SCREEN "captured_image_screen"
+#define CAPTURED_IMAGE_SAVE "captured_image_save_btn"
+#define CAPTURED_IMAGE_RETRY "capture_image_save_bnt"
+
+/* Font related */
+#define COLOR_1 255 255 255 255
+#define COLOR_2 0 0 0 255
+#define COLOR_65 164 215 255 255
+#define COLOR_73 150 150 150 255
+
+#define FONT_NAME "font=SLP:style=Roman"
+#define FONT_COLOR COLOR_1
+
+#endif
diff --git a/packaging/ug-camera-efl.spec b/packaging/ug-camera-efl.spec
new file mode 100644
index 0000000..46ed6f3
--- /dev/null
+++ b/packaging/ug-camera-efl.spec
@@ -0,0 +1,77 @@
+%define optflags -Wall -Wextra -g -fpie -fPIC -O0 -Wno-unused-parameter -Wno-missing-field-initializers -finstrument-functions -Wl,--as-needed -pie
+
+%define _optdir /opt
+%define _usrdir /usr
+%define _ugdir %{_usrdir}/ug
+
+
+Name: ug-camera-efl
+Summary: SLP Camera UI Gadget
+Version: 0.1.110
+Release: 1
+Group: TO_BE/FILLED_IN
+License: Flora Software License
+Source0: %{name}-%{version}.tar.gz
+BuildRequires: cmake
+BuildRequires: prelink
+BuildRequires: gettext-tools
+BuildRequires: edje-tools
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(devman)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(ui-gadget-1)
+BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(ecore-evas)
+BuildRequires: pkgconfig(ecore-input)
+BuildRequires: pkgconfig(eina)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-content-media-content)
+BuildRequires: pkgconfig(capi-location-manager)
+BuildRequires: pkgconfig(capi-media-camera)
+BuildRequires: pkgconfig(capi-media-image-util)
+BuildRequires: pkgconfig(capi-media-recorder)
+BuildRequires: pkgconfig(capi-media-sound-manager)
+BuildRequires: pkgconfig(capi-media-wav-player)
+BuildRequires: pkgconfig(capi-system-power)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(capi-system-sensor)
+
+
+%description
+Description: SLP Camera UI Gadget
+
+%prep
+%setup -q
+
+%build
+cmake . -DCMAKE_INSTALL_PREFIX=%{_ugdir}
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+
+%make_install
+execstack -c %{buildroot}%{_ugdir}/lib/libug-camera-efl.so.0.1.0
+
+%post
+chown 5000:5000 /opt/usr/ug/data/ug-camera-efl/
+chown 5000:5000 /opt/usr/ug/data/ug-camera-efl/.camera.ini
+mkdir -p /usr/ug/bin/
+ln -sf /usr/bin/ug-client /usr/ug/bin/camera-efl
+
+%files
+%manifest ug-camera-efl.manifest
+%defattr(-,root,root,-)
+%{_ugdir}/res/edje/%{name}/*
+%{_ugdir}/res/locale/*/LC_MESSAGES/%{name}.mo
+%{_ugdir}/res/sounds/%{name}/*
+%{_ugdir}/res/icons/%{name}/%{name}.png
+%{_ugdir}/lib/libug-camera-efl.so
+%{_ugdir}/lib/libug-camera-efl.so.0.1.0
+%{_optdir}/usr/ug/data/%{name}/.camera.ini
+%{_usrdir}/share/packages/%{name}.xml
+
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100644
index 0000000..26272d3
--- /dev/null
+++ b/po/CMakeLists.txt
@@ -0,0 +1,25 @@
+# for i18n
+
+SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_PH.po en_US.po es_ES.po
+es_MX.po et.po eu.po fi.po fr_CA.po fr_FR.po ga.po gl.po hi.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po kk.po ko_KR.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_SG.po zh_TW.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+ INSTALL(FILES ${moFile}
+ DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100755
index 0000000..5b882fb
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1 @@
+# List of source files containing translatable strings.
diff --git a/po/ar.po b/po/ar.po
new file mode 100755
index 0000000..f7269ec
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 ثوان"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "ثانيتان"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "ضد الاهتزاز"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "تلقائي"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "الجمال"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "أسود و أبيض"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "تركيز على المنتصف"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "ضوء النهار"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "كشف الوجه"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "فلاش"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "مشع"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "ماكرو"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "مصفوفة"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "القياس"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "نيجاتيف"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "لا شيء"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "إيقاف تشغيل"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "مفعل"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "صورة شخصية"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "بني داكن"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "بانوراما"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "فردي"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "الحركة البطيئة"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "مكان التخزين"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "براق"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "خطوط الإرشاد"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "علامة GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "صورة لشخص"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "ألعاب رياضية"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "حفلة/في الداخل"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "الغروب"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "الفجر"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "ألعاب نارية"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "نص"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "ضوء الشموع"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "الضوء الخلفي"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "توضيح تلقائي"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "نمط المشهد"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "نمط توضيح الصورة"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "الرؤية في الخارج"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "المؤقت"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "المؤثرات"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "تعديل الاختصارات"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "تباين تلقائي"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "إرجاع"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "الضبط"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "صور متلاحقة"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "عادي"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "حد الرسالة"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "حركة سريعة"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 ثوان"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "غائم"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "فشل في إنشاء صور بانورامية. حاول لاحقا"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "أفق"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "الرجاء الانتظار أثناء إنشاء بانوراما"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "ظل"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "نقطة"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "يتعذر الحفظ. الذاكرة غير كافية"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "لقطة جمالية"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "بانوراما"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "نمط التصوير"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "الحركة البطيئة"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "توازن اللون الأبيض"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "خطأ في الالتقاط"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "تجاوز وقت الالتقاط. البدء مرة أخرى"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "يتعذر بدء تشغيل الكاميرا"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "يتعذر بدء الكاميرا أثناء المكالمة"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "قم بإغلاق الكاميرا خلال %d ثوان"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "تفعيل خدمة تحديد المواقع‬ في الإعدادات لاستخدام علامة GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "اضغط على الغالق"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "حرك الكاميرا ببطء في اتجاه السهم"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "القائمة غير مدعومة"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "سياسة الأمان تقيد استخدام الكاميرا"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "تم الحفظ"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "أفقي"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "ليلي"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "كشف الوجه"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "نمط التسجيل"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "إرجاع الضبط؟"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "لقطة الإبتسامة"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "بطاقة الذاكرة"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "شاطئ/ثلج"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "قيمة الإضاءة"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "الدقة"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "فشل التسجيل"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "انتهي وقت الالتقاط. البدء مرة أخرى"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "ضبط مخصص"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "جاري المعالجة..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "تم إخراج بطاقة الذاكرة"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "لا يمكن استخدام الفلاش. بطارية ضعيفة"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "استخدام مفتاح الصوت كـ"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "مفتاح الزوم"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "مفتاح الكاميرا"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "دقة الصورة"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "دقة الفيديو"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "سيتم حفظ الصور المتلاحقة بجودة جيدة"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "انقر مع الاستمرار فوق زر الكاميرا لالتقاط ‏‫صور متلاحقة‬"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "اضغط على مفتاح رفع مستوى الصوت لالتقاط صورة. واضغط على مفتاح خفض مستوى الصوت لبدء التسجيل"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "إذا تم تفعيل الصور المتلاحقة، فسيؤدي الضغط على زر رفع مستوى الصوت إلى التقاط صور متلاحقة"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "عدم العرض مرة أخرى"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "تلميحات"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "الجهاز"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "‏‫انقر مع الاستمرار فوق الرمز، ثم اسحبه لتعديل موضع الاختصار"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "أفضل صورة"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "مشاركة اللقطة"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "فلاش"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "رسوم متحركة"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "مشاركة صورة الصديق"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "لون الخريف"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "حفظ كصورة معكوسة"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "ذاكرة الفيديو المتبقية غير كافية"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "إعادة عرض"
+
diff --git a/po/az.po b/po/az.po
new file mode 100755
index 0000000..0b47bdd
--- /dev/null
+++ b/po/az.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 san"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 san"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Titrəməyə qarşı"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Avtomatik"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Gözəllik"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Ağ-qara"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Mərkəzləşdirilmiş ağırlıqlı"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Gündüz"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Üzün göstərilməsi"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Parlaq işıq"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Flüoresent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matris"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Ölçmə"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Neqativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Heç biri"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Söndür"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Qoş"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Avto-portret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Ala laranlıq"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Mənzərə"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Tək"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Asta hərəkət"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Ehtiyat"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Közərmə"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Göstərişlər"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS etiketi"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "İdmanlar"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Qonaqlıq/İçəridə"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Günəşin qürubu"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Şəfəq"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fişəng"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Mətn"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Şam işığı"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Fon işığı"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Avto fokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Mənzərə rejimi"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokus rejimi"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Bayırda görüntü"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Taymer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effektlər"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Qısayolları redaktə edin"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Avtomatik kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Sıfırlansın"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Parametrlər"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Partlayış çəkilişi"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Mesaj limiti"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Sürətli hərəkət"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 san"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Buludlu"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Mənzərə şəkillərini yaratmaq alınmadı. Bir az sonra cəhd edin"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Üfüq"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Mənzərə yaradılana kimi gözləyin"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Kölgə"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Ləkə"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Saxlamaq mümkün deyildir. Yaddaşda kifayət qədər yer yoxdur"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Gözəl çəkiliş"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Mənzərə"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Çəkiliş rejimi"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Asta hərəkət"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Ağ balans"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Çəkiliş xətası"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Çəkmə vaxtı keçmişdir. Yenidən başlayın"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kameranı başlatmaq mümkün deyil"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Zəng ərzində kameranı başlatmaq mümkün deyil"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "%d saniyəyə kameranı bağla"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS etiketindən istifadə etmək üçün Parametrlərdə məkan xidmətini aktivləşdirin"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Çəkiliş düyməsini bas"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Kameranı ox istiqamətində yavaşca hərəkət etdir"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menyu dəstəklənmir"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Təhlükəsizlik siyasəti Kameradan istifadəni məhdudlaşdırır"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Yaddaşa yazıldı"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Mənzərə"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Gecə"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Üzün göstərilməsi"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Yazıya alma rejimi"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Parametrlər sıfırlansın?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Gülümsəmə"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Yaddaş kartı"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Çimərlik/Qar"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Foto-ekspozisiya müddəti"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rezolyusiya"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Yazma alınmadı"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Çəkiliş vaxtı bitib. Yenidən başlayın"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Adi"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Emal edilir..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Yaddaş kartı çıxarıldı"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Flaşdan istifadə mümkün deyil. Batareya zəifdir"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Səs səv. düym-dən ist. et"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Miqyasdəyişmə düyməsi"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kamera düyməsi"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Foto rezolyusiya"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video rezolyusiya"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Partlayış çəkilişli şəkillər keyfiyyət yaxşı olaraq saxlanıb"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Partlayışlı çəkiliş üçün kamera düyməsinə vurub saxlayın"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Şəkil çəkmək üçün səsin artırılması düyməsini basın. Yazılışa başlamaq üçün səsin azaldılması düyməsini basın"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Partlayış çəkilişi aktiv olduqda, yuxarı səs səviyyəsini basmaqla belə şəkil çəkmək olar"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Bir daha göstərmə"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Məsləhətlər"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Cihaz"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Nişana vurub saxlayın, sonra qısayolun mövqeyini redaktə etmək üçün onu çəkin"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Ən yaxşı şəkil"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Şəkli paylaş"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Parlaq işıq"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cizgi filmi"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Dostun şəklini paylaş"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Payız rəngi"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Çevrilmiş saxla"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Video üçün\nyaddaş kifayət etmir"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Gözdən keçir"
+
diff --git a/po/bg.po b/po/bg.po
new file mode 100755
index 0000000..ab0a116
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 сек"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 сек"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Система срещу разклащане"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Красота"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Черно и бяло"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Централно - претеглено"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Дневна светлина"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Разпознаване на лице"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Светкавица"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Флуоресцентен"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Макрос"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Матрица"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Измерване"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Негатив"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Нищо"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Изключено"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Включено"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Автопортрет"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Сепия"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Единична"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Бавно движение"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Устройство за съхранение на данни"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Изкуствено осветление"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Направляващи линии"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS таг"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Портрет"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Спорт"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Парти/На закрито"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Залез"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Зазоряване"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Фойерверки"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Текст"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "На свещи"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Фонова светлина"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Автофокус"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Режим Сцени"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Режим фокус"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Видимост на открито"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Таймер"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Ефекти"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Редактиране на бързи клавиши"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Авто-контраст"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Нyлиране"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Настройки"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Бързо снимане"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Нормален"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Ограничение за съобщение"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Бързо движение"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 сек"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Облачно"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Неуспешно изграждане на панорамни изображения. Опитайте по-късно"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Хоризонт"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Моля, изчакайте да се създаде панорама"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Светлосянка"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Зона"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Не може да се запамети Няма достатъчно памет"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Красива снимка"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Режим на снимане"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Бавно движение"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Баланс на бялото"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Грешка при заснемане"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Превишена продължителност на снимане. Започнете отново"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Камерата не може да се стартира"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Не може да пусне камерата\nпо време на разговор"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Камерата се затваря след %d секунди"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Активирайте услугата за местоположение в Настройки, за да използвате GPS етикет"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Натиснете затвора"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Движете бавно камерата по посока на стрелката"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Менюто не е поддържано"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Правилата за защита ограничават използването на камерата"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Записан"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Пейзажно"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Нощ"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Разпознаване на лице"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Режим на запис"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Нyлиране на настройките?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Усмивка"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Карта с памет"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Плаж/Сняг"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Стойност на експонацията"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Разделителна способност"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Записване неуспешно"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Продължителността на снимане изтече. Започнете отново"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "По избор"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Обработване..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Карта с памет извадена"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Светкавицата не може да се използва. Слаба батерия"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Изп. бут. сила звук като"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Бутонът за мащаб"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Бутонът за камера"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Разд. спос. за сним."
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Разд. спос. за видео"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Бързите снимки се записват с качеството, зададено като добро"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Чукнете и задръжте бутона за камера, за да направите бързи снимки"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Натиснете клавиша за увеличаване на силата на звука, за да направите снимка. Натиснете клавиша за намаляване на звука, за да започнете запис"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ако бързо снимане е активирано, натискането на клавиша за увеличаване на силата на звука ще направи бързи снимки"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Не показвай отново"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Съвети"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Устройство"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Чукнете и задръжте иконата, след което я плъзнете, за да редактирате позицията на бързата команда"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Най-добра снимка"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Споделяне на снимка"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Светкавица"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Карикатура"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Споделяне на снимки с приятели"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Есенен цвят"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Запиши като обърнато"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Няма достатъчно\nпамет за видео"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Преглед"
+
diff --git a/po/ca.po b/po/ca.po
new file mode 100755
index 0000000..ebf1464
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 seg"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 seg"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-Vibració"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Bellesa"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Blanc i negre"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Enfocat"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Llum diürna"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detecció de cares"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flaix"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriu"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mesurament"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatiu"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Cap"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desactivat"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Activat"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoretrat"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sèpia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Senzill"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Càmera lenta"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Emmagatzematge"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Instruccions"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etiqueta GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Vertical"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Esports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Festa/Interior"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Posta de sol"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Albada"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Foc d'artifici"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Espelmes"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Retroil·luminació"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Enfocament automàtic"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Mode escena"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Mode d'enfocament"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilitat exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporitzador"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efectes"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editar accessos directes"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contrast automàtic"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Restablir"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Ajustaments"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Ràfega"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Límit de missatges"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Càmera ràpida"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 seg"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Ennuvolat"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Error en construir imatges panoràmiques. Intenti-ho més tard"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horitzó"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Esperi mentre es crea la imatge panoràmica"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Ombra"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punt"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "No es pot desar. No hi ha prou memòria"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Captura embellida"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Mode disparament"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Càmera lenta"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balanç de blancs"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Error en capturar"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "S'ha excedit el temps de captura. Torni a començar"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "No es pot iniciar la Càmera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "No es pot iniciar la càmera durant la trucada"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Tancar càmera en %d segons"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Habiliti el servei d'ubicació a Ajustaments per utilitzar l'etiqueta GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Premi l'obturador"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mogui al càmera suaument en la direcció de la fletxa"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menú no compatible"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "La política de seguretat restringeix l'ús de la càmera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Desat"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Horitzontal"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nit"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detecció de cares"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Mode de gravació"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Restablir ajustaments?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Disparament somriure"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Targeta de memòria"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Platja/Neu"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valor d'exposició"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolució"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Error de gravació"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "S'ha excedit el temps de captura. Torni a començar"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personalitzat"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Processant..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "S'ha extret la targeta de memòria"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "No es pot utilitzar el flaix. No hi ha prou bateria"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Utilitzi tecla volum com"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "La tecla de zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "La tecla de Càmera"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Resolució de foto"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Resolució de video"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Les imatges de ràfegues es desen amb la qualitat òptima configurada"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Mantingui tocat el botó de la càmera per fer una ràfega"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Premi la tecla de volum amunt per fer una foto. Premi la tecla de volum avall per iniciar una gravació"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Si la ràfega està habilitada, en prémer la tecla d'augment de volum es farà una ràfega"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "No tornar a mostrar"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Consells"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositiu"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Mantingui tocada la icona i arrossegui-la a la posició d'edició de l'accés directe"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Millor foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Compartir dispar"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flaix"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Còmic"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Compartir foto d'amic"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Color tardor"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Desar com a invertit"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "No hi ha prou memòria per a vídeo"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Revisar"
+
diff --git a/po/cs.po b/po/cs.po
new file mode 100755
index 0000000..cd973ea
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 s"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 s"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilizace obrazu"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automaticky"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Krása"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Černobílý"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Ve středu"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Denní světlo"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Rozpoznání obličeje"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Blesk"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Zářivka"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matice"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Měření"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativní"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Žádný"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Vypnout"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Zapnout"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportrét"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sépie"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoráma"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Jeden snímek"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Pomalý pohyb"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Úložiště"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Žhnoucí"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Vodící linky"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Značka GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Na výšku"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Večírek/uvnitř"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Západ slunce"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Úsvit"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Ohňostroj"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Světlo svíčky"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Podsvícení"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Automatické zaostření"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Režim Krajina"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Režim zaostření"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Viditelnost venku"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Samospoušť"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efekty"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Upravit zástupce"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatický kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Vynulovat"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Nastavení"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Sériové snímání"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normální"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limit zpráv"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Rychlý pohyb"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 s"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Oblačno"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Nepodařilo se vytvořit panoramatické obrázky. Opakujte akci později"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Počkejte při fotografování panoramatického snímku"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Stín"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Bod"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nelze uložit. Nedostatek paměti"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Krása"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoráma"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Režim fotografování"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Pomalý pohyb"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Vyvážení bílé"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Při fotografování došlo k chybě"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Byla překročena doba fotografování. Začněte znovu"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Fotoaparát nelze spustit"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Během hovoru nelze\nspustit fotoaparát"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Fotoaparát se zavře za %d sekund"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Chcete-li použít značku GPS, zapněte v Nastavení službu určování polohy"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Stiskněte spoušť"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Pomalu pohybujte fotoaparátem ve směru šipky"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu není podporováno"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Zásady zabezpečení omezují použití fotoaparátu"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Uloženo"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Na šířku"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noc"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Rozpoznání obličeje"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Režim nahrávání"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Vynulovat nastavení?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Úsměv"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Paměťová karta"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Pláž/sníh"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Hodnota expozice"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rozlišení"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Během nahrávání došlo k chybě"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Byla překročena doba fotografování. Začněte znovu"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Vlastní"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Probíhá zpracování..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Paměťová karta vyjmuta"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Nelze použít blesk. Baterie je vybitá"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Použít tl. hlasit. jako"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tlačítko přiblížení"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Spoušť fotoaparátu"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Rozlišení fotografie"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Rozlišení videa"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Fotografie pořízené sériovým snímáním se ukládají s nastavenou kvalitou vysoká"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Klepnutím a podržením tlačítka fotoaparátu zahájíte sériové snímání"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Stisknutím tlačítka pro zvýšení hlasitosti vyfotografujete obrázek. Stisknutím tlačítka pro snížení hlasitosti zahájíte nahrávání"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Pokud je zapnuté sériové snímání, stisknutím tlačítka zvýšení hlasitosti zahájíte sériové snímání"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Znovu nezobrazovat"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tipy"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Zařízení"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Klepněte na ikonu a držte ji, a potom ji přetáhněte na požadované místo zástupce"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Nejlepší fotografie"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Sdílet snímek"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Blesk"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Skica"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Sdílet fotografii kamaráda"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Barva podzimu"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Uložit jako překlopený"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "K použití videa\nnení dostatek paměti"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Kontrola"
+
diff --git a/po/da.po b/po/da.po
new file mode 100755
index 0000000..79a78ee
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-ryst"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Skønhed"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Sort-hvid"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centervægtet"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dagslys"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Ansigtsdetektering"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Kameralys"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescerende"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Måling"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ingen"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Fra"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Til"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Selvportræt"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Enkelt"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Slowmotion"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Lagring"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Hvidglødende"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Hjælpelinjer"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-tag"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portræt"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fest/indendørs"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Solnedgang"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Daggry"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fyrværkeri"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Stearinlys"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Baggrundslys"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scenetilstand"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokustilstand"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Udendørs synlighed"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Selvudløser"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effekter"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Redigér genveje"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatisk kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Nulstil"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Indstillinger"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Burst-billede"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Meddelelsesgrænse"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Hurtig bevægelse"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Skyet"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Kunne ikke opbygge panoramabilleder. Prøv senere"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horisont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Vent, mens der oprettes et panoramabillede"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Skygge"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punkt"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Kunne ikke gemme. Ikke tilstrækkelig hukommelse"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Forskønnet optagelse"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Fototilstand"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Slowmotion"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Hvidbalance"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Optagefejl"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Optagetid overskredet. Start igen"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kan ikke starte kamera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Kan ikke starte kamera\nunder opkald"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Luk kamera om %d sekunder"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Aktivér placeringstjeneste under Indstillinger for at bruge GPS-tag"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Tryk på Lukker"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Bevæg kameraet langtsomt i pilens retning"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu understøttes ikke"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Sikkerhedspolitik begrænser brug af kamera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Gemt"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Liggende"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nat"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Ansigtsdetektering"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Optagelsestilstand"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Nulstil indstillinger?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smilbillede"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Hukommelseskort"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strand/sne"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Eksponeringsværdi"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Opløsning"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Optagelse mislykkedes"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Optagetid er slut. Start igen"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Brugerdefineret"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Behandler ..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Hukommelseskort fjernet"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Kan ikke bruge kameralys. Lavt batteri"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Brug lydstyrketasten som"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoomtasten"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kameratasten"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotoopløsning"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videoopløsning"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Billeder fra burst-optagelse gemmes med kvalitet angivet som fin"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Tryk på og hold kameraknappen nede for at tage en burst-optagelse"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Tryk på tasten lydstyrke op for at tage et billede. Tryk på tasten lydstyrke ned for at starte optagelse"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Hvis burst-billede er aktiveret, tages et burst-billede, når der trykkes på tasten lydstyrke op"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Vis ikke igen"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Enhed"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tryk på ikonet, og hold det nede, og træk det derefter til position for redigering af genvejen"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Bedste foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Del billede"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Kameralys"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Tegnefilm"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Del foto med ven"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Efterårsfarve"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Gem som vendt om"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Ikke tilstrækkelig\nhukommelse til videoklippet"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Visning"
+
diff --git a/po/de_DE.po b/po/de_DE.po
new file mode 100755
index 0000000..f315c8a
--- /dev/null
+++ b/po/de_DE.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 Sek."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 Sek."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Bildstabilisator"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauty"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Schwarz/Weiß"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Mittenbetont"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Tageslicht"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Gesichtserkennung"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Fotolicht"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluoreszierend"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Messung"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Keine"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Aus"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Ein"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Selbstportrait"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Einzeln"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Zeitlupe"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Speicher"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Glühlampenlicht"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Hilfslinien"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-Tag"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrait"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Party/Innen"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Sonnenuntergang"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Morgendämmerung"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Feuerwerk"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Kerzenlicht"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Gegenlicht"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Szenen-Modus"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokusmodus"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Sichtbarkeit im Freien"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Selbstauslöser"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effekte"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Schnellzugriffe bearbeiten"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatischer Kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Zurücksetzen"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Einstellungen"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Serienbilder"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Nachrichtenbeschränkung"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Schnelle Bewegung"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 Sek."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Bewölkt"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Panoramabild konnte nicht erstellt werden. Versuchen Sie es später erneut"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Panorama wird erstellt, bitte warten"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Schatten"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Speichern nicht möglich. Nicht genügend Speicher"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beautyaufnahme"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Aufnahmemodus"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Zeitlupe"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Weißabgl."
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Aufnahmefehler"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Aufnahmezeit überschritten. Erneut starten"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kamera kann nicht gestartet werden"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Starten der Kamera während\nAnruf nicht möglich"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Kamera in %d Sekunden schließen"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Aktivieren Sie die Verwendung des Standortdiensts in “Einstellungen”, um GPS-Tag zu verwenden."
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Auslöser drücken"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Bewegen Sie die Kamera langsam in Pfeilrichtung."
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menü nicht unterstützt"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Sicherheitsrichtlinie schränkt die Verwendung der Kamera ein."
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Gespeichert"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landschaft"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nachtmodus"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Gesichtserkennung"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Aufnahmemodus"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Einstellungen zurücksetzen?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smile"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Speicherkarte"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strand/Schnee"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Belichtungswert"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Auflösung"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Aufnahme fehlgeschlagen"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Aufnahmezeit ist vorbei. Neu starten."
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Benutzerdefiniert"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Verarbeitung läuft ..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Speicherkarte entfernt"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Fotolicht kann nicht verwendet werden. Akku fast leer."
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Lautstärketaste verw. als"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoom-Taste"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kamerataste"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotoauflösung"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videoauflösung"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Serienbildaufnahmen werden in der Qualität “Fein” gespeichert."
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Drücken und halten Sie die Kamerataste, um Serienbilder aufzunehmen."
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Drücken Sie auf den Plus-Lautstärkeregler, um ein Bild aufzunehmen. Drücken Sie auf den Minus-Lautstärkeregler, um eine Aufnahme zu starten."
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Wenn die Serienbildaufnahme aktiviert ist, werden durch Drücken der Taste für die Lautstärkeerhöhung Serienbilder aufgenommen."
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Nicht mehr anzeigen"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tipps"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Gerät"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tippen und halten Sie das Symbol und ziehen Sie es, um die Position des Shortcuts zu ändern."
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Bestes Foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Aufnahme senden"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Fotolicht"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cartoon"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Foto mit Buddy teilen"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Herbstfarbe"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Spiegelverkehrt speichern"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Nicht genügend\nSpeicherplatz für Video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Überprüfen"
+
diff --git a/po/el_GR.po b/po/el_GR.po
new file mode 100755
index 0000000..eab0278
--- /dev/null
+++ b/po/el_GR.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 δευτ."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 δευτ."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-Shake"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Αυτόματο"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Ομορφιά"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Ασπρόμαυρο"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Με εστίαση στο κέντρο"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Φως ημέρας"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Ανίχνευση προσώπου"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Φλας"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Φθορισμού"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Μέτρηση"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Αρνητικό"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Κανένα"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Ανενεργό"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Ενεργό"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Αυτοφωτογράφηση"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Σέπια"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Πανόραμα"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Μονή"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Αργή ταχύτητα"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Αποθήκευση"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Πυρακτώσεως"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Οδηγίες"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Ετικέτα GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Πορτραίτο"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Αθλητικά"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Πάρτι/Εσωτερικά"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Ηλιοβασίλεμα"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Αυγή"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Πυροτέχνημα"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Κείμενο"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Φως κεριού"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Φωτισμός"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Αυτόματη εστίαση"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Λειτουργία σκηνών"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Λειτουργία εστίασης"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Ορατότητα εξωτερικού χώρου"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Χρονομετρητής"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Εφέ"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Επεξεργασία συντομεύσεων"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Αυτόματη αντίθεση"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Επαναφορά"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Ρυθμίσεις"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Λειτ. συνεχούς λήψης"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Κανονική"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Όριο μηνυμάτων"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Γρήγορη κίνηση"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 δευτ."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Συννεφιά"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Αποτυχία δημιουργίας πανοραμικών εικόνων. Δοκιμάστε αργότερα"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Ορίζοντας"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Περιμένετε μέχρι να δημιουργηθεί το πανόραμα"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Σκίαση"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Σημείο"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Δεν είναι δυνατή η αποθήκευση. Ανεπαρκής μνήμη"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Για ομορφότερη λήψη"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Πανόραμα"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Λειτουργία λήψης"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Αργή ταχύτητα"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Εξισορρόπ.λευκού"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Σφάλμα καταγραφής"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Έγινε υπέρβαση του μέγιστου χρόνου καταγραφής. Έναρξη ξανά"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Δεν είναι δυνατή η έναρξη της Κάμερας"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Δεν είναι δυνατή η εκκίνηση κάμερας\nκατά την κλήση"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Κλείσιμο κάμερας σε %d δευτερόλεπτα"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Για τη χρήση της ετικέτας GPS, ενεργοποιήστε την υπηρεσία εντοπισμού θέσης από τις Ρυθμίσεις"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Πατήστε το διάφραγμα"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Μετακινήστε την κάμερα αργά προς την κατεύθυνση του βέλους"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Το μενού δεν υποστηρίζεται"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Η πολιτική ασφαλείας περιορίζει τη χρήση της κάμερας"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Αποθηκεύτηκε"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Οριζόντια"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Νύχτα"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Ανίχνευση προσώπου"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Λειτουργία εγγραφής"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Επαναφορά ρυθμίσεων;"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Λήψη χαμόγελου"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Κάρτα μνήμης"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Παραλία/Χιόνι"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Τιμή έκθεσης"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Ανάλυση"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Αποτυχία εγγραφής"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Ο χρόνος καταγραφής έληξε. Ξεκινήστε ξανά"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Προσαρμοσμένη"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Επεξεργασία..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Η κάρτα μνήμης αφαιρέθηκε"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Δεν είναι δυνατή η χρήση του Φλας. Χαμηλή στάθμη μπαταρίας"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Χρήση πλήκτρου έντασης ως"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Το πλήκτρο ζουμ"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Το πλήκτρο κάμερας"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Ανάλυση φωτογραφίας"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Ανάλυση βίντεο"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Οι εικόνες από τη λειτουργία συνεχούς λήψης αποθηκεύονται με υψηλή ποιότητα"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Πατήστε παρατεταμένα το κουμπί της κάμερας για τη λήψη εικόνας με τη λειτουργία συνεχούς λήψης"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Πιέστε το πλήκτρο αύξησης της έντασης για να τραβήξετε μια φωτογραφία. Πιέστε το πλήκτρο μείωσης της έντασης για να ξεκινήσετε την εγγραφή"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Αν έχει ενεργοποιηθεί η λειτουργία συνεχούς λήψης, με το πάτημα του πλήκτρου αύξησης της έντασης θα γίνει λήψη εικόνας με αυτήν τη λειτουργία"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Να μην εμφανιστεί ξανά"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Συμβουλές"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Συσκευή"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Πατήστε παρατεταμένα το εικονίδιο και, στη συνέχεια, σύρετέ το για να αλλάξετε τη θέση της συντόμευσης"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Καλύτερη φωτογραφία"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Κοινή χρήση λήψης"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Φλας"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Κινούμενα σχέδια"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Κοινή χρήση φωτογραφίας φίλου"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Χρώμα του φθινοπώρου"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Αποθήκευση ως ανεστραμμένης εικόνας"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Ανεπαρκής μνήμη\nγια το βίντεο"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Εξέταση"
+
diff --git a/po/en.po b/po/en.po
new file mode 100755
index 0000000..a41835e
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 secs"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 secs"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-shake"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauty"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Black and white"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centre-weighted"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Daylight"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Face detection"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Metering"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negative"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "None"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Off"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "On"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Self-portrait"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Single"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Slow motion"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Storage"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Guidelines"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS tag"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrait"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Party/Indoor"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Sunset"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Dawn"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Firework"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Candlelight"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Backlight"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Auto focus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scene mode"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Focus mode"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Outdoor visibility"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Timer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effects"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Edit shortcuts"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Auto contrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Reset"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Burst shot"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Message limit"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Fast motion"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 secs"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Cloudy"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Failed to build panoramic images. Try later"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Please wait while creating panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Shade"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Unable to save. Not enough memory"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beauty shot"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Shooting mode"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Slow motion"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "White balance"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Capture error"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Capture time exceeded. Start again"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Unable to start Camera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Unable to start Camera during call"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Close camera in %d seconds"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Enable location service in Settings to use GPS tag"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Press Shutter"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Move camera slowly in direction of arrow"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu not supported"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Security policy restricts use of Camera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Saved"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landscape"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Night"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Face detection"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Recording mode"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Reset settings?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smile shot"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Memory card"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Beach/Snow"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Exposure value"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolution"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Recording failed"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Capture time is over. Start again"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Processing..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Memory card removed"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Unable to use Flash. Battery low"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Use the volume key as"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "The zoom key"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "The camera key"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Photo resolution"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video resolution"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Burst shot images are saved with the quality set as fine"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Tap and hold the camera button to take a burst shot"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Press the volume up key to take a picture. Press the volume down key to start recording"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "If Burst shot is enabled, pressing the volume up key will take a burst shot"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Do not show again"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Device"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tap and hold the icon, then drag it to edit the position of the shortcut"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Best photo"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Share shot"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cartoon"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Buddy photo share"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Autumn colour"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Save as flipped"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Not enough memory for video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Review"
+
diff --git a/po/en_PH.po b/po/en_PH.po
new file mode 100755
index 0000000..e4ff940
--- /dev/null
+++ b/po/en_PH.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 secs"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 secs"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-Shake"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauty"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Black and white"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Center-weighted"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Daylight"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Face detection"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Metering"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negative"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "None"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Off"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "On"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Self-portrait"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Single"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Slow motion"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Storage"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Guidelines"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS tag"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrait"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Party/Indoor"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Sunset"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Dawn"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fireworks"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Candlelight"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Backlight"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Auto focus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scene mode"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Focus mode"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Outdoor visibility"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Timer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effects"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Edit shortcuts"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Auto contrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Reset"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Burst shot"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Message limit"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Fast motion"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 secs"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Cloudy"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Failed to build panoramic images. Try later"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Please wait while creating panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Shade"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Unable to save. Not enough memory"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beauty shot"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Shooting mode"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Slow motion"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "White balance"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Capture error"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Capture time exceeded. Start again"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Unable to start Camera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Unable to start camera during call"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Close camera in %d seconds"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Enable location service in Settings to use GPS tag"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Press Shutter"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Move camera slowly in direction of arrow"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu not supported"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Security policy restricts the use of Camera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Saved"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landscape"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Night"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Face detection"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Recording mode"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Reset settings?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smile shot"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Memory card"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Beach/Snow"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Exposure value"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolution"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Recording failed"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Capture time is over. Start again"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Processing..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Memory card removed"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Unable to use Flash. Battery low"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Use the volume key as"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "The zoom key"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "The camera key"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Photo resolution"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video resolution"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Burst shot images are saved with the quality set as fine"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Tap and hold the camera button to take a burst shot"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Press the volume up key to take a picture. Press the volume down key to start recording"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "If burst shot is enabled, pressing the volume up key will take a burst shot"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Do not show again"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Device"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tap and hold the icon, then drag it to edit the position of the shortcut"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Best photo"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Share shot"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cartoon"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Buddy photo share"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Autumn color"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Save as flipped"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Not enough memory for video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Review"
+
diff --git a/po/en_US.po b/po/en_US.po
new file mode 100755
index 0000000..74c2f22
--- /dev/null
+++ b/po/en_US.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sec"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sec"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-Shake"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauty"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Black and white"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Center-weighted"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Daylight"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Face detection"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Metering"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negative"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "None"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Off"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "On"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Self-portrait"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Single"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Slow motion"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Storage"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Guidelines"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS tag"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrait"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Party/Indoor"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Sunset"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Dawn"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Firework"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Candlelight"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Backlight"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Auto focus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scene mode"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Focus mode"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Outdoor visibility"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Timer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effects"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Edit shortcuts"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Auto contrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Reset"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Burst shot"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Message limit"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Fast motion"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sec"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Cloudy"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Failed to build panoramic images. Try later"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Please wait while creating panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Shade"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Unable to save. Not enough memory"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beauty shot"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Shooting mode"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Slow motion"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "White balance"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Capture error"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Capture time exceeded. Start again"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Unable to start Camera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Unable to start camera during call"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Close camera in %d seconds"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Enable location service in Settings to use GPS tag"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Press Shutter"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Move camera slowly in direction of arrow"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu not supported"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Security policy restricts use of Camera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Saved"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landscape"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Night"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Face detection"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Recording mode"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Reset settings?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smile shot"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Memory card"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Beach/Snow"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Exposure value"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolution"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Recording failed"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Capture time is over. Start again"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Processing..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Memory card removed"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Unable to use Flash. Battery low"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Use the volume key as"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "The zoom key"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "The camera key"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Photo resolution"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video resolution"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Burst shot images are saved with the quality set as fine"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Tap and hold the camera button to take a burst shot"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Press the volume up key to take a picture. Press the volume down key to start recording."
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "If burst shot is enabled, pressing the volume up key will take a burst shot"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Do not show again"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Device"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tap and hold the icon, then drag it to edit the position of the shortcut"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Best photo"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Share shot"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cartoon"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Buddy photo share"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Autumn color"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Save as flipped"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Not enough memory for video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Review"
+
diff --git a/po/es_ES.po b/po/es_ES.po
new file mode 100755
index 0000000..08571a9
--- /dev/null
+++ b/po/es_ES.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 seg"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 seg"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Antimovimiento"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Belleza"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Blanco y negro"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centr-compensado"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Luz del día"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detección de rostro"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescente"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriz"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Medición"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativo"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ninguno"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desactivada"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Activado"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autorretrato"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorámica"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Sencillo"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Cámara lenta"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Almacenamiento"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescente"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Instrucciones"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etiqueta GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Retrato"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Deportes"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fiesta/Interior"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Puesta de sol"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Amanecer"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fuegos artificiales"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texto"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Velas"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Retroiluminación"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Enfoque automático"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Modo Escena"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Modo de enfoque"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilidad de exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporizador"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efectos"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editar accesos directos"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste automático"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Restablecer"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Ajustes"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Disparo continuo"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Límite de mensajes"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Cámara rápida"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 seg"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nublado"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Error al generar imágenes panorámicas. Intentarlo más tarde"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizonte"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Espere mientras se crea la imagen panorámica"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Sombra"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punto"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "No se puede guardar. No hay memoria suficiente"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Disparo belleza"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorámica"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Modo de disparo"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Cámara lenta"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balance blanco"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Error de captura"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Tiempo de captura superado. Comience de nuevo"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "No se puede iniciar la cámara"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "No se puede iniciar la cámara durante la llamada"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Cerrar cámara en %d segundos"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activar servicio de ubicación en Ajustes para utilizar la etiqueta GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pulse Obturador"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mueve la cámara lentamente hacia donde indica la flecha"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menú no admitido"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "La política de seguridad restringe el uso de la cámara"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Guardado"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Paisaje"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noche"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detección de rostro"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Modo de grabación"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "¿Restablecer ajustes?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Disparo por sonrisa"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Tarjeta de memoria"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Playa/Nieve"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valor de exposición"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolución"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Error de grabación"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tiempo de captura superado. Empiece de nuevo"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personalizar"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Procesando..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Tarjeta de memoria extraída"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "No se puede usar Flash. Batería baja"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Usar tecla volumen como"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "La tecla de zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "La tecla de cámara"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Resolución de foto"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Resolución de vídeo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Las imágenes de disparo continuo se guardan con la calidad óptima configurada"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Mantenga pulsado el botón de la cámara para realizar un disparo en ráfaga"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Pulse la tecla subir volumen para hacer una foto. Pulse la tecla bajar volumen para iniciar una grabación"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Si disparo continuo está activado, pulsar la tecla de subir volumen tomará un disparo continuo"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "No mostrar de nuevo"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Consejos"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositivo"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Mantenga tocado el icono y arrástrelo a la posición de edición del acceso directo"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "La mejor foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Compartir disparo"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Animación"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Compartir foto de amigo"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Color de otoño"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Guardar como volteado"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Memoria insuficiente para el vídeo"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Revisar"
+
diff --git a/po/es_MX.po b/po/es_MX.po
new file mode 100755
index 0000000..b3a428c
--- /dev/null
+++ b/po/es_MX.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 seg"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 seg"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Antivibración"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Belleza"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Blanco y negro"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centrado"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Luz de día"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detección de rostro"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescente"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriz"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Medición"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativo"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ninguno"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desactivado"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Activado"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autorretrato"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorámica"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Único"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Movimiento lento"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Almacenamiento"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescente"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Instrucciones"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etiqueta GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Retrato"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Deportes"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fiesta/Interior"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Atardecer"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Amanecer"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Pirotecnia"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texto"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Luz de vela"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Contraluz"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Enfoque automático"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Escena"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Modo de enfoque"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilidad de exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporizador"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efectos"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atajos"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste automático"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Restablecer"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Configuración"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Disparo continuo"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Límite de MMS"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Cámara rápida"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 seg"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nublado"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Error al generar imágenes panorámicas. Inténtelo más tarde"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizonte"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Espere mientras se crea la imagen panorámica"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Sombra"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Enfocado"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "No se puede guardar. Memoria insuficiente."
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beauty shot"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorámica"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Modo de captura"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Movimiento lento"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balance de blancos"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Error de captura"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Tiempo de captura superado. Inténtelo de nuevo"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "No se puede iniciar la cámara"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "No se puede iniciar la cámara\ndurante la llamada"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Cerrar la cámara en %d segundos"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activar el servicio de ubicación en la configuración para usar una etiqueta de GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pulse el Obturador"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mueve la cámara lentamente hacia donde indica la flecha"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menú no compatible"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "La política de seguridad restringe el uso de la cámara"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Guardado"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nocturno"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detección de rostro"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Modo de grabación"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "¿Restablecer configuración?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Detección de sonrisa"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Tarjeta de memoria"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Playa/Nieve"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valor de exposición"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolución"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Error de grabación"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tiempo de captura superado. Comience de nuevo"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personalizar"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Procesando..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Tarjeta de memoria extraída"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "No se puede usar Flash. Batería baja"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Use tecla volumen como"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "La tecla de zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "La tecla de la cámara"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Resolución de fotos"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Resolución de videos"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Las ráfagas de imágenes se guardan con una configuración de calidad buena"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Mantenga pulsado el botón de la cámara para tomar una ráfaga de fotos"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Presione la tecla para subir el volumen para tomar una foto. Presione la tecla para bajar el volumen para comenzar a grabar"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Si la captura en ráfaga está activada, presione la tecla subir volumen para capturar una ráfaga de imágenes"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "No mostrar de nuevo"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Consejos"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositivo"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Mantenga pulsado el ícono, luego arrástrelo para editar la posición del atajo"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Mejor foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Compartir foto"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Animación"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Compartir foto de amigo"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Color otoño"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Guardar como volteada"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Memoria insuficiente para el video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Revisar"
+
diff --git a/po/et.po b/po/et.po
new file mode 100755
index 0000000..cf93033
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Värinastabilisaator"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automaatne"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Ilu"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Mustvalge"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Keskmestav mõõtmine"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Päevavalgus"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Näo tuvastamine"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Välk"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Kiiskav"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Maatriksmõõtmine"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mõõtmine"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatiiv"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Pole"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Väljas"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Sees"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportree"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Seepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoraam"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Ühene"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Aegluubis"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Hoiundamine"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Ergav"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Juhised"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-i silt"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Püstpaigutus"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Pidu/siseruum"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Päikeseloojang"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Koidik"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Ilutulestik"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Küünlavalgus"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Taustvalgus"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Auto-fookus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Stseeni režiim"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fookuse režiim"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Välitingimuste nähtavus"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Taimer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efektid"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Muuda otseteid"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automaatne kontrastsus"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Lähtesta"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Seaded"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Sarivõte"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Tavaline"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Sõnumi piirang"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Kiire liigutus"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Pilves"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Panoraampiltide loomine nurjus. Proovige hiljem uuesti"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horisont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Palun oodake, kuni panoraami luuakse"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Varjutus"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punktmõõtmine"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Ei saa salvestada. Pole piisavalt mälu"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Iluvõte"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoraam"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Pildistusrežiim"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Aegluubis"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Valge tasakaal"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Tõrge pildistamisel"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Jäädvustamise aeg on ületatud. Alustage uuesti"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kaamerat ei saa käivitada"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Kõne ajal ei saa\nkaamerat käivitada"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Sulge kaamera %d sekundi pärast"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Aktiveeri asukohateenus Seadetes, et kasutada GPS-i silti"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Vajutage katiku nuppu"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Liigutage kaamerat aeglaselt noole suunas"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menüüd ei toetata"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Turvalisuse poliis piirab kaamera kasutuse"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Salvestatud"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Rõhtpaigutus"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Öö"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Näo tuvastamine"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Salvestusrežiim"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Lähtestada seaded?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Naeratuse võte"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Mälukaart"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Rand/lumi"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Säritusväärtus"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Eraldusvõime"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Salvestamine nurjus"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Jäädvustamise aeg on lõppenud. Alustage uuesti"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Kohandus"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Töötlemine..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Mälukaart on eemaldatud"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Välku ei saa kasutada. Aku on tühi"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Kasut. helitugevusnuppu:"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Suuminupp"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kaameranupp"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Foto eraldusvõime"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video eraldusvõime"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Sarivõtte piltide salvestamisel kasutatakse head kvaliteeti"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Sarivõtte tegemiseks toksake ja hoidke kaameranuppu"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Pildistamiseks vajutage helitugevuse suurendamise nuppu. Salvestamise alustamiseks vajutage helitugevuse vähendamise nuppu"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Kui sarivõte on aktiveeritud, jäädvustatakse helitugevuse suurendamise nupu vajutamisel sarivõte"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ära näita uuesti"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Näpunäited"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Seade"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Otsetee asendi muutmiseks toksake ja hoidke sõrme ikoonil ning seejärel lohistage seda"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Parim foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Jaga võtet"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Välk"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Karikatuur"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Sõbrafoto jagamine"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Sügisvärv"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Salvesta ümberpööratuna"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Video jaoks ei\npiisa mälu"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Eelvaade"
+
diff --git a/po/eu.po b/po/eu.po
new file mode 100755
index 0000000..c515b9d
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 seg"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 seg"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Dardar murrizketa"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Ederra"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Txuri eta beltza"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Zentratuta"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Egun-argia"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Aurpegi detekzioa"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flasha"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluoreszentea"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makroa"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrizea"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Neurketa"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatiboa"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Bat ere ez"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desaktibatuta"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Aktibatuta"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoerretratua"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Bakarra"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Kamera geldoa"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Biltegiratzea"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Goritasunezkoa"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Gida marrak"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS etiketa"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Erretratua"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Kirolak"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Festa/barnekoa"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Ilunabarra"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Egunsentia"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Su artifizialak"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Testua"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Kandelak"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Atzealdeko argia"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Fokatze automatikoa"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Eszena modua"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokatze modua"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Kanpoko \nikuspena"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Tenporizadorea"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efektuak"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editatu lasterbideak"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Kontraste automatikoa"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Berrezarri"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Ezarpenak"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Jarraikako ateratzea"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Arrunta"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Mezu muga"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Mugimendu azkarra"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 seg"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Lainotua"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Ezin izan da irudi panoramikorik sortu. Saiatu geroago"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Zerumuga"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Mesedez, itxaron ikuspegia sortu bitartean"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Tonua"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Puntua"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Ezin da gorde. Ez daukazu behar beste memoria"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Edertasun argazkia"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Kliskatze modua"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Kamera geldoa"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Zuri-balantzea"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Ateratzerakoan akatsa"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Kapturatze denbora gainditu da. Hasi berriro"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Ezin da kamera abiarazi"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Ezin da kamera abiarazi\ndeian zehar"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Itxi kamera %d segundo barru"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Gaitu kokapen zerbitzua Ezarpenetan GPS etiketa erabiltzeko"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Sakatu obturadorea"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mugitu kamera poliki geziaren norabidean"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menua ez da bateragarria"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Segurtasun politikak Kameraren erabilera mugatzen du"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Gordeta"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Horizontala"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Gaua"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Aurpegi detekzioa"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Grabaketa modua"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Konfigurazioa berrabiarazi?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Irribarre kliskatzea"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Memoria txartela"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Hondartza/Elur."
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Irekidura balioa"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Bereizmena"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Grabaketa errorea"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Kapturatze denbora amaitu da. Hasi berriro"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Pertsonalizatua"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Prozesatzen..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Memoria txartela aterata"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Ezin da flasha erabili. Bateria gutxi"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Erab. bol. tekla honela:"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoom tekla"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kamera tekla"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Argazkien bereizmena"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Bideoen bereizmena"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Jarraikako ateratzean egindako argazkiak ona gisa ezarritako kalitateaz gordetzen dira"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Ukitu eta eutsi kamera botoia jarraikako argazkiak ateratzeko"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Sakatu bolumena igotzeko tekla argazkia ateratzeko. Sakatu bolumena jaisteko tekla grabaketa hasteko"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Berehalako ateraldia gaituta badago, bolumena igotzeko tekla sakatzeak berehalako ateraldia egingo du"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ez erakutsi berriro"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Aholkuak"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Gailua"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Sakatu eta eutsi ikonoa, ondoren arrastatu laster-markaren kokapena editatzeko"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Argazkirik onena"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Partekatu argazkia"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flasha"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Marrazki bizidunak"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Lagun argazkiak partekatzea"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Udazkenaren kolorea"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Gorde itzulitako gisa"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Ez dago bideoarentzako memoria nahikoa"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Berrikusi"
+
diff --git a/po/fi.po b/po/fi.po
new file mode 100755
index 0000000..6a81d7a
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 s"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 s"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Tärinänesto"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automaattinen"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Kauneus"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Mustavalkoinen"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Keskipainotettu"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Päivänvalo"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Kasvontunnistus"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Salama"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Loistevalo"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriisimittaus"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mittaus"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatiivi"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ei mitään"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Pois"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Päällä"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Muotokuva"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Seepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoraama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Yksi"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Hidas liike"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Tallennustila"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Hehkulampun valo"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Suuntaviivat"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-tunniste"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Muotokuva"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Urheilu"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Juhlat/Sisätila"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Auringonlasku"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Aamu"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Ilotulitus"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Teksti"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Kynttilänvalo"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Taustavalo"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Automaattinen tarkennus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Ohjelmatila"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Tarkennustila"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Näkyvyys ulkona"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Ajastin"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Tehosteet"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Muokkaa pikavalintoja"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Autom. kontrasti"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Nollaa"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Asetukset"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Sarjakuvaus"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normaali"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Viestirajoitus"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Nopea liike"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 s"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Pilvinen"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Panoraamakuvien muodostaminen epäonnistui. Yritä myöhemmin uudelleen"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horisontti"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Odota, panoraamakuvaa luodaan"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Varjostin"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Pistemittaus"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Tallennus epäonnistui. Muisti ei riitä"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Kaunis kuva"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoraama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Kuvaustila"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Hidas liike"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Valkotasapaino"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Virhe kuvaa otettaessa"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Kuvausaika ylitetty. Aloita alusta"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kameraa ei voi käynnistää"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Kameraa ei voi käyttää puhelun aikana"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Sulje kamera %d sekunnin kuluttua"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Ota sijaintipalvelu Asetukset-kohdassa käyttöön GPS-tunnisteen käyttöä varten"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Paina laukaisinta"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Liikuta kameraa hitaasti nuolen suuntaan"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Valikkoa ei tueta"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Suojauskäytäntö estää kameran käytön"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Tallennettu"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Maisema"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Yö"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Kasvontunnistus"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Tallennustila"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Nollataanko asetukset?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Hymykuvaus"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Muistikortti"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Ranta/lumi"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valotusarvo"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Tarkkuus"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Tallennus epäonnistui"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Kuvausaika on ylitetty. Aloita alusta"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Mukautettu"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Käsitellään..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Muistikortti poistettu"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Flashia ei voi käyttää. Akun virta on vähissä"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Voim.näpp. käyttötapa:"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoomausnäppäin"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kameranäppäin"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Valokuvan tarkkuus"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videon tarkkuus"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Kuvasarjan kuvat tallennetaan Tarkka-asetuksella"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Ota kuvasarja pitämällä kamerapainiketta painettuna"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Ota kuva painamalla äänenvoimakkuuden lisäyspainiketta. Aloita tallennus painamalla äänenvoimakkuuden vähennyspainiketta"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Jos sarjakuvaus otetaan käyttöön, voit ottaa kuvasarjan äänenvoimakkuuden lisäysnäppäintä painamalla"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Älä näytä uudestaan"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Vihjeitä"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Laite"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Paina kuvaketta jonkin aikaa ja vedä sitä sen jälkeen pikakuvakkeen paikan muokkaamiseksi"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Paras valokuva"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Kuvanjako"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Salama"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Sarjakuva"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Kaverien valokuvien jakaminen"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Syksynvärinen"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Tallenna käännettynä"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Muisti ei\nriitä videolle"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Tarkista"
+
diff --git a/po/fr_CA.po b/po/fr_CA.po
new file mode 100755
index 0000000..a8f98af
--- /dev/null
+++ b/po/fr_CA.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 s"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 s"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilisateur"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauté"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Noir et blanc"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Mesure pondérée centrale"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Lumière du jour"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Détection des visages"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrice"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mesure"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Négatif"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Aucun"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Désactivé"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Activé"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportrait"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sépia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Unique"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Ralenti"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Stockage"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Grille repère"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Balise GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrait"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fête/Intérieur"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Coucher de soleil"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Aube"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Feu d'artifice"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texte"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Chandelles"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Rétroécl."
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofocus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Mode scène"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Mode mise au point"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilité extérieure"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Retardateur"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effets"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Modifier les raccourcis"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste auto"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Réinitialiser"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Paramètres"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Rafale"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limite des messages"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Accéléré"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 s"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nuageux"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Échec de création des images panoramiques. Essayez plus tard"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Veuillez patienter pendant la création du panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Ombre"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Zone"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Échec de l'enregistrement. Mémoire insuffisante"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beauté"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Mode prise de vue"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Ralenti"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Équilibre des blancs"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Erreur de capture"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Délai de prise dépassé. Recommencer"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Impossible de démarrer l'appareil photo"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Impossible de lancer l'appareil photo pendant un appel"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "L'appareil photo se fermera dans %d secondes"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activer le service de localisation dans Paramètres pour utiliser la balise GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pressez l'obturateur"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Déplacez lentement l'appareil photo dans le sens de la flèche"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu non pris en charge"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "La politique de sécurité limite l'utilisation de l'appareil photo"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Enregistré"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Paysage"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nuit"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Détection des visages"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Mode d'enregistrement"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Réinitialiser les paramètres ?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Sourire"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Carte mémoire"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plage/Neige"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valeur d'exposition"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Résolution"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Échec de l'enregistrement"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Délai de prise de vue dépassé. Recommencez"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personnaliser"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Traitement…"
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Carte mémoire retirée"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Impossible d'utiliser le flash. Pile trop faible"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Util. tche volume comme"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Touche Zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Touche Appareil photo"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Résolution photo"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Résolution vidéo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "La qualité d'enregistrement des photos en rafale est définie sur Bonne"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Touchez longuement le bouton de l'appareil photo pour prendre des photos en rafale"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Appuyez sur le bouton d'augmentation du volume pour prendre une photo. Appuyez sur la touche de réduction du volume pour commencer l'enregistrement"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Si le mode rafale est activé, appuyez sur la touche d'augmentation du volume pour prendre des photos en rafale"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ne plus afficher"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Astuces"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Appareil"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Touchez longuement l'icône, puis faites-la glisser pour modifier la position du raccourci"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Meilleure photo"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Partager la photo"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Dessin animé"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Partage de photo d'ami"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Couleur d'automne"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Enregistré comme retourné"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Mémoire insuffisante pour la vidéo"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Aperçu"
+
diff --git a/po/fr_FR.po b/po/fr_FR.po
new file mode 100755
index 0000000..d2c6e70
--- /dev/null
+++ b/po/fr_FR.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sec"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sec"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilisateur"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto."
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauté"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Noir et blanc"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Mesure pondérée centrale"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Lumière naturelle"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Détect. portrait"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrice"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mesure"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Négatif"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Aucun"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Désactivé"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Activé"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportrait"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sépia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Unique"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Mouvement lent"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Stockage"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Guide"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Balise GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrait"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fête/Intérieur"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Coucher de soleil"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Aube"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Feu d'artifice"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texte"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Bougie"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Rétroéclairage"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Auto focus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Mode scène"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Mode mise au point"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilité extérieure"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Retardateur"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effets"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Modifier les raccourcis"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste auto"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Réinitialiser"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Paramètres"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Rafale"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limite pour MMS"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Mouvement rapide"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sec"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nuageux"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Échec de création des images panoramiques. Essayez plus tard"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Veuillez patienter pendant la création du panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Ombre"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Échec de l'enregistrement. Mémoire insuffisante"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Prise de vue améliorée"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Mode de capture"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Mouvement lent"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balance des blancs"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Erreur de capture"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Délai de capture dépassé. Recommencer"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Impossible de démarrer l'appareil photo"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Appareil photo non disponible\npendant appel"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Fermer l'appareil photo dans %d secondes"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activer le service de localisation dans Paramètres pour utiliser la balise GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Appuyez sur l'obturateur"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Déplacez lentement l'appareil photo dans le sens de la flèche"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu non pris en charge"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "La politique de sécurité limite l'utilisation de l'appareil photo"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Enregistré"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Paysage"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nuit"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Détect. portrait"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Mode d'enregistrement"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Réinitialiser les paramètres ?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Sourire"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Carte mémoire"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plage/Neige"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valeur d'exposition"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Résolution"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Échec enregistrement"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Temps de capture dépassé. Recommencez"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personnaliser"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "En cours..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Carte mémoire retirée"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Impossible d'utiliser le flash. Batterie trop faible"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Util. tche volume comme"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Touche Zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Touche Appareil photo"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Résolution photo"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Résolution vidéo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "La qualité d'enregistrement des photos en rafale est définie sur Bonne"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Appuyez longuement sur la touche de l'appareil photo pour prendre des photos en rafale"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Appuyez sur la touche d'augmentation du volume pour prendre une photo. Appuyez sur la touche de réduction du volume pour commencer l'enregistrement"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Si le mode rafale est activé, appuyez sur la touche de volume Haut pour prendre des photos en rafale"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ne plus afficher"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Astuces"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Périphérique"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Maintenez votre doigt appuyé sur l'icône, puis faites-la glisser pour modifier la position du raccourci"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Meilleures poses"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Partage"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Dessin animé"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Partage de photo d'ami"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Couleur d'automne"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Retourner l'image"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Mémoire vidéo\ninsuffisante"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Compte-rendu"
+
diff --git a/po/ga.po b/po/ga.po
new file mode 100755
index 0000000..8cc2446
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 soic"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 shoic"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Frith-chrith"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Uath-"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Áilleacht"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Dubh agus bán"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Ualaithe sa lár"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Solas an Lae"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Aimsiú aghaidhe"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Splanc"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluaraiseach"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macra"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Maitrís"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Méadrú"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Claonchló"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Dada"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "As"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Air"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Féin-phortráid"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Dúch cudail"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Lánléargas"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Singil"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Mallghluaisne"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Stóras"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Gealbhruthach"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Treoirlínte"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Clib GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portráid"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Spóirt"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Cóisir/Laistigh"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Luí na gréine"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Éirí na gréine"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Tine ealaíne"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Téacs"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Solas coinnle"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Cúlsolas"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Uathfhocás"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Mód radhairc"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Mód fócais"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Infheictheacht lasmuigh"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Amadóir"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Maisíochtaí"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Cuir aicearraí in eagar"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Uathchodarsnacht"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Athshocraigh"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Socruithe"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Seat rúisce"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normálta"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Teorainn na teachtaireachta"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Mearghluaisne"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 shoic"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Scamallach"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Theip ar íomhánna lánléargais a thógáil. Triail arís ar ball"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Léaslíne"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Fan go fóill agus lánléargas á chruthú"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Scáth"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spota"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Ní féidir sábháil. Easpa cuimhne"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Seat áilleachta"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Lánléargas"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Mód scannánaíochta"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Mallghluaisne"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Leibhéal bán"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Earráid ghafa"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Am gafa sáraithe. Tosaigh arís"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Ní féidir Ceamara a thosú"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Ní féidir Ceamara a thosú le linn glao"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Dún ceamara i gceann %d soicind"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Cumasaigh seirbhís suímh sna Socruithe le clib GPS a úsáid"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Brúigh Comhla"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Bog an ceamara go mall i dtreo na saighde"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Roghchlár gan tacú"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Cuireann an beartas slándála srian ar úsáid an Cheamara"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Sábháilte"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Tírdhreach"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Oíche"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Aimsiú aghaidhe"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Mód taifeadta"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Athshocraigh socruithe?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Seat miongháire"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Cárta cuimhne"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Trá/Sneachta"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Luach nochta"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Taifeach"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Theip ar thaifeadadh"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Am gafa thart. Tosaigh arís"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Saincheaptha"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Ag próiseáil..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Cárta cuimhne bainte"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Ní féidir Splanc a úsáid. Ceallra lag"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Úsáid eochair airde mar"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "An eochair Zúmáil"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "An eochair Ceamara"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Taifeach grianghraf"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Taifeach físeán"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Sábháiltear íomhánna seat pléasctha leis an gcáilíocht socraithe mar mhín"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Brúigh agus coinnigh síos cnaipe an cheamara le seat pléasctha a ghlacadh"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Brúigh an eochair Airde suas le pictiúr a ghlacadh. Brúigh an eochair Airde síos le tosú ar thaifeadadh"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Má tá Seat pléascach cumasaithe, glacfar seat pléascach tríd an eochair airde suas a bhrú"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ná taispeáin arís"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Leideanna"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Gléas"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tapáil agus coinnigh an t-íocón, ansin tarraing é le suíomh an aicearra a athrú"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Grianghraf is fearr"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Comhroinn seat"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Splanc"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cartún"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Comhroinnt grianghraf idir chairde"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Dath an fhómhair"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Sábháil mar smeachta"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Easpa cuimhne d'fhíseán"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Athbhreithniú"
+
diff --git a/po/gl.po b/po/gl.po
new file mode 100755
index 0000000..7cf67ee
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 seg"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 seg"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Estabilizador"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Fermosura"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Branco e negro"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Ponderado ao centro"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Luz diúrna"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detección de cara"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescente"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriz"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Medición"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativo"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ningún"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desactivado"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Activada"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoretrato"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Sinxelo"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Cámara lenta"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Almacenamento"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescente"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Pautas"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etiqueta de GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Vertical"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Deportes"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Festa/Interior"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Solpor"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Amencer"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fogos de artificio"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texto"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Velas"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Luz de fondo"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Enfoque automático"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Modo escena"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Modo de enfoque"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilidade no exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporizador"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efectos"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atallos"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste automático"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Restablecer"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Axustes"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Refacho"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Límite de mensaxes"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Movemento rápido"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 seg"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nubrado"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Erro ao crear imaxes panorámicas. Inténteo máis tarde."
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizonte"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Espere mentres se crea a imaxe panorámica"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Sombra"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punto"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Non se pode gardar. Non hai memoria dabondo."
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Disparo fermoso"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Modo disparo"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Cámara lenta"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balance de brancos"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Erro de captura"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Excedeuse o tempo de captura. Iniciar de novo"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Non se pode iniciar a Cámara"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Non se pode iniciar a cámara\ndurante unha chamada"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Pecha a cámara dentro de %d segundos"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activa o servizo de situación en Axustes para utilizar a etiqueta de GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pulsar en Obturador"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Move a cámara lentamente cara á dirección da frecha"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menú non admitido"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "A política de seguridade limita o uso da Cámara"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Gardado"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Horizontal"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noite"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detección de cara"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Modo de gravación"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Restablecer axustes?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Disparo de sorriso"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Tarxeta de memoria"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Praia/Neve"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valor de exposición"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolución"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Erro de gravación"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Acabouse o tempo de captura. Comeza de novo"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personalizado"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Procesando..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Tarxeta de memoria extraída"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Non se pode utilizar o flash. Batería baixa"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Utiliza tecla volume como"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "A tecla de ampliación"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "A tecla da cámara"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Resolución da foto"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Resolución do vídeo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "As imaxes capturadas en refacho gárdanse coa calidade axustada en alta"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Mantén pulsado o botón da cámara para efectuar unha toma en refacho"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Pulsa a tecla para subir volume para tomar unha imaxe. Pulsa a tecla de baixar volume para iniciar a gravación"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Se se activan as tomas en refacho, se pulsas a tecla de subir volume, capturarase unha toma en refacho"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Non volver mostrar"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Suxestións"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositivo"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Mantén tocada a icona e, a continuación, arrástraa para editar a posición do atallo"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Mellor foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Compartir foto"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Animación"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Compartir foto de amigo"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Cor de outono"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Gardar imaxe volteada"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Non hai memoria suficiente para o vídeo"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Revisar"
+
diff --git a/po/hi.po b/po/hi.po
new file mode 100755
index 0000000..a89c377
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 से."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 से."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "एंटी-शेक"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "स्वतः"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "ब्यूटी"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "काला और सफेद"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "सेंटर-वेटिड"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "डेलाइट"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "चेहरा पहचान"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "चमक"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "प्रतिदीप्ति"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "मैक्रो"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "मैट्रिक्स"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "मीटरिंग"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "नकारात्मक"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "कुछ भी नहीं"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "बंद"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "चालू"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "अपना चित्र"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "सेपिया"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "पैनोरमा"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "एकल"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "धीमी गति"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "स्टोरेज"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "उज्‍ज्वल"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "गाइडलाइंस"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "जीपीएस टैग"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "चित्र"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "खेल"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "पार्टी/इंडोर"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "सूर्यास्त"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "डॉन"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "फायरवर्क"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "टेक्स्ट"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "कैंडललाइट"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "बैकलाइट"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "ऑटो फोकस"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "सीन मोड"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "केंद्रित मोड"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "आउटडोर दृश्यता"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "टाइमर"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "प्रभाव"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "शॉर्टकट्स संपादित करें"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "स्वत: कंट्रास्ट"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "रीसेट"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "सेटिंग्स"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "बर्स्ट शॉट"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "सामान्य"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "सन्देश सीमा"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "तेज़ गति"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 से."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "क्लाउडी"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "विशालदर्शी इमेजेस बनाने में विफल. बाद में कोशिश करें"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "क्षितिज"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "पैनोरमा बनाते समय कृपया प्रतीक्षा करें"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "शेड"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "केंद्र"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "सेव करने में अक्षम। पर्याप्‍त मेमोरी नहीं"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "सौन्दर्य शॉट"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "पैनोरमा"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "शूटिंग मोड"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "धीमी गति"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "ह्वाइट बैलेंस"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "गलती पकड़ें"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "कैप्चर समय सीमा से अधिक हो गया. फिर से शुरू करें"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "कैमरा शुरू करने में अक्षम"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "कॉल के दौरान कैमरा चालू करने में अक्षम"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "%d सेकंडों में कैमरा बंद करें"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS टैग का उपयोग करने के लिए सेटिंग्स में स्थान सेवा सक्षम करें"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "शटर दबाएँ"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "तीर की दिशा में कैमरे को धीरे ले जाएँ"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "मेनू समर्थित नहीं"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "सुरक्षा नीति कैमरा के उपयोग को प्रतिबंधित करती है"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "सुरक्षित किया"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "लैंडस्केप"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "रात्रि"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "चेहरा पहचान"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "रिकॉर्डिंग मोड"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "सेटिंग्स रीसेट करें?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "स्माइल शॉट"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "मेमोरी कार्ड"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "बीच/बर्फ"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "एक्सपोज़र मान"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "रेज़ोल्यूशन"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "रिकॉर्डिंग विफल"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "कैप्‍चर समय समाप्त हो गया। फिर से शुरू करें"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "कस्‍टम"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "प्रोसेस हो रहा है…"
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "मेमोरी कार्ड हटाया गया"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "बैटरी कम है, फ्लैश इस्तेमाल करने में असमर्थ।"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "इस रूप में वॉल्यूम कुंजी का उपयोग करें"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "ज़ूम कुंजी"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "कैमरा कुंजी"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "फ़ोटो रिज़ॉल्‍यूशन"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "वीडियो रिज़ॉल्‍यूशन"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "बर्स्ट शॉट्स छवियाँ सर्वश्रेष्ठ गुणवत्ता सेट के साथ सुरक्षित की गई हैं"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "कोर्इ बर्स्‍ट शॉट्स लेने के लिए कैमरा बटन को टैप और होल्ड करें"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "तस्वीर लेने के लिए वॉल्यूम अप कुंजी दबाएँ। रिकॉर्डिंग प्रारंभ करने के लिए वॉल्यूम डाउन कुंजी दबाएँ"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "यदि बर्स्ट शॉट सक्षम किया जाता है, तो वॉल्यूम अप कुंजी को दबाने पर यह बर्स्ट शॉट लेता है"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "दुबारा न दिखाएँ"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "संकेत"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "डिवाइस"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "प्रतीक को टैप और होल्ड करें, फिर शॉर्टकट की स्थिति को संपादित करने के लिए उसे ड्रैग करें"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "सर्वश्रेष्ठ फ़ोटो"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "शॉट साझा करें"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "चमक"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "कार्टून"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "मित्र फ़ोटो साझा करना"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "ऑटम कलर"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "फ़्लि किए गए के रूप में सुरक्षित करें"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "वीडियो के लिए पर्याप्त मेमोरी नहीं"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "समीक्षा"
+
diff --git a/po/hr.po b/po/hr.po
new file mode 100755
index 0000000..1140efe
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilizacija"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Ljepota"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Crno-bijelo"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centar"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dnevna"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Prepoznavanje lica"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Bljeskalica"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent."
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrica"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mjerenje"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ništa"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Isključi"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Uključi"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sephia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Jedna"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Usporeno"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Spremanje"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Žarulja"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Smjernice"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS oznaka"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Zabava/Interijer"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Zalazak sunca"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Zora"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Vatromet"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Svijeća"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Pozadinsko osvjetljenje"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Auto fokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scene način"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokusiranje"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Vidljivost na otvorenom"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Odbrojavanje"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efekti"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Uredi prečace"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Auto. kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Poništavanje"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Postavke"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Uzastopno"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Granica poruke"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Brzo kretanje"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Oblačno"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Neuspješna izrada panoramskih slika. Pokušajte kasnije"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Pričekajte..."
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Sjena"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Točke"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nemoguće spremiti. Nedovoljno memorije"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Ljepota"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Način fotografiranja"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Usporeno"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Korekcija bijele boje"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Greška snimanja"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Prekoračeno vrijeme snimanja. Ponovite"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Nemoguće pokrenuti kameru"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Nemoguće pokrenuti kameru tijekom poziva"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Zatvori kameru u %d sek"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Uključite lokacijsku uslugu u postavkama kako biste koristili GPS oznaku"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pritisnite okidač"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Polako pomičite kameru u smjeru strelice"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Meni nepodržan"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Sigurnosne odredbe ograničavaju korištenje fotoaparata"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Spremljeno"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Pejzaž"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noćno"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Prepoznavanje lica"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Način snimanja"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Poništiti postavke?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Osmijeh"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Mem. kartica"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plaža/snijeg"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Vrijednost ekspozicije"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rezolucija"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Greška snimanja"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Vrijeme snimanja gotovo. Ponovite"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Prilagođeno"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Procesiranje..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Mem. kartica uklonjena"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Nemoguće koristiti Bljeskalicu. Baterija prazna"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Koristi tipku glasnoće kao"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tipka za zumiranje"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Tipka kamere"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Foto rezolucija"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video rezolucija"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Uzastopne fotografije su spremljenje s kvalitetom postavljenom na “dobra”"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Dodirnite i držite tipku kamere za Uzastopno"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Pritisnite tipku za pojačavanje zvuka za snimanje slike. Pritisnite tipku za stišavanje zvuka za pokretanje snimanja"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ako je uključeno Uzastopno, pritiskom na tipku za pojačavanje zvuka napravit ćete uzastopne fotografije"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ne prikazuj više"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Savjeti"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Uređaj"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Dodirnite i držite ikonu, zatim je povucite da biste postavili poziciju prečaca"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Najbolja fotografija"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Dijeli snimku"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Bljeskalica"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Strip"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Dijeljenje foto. s prijateljem"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Jesenja boja"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Spremi kao preokrenuto"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Nedovoljna memorija\nza video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Pregled"
+
diff --git a/po/htm2po.py b/po/htm2po.py
new file mode 100755
index 0000000..683240e
--- /dev/null
+++ b/po/htm2po.py
@@ -0,0 +1,97 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+import sys, re
+from BeautifulSoup import BeautifulSoup
+
+help = """
+arg 1 : input file
+arg 2 : the locale field which you wanna extract
+arg 3 : output po file
+"""
+
+DESIGN_ID = "Design ID"
+dString = {}
+
+def findindexof( word, tds ):
+ for i, td in enumerate(tds):
+ try:
+ if td.contents[0]==word:
+ return i
+ except IndexError:
+ pass
+ return -1
+
+if __name__=="__main__":
+ if len(sys.argv)>3:
+ in_file = sys.argv[1]
+ locale = sys.argv[2]
+ po_file = sys.argv[3]
+ else:
+ print help
+ sys.exit()
+
+ print 'input file :', in_file
+ print 'locale :', locale
+ print 'po file :', po_file
+
+ f = open( in_file, 'rt' )
+ soup = BeautifulSoup( f.read() )
+ f.close()
+
+ for i, tr in enumerate(soup('tr')):
+ tds = tr('td')
+ if i==0:
+ iID = findindexof( DESIGN_ID, tds )
+ iLocale = findindexof( locale, tds )
+ print 'index of design id :',iID, ", index of",locale,":", iLocale
+ if iID<0 or iLocale<0:
+ print 'index failed'
+ sys.exit()
+ continue
+
+ bPass = True;
+ for j,td in enumerate(tds):
+ try:
+ if j==iID: ID = td.contents[0]
+ elif j==iLocale: szLocale = td.contents[0]
+ except IndexError:
+ bPass = False;
+ pass
+
+ if bPass:
+ dString[ID] = szLocale
+ #print i, '\t', ID, '\t' ,szLocale
+
+ #modify po file
+ f = open( po_file, 'rt' )
+ po = f.read().decode('utf-8')
+ f.close()
+
+ for k, v in dString.items():
+ #find key
+ msg = 'msgid "'+ k + '"'
+ sp = po.find( msg )
+
+ #if yes, replace
+ if sp>-1:
+ lines = po.split('\n')
+ for i, line in enumerate(lines):
+ if line.find( msg )>-1:
+ #replace next line
+ print 'replace :',k
+ v = v.replace('\r', '') #remove linefeed
+ v = v.replace('\n ', '\\n') #remove carriage return
+ lines[i+1] = 'msgstr "' + v + '"'
+ po = "\n".join( lines )
+
+ #if no, append
+ #if sp<0:
+ # print 'append', k
+ # po += 'msgid "' + k + '"\n'
+ # po += 'msgstr "' + v + '"\n\n'
+
+ newfile = po_file+'.new'
+ f = open( newfile , 'wt' )
+ f.write( po.encode('utf-8') )
+ f. close()
+ print newfile, 'is created'
diff --git a/po/hu.po b/po/hu.po
new file mode 100755
index 0000000..57c3164
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 mp"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 mp"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Képstabilizáló"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto."
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Szépség"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Fekete-fehér"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Középre súlyozott"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Nappali fény"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Arcészlelés"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Mobilfény"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fénycső"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makró"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Mátrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mérés"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatív"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nincs"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Ki"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Be"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Önarckép"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Szépia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoráma"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Egyszerű"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Lassítás"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Tárhely"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Lámpafény"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Segédvonalak"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-címke"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portré"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Buli/beltér"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Naplemente"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Hajnal"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Tűzijáték"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Szöveg"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Gyertyafény"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Háttérfény"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Automatikus fókusz"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Éjszakai mód"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fókuszmód"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Láthatóság külső fényben"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Időzítő"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effektusok"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Ikonok szerkesztése"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatikus kontraszt"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Visszaállítás"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Beállítások"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Sorozatfelvétel"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normál"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Üzenetkorlát"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Gyors mozgás"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 mp"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Felhős"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Nem sikerült panorámaképet kialakítani. Próbálja meg később"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Kis türelmet, a panoráma létrehozása folyamatban van"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Árnyék"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Pontszerű"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nem lehet menteni. Nincs elég memória"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Csinos felvétel"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoráma"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Fénykép mód"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Lassítás"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Fehéregyensúly"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Rögzítési hiba"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Túllépte a rögzítési időt. Kezdje újra"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Nem indítható el a Kamera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Hívás közben a Kamera\nnem indítható el"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "%d másodpercen belül zárja be a kamerát"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS-címke használatához engedélyezze a helymeghatározó szolgáltatást a Beállításokban"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Nyomja le a zárgombot"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Lassan mozgassa a fényképezőt a nyíllal jelzett irányba"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "A menü nincs támogatva"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "A biztonsági irányelv korlátozza a Kamera használatát"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Mentve"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Tájkép"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Éjszakai"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Arcészlelés"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Felvételmód"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Alapbeáll. visszaállítja?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Mosoly felvétele"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Memóriakártya"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strand/hó"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Fényérték"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Felbontás"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "A felvétel nem sikerült"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Lejárt a rögzítési idő. Kezdje újra"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Egyedi"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Feldolgozás folyamatban"
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Memóriakártya eltávolítva"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Nem használható a mobilfény, mert az akkutöltöttség alacsony"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Hangerőgomb haszn. mint"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoom gomb"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kamera gomb"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fényképfelbontás"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videofelbontás"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "A sorozatfelvételek a beállítás szerint finom minőségben lesznek mentve"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Sorozatfelvétel készítéséhez tartsa ujját a Kamera gombon"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Fényképezéshez nyomja meg a hangosítógombot. Rögzítés indításához nyomja meg a halkítógombot"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Engedélyezett sorozatfelvétel esetén a hangosítógomb megnyomásával sorozatfelvételt készíthet"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ne jelenjen meg ismét"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tippek"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Eszköz"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tartsa ujját az ikonon, majd húzza a kívánt helyre a parancsikon pozíciójának szerkesztéséhez"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Legjobb fénykép"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Felvételmegosztás"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Mobilfény"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Rajzfilm"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Fénykép megosztása baráttal"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Őszi színek"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Mentés tükrözve"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Videó számára\nnincs elég memória"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Előnézet"
+
diff --git a/po/hy.po b/po/hy.po
new file mode 100755
index 0000000..32d263d
--- /dev/null
+++ b/po/hy.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 վրկ"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 վրկ"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Հակացնցումային"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Ավտոմատ"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Հմայք"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Սև ու սպիտակ"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Կենտրոնով"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Օրվա լուսավոր ժամանակը"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Դեմքի ճանաչում"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Բռնկում"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Ֆլուորեսցենտ"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Մակրո"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Մատրիցա"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Պահաժամի չափում"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Բացասական"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ոչինչ"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Անջատված"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Միացված է"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Ինքնադիմանկար"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Սեպիա"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Համայնապատկեր"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Մեկ"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Դանդաղ շարժում"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Պահոց"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Շիկացման լամպ"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Ուղեցույցեր"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS հատկորոշիչ"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Դիմանկար"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Մարզաձևեր"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Խնջույք/ներսում"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Մայրամուտ"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Արևածագ"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Հրավառություն"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Տեքստ"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Մոմի լույս"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Ֆոնային լույս"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Ավտո ֆոկուս"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Տեսարանի ռեժիմ"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Ֆոկուսի ռեժիմ"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Բացօթյա տեսանելիություն"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Ժամանակաչափ"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Էֆեկտներ"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Խմբագրել դյուրանցումները"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Ինքնահակադրականություն"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Զրոյացնել"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Պարամետրեր"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Նկարաշարք"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Նորմալ"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Հաղորդագրության առավելագույն չափ"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Արագ շարժում"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 վրկ"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Ամպամած"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Համայնապատկերների կառուցումը ձախողվեց: Փորձեք ավելի ուշ"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Հորիզոն"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Սպասե՛ք համայնապատկերի ստեղծման համար"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Երանգ"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Կետ"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Հնարավոր չէ պահպանել: Հիշողությունը բավական չէ"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Գեղեցիկ լուսանկար"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Համայնապատկեր"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Նկարահանման ռեժիմ"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Դանդաղ շարժում"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Սպիտակի հաշվեկշիռ"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Նկարահանման սխալ"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Սևեռման ժամանակը գերազանցված է: Սկսել նորից"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Անհնար է մեկնարկել Խցիկը"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Անհնար է խցիկը միացնել զանգի ընթացքում"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Փակել խցիկը %d վայրկյանից"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Ընձեռել տեղորոշման ծառայություն Դրվածքներում՝ GPS հատկորոշիչն օգտագործելու համար"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Սեղմել Փականակը"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Խցիկը դանդաղ շարժել սլաքի ուղղությամբ"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Ցանկը չի սատարվում"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Անվտանգության քաղաքականությունը սահմանափակում է Խցիկի օգտագործումը"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Պահպանվեց"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Բնապատկեր"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Գիշեր"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Դեմքի ճանաչում"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Ձայնագրման ռեժիմ"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Զրոյացնե՞լ կայանքները"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Ժպիտի ֆիքսում"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Հիշողության քարտ"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Լողափ/Ձյուն"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Լուսակայման արժեք"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Լուծաչափ"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Ձայնագրումը ձախողվեց"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Նկարահանման ժամանակն ավարտվել է: Սկսեք նորից"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Կարգավորել"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Ընթացքում է"
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Հիշողության քարտը հեռացված է"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Անհնար է օգտագործել Լուսաբռնկիչը. մարտկոցը նստած է"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Օգտ. ուժգն. ստեղնը որպես"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Մասշտաբի ստեղնը"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Խցիկի ստեղնը"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Լուսանկարի լուծաչափ"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Տեսանյութի լուծաչափ"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Նկարաշարքի պատկերները պահպանվել են 'բարձրակարգ' որակով"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Նկարաշարք ստեղծելու համար թակեք և պահեք խցիկի կոճակը"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Նկարահանելու համար սեղմեք ձայնի բարձրացման ստեղնը: Տեսագրումը սկսելու համար սեղմեք ձայնի իջեցման ստեղնը"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Եթե նկարաշարքն ընձեռված է, ձայնի բարձրացման ստեղնը սեղմելը նկարաշարք կնկարահանի"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Չցուցադրել կրկին"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Խորհուրդներ"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Սարք"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Թակեք և պահեք պատկերակը, հետո քաշեք՝ դյուրանցման դիրքը խմբագրելու համար"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Լավագույն լուսանկարը"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Լուսանկարի համօգտագործում"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Բռնկում"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Մուլտֆիլմ"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Մտերիմի լուսանկարի համօգտագործում"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Աշնան գույներ"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Պահպանել որպես շրջված"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Նկարահանման համար բավական հիշողություն չկա"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Վերանայում"
+
diff --git a/po/is.po b/po/is.po
new file mode 100755
index 0000000..0b99605
--- /dev/null
+++ b/po/is.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Hristivörn"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Sjálfvirkt"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Fegurð"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Svarthvítt"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Miðjusækni"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dagsbirta"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Greining andlits"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flass"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Flúrljós"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Nærmynd"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Fylki"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mæling"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatíft"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Enginn"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Slökkt"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Kveikt"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Sjálfsmynd"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Brúnlitt"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Víðmynd"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Einn"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Hæghreyfing"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Geymsla"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Venjuleg pera"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Leiðbeiningar"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-merki"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Skammsnið"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Íþróttir"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Partí/innanhúss"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Sólarlag"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Dögun"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Flugeldar"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texti"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Kertaljós"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Baklýsing"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Sjálfvirkur fókus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Sviðshamur"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fókus"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Skyggni utandyra"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Niðurteljari"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Brellur"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Breyta flýtileiðum"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Sjálfvirk birtuskil"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Endurstilla"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Stillingar"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Myndaröð"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Venjulegt"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Takmörk skeyta"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Hröð hreyfing"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Skýjað"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Mistókst að búa til víðmyndir. Reyndu aftur síðar"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Sjóndeildarhringur"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Bíddu á meðan víðmyndin er búin til"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Skuggi"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Miðjupunktur"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Það er of litið minni til að vista"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Fegurðarmynd"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Víðmynd"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Tökustilling"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Hæghreyfing"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Hvítjöfnun"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Tökuvilla"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Myndatökutíminn er liðinn. Byrjaðu aftur"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Mistókst að opna myndavél"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Ekki er hægt að ræsa myndavél\n á meðan símtal stendur yfir"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Loka myndavél eftir %d sekúndur"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Kveiktu á staðsetningarþjónustu í Stillingum til að nota GPS-merki"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Ýttu á Lokari"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Færðu myndavélina hægt í þá átt sem örin bendir"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Valmyndin er óstudd"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Öryggisreglur takmarka notkun myndavélar"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Vistað"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Langsnið"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Næturstilling"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Greining andlits"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Upptaka"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Núllstilla?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Brosmynd"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Minniskort"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strönd/snjór"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Ljósgildi"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Upplausn"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Upptakan mistókst"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tökutíminn er liðinn. Byrjaðu aftur"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Sérstilla"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Vinnsla í gangi..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Minniskort tekið úr"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Ekki hægt að nota flass. Lítil hleðsla"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Nota hljóðst.takkann sem"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Aðdráttarhnappurinn"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Myndavélarhnappurinn"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Myndupplausn"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Upplausn myndskeiða"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Myndir úr raðmyndatöku eru vistaðar í fínum gæðum"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Haltu myndavélarhnappinum inni fyrir raðmyndatöku"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Ýttu á takkann til að hækka hljóðstyrk til að taka mynd. Ýttu á takkann til að lækka hljóðstyrk til að hefja upptöku"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ef kveikt er á raðmyndatöku eru raðmyndir teknar með takkanum til að hækka hljóðstyrk"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ekki birta aftur"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Ábendingar"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Tæki"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Haltu fingri á tákninu og dragðu það til að breyta staðsetningu flýtileiðarinnar"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Besta mynd"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Deila mynd"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flass"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Teiknimynd"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Mynddeiling vina"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Haustlitur"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Vista velt"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Ekki er nægt\nminni fyrir vídeó"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Endurskoða"
+
diff --git a/po/it_IT.po b/po/it_IT.po
new file mode 100755
index 0000000..ae63983
--- /dev/null
+++ b/po/it_IT.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sec"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sec"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Antivibrazione"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automatica"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Estetica"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Bianco e nero"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Calibrato al centro"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Luce naturale"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Rilevamento volti"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescente"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrice"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Misurazione"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativo"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nessuno"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Non attivo"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Attivo"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoritratto"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Seppia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Singola"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Rallentantore"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Memoria"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescente"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Linee guida"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Tag GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Ritratto"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Festa/Interni"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Tramonto"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Alba"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fuochi d'artificio"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Testo"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Luce di candela"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Controluce"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Messa a fuoco automatica"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Modalità scene"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Messa a fuoco"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilità all'aperto"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Timer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effetti"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Modifica collegamenti"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contrasto auto"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Ripristina"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Impostazioni"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Scatto multiplo"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normale"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limite messaggi"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Movimento rapido"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sec"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nuvoloso"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Impossibile generare immagini panoramiche. Riprovare più tardi"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Orizzonte"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Attendere durante la creazione del panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Ombra"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Impossibile salvare. Memoria insufficiente"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Scatto Beauty"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Modalità scatto"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Rallentantore"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Bilanc. bianco"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Errore acquisizione"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Tempo per la cattura scaduto. Riprovare"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Impossibile avviare fotocamera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Impossibile avviare fotocamera\ndurante la chiamata"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Chiudi fotocamera tra %d secondi"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Attivate il servizio di localizzazione in Impostazioni per utilizzare il tag GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Premi Otturatore"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Spostare lentamente la fotocamera nella direzione della freccia"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu non supp."
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "I criteri di sicurezza limitano l'uso della fotocamera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Salvato"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Notte"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Rilevamento volti"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Modalità registrazione"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Ripristinare le impostazioni?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Scatta con sorriso"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Scheda di memoria"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Spiaggia/Neve"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valore esposizione"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Risoluzione"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Reg. non riuscita"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tempo di acquisizione finito. Ripetere l'operazione"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personale"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Elaborazione..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Scheda di memoria rimossa"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Impossibile utilizzare Flash. Batteria scarica"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Usa il tasto volume come"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tasto Zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Tasto Fotocamera"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Risoluzione foto"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Risoluzione video"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Le foto a scatto continuo vengono salvate con la qualità impostata come eccellente"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Toccate e tenete premuto il pulsante della fotocamera per una foto a scatto continuo"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Per scattare le foto, premere il tasto di aumento del volume. Per iniziare a registrare, premete il tasto di riduzione del volume"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Se la modalità Scatto continuo è attivata, premete il tasto di aumento del volume per scattare le foto in questa modalità"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Non mostrare più"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Suggerimenti"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositivo"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Toccate e tenete premuta l'icona, quindi trascinatela per modificare la posizione del collegamento"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Scatto migliore"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Scatto condiviso"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Fumetto"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Condivisione foto amici"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Colore autunnale"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Salva come capovolto"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Memoria insufficiente\nper il video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Verifica"
+
diff --git a/po/ja_JP.po b/po/ja_JP.po
new file mode 100755
index 0000000..728f7c9
--- /dev/null
+++ b/po/ja_JP.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10秒"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2秒"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "手振れ補正"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "美肌モード"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "モノクロ"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "中央部重点測光"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "晴天"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "顔検出"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "フラッシュ"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "蛍光灯"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "マクロ"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "多分割測光"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "測光"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "ネガポジ反転"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "なし"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "OFF"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "ON"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "自分撮り"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "セピア"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "パノラマ"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "シングル"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "スローモーション"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "ストレージ"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "白熱灯"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "補助グリッド"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPSタグ"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "ポートレート"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "スポーツ"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "パーティー/室内"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "夕焼け"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "夜明け"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "花火"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "テキスト"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "キャンドル"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "逆光"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "オートフォーカス"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "シーンモード"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "フォーカスモード"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "アウトドアモード"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "タイマー"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "効果"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "ショートカットを編集"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "オートコントラスト"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "リセット"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "設定"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "連写"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "標準"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "メール添付制限"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "速い"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5秒"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "曇り"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "パノラマ​写真​を​作成​して​います。​後​ほど​お試し​ください"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "水平"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "パノラマを作成しています。お待ちください。"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "影"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "スポット測光"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "保存できません。メモリが不足しています。"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "ビューティショット"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "パノラマ"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "撮影モード"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "スローモーション"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "ホワイトバランス"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "キャプチャ​エラー​です"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "撮影​時間​が​超過​しました。​もう​一度​開始​しますか?"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "カメラを起動できません"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "通話中には、カメラを起動できません。"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "%d秒後にカメラを終了します。"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPSタグを使うには、設定で位置情報サービスを有効にしてください。"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "シャッターをタップしてください。"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "カメラを矢印の方向にゆっくり動かしてください。"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "メニュー未対応"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "カメラの使用は、セキュリティポリシーによって制限されています。"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "保存しました。"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "風景"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "夜景"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "顔検出"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "録画モード"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "設定をリセットしますか?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "スマイル撮影"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "外部SDカード"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "ビーチ/スキー場"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "露出補正"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "解像度"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "録画に失敗しました。"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "キャプチャ時間が終了しました。やり直してください。"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "カスタム"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "処理中..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "外部SDカードが取り外されました。"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "バッテリー不足のため、フラッシュは使用できません。"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "音量キーを使用"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "ズームキー"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "カメラキー"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "写真の解像度"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "動画の解像度"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "連写画像は、ファイン画質で保存されます。"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "連写するには、カメラボタンを長押ししてください。"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "写真を撮影するには音量アップキーを押してください。録画を開始するには音量ダウンキーを押してください。"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "連写が有効な時、音量アップキーを押すと、連写します。"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "今後表示しない"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "ヒント"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "デバイス"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "ショートカットの位置を編集するには、アイコンを長押しした後、ドラッグしてください。"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "ベストフォト"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "共有ショット"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "フラッシュ"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "マンガモード"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "メンバーに画像共有"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "秋色"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "左右反転して保存"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "ビデオの十分なメモリがありません"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "プレビュー表示"
+
diff --git a/po/ka.po b/po/ka.po
new file mode 100755
index 0000000..9728feb
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 წმ."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 წმ."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "რხევის საწინააღმდეგო"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "ავტომატური"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "სილამაზე"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "შავ-თეთრი"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "ცენტრში გაწონასწორებული"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "დღის განათ."
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "სახის დადგენა"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "ნათება"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "ფლუორესცენტული"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "მაკრო"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "მატრიცა"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "გაზომვა"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "ნეგატივი"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "არცერთი"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "გამორთ."
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "ჩართ."
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "ავტოპორტრეტი"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "სეპია"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "პანორამა"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "ერთიანი"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "მოძრაობის შენელება"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "მეხსიერება"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "კაშკაშა"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "მითითებები"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS იარლიყი"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "პორტრეტი"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "სპორტი"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "წვეულებაზე/შენობაში"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "მზის ჩასვლა"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "ქვემოთ"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "ფეიერვერკი"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "ტექსტი"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "სანთლის შუქი"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "შიდა განათება"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "ავტომატური ფოკუსი"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "სცენის რეჟიმი"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "ფოკუსირების რეჟიმი"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "ხილვადობა შენობის გარეთ"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "თაიმერი"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "ეფექტები"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "სწრაფი ღილაკების შესწორება"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "ავტომატური კონტრასტი"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "გადატვირთვა"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "პარამეტრები"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "იმპულსური გადაღება"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "ნორმალური"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "წერილის შეზღუდვა"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "სწრაფი მოძრაობა"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 წმ."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "ღრუბლიანი"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "პანორამული სურათები ვერ შეიქმნა. ცადეთ მოგვიანებით"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "ჰორიზონტი"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "გთხოვთ, დაელოდოთ პანორამის შექმნას"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "ჩრდილი"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "ლაქა"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "ვერ შეინახავთ. მეხსიერება არ არის საკმარისი"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "ლამაზი გადაღება"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "პანორამა"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "გადაღების რეჟიმი"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "მოძრაობის შენელება"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "თეთრი ბალანსი"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "გადაღების შეცდომა"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "გადაღების დრო გავიდა. ისევ ჩართეთ"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "კამერას ვერ ჩართავთ"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "კამერას ვერ ჩართავთ ზარის დროს"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "კამერა დაიხუროს %d წამში"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "გაააქტიურეთ ადგილობრივი სერვისი პარამეტრებში, რომ გამოიყენოთ GPS იარლიყი"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "დააჭირეთ გადაღების ღილაკს"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "მელა ამოძრავეთ კამერა ისრის მიმართულებით"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "მენიუს არა აქვს მხარდაჭერა"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "უსაფრთხოების პოლიტიკა ზღუდავს კამერის გამოყენებას"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "შენახულია"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "პანორამა"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "ღამე"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "სახის დადგენა"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "ჩაწერის რეჟიმი"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "დაბრუნდეს საწყისი პარამეტრები?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "ღიმილ. გადაღე."
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "მეხსიერების ბარათი"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "სანაპირო/თოვლი"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "ექსპოზიციის ზომა"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "გარჩევადობა"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "შენახვის პროცესი შეუძლებელია"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "გადაღების დრო დასრულდა. ისევ ჩართეთ"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "შერჩეული"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "მუშავდება..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "მეხსიერების ბარათი ამოღებულია"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "ვერ გამოიყენებთ ნათებას. კვების ელემენტი იცლება"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "გამოიყენეთ ხმის ღილაკი"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "მასშტაბის ღილაკი"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "კამერის ღილაკი"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "ფოტოს გარჩევადობა"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "ვიდეოს გარჩევადობა"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "ზედიზედ რამდენიმე სურათის გადაღებისთვის არჩეულია კარგი ხარისხით გადაღება და შენახვა"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "ზედიზედ რამდენიმე კადრის გადასაღებად ხანგრძლივად დააჭირეთ კამერის ღილაკს"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "სურათის გადასაღებად დააჭირეთ ხმის აწევის ღილაკს. ჩაწერის დასაწყებად დააჭირეთ ხმის დაწევის ღილაკს"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "თუ გააქტიურებულია ზედიზედ რამდენიმე კადრის გადაღება, ხმის აწევის ღილაკზე დაჭერით გადაიღებთ ზედიზედ რამდენიმე სურათს"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "აღარ მაჩვენო"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "მინიშნებები"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "მოწყობილობა"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "ხანგრძლივად შეეხეთ ხატულას, შემდეგ კი გადაიტანეთ იგი ღილაკის ადგილის შესაცვლელად"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "საუკეთესო ფოტო"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "სურათის გადაღების გაზიარება"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "ნათება"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "მულტფილმი"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "მეგობრის ფოტოს გაზიარება"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "შემოდგომის ფერი"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "გადაბრუნებული ფორმით შენახვა"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "მეხსიერება არ არის საკმარისი\nვიდეოსათვის"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "დათვალიერება"
+
diff --git a/po/kk.po b/po/kk.po
new file mode 100755
index 0000000..44ef207
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 сек"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 сек"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Көріністі тұрақтандыру"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Әдемілік"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Қара және ақ"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Орталықтанған"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Күндізгі жарық"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Бетті көрсету"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Жарық"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Флуоресцентті"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Maкро"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Матрица"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Өлшеуіш"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Негатив"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Өшірілген"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Өшірілген"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Қосылған"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Авто портрет"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Сепия"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Жалғыз өзі"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Баяу қозғалыс"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Сақтау орны"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Қыздыру шамы"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Тор"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS тегі"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Портрет"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Спорт"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Кеш/Іште"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Күннің батуы"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Анық көріну"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Фейерверк"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Мәтінді"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Шам көрінісі"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Жарық"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Автофокус"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Окиға"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Фокус режимі"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Сырттан көріну мүмкіндігі"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Таймер"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Эффектілер"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Тез кіру ретін өзгерту"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Авто контраст"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Алып тастау"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Қондырғ-р"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Пакеттік түсіру"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Қалыпты"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Хабар шектеуі"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Жылдам қимылдау"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 сек"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Бұлтты"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Панорамалық суреттер жасай алмады. Әрекетті кейінірек қайталаңыз"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Панорама жасалып жатқанда күте тұрыңыз"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Көлеңке"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Нүкте"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Сақтауға мүмкіндік жоқ. Жад жеткіліксіз"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Әдемі түсірілім"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Түсірілім режимі"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Баяу қозғалыс"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Ақ баланс"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Суретке түсіру қатесі"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Суретке түсіру уақытынан асып кетті. Қайтадан бастау"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Камераны қосу мүмкін емес"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Камераны ашу мүмкін емес\nқоңырау шалу кезінде"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Камераны %d секундтан кейін жабу"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS тегін пайдалану үшін Параметрлер ішіндегі орын қызметін қосыңыз"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "'Суретке түсіру' пернесін басыңыз"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Камераны көрсеткі бағытымен баяу жылжытыңыз"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Менюде қолданылмайды"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Қауіпсіздік саясаты камера пайдаланылуын шектейді"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Сақталған"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Табиғат көрінісі"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Түн"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Бетті көрсету"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Жазу режимі"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Реттегіштерді қосасыз ба?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Күлімсіреу суреті"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Жад картасы"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Жағажай/Қар"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Экспозиция мәні"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Шешім"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Жазу үзіліп кетті"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Түсіру уақыты бітті. Қайтадан бастаңыз"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Әдеттегі"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Өңделуде..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Жад картасы алып тасталды"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Жарқылдақты пайдалану мүмкін емес. Батарея заряды аз"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Дыбыс қат. пер. пайдалану"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Үлк. не кішірейту түймесі"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Камера түймесі"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Фото ажыратымдылығы"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Бейне ажыратымдылығы"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Пакеттік түсірілім кескіндері орнатылған сапада сақталды"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Пакеттік түсірілім жасау үшін 'Камера' түймесін басып тұрыңыз"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Суретке түсіру үшін дыбыс қаттылығы пернесінің жоғарғы жағын басыңыз. Жазуды бастау үшін дыбыс қаттылығы пернесінің төменгі жағын басыңыз"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Пакеттік түсіру қосылған болса, дыбыс деңгейін арттыру пернесін басу пакеттік түсірілімді жасайды"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Қайта көрсетпеңіз"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Кеңестер"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Құрылғы"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Белгішені басып тұрып, оның орнын өңдеу үшін сүйретіңіз"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Ең жақсы фотосурет"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Түсіруді бөлісу"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Жарық"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Мультибейне"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Жолдас фотосуретін бөлісу"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Күзгі түсті"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Аударылған етіп сақтау"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Видео үшін жеткілікт\nжад жоқ"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Қарап шығу"
+
diff --git a/po/ko_KR.po b/po/ko_KR.po
new file mode 100755
index 0000000..b80ebb8
--- /dev/null
+++ b/po/ko_KR.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10초"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2초"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "손떨림 보정"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "자동"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "뷰티"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "흑백"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "중앙 측광"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "태양광"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "얼굴 인식"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "플래시"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "형광등"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "접사"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "다분할"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "측광"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "반전"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "없음"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "끄기"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "켜기"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "셀프촬영"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "세피아"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "파노라마"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "일반"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "슬로우 모션"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "저장소"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "백열등"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "안내선"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS 태그"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "인물"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "스포츠"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "파티/실내"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "석양"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "새벽"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "불꽃놀이"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "문자"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "촛불"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "역광"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "자동 초점"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "장면 모드"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "초점 모드"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "야외 자동 밝기 조절"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "타이머"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "효과"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "바로가기 편집"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "자동 대비"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "초기화"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "설정"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "버스트 샷"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "일반"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "메시지 제한"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "패스트 모션"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5초"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "흐린날"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "파노라마 사진을 생성하지 못하였습니다. 잠시 후 다시 시도하세요"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "수평선"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "파노라마 사진 생성 중... 잠시만 기다리세요."
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "그늘"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "스팟"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "저장할 수 없습니다. 메모리가 부족합니다"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "뷰티 샷"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "파노라마"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "촬영 모드"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "슬로우 모션"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "화이트밸런스"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "촬영 오류가 발생하였습니다"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "촬영 시간이 초과되었습니다. 다시 시작하세요"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "카메라를 실행할 수 없습니다"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "통화 중에는 카메라를 실행할 수 없습니다"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "카메라가 %d초 후에 종료됩니다"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS 태그를 사용하려면 [설정]에서 위치 서비스를 실행하세요"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "셔터 버튼을 누르세요"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "화살표 방향을 따라 카메라를 천천히 움직이세요"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "메뉴가 없습니다"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "보안 정책에 따라 카메라 사용이 제한됩니다"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "저장되었습니다"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "풍경"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "야간"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "얼굴 인식"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "촬영 모드"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "초기화할까요?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "스마일"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "메모리 카드"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "해변/설경"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "노출"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "해상도"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "녹화할 수 없습니다"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "촬영 시간이 초과되었습니다. 다시 시작하세요"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "사용자 설정"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "처리 중..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "메모리 카드가 제거되었습니다"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "배터리가 부족하여 플래시를 사용할 수 없습니다"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "음량 버튼을 다음으로 설정"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "줌 버튼"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "카메라 버튼"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "사진 해상도"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "동영상 해상도"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "버스트 샷 이미지가 고품질로 저장됩니다"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "버스트 샷을 촬영하려면 카메라 버튼을 길게 누르세요"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "음량 상 버튼을 누르면 사진이 촬영됩니다. 음량 하 버튼을 누르면 녹화가 시작됩니다"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "버스트 샷이 설정된 경우, 음량 상 버튼을 누르면 버스트 샷으로 촬영됩니다"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "다시 표시 안 함"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "도움말"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "디바이스"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "아이콘을 길게 누른 후 드래그하여 바로가기 위치를 편집하세요"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "베스트 포토"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "공유 촬영"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "플래시"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "만화"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "얼굴 인식 사진 공유"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "가을 풍경"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "좌우반전 저장"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "메모리가 부족합니다"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "리뷰"
+
diff --git a/po/lt.po b/po/lt.po
new file mode 100755
index 0000000..82e59ba
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "“Anti-Shake” funkcija"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automatinis"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Grožis"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Nespalvotas"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centruotas"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dienos šviesa"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Veido aptikimas"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Blykstė"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescentinis"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrica"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Matavimas"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatyvas"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nėra"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Išjungti"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Įjungti"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportretas"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Tamsiai rusvas"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Vienas"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Sulėtintai"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Saugykla"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Kaitinamoji lempa"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Instrukcijos"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS žymėjimas"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portretas"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sportas"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Vakarėlis / viduje"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Saulėlydis"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Aušra"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fejerverkai"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekstas"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Žvakės šviesa"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Foninis apšvietimas"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Automatinis fokusavimas"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scenos režimas"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokusavimo režimas"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Matomumas lauke"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Laikmatis"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efektai"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Redaguoti nuorodas"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatinis kontrastas"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Nustatymas iš naujo"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Nustat."
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Nepertrauk. fotogr."
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Įprastas"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Žinutės riba"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Greitas judesys"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Debesuota"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Nepavyko sukurti panoraminių vaizdų. Bandykite vėliau"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizontas"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Palaukite kol kuriama panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Šešėlis"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Taškas"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Negalima įrašyti. Nepakanka atminties"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Retušuotas portretas"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Fotografavimo režimas"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Sulėtintai"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balt. sp. bal."
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Įrašymo klaida"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Viršytas fotografavimo laikas. Pradėti dar kartą"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Neįmanoma paleisti fotoaparato"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Pokalbio metu\nfotoaparato įjungti negalima"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Uždarykite fotoaparatą po %d sek."
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Nustatymuose įjunkite buvimo vietos paslaugą, kad galėtumėte naudotis GPS žymėjimo funkcija"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Paspauskite užraktą"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Judinkite fotoaparatą iš lėto rodyklės kryptimi"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Meniu funkcija nepalaikoma"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Saugos strategija riboja naudojimąsi fotoaparatu"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Išsaugota"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Peizažas"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Naktis"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Veido aptikimas"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Įrašymo režimas"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Iš naujo nustatyti nustatymus?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Šypsenos fot."
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Atminties kortelė"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Pliaž./Snieg."
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Ekspozicijos vertė"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Raiška"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Įrašyti nepavyko"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Baigėsi fotografavimo laikas. Pradėti dar kartą"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Pasirinktinis"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Apdorojama..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Atminties kortelė išimta"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Negalima naudoti blykstės. Senka baterija"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Naud. garsumo mygt. kaip"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Mastelio keitimo mygtukas"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Fotoaparato mygtukas"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Nuotraukos skyra"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Vaizdo įrašo skyra"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Išsaugant nepertraukiamai fotografuotų vaizdų kadrus nustatoma normali kokybė"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Bakstelėkite ir palaikykite fotoaparato mygtuką norėdami fotografuoti nepertraukiamai"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Norėdami fotografuoti spauskite garso didinimo mygtuką. Jei norite pradėti įrašymą, spauskite garso mažinimo mygtuką"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Jei įjungtas nepertraukiamas fotografavimas, nuspaudus garsumo padidinimo mygtuką bus galima nepertraukiamai fotografuoti kadrus"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Daugiau nerodyti"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Patarimai"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Įrenginys"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Bakstelėkite ir laikykite piktogramą, tada vilkite ją, jei norite koreguoti trumpinio vietą"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Geriausia nuotrauka"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Nuotraukų bendrinimas"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Blykstė"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Animacija"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Bičiulio nuotraukos bendrinimas"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Rudens spalva"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Išsaugoti kaip apverstą"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Nepakanka\natminties vaizd. įr."
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Peržiūrėti"
+
diff --git a/po/lv.po b/po/lv.po
new file mode 100755
index 0000000..3ef49b6
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Prettriecienu aizsardzība"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automātiski"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Skaistums"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Melnbalts"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centrēts"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dienasgaisma"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Sejas noteikšana"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Zibspuldze"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Dienasgaismas lampa"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrica"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mērīšana"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatīvs"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Neviens"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Izslēgt"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Ieslēgt"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Pašportrets"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sēpija"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorāma"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Viens"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Lēna kustība"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Krātuve"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Kvēlspuldze"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Instrukcija"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS atzīme"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrets"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sports"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Viesības/Iekštelpa"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Saulriets"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Rītausma"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Uguņošana"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Teksts"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Sveču gaisma"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Apgaismojums"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Automātiskā fokusēšana"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Ainavas režīms"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokusa režīms"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Pārskatāmība āra apstākļos"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Taimeris"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efekti"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Rediģēt īsceļus"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automātiskais kontrasts"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Atiestatīt"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Iestatījumi"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Sērijveida foto"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Parasts"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Ziņu ierobežojums"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Ātra kustība"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Mākoņains"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Neizdevās izveidot panorāmas attēlus. Mēģiniet vēlāk"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizonts"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Lūdzu uzgaidiet, kamēr tiek veidots panorāmas attēls"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Nokrāsa"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punkts"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nevar saglabāt. Nepietiek atmiņas"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Ādas retušēšana"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorāma"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Fotografēšanas režīms"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Lēna kustība"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Baltā balanss"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Tvēruma kļūda"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Pārsniegts uzņemšanas laiks. Sāciet vēlreiz"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Nevar aktivizēt kameru"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Zvana laikā nevar\nstartēt kameru"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Pēc %d sekundēm aizveriet kameru"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Lai izmantotu GPS atzīmi, sadaļā Iestatījumi aktivizējiet atrašanās vietas pakalpojumu"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Nospiest aizslēgu"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Lēnām pārvietojiet fotokameru bultiņas virzienā"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Neatbalstīta izvēlne"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Drošības politika ierobežo kameras lietošanu"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Saglabāts"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Ainava"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nakts"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Sejas noteikšana"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Ierakstīšanas režīms"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Vai atjaunot iestatījumus?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smaidošs uzņ."
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Atmiņas karte"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Pludmale/Sniegs"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Ekspozīcijas vērtība"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Izšķirtspēja"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Ierakstīšana neizdevās"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Uzņemšanas laiks ir beidzies. Sāciet vēlreiz"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Pielāgot"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Notiek apstrāde..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Atmiņas karte izņemta"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Neiespējami lietot zibspuldzi. Zems akumulatora līmenis"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Lietot skaļ.reg.taust.kā"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tālummaiņas taustiņš"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kameras taustiņš"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotoatt. izšķirtsp."
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video izšķirtspēja"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Sērijveida fotoattēli tiks saglabāti iestatītajā labas kvalitātes režīmā"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Lai uzņemtu sērijveida fotoattēlus, pieskarieties kameras pogai un turiet to"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Lai uzņemtu attēlu, nospiediet skaļuma palielināšanas taustiņu. Lai sāktu ierakstīšanu, nospiediet skaļuma samazināšanas taustiņu"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ja ir aktivizēts sērijveida foto, nospiežot skaļuma palielināšanas taustiņu, tiks uzņemts sērijveida foto"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Nerādīt vēlreiz"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Padomi"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Ierīce"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Pieskarieties ikonai un turiet, pēc tam velciet to, lai rediģētu īsceļu novietojumu"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Labākais fotoattēls"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Kopīgot fotoattēlu"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Zibspuldze"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Karikatūra"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Draugu fotoattēlu kopīgošana"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Rudens krāsa"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Saglabāt kā apvērstu"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Video nepietiek atmiņas"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Pārskatīt"
+
diff --git a/po/mk.po b/po/mk.po
new file mode 100755
index 0000000..5d61a51
--- /dev/null
+++ b/po/mk.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 сек."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 сек."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Стабилизатор"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Автоматски"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Убавина"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Црно-бело"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Центрирано"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Дневна светлина"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Откривање лица"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Блиц"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Флуоресцентно"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Макро"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Матрична снимка"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Мерење"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Негатив"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ништо"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Исклучено"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Вклучено"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Автопортрет"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Сипа"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Единечен"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Бавно движење"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Меморија"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Светло од сијалица"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Со водилки"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Ознака GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Исправено"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Спортови"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Забава/Затворен простор"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Зајдисонце"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Мугри"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Огномет"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Текст"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Светло на свеќи"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Осветлување"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Автоматско изострување"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Екрански режим"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Начин на фокусирање"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Видливост на отворено"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Тајмер"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Ефекти"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Измени кратенки"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Автоматски контраст"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Ресетирај"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Опции"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Рафално сликање"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Нормално"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Ограничување за пораки"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Брзо движење"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 сек."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Облачно"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Не можеше да се направат панорамски слики. Обидете се подоцна"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Хоризонт"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Почекајте додека се прави панорамата"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Сенка"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Точка"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Не може да се сочува. Нема доволно меморија"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Разубавена фотографија"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Режим за сликање"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Бавно движење"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Баланс на бело"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Грешка при снимањето"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Надминато е времето за фотографирање. Почнете од почеток"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Не може да се активира камерата"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Не може да се вклучи фотоапаратот за време на повик"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Затвори камера за %d секунди"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Вклучете ја услугата за локација во Опции за да користите ознаки GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Притиснете го копчето за сликање"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Движете го фотоапаратот полека во насоката на стрелката"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Менито не е поддржано"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Политиката на безбедност го ограничува користењето камера"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Меморирано"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Пејзажно"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Ноќе"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Откривање лица"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Режим за снимање"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Ресетирај го нагодувањето?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Сликање насмевка"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Мемориска картичка"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Плажа/Снег"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Вредност на експозиција"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Резолуција"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Снимањето не успеа"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Времето за фотографирање заврши. Почнете одново"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Одредено"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Обработување..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Мемориската картичка е извадена"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Не може да се користи блицот. Батеријата е слаба"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Кор.копче за јач. како..."
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Копчето за зум"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Копчето за камера"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Фото резолуција"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Видео резолуција"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Сликите од рафалното сликање се сочувани со квалитет поставен како фин"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Држете го копчето на камерата за рафално сликање"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Притиснете го копчето за погласно за да сликате. Притиснете го копчето за потивко за да почнете да снимате"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ако е вклучено рафално сликање, со притискање на копчето за погласно се слика рафално"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Не прикажувај веќе"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Совети"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Уред"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Допрете и држете ја иконата, па одвлечете ја за да ја измените положбата на кратенката"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Најдобра фотографија"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Споделување снимка"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Блиц"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Цртан"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Другарско делење фотки"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Есенска боја"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Сочувај како превртено"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Нема доволно меморија\nза видео-записи"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Ревизија"
+
diff --git a/po/nb.po b/po/nb.po
new file mode 100755
index 0000000..4db4eea
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Bildestabilisator"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Skjønnhet"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Svart/hvitt"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Sentrert"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dagslys"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Ansikts-gjenkjenning"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Fotolys"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescerende"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrise"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Lysmåler"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ingen"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Av"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "På"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Selvportrett"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Enkel"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Sakte film"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Lagring"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Hvitglødende"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Hjelpelinjer"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-tagg"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portrett"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fest/innendørs"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Solnedgang"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Soloppgang"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fyrverkeri"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Stearinlys"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Bakgrunnslys"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scenemodus"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokusmodus"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Synlighet utendørs"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Selvutløser"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effekter"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Rediger snarveier"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Autokontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Nullstilling"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Innstillinger"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Bildeserie"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Meldingsgrense"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Rask bevegelse"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Overskyet"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Kunne ikke opprette panoramiske bilder. Prøv igjen senere"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horisont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Vent mens panorama opprettes"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Skygge"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Kan ikke lagre. Ikke nok minne"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Skjønnhetsbilde"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Bildemodus"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Sakte film"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Hvitbalanse"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Opptaksfeil"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Opptakstid oversteget. Start på nytt"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kan ikke starte kamera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Kan ikke starte kamera\nunder en samtale"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Lukk kameraet om %d sekunder"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Aktiver posisjonstjeneste i Innstillinger for å bruke GPS-tagg"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Trykk på Lukker"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Beveg kameraet sakte i pilretningen"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Meny ikke støttet"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Sikkerhetspolicy begrenser bruk av kamera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Lagret"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landskap"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Natt"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Ansikts-gjenkjenning"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Opptaksmodus"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Nullstille innstillinger?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smilebilde"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Minnekort"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strand/snø"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Ekspon.verdi"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Oppløsning"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Innspillingen mislyktes"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Opptakstid er over. Start på nytt"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Egendefinert"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Behandler..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Minnekort fjernet"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Kan ikke bruke fotolys. Batterinivået for lavt"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Bruk volumtasten som"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoomtasten"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kameratasten"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Bildeoppløsning"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videooppløsning"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Bilder i bildeserier lagres med kvalitet angitt som fin"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Trykk på og hold kameraknappen for å ta seriebilder"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Trykk på volum opp-tasten for å ta et bilde. Trykk på volum ned-tasten for å starte et opptak"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Hvis bildeserie er aktivert, startes en bildeserie når du trykker på volum opp-tasten"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ikke vis igjen"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Enhet"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Trykk på og hold ikonet og dra det for å redigere posisjonen til snarveien"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Beste bilde"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Del bilde"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Fotolys"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Tegnefilm"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Vennebildedeling"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Høstfarge"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Lagre som speilvendt"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Ikke nok\nminne for video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Gjennomgang"
+
diff --git a/po/nl_NL.po b/po/nl_NL.po
new file mode 100755
index 0000000..7902d0b
--- /dev/null
+++ b/po/nl_NL.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sec."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sec."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-trilling"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automatisch"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beauty shot"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Zwart-wit"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Nadruk centrum"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Daglicht"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Gezicht detecteren"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flitser"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "TL-verlichting"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrix"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Meting"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatief"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Geen"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Uit"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Aan"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Zelfportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Eén"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Slowmotion"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Opslag"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Kunstlicht"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Richtlijnen"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-tag"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Feestje/binnenshuis"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Zonsondergang"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Dageraad"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Vuurwerk"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Kaarslicht"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Verlichting"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofocus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scène modus"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Scherpstellen"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Zichtbaarheid buiten"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Timer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effecten"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Sneltoetsen wijzigen"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatisch contrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Resetten"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Instellingen"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Continu-opname"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normaal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Berichtlimiet"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Snelle beweging"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sec."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Bewolkt"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Kan geen panoramafoto's maken. Probeer het later opnieuw"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizon"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Panorama-opname wordt gemaakt. Even geduld..."
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Schaduw"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spotmeting"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Kan niet opslaan. Onvoldoende geheugen"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Beauty-shot"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Fotostand"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Slowmotion"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Witbalans"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Fout bij maken foto"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Opnametijd overschreden. Begin opnieuw"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kan camera niet starten"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Kan camera tijdens\noproep niet starten"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Sluit camera binnen %d seconden"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Locatieservice inschakelen in Instellingen om GPS-tag te gebruiken"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Druk sluiter"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Beweeg camera langzaam in richting van pijl"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu niet ondersteund"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Gebruik van camera beperkt door beveiligingsbeleid"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Opgeslagen"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landschap"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Nacht"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Gezicht detecteren"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Videostand"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Instellingen resetten?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Smile shot"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Geheugenkaart"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strand/Sneeuw"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Belichtingswaarde"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolutie"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Opname mislukt"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Opnametijd is afgelopen. Begin opnieuw"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Aangepast"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Verwerken..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Geheugenkaart verwijderd"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Kan flitser niet gebruiken. Batterij bijna leeg"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Volumetoets gebruiken als"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "De zoomtoets"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "De cameratoets"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotoresolutie"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videoresolutie"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Continu-opnamen worden opgeslagen met de kwaliteit fijn"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Tik en houd cameraknop vast om een continu-opname te maken"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Druk op de volume omhoog-toets om een foto te maken. Druk op de volume omlaag-toets om te beginnen met opnemen"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Als continu-opname is ingeschakeld, kunt u een continu-opname starten door op de toets volume omhoog te drukken"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Niet meer tonen"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Apparaat"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tik op het pictogram en houd het vast, en sleep het om de positie van de sneltoets te bewerken"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Beste foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Opname delen"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flitser"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Cartoon"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Foto delen met vrienden"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Herfstkleur"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Omgekeerd opslaan"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Onvoldoende\ngeheugen voor video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Overzicht"
+
diff --git a/po/pl.po b/po/pl.po
new file mode 100755
index 0000000..8b80f56
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilizacja obrazu"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automatyczny"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Upiększanie"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Czarno-białe"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centralnie-ważony"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Słonecznie"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detekcja twarzy"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flesz"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Jarzeniowe"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrycowy"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Pomiar"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatyw"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Brak"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Wył."
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Wł."
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Jedno zdjęcie"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Powolny ruch"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Domyślna pamięć"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Żarowe"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Linie pomocnicze"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etykieta GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "W pomieszczeniu"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Zachód słońca"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Świt"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fajerwerki"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Światło świecy"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Pod słońce"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Wł."
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Tryb scenerii"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Auto Focus"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Ekstra jasność wyśw."
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Samowyzwalacz"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efekty"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Edytuj skróty"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Kontrast automatyczny"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Ust.fabryczne"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Ustawienia"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Zdjęcia seryjne"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normalna"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limit wiadomości"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Szybki ruch"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Pochmurno"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Nie można utworzyć obrazów panoramicznych. Spróbuj później"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horyzont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Zaczekaj na utworzenie panoramy"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "W cieniu"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punktowy"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nie można zapisać. Za mało pamięci"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Upiększanie"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "Lokalizacja"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Tryb fotografowania"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Powolny ruch"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balans bieli"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Błąd przechwytywania"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Przekroczono czas przechwytywania. Rozpocznij ponownie"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Nie można uruchomić aparatu"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "W trakcie połączenia\nnie można uruchomić aparatu"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Zamknij aparat za %d s"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Aby użyć etykiety GPS, włącz usługę lokalizacji"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Naciśnij spust migawki"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Przesuń powoli aparat w kierunku wskazywanym przez strzałkę"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu nieobsługiwane"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Zasady zabezpieczeń ograniczają użycie aparatu"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Zapisano"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Pocztówka"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Tryb nocny"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detekcja twarzy"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Tryb nagrywania"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Wyzerować ustawienia?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Detekcja uśmiechu"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Karta pamięci"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plaża/śnieg"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Wartość ekspozycji"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rozdzielczość"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Błąd nagrywania"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Upłynął czas przechwytywania. Rozpocznij ponownie"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Niestand."
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Przetwarzanie..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Wyjęto kartę pamięci"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Nie można użyć lampy flesz. Niski poziom baterii"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Użyj klaw. głośności jako"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Klawisz powiększania"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Klawisz aparatu"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Rozdzielczość zdjęć"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Rozdzielczość wideo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Zdjęcia seryjne wykonane są zapisywane w jakości dobrej"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Dotknij i przytrzymaj przycisk aparatu, aby zrobić zdjęcie seryjne"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Naciśnij klawisz zwiększania głośności, aby zrobić zdjęcie. Naciśnij klawisz zmniejszania głośności, aby rozpocząć nagrywanie"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Przy włączonym trybie burst naciśnięcie klawisza zwiększania głośności powoduje zrobienie zdjęcia w tym trybie"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Nie wyświetlaj ponownie"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Wskazówki"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Urządzenie"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Aby zmieniać położenie skrótów, dotknij ikony, przytrzymaj ją, a następnie przeciągnij"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Najlepsze zdjęcie"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Udostępnianie zdjęć"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flesz"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Kreskówka"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Udost. zdjęć znajomym"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Kolor jesieni"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Zapisz odwrócony"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Za mało\npamięci dla filmu"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Podgląd zdjęcia"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100755
index 0000000..ca45f04
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 seg"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 seg"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-Vibração"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beleza"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Preto e branco"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centro ponderado"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Luz do dia"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detector facial"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescente"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriz"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Medição"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativo"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nenhum"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desativado"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Ativado"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Auto-retrato"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sépia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Único"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Movimento lento"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Armazenamento"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Azulado"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Guias"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etiqueta GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Retrato"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Esportes"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Festa/Casa"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Pôr-do-sol"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Amanhecer"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fogos de artifício"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texto"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Luz de velas"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Luz de fundo"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Foco automático"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Disparo"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Foco"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilidade exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporizador"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efeitos"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atalhos"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste automático"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Zerar"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Configurações"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Contínuo"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limite MMS"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Movimento rápido"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 seg"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nublado"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Falha ao construir imagens panorâmicas. Tente mais tarde"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizonte"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Aguarde enquanto está sendo criado panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Sombra"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Ponto"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Impossível salvar. Memória insuficiente"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Disparo de beleza"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Modo de disparo"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Movimento lento"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Controle do branco"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Erro de captura"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Tempo de captura excedido. Inicie novamente"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Impossível iniciar câmera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Impossível iniciar a câmera\ndurante chamadas"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Fechar câmera em %d segundos"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Permitir nas Configurações que o serviço de localização use as marcas de GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pressione a tecla Câmera"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mova a câmera lentamente na direção da seta"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu não suportado"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "A política de segurança restringe a utilização da Câmera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Salvo"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Paisagem"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noturno"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detector facial"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Modo de gravação"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Zerar configurações?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Detector de sorriso"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Cartão de memória"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Praia/Neve"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valor de exposição"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolução"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Erro de gravação"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tempo de captura terminou. Inicie novamente"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personalizar"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Processando…"
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Cartão de memória removido"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Impossível usar o Flash. Bateria fraca"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Usar a tecla de vol. como"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "A tecla de zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "A tecla da câmera"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Resolução de foto"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Resolução de vídeo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Imagens de disparos em sequência são salvas com a qualidade definida como fina"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Mantenha pressionado o botão da câmera para tirar uma sequência de fotos"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Pressione a tecla de aumento de volume para tirar uma foto. Pressione a tecla de abaixar volume para iniciar a gravação"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Se o disparo contínuo estiver ativado, pressionar a tecla para aumentar o volume irá acionar um disparo contínuo"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Não mostrar novamente"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Dicas"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositivo"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Mantenha pressionado o ícone, arrastando-o em seguida para editar a posição do atalho"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Melhor foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Compartilhar foto"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Caricatura"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Comp. foto de amigo"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Cor de outono"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Salvar como invertida"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Memória\ninsuficiente para vídeo"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Rever"
+
diff --git a/po/pt_PT.po b/po/pt_PT.po
new file mode 100755
index 0000000..de0c618
--- /dev/null
+++ b/po/pt_PT.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 segs."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 segs."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-vibrações"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Beleza"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Preto e branco"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Medido ao centro"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Luz solar"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detecção de rosto"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescente"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matriz"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Medição"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativo"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nenhuma"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Desligar"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Ligar"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Auto-retrato"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sépia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Único"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Câmara lenta"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Armazenamento"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescente"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Directrizes"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etiqueta GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Retrato"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Desporto"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Festa/Interior"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Pôr do sol"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Amanhecer"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fogo de artifício"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Texto"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Luz de velas"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Luz de fundo"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Focagem automática"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Modo de cena"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Modo de focagem"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Visibilidade exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporizador"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efeitos"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atalhos"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contraste automático"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Repor"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Definições"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Disparos contínuos"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "MMS"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Movimento rápido"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 segs."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Nublado"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Falha ao construir imagens panorâmicas. Tente mais tarde"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizonte"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Aguarde enquanto está a ser criado panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Sombreado"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Ponto"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Impossível guardar. Memória insuficiente"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Disparo de beleza"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Modo de disparo"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Câmara lenta"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Equilíbrio brancos"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Erro de captura"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Tempo de captura excedido. Inicie novamente"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Impossível iniciar câmara"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Impossível iniciar a câmara\ndurante chamadas"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Fechar a câmara dentro de %d segundos"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activar o serviço de localização em Definições para utilizar etiqueta GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Premir obturador"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mova a câmara lentamente na direcção da seta"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu não suportado"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "A política de segurança restringe a utilização da Câmara"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Guardado"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Paisagem"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noite"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detecção de rosto"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Modo de gravação"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Repor definições?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Disp. sorriso"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Cartão de memória"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Praia/Neve"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valor de exposição"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Resolução"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Falha ao gravar"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tempo de captura terminou. Inicie novamente"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Personalizar"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "A processar..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Cartão de memória removido"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Bateria fraca, não é possível utilizar o flash"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Usar tecla de volume como"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "A tecla de zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "A tecla da câmara"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Resolução fotografia"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Resolução de vídeo"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "As imagens de disparos contínuos são guardadas com qualidade definida como boa"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Toque, sem soltar, no botão da câmara para fazer disparos contínuos"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Prima a tecla de aumento de volume para tirar uma fotografia. Prima a tecla de redução de volume para iniciar a gravação"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Se os disparos contínuos estiverem activados, premir a tecla de aumento do volume produzirá disparos contínuos"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Não mostrar novamente"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Dicas"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispositivo"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Toque no ícone, sem o soltar, e depois arraste-o para modificar a posição do atalho"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Melhor fotografia"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Share shot"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flash"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Desenhos animados"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Partilha de foto de amigo"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Cor de Outono"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Guardar como virada"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Memória\ninsuficiente para vídeo"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Rever"
+
diff --git a/po/ro.po b/po/ro.po
new file mode 100755
index 0000000..dd26262
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sec"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sec"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilizare de imagine"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automat"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Înfrumuseţare"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Alb-negru"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Centrat"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Lumina zilei"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detectare faţă"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Bliţ"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescent"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Macro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrice"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Măsurare"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nici unul"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Oprit"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Pornit"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoramă"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Singur"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Cu încetinit."
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Stocare"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Incandescent"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Grilă"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Etichetă GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sporturi"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Petrecere/interior"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Apus"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Răsărit"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Artificii"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Lumânare"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Lumină fundal"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Focalizare automată"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Mod scenă"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Mod focalizare"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Vizibilitate la exterior"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Temporizator"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efecte"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Editare comenzi rapide"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Contrast automat"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Reiniţializare"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Setări"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Fotograf. continuă"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limită mesaj"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Mişcare accelerată"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sec"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Înnorat"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Crearea imaginilor panoramice a eşuat. Încercaţi mai târziu"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Orizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Aşteptaţi până se creează panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Umbră"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Imposibil de salvat. Memorie insuficientă"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Fotografiere cu înfrumuseţare"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoramă"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Mod fotografiere"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Cu încetinit."
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balans de alb"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Eroare captură"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Durata capturării a fost depăşită. Începeţi din nou"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Imposibil de pornit Camera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Imposibil de pornit aparat foto\nîn timpul apelului"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Închidere cameră în %d secunde"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Activaţi serviciul de locaţie din Setări pentru a utiliza eticheta GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Apăsaţi pe Declanşator"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Mişcaţi încet camera foto în direcţia săgeţii"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Meniu neacceptat"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Politica de securitate restricţionează utilizarea camerei foto"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Salvat"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Peisaj"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noapte"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detectare faţă"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Mod înregistrare"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Reiniţializaţi setările?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Fotografiere zâmbet"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Cartelă de memorie"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plajă/zăpadă"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Valoare expunere"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rezoluţie"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Înregistrarea nu a reuşit"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Durata capturării s-a încheiat. Începeţi din nou"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Particularizat"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Se procesează..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Cartelă de memorie scoasă"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Imposibil de utilizat bliţul. Baterie slabă"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Utilizaţi tasta volum ca"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tasta zoom"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Tasta Cameră foto"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Rezoluţie foto"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Rezoluţie video"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Imaginile fotografiate continuu sunt salvate având calitatea setată ca bună"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Atingeţi lung butonul camerei foto pentru a fotografia continuu"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Apăsaţi pe butonul de volum mai mare pentru a face o fotografie. Apăsaţi pe butonul de volum mai mic pentru a începe să înregistraţi"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Dacă este activată fotografierea continuă, când apăsaţi pe tasta de volum mai mare, se va fotografia continuu"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Nu se mai afişează"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Sfaturi"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Dispozitiv"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Atingeţi lung pictograma, apoi glisaţi-o pentru a edita poziţia comenzii rapide"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Fotografie optimă"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Partajare fotografie"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Bliţ"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Desen animat"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Partajare foto prieten"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Culoare de toamnă"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Salvare ca oglindit"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Memorie insuficientă\npentru videoclip"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Examinare"
+
diff --git a/po/ru_RU.po b/po/ru_RU.po
new file mode 100755
index 0000000..3028b93
--- /dev/null
+++ b/po/ru_RU.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 секунд"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 секунды"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Стабилизация изображения"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Красивое лицо"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Черно-белое"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Центровзвешенный"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Дневной свет"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Обнаружение лица"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Вспышка"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Флуоресцентный свет"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Макросъемка"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Матрица"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Экспозамер"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Негатив"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Нет"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Выключено"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Включено"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Автопортрет"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Сепия"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Один снимок"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Замедленное движение"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Память"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Лампа накаливания"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Сетка"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Тег GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Портрет"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Спорт"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Вечеринка/в помещении"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Закат"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Рассвет"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Фейерверк"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Текст"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Сумерки"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Подсветка"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Автофокус"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Сюжет"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Режим фокуса"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Видимость на улице"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Таймер"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Эффекты"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Изменить ссылки"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Автоконтрастность"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Сброс"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Настройки"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Непрерывная съемка"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Нормальное"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Ограничение размера"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Быстрое движение"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 секунд"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Облачно"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Сбой при построении панорамных изображений. Попробуйте позже"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Горизонт"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Подождите... идет создание панорамы"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Затемнение"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Точечный замер"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Невозможно сохранить. Недостаточно памяти"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Красивый снимок"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Режим съемки"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Замедленное движение"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Баланс белого"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Ошибка съемки"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Превышено время съемки. Начните снова"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Невозможно запустить камеру"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Невозможно запустить камеру\nво время вызова"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Камера выключится через %d сек."
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Для использования тегов GPS включите службу определения местоположения в меню 'Настройки'"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Нажмите клавишу съемки"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Медленно перемещайте камеру в направлении, заданном стрелкой"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Меню не поддерживается"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Политика безопасности ограничивает использование камеры"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Соxранено"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Пейзаж"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Ночь"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Обнаружение лица"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Режим записи"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Сбросить настройки?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Распознавание улыбки"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Карта памяти"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Пляж/снег"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Значение экспозиции"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Разрешение"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Сбой записи"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Время съемки истекло. Начните снова"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Создать"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Обработка..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Карта памяти извлечена"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Невозможно использовать вспышку. Аккумулятор разряжен"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Функция клавиши громкости"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Клавиша зума"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Клавиша камеры"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Разрешение снимков"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Разрешение видео"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Фотографии, полученные при непрерывной съемке, сохраняются с отличным качеством"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Для непрерывной съемки нажмите и удерживайте кнопку камеры"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Чтобы сделать снимок, нажмите клавишу увеличения громкости. Для начала записи нажмите клавишу уменьшения громкости"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Если включен соответствующий режим, при нажатии клавиши громкости будет выполняться непрерывная съемка"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Не показывать снова"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Советы"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Устройство"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Нажмите и удерживайте значок, а затем перетащите его, чтобы изменить положение ярлыка"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Лучшее фото"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Обмен фотографиями"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Вспышка"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Мультяшная"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Обмен фото с друзьями"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Осенние цвета"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Сохранить перевернутое изображение"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Недостаточно памяти для видео"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Просмотр"
+
diff --git a/po/sk.po b/po/sk.po
new file mode 100755
index 0000000..99cfd25
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 s"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 s"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Stabilizácia obrazu"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automaticky"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Krása"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Čiernobiely"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "S vyvážením na stred"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Denné svetlo"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detekcia tváre"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Blesk"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Žiarivka"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Maticové"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Meranie"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatív"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Žiadny"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Vyp."
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Zap."
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportrét"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sépia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoráma"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Jediný"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Spomalený pohyb"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Úložisko"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Žiarovka"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Vodiace čiary"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Značka GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Na výšku"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Šport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Oslava/interiér"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Západ slnka"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Súmrak"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Ohňostroj"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Svetlo sviečky"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Zadné osvetlenie"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Automatické zaostrovanie"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scénický mód"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Režim zaostrovania"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Viditeľnosť v exteriéri"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Časovač"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efekty"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Upraviť odkazy"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatický kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Vynulovať"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Nastavenia"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Sériové snímanie"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normálny"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Limit správy"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Rýchly pohyb"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 s"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Oblačno"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Nepodarilo sa vytvoriť panoramatické obrázky. Skúste to neskôr"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Počkajte, prosím, kým sa vytvorí panoráma"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Tieň"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Bodové"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nedá sa uložiť. Nedostatok pamäte"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Krásna snímka"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoráma"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Režim fotografovania"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Spomalený pohyb"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Vyváženie bielej"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Chyba záznamu"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Čas snímania bol prekročený. Začnite odznova"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Fotoaparát sa nedá spustiť"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Počas hovoru nie je možné\nspustiť fotoaparát"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Zatvorte fotoaparát v priebehu %d sekúnd"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Pred použitím značky GPS povoľte lokalizačnú službu v menu Nastavenia"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Stlačte spúšť"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Pohybujte fotoaparátom pomaly v smere šípky"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menu nie je podporované"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Politika zabezpečenia obmedzuje použitie fotoaparátu"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Uložené"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Na šírku"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noc"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detekcia tváre"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Režim nahrávania"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Vynulovať nastavenia?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Detekcia úsmevu"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Pamäťová karta"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Pláž/Sneh"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Hodnota expozície"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rozlíšenie"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Nahrávanie zlyhalo"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Doba snímania uplynula. Začnite odznova"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Vlastné"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Prebieha spracovanie..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Pamäťová karta vybraná"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Jednotka flash sa nedá použiť. Batéria je vybitá"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Použiť tl. hlasitosti ako"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tlačidlo priblíženia"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Tlačidlo fotoaparátu"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Rozlíš. fotografie"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Rozlíšenie videa"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Sériové zábery sa ukladajú s kvalitou nastavenou ako jemná"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Ťuknutím na tlačidlo fotoaparátu a jeho podržaním môžete nasnímať sériový záber"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Stlačením tlačidla zvýšenia hlasitosti môžete fotografovať. Stlačením tlačidla zníženia hlasitosti môžete spustiť nahrávanie"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ak je zapnuté sériové snímanie, stlačením tlačidla zvýšenia hlasitosti sa nasníma sériový záber"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Už nezobrazovať"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tipy"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Zariadenie"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Ťuknite na ikonu a podržte ju a potom jej presunutím upravte polohu odkazu"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Najlepšia fotografia"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Zdieľať záber"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Blesk"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Kreslený film"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Zdieľanie fotografií priateľa"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Jesenné farby"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Uložiť ako prevrátené"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Nedostatok pamäte\npre video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Prezrieť"
+
diff --git a/po/sl.po b/po/sl.po
new file mode 100755
index 0000000..35b3620
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sek"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sek"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Odpravljanje tresenja"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Samodejno"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Lepota"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Črno-belo"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Sredinsko uteženo"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dnevna svetloba"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Zaznavanje obraza"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Bliskavica"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluorescentno"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrika"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Merjenje"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Brez"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Izključeno"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Vključeno"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Avtoportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Enojno"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Počasno gibanje"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Shranjevanje"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Žarnica"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Smernice"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Oznaka GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Šport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Zabava/znotraj"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Sončni zahod"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Zora"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Ognjemet"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Besedilo"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Sveča"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Osvetlitev"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Samodejno ostrenje"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Način prizorišča"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Način ostrenja"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Vidnost na prostem"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Časovnik"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Učinki"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Uredi bližnjice"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Samodejni kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Ponastavi"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Nastavitve"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Rafalni posnetek"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Omejitev sporočila"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Hitro gibanje"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sek"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Oblačno"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Panoramske slike ni bilo mogoče sestaviti. Poskusite pozneje"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Obzorje"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Počakajte, da se ustvari panorama"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Senca"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Točkovno"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Ni mogoče shraniti, ker ni dovolj pomnilnika"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Lepotni posnetek"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Snemalni način"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Počasno gibanje"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Ravnotežje beline"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Napaka zajemanja"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Čas zajema je presežen. Začnite znova"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Ni mogoče zagnati kamere"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Ne morem vključiti kamere\nmed klicem"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Zapri kamero čez %d sekund"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "V Nastavitvah omogočite lokacijske storitve, če želite uporabljati oznake GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pritisnite Zaklop"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Kamero počasi premaknite v smeri puščice"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Meni ni podprt."
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Varnostni pravilnik omejuje uporabo kamere"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Shranjeno"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Pokrajina"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noč"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Zaznavanje obraza"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Snemalni način"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Ponastavitev nastavitev?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Posn. nasmeška"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Pomnilniška kartica"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plaža/sneg"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Vrednost osvetlitve"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Ločljivost"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Snemanje ni uspelo"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Čas zajema je potekel. Začnite znova"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Osebne"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Obdelujem..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Pomnilniška kartica je odstranjena"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Bliskavice ni moč uporabljati, ker je baterija preveč prazna"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Up. tipko za glasnost kot"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Tipka za povečavo"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Tipka kamere"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Ločljiv. fotografije"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Ločlj. videoposnetka"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Rafalni posnetki so shranjeni v višji kakovosti"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Pritisnite in držite gumb za kamero, če želite napraviti rafalni posnetek"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Za slikanje pritisnite tipko za povečanje glasnosti. Za začetek snemanja pritisnite tipko za zmanjšanje glasnosti"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Če je rafalni posnetek omogočen, ga lahko napravite s pritiskom tipke za povečanje glasnosti"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ne kaži več"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Nasveti"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Naprava"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Pritisnite in pridržite ikono, nato pa jo povlecite, da uredite položaj bližnjice"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Najboljša fotografija"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Posnemi in deli"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Bliskavica"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Strip"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Skupna raba prijateljeve fotografije"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Jesenska barva"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Shrani kot obrnjeno"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Ni dovolj pomnilnika\nza video posnetek"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Pregled"
+
diff --git a/po/sr.po b/po/sr.po
new file mode 100755
index 0000000..caaf261
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 s."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 s."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Kompenzacija drmanja"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Automatski"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Lepota"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Crno-belo"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Središnje procenjeno"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dnevna svetlost"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Detekcija lica"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Blic"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Flourescentno"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrično"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Merenje"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Nema"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Isključeno"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Uključeno"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Autoportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Pojedinačni"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Usporeni prikaz"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Memorija"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Usijanje"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Smernice"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS oznaka"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Uspravno"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sportovi"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Žurka/Unutra"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Zalazak sunca"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Zora"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Vatromet"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Tekst"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Svetlost sveća"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Pozadinsko svetlo"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Režim Scena"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Režim fokusiranja"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Vidljivost napolju"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Tajmer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efekti"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Izmeni prečice"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatski kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Resetuj"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Podešavanja"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Rafalni snimak"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normalan"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Ograničenje poruka"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Brzo kretanje"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 s."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Oblačno"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Nije uspela izrada panoramske slike. Probaj kasnije"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Sačekaj dok se kreira panoramski snimak"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Senka"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Tačkasto"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Nemoguće sačuvati. Nedovoljna memorija"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Ulepšani snimak"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Način snimanja"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Usporeni prikaz"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Balans bele boje"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Greška pri snimanju"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Vreme za 'hvatanje' je isteklo. Početi ponovo"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Nemoguće pokrenuti kameru"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Nemoguće uključiti kameru tokom poziva"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Isključi kameru za %d sekunde/i"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Omogući uslugu lokacije u podešavanjima za korišćenje GPS oznake"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Pritisni okidač"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Polako pomeri telefon u pravcu strelice"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Meni nije podržan"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Politika bezbednosti ograničava upotrebu kamere"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Sačuvano"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Pejzaž"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Noć"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Detekcija lica"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Režim snimanja"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Resetovanje podešavanja?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Snimanje osmeha"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Memorijska kartica"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plaža/Sneg"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Nivo ekspozicije"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rezolucija"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Snimanje neuspešno"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Završeno vreme snimanja. Počni ponovo"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Prilagođeno"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Obrada..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Memorijska kartica izvađena"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Nije moguće koristiti blic. Baterija je skoro prazna"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Kor. tast. jač. zv. kao"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Taster za zumiranje"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Taster kamere"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Rezoluc. fotografije"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video rezolucija"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Brzo snimljene slike se čuvaju sa kvalitetom podešenim kao dobar"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Da bi načinio/la brzi snimak, kucni i zadrži dugme za kameru"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Pritisni taster za pojačavanje zvuka da bi snimio/la sliku. Pritisni taster za smanjivanje jačine zvuka da bi započeo/la snimanje"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Ako je omogućen brzi snimak, pritiskom na taster za pojačavanje zvuka načiniće se brzi snimak"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Ne prikazuj ponovo"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Saveti"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Uređaj"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Kucni i zadrži ikonu, a zatim je prevuci da bi izmenio/la poziciju prečice"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Najbolja fotografija"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Podeli snimak"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Blic"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Crtani film"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Deljenje fotografija drugara"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Jesenja boja"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Sačuvaj kao obrnuto"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Nedovoljno\nmemorije za video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Pregled"
+
diff --git a/po/sv.po b/po/sv.po
new file mode 100755
index 0000000..5b3ee79
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 s"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 s"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Bildstabilisering"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Skönhet"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Svartvitt"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Mittviktad"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Dagsljus"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Ansiktssökning"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Fotolampa"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Lysrör"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matris"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Mätning"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negativ"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Ingen"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Av"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "På"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Självporträtt"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepia"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "En"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Slowmotion"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Lagring"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Glödlampa"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Riktlinjer"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS-tagg"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Porträtt"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Fest/Inomhus"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Solnedgång"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Gryning"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Fyrverkeri"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Text"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Levande ljus"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Bakgrundsbelysning"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Autofokus"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Scenläge"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokusläge"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Synlighet utomhus"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Självutlösare"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effekter"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Redigera genvägar"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Automatisk kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Nollställ"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Inställningar"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Serietagning"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Meddelandegräns"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Snabb rörelse"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 s"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Mulet"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Det gick inte att bygga panoramabilder. Försök senare"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Horisont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Vänta medan panoramat skapas"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Skugga"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Punkt"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Det går inte att spara. Otillräckligt minne"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Skönhetsbild"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Fotoläge"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Slowmotion"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Vitbalans"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Tagningsfel"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Tagningstiden har överskridits. Starta igen"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Det går inte att starta Kamera"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Det går inte att\nstarta kameran\nunder samtal"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Stäng kameran om %d sekunder"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Aktivera platstjänsten i Inställningarna för att använda GPS-tagg"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Tryck på avtryckaren"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Flytta kameran långsamt i pilens riktning"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menyn stöds inte"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Säkerhetspolicy begränsar användningen av kamera"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Sparad"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Landskap"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Natt"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Ansiktssökning"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Inspelningsläge"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Återställa inställningar?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Leendeavkänning"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Minneskort"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Strand/snö"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Exponeringsvärde"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Upplösning"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Inspelning misslyckades"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Tidtagningen är slut. Starta igen"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Egen"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Bearbetar..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Minneskort borttaget"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Det går inte att använda blixt. Låg batterinivå"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Använd volymknappen som"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Zoomknappen"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kameraknappen"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotoupplösning"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Videoupplösning"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Serietagna bilder sparas med kvaliteten inställd på fin"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Tryck på kameraknappen och håll den nedtryckt för att ta bilder i en serie"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Tryck på volym upp-knappen för att ta en bild. Tryck på knappen volym ned-knappen för att spela in"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Om serietagning är aktiverat trycker du på volym upp för att ta en bildserie"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Visa inte igen"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Tips"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Enhet"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Tryck på ikonen och håll den nedtryckt och dra den sedan för att redigera genvägspositionen"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Bästa foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Dela bild"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Fotolampa"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Tecknat"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Dela foto med kompis"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Höstfärger"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Spara som roterad"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Minne saknas\nför video"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Granska"
+
diff --git a/po/tr_TR.po b/po/tr_TR.po
new file mode 100755
index 0000000..23d2b9b
--- /dev/null
+++ b/po/tr_TR.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 sn"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 sn"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Sarsıntı önleme"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Otomatik"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Güzellik"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Siyah beyaz"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Orta-ağırlıklı"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Günışığı"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Yüz algılama"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flaş"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Floresan"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matris"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Metreleme"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Negatif"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Hiçbiri"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Kapalı"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Açık"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Otoportre"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepya"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panoramik"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Tek"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Yavaş hareketli"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Kayıt yeri"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Parlak"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Yönergeler"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS imi"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portre"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Spor"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Parti/Kapalı alan"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Gün batımı"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Şafak"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Havai fişek"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Metin"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Mum Işığı"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Aydınlatma"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Otomatik odaklama"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Sahne modu"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Odaklama modu"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Açık hava görünürlüğü"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Zamanlayıcı"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Efektler"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Kısayolları düzenle"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Otomatik kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Sıfırla"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Ayarlar"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Çoklu çekim"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Mesaj sınırı"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Hızlı hareket"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 sn"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Bulutlu"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Panoramik resimler oluşturulamadı. Daha sonra deneyin"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Ufuk"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Panorama oluşturulurken lütfen bekleyin"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Gölge"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Kaydedilemiyor. Yeterli hafıza yok"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Güzellik çekimi"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panoramik"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Çekim modu"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Yavaş hareketli"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Beyaz dengesi"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Yakalama hatası"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Yakalama süresi aşıldı. Yeniden başlatın"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kamera başlatılamıyor"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Arama sırasında\nkamera başlatılamaz"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Kamerayı %d saniye içinde kapat"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS etiketi kullanmak için Ayarlar'dan konum servisini etkinleştirin"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Deklanşöre Basın"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Kamerayı yavaşça ok yönünde hareket ettirin"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menü desteklenmedi"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Güvenlik ilkesi Kamera kullanımını kısıtlıyor"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Kaydedildi"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Manzara"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Gece"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Yüz algılama"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Kayıt modu"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Ayarlar sıfırlansın mı?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Gülücük yakala :-)"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Hafıza kartı"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Plaj/Kar"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Poz değeri"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Çözünürlük"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Kayıt başarısız"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Yakalama sona erdi. Yeniden başlatın"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Özel"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Uygulanıyor..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Hafıza kartı çıkarıldı"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Flaş kullanılamıyor. Pil düşük"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Ses tuşu kullanımı"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Yakınlaştırma tuşu"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Fotoğraf makinesi tuşu"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotoğraf çözünürlüğü"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video çözünürlüğü"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Çoklu çekim resimleri iyi kalitede kaydedildi"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Çoklu çekim yapmak için kamera düğmesine dokunun ve basılı tutun"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Resim çekmek için ses arttırma tuşuna basın. Kaydı başlatmak için ses azaltma tuşuna basın"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Çoklu çekim etkinse, ses artırma tuşuna basıldığında çoklu çekim yapılır"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Bir daha gösterme"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "İpuçları"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Cihaz"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Simgeye dokunun ve basılı tutun, ardından kısayolun konumunu düzenlemek için sürükleyin"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "En iyi fotoğraf"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Çekim paylaşma"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flaş"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Çizgi film"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Arkadaşınla fotoğraf paylaşımı"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Sonbahar rengi"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Ters dönmüş olarak kaydedin"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Video için\nyeterli belek yok"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "İzleme"
+
diff --git a/po/uk.po b/po/uk.po
new file mode 100755
index 0000000..e1b1a41
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 сек."
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 сек."
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Стабілізація зображення"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Краса"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Чорно-біле"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Відцентро\nвано"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Денне світло"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Розпізнавання обличчя"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Спалах"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Флуоресцентний"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Макро"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Матриця"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "Замірювання"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Негатив"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Немає"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "Вимкнено"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Увімкнено"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Автопортрет"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Сепія"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Одинарний"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Сповільнення"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Пам'ять"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Штучне світло"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Вказівки"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "Тег GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Портрет"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Спорт"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "Вечірка/У приміщенні"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Захід сонця"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Світанок"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Феєрверк"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Текст"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Сутінки"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Підсвічування"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Автофокус"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Режим сцени"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Режим фокусування"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Видимість на вулиці"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Таймер"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Ефекти"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Редагувати клавіші шв. доступу"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Автоконтрастність"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Скинути"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Установки"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Серійна зйомка"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Звичайна"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Обмеження повідомлення"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Прискорення"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 сек."
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Хмарно"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Не вдалося створити панорамні зображення. Спробуйте пізніше"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Горизонт"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Зачекайте, доки створюється панорама"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Тінь"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Точковий замір"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Неможливо зберегти. Недостатньо пам’яті"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Прикрашення знімку"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Панорама"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Режим зйомки"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Сповільнення"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Баланс білого"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Помилка зйомки"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Час зйомки перевищено. Розпочніть знову"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Неможливо запустити камеру"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Неможливо запустити камеру\nпід час виклику"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Закриття камери через %d сек."
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "Увімкніть послугу розташування в розділі Установки, щоб скористатися тегом GPS"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Натисніть клавішу затвору"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Повільно переміщуйте камеру в напрямку стрілки"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Меню не підтримується"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Використання камери обмежено політикою безпеки"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Збережено"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Пейзаж"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Ніч"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Розпізнавання обличчя"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Режим відеозйомки"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Скинути параметри?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Знімок посмішки"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Карта пам’яті"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Пляж/сніг"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Значення витримки"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Роздільна здатність"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Збій записування"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Час зйомки минув. Розпочніть знову"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Особливий"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Обробка..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Карту пам'яті видалено"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Неможливо використовувати спалах. Акумулятор розряджено"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Викор. клавішу гучнос. як"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Клавіша масштабування"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Клавіша камери"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Роздільна здатн.фото"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Розд.здатн.відео"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Знімки серійної зйомки зберігаються у 'відмінній' якості"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Натисніть та утримуйте кнопку камери, щоб виконати серійну зйомку"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Натисніть клавішу збільшення гучності, щоб зробити знімок. Натисніть клавішу зменшення гучності, щоб розпочати записування"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "У разі увімкнення режиму серійної зйомки, натискання клавіші збільшення гучності виконає зйомку"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Більше не показувати"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Підказки"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Пристрій"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Натисніть та утримуйте значок, а потім перетягніть його, щоб змінити розташування клавіші швидкого доступу"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Найкраща фотографія"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Спільний доступ до знімків"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Спалах"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Мультфільм"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "Спільний доступ до фотографій абонента"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Колір осені"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Зберегти як перевернуте"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Недостатньо\nпам'яті для відео"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Огляд"
+
diff --git a/po/update-po.sh b/po/update-po.sh
new file mode 100755
index 0000000..628a88d
--- /dev/null
+++ b/po/update-po.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+PACKAGE=ug-camera-efl
+SRCROOT=..
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW
+ALL_LINGUAS="en_US en_GB ja ko zh_CN"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot "
+if [ ! -e $POTFILES ] ; then
+ echo "$POTFILES not found"
+ exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+ --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES \
+&& test ! -f ${PACKAGE}.po \
+ || (rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot)
+
+if [ $? -ne 0 ]; then
+ echo "error"
+ exit 1
+else
+ echo "done"
+fi
+
+for LANG in $ALL_LINGUAS; do
+ echo "$LANG : "
+
+ if [ ! -e $LANG.po ] ; then
+ sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po
+ echo "${LANG}.po created"
+ else
+ if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+ if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+ rm -f ${LANG}.new.po
+ else
+ if mv -f ${LANG}.new.po ${LANG}.po; then
+ echo ""
+ else
+ echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+ rm -f ${LANG}.new.po
+ exit 1
+ fi
+ fi
+ else
+ echo "msgmerge for $LANG failed!"
+ rm -f ${LANG}.new.po
+ fi
+ fi
+ echo ""
+done
+
diff --git a/po/uz.po b/po/uz.po
new file mode 100755
index 0000000..604d306
--- /dev/null
+++ b/po/uz.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 soniya"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 soniya"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "Anti-sheyk"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "Avtomatik"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "Go‘zallik"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "Qora va oq"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "Markazga tortish"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "Kunduz"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "Yuzni aniqlash"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "Flesh"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "Fluoressensiya"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "Makro"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "Matrisa"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "O‘lchash"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "Manfiy"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "Hech qaysi"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "O‘ch."
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "Yoq."
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "Avtoportret"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "Sepiya"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "Yakka"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "Sekin harakat"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "Xotira"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "Cho‘g‘lanma lampa"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "Yo‘riqnomalar"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS tegi"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "Portret"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "Sport"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "O‘tirish/Tashqarida"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "Kun botishi"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "Tong"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "Mushakbozlik"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "Matn"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "Candlelight"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "Fon chirog‘i"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "Fokusni avtomatik to‘g‘rilash"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "Sahna rejimi"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "Fokus rejimi"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "Tashqarida ko‘rish qobiliyati"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "Taymer"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "Effektlar"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "Yorliqlarni tahrirlash"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "Avto-kontrast"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "Qayta yuklash"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "Parametrlar"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "Fleshli kadr"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "Xabarlar cheklovi"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "Tez harakat"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 soniya"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "Bulutli"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "Panoramali tasvirlarni yaratib bo‘lmadi. Keyinroq urinib ko‘ring"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "Gorizont"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "Panorama yaratilayotganda kutib turing"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "Soya"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "Spot"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "Saqlab bo‘lmaydi. Xotira yetarli emas"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "Go‘zal kadr"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "Panorama"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "Suratga olish rejimi"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "Sekin harakat"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "Oq rang balansi"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "Rasmga olish xatosi"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "Rasmga olish vaqti oshib ketdi. Qaytadan boshlang"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "Kamerani ishga tushirib bo‘lmaydi"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "Qo‘ng‘iroq mobaynida Kamerani ishga tushirib bo‘lmaydi"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "Kamera %d soniyada yopiladi"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "GPS tegidan foydalanish uchun, Parametrlarda joylashishni aniqlash xizmatini yoqing"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "Obyektivni bosing"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "Kamerani mil yo‘nalishida sekin-asta harakatlantiring"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "Menyu qo‘llab-quvvatlanmaydi"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "Xavfsizlik qonun-qoidalari Kameradan foydalanishni cheklaydi."
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "Saqlandi"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "Gorizontal"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "Tun"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "Yuzni aniqlash"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "Yozib olish rejimi"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "Parametrlar qayt. o'rnatilsinmii?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "Tabassumli kadr"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "Xotira kartasi"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "Sohil/Qor"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "Defekt qiymati"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "Rezolyutsiya"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "Yozib bo‘lmadi"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "Suratga olish vaqti tugadi. Qaytadan boshlash"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "Maxsus"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "Bajarilmoqda..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "Xotira kartasi olib tashlandi"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "Flashdan foydalanib bo‘lmaydi. Batareya quvvati kam"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "Ovoz baland/tugma foydal"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "Masshtab tugmasi"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "Kamera tugmasi"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "Fotosurat ruxsati"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "Video ruxsati"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "Fleshli kadrdagi tasvirlar 'yaxshi' sifatda saqlangan"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "Fleshli kadrni olish uchun, kamera tugmasini bosib turing"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "Rasmga olish uchun, ovoz ko‘tarish tugmasini bosing. Yozib olishni boshlash uchun, ovoz pasaytirish tugmasini bosing"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "Agar fleshli kadr faol bo‘lsa, ovozni ko‘tarish tugmasini bosish fleshli kadrni rasmga oladi"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "Boshqa ko‘rsatilmasin"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "Maslahatlar"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "Qurilma"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "Yorliq joylashuvini o‘zgartirish uchun, ikonchani bosib turing va undan so‘ng tortib o‘tkazing"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "Eng yaxshi foto"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "Kadrni ulashish"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "Flesh"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "Multfilm"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "O‘rtoq fotosuratini ulashish"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "Kuz rangi"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "Teskari holatda saqlash"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "Video uchun xotira yetarli emas"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "Ko‘rib chiqish"
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100755
index 0000000..890707b
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 秒"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 秒"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "防震"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "自动"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "美肌"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "黑白"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "中心重点测光"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "白天"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "人脸识别"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "闪光灯"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "荧光"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "感光度"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "微距模式"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "矩阵"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "测光"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "负片"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "无"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "关"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "开"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "自拍"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "深褐色"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "全景拍摄"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "单一拍摄"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "慢动作"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "存储器"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "白炽光"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "构图线"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS标签"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "肖像"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "运动"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "宴会/室内"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "日落"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "黎明"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "焰火"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "文本"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "烛火"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "背景光"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "自动对焦"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "场景模式"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "聚焦模式"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "户外能见度"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "定时器"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "效果"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "编辑快捷方式"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "自动调整对比度"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "重置"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "设定"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "急速连拍"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "信息限制"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "快速动作"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 秒"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "阴天"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "创建全景图像失败。 请稍后再试"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "地平线"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "正在创建全景图,请稍等"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "阴影"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "点"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "无法保存。存储空间不足"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "美肌拍摄"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "全景拍摄"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "拍摄模式"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "慢动作"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "白平衡"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "拍摄错误"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "拍摄时间已过。重新启动"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "无法启动照相机"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "通话中无法启动照相机"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "在 %d 秒内关闭摄像头"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "在设置中启用位置服务以使用 GPS 标记"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "按下快门"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "沿着箭头方向缓慢移动照相机"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "不支持功能表"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "安全政策限制使用照相机"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "已保存"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "风景"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "夜间拍摄"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "人脸识别"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "录制模式"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "要复位设置吗?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "微笑拍摄"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "存储卡"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "海滩/雪景"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "曝光值"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "分辨率"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "录制失败"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "拍摄时间已过。请重新开始"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "自定义"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "处理中..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "已移除存储卡"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "电量太低,无法使用闪光灯。"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "使用音量键作为"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "缩放键"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "摄像头键"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "照片分辨率"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "视频分辨率"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "连拍图片保存时质量设置为高清"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "按住相机按钮以进行连拍"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "按音量增加键以拍照。按音量减小键以开始录制"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "如果已启用连拍,按音量增加键将进行连拍"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "不要再显示"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "提示"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "设备"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "按住图标,然后拖拽以编辑快捷方式的位置"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "优选拍摄"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "共享拍摄"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "闪光灯"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "卡通"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "好友照片共享"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "秋色"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "另存为反向"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "存储空间不足,无法保存视频"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "查看"
+
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100755
index 0000000..a80c1f7
--- /dev/null
+++ b/po/zh_HK.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 秒"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 秒"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "防震"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "美麗"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "黑白"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "中央重點"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "白天"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "面孔偵測"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "閃光燈"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "日光燈"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "微距"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "矩陣"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "測光"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "底片"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "無"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "關"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "開啟"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "自拍"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "深褐色"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "全景"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "單張"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "慢動作"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "儲存位置"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "高色溫光管"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "指引"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS 標籤"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "人像"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "運動"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "派對/室內"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "日落"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "日出"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "煙花"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "文字"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "燭光"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "背光"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "自動對焦"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "場景模式"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "對焦模式"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "戶外能見度"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "計時器"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "效果"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "編輯捷徑"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "自動調整對比度"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "重設"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "設定"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "連續快拍"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "訊息限制"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "快動作"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 秒"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "陰天"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "無法建立全景影像。請稍後再試"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "地平線"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "請稍候,正在建立全景圖"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "影子"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "點"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "無法儲存。記憶體不足"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "美麗拍攝"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "全景"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "拍攝模式"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "慢動作"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "白平衡"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "拍攝錯誤"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "拍攝時間已過。請重新開始"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "無法啟動相機"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "通話期間無法啟動相機"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "在 %d 秒內關閉相機"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "啟用設定中的位置服務以使用 GPS 標籤"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "按下快門"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "順著箭頭方向緩慢移動相機"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "功能表不受支援"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "安全政策限制使用相機"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "已儲存"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "風景"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "夜間"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "面孔偵測"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "錄製模式"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "要重設設定嗎?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "一笑即拍"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "記憶卡"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "海灘/雪景"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "曝光值"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "解像度"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "錄製失敗"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "拍攝時間已結束。請重新開始"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "自訂"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "正在處理..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "記憶卡已移除"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "無法使用閃光燈。電量不足"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "使用音量鍵作為"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "縮放鍵"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "相機鍵"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "相片解像度"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "影片解像度"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "連續快拍圖像以設定的高畫質儲存"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "輕觸並按住相機鍵以拍攝連續快拍"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "按下增加音量鍵以拍照。按下降低音量鍵以開始錄製"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "若連續快拍啟用時,按下增加音量鍵將拍攝連續快拍"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "不再顯示"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "提示"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "裝置"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "輕處並按住圖示,然後拖曳以編輯捷徑位置"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "最佳相片"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "分享拍攝"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "閃光燈"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "卡通"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "好友相片分享"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "秋色"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "儲存為翻轉"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "記憶體不足,無法錄影"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "檢視"
+
diff --git a/po/zh_SG.po b/po/zh_SG.po
new file mode 100755
index 0000000..35e4261
--- /dev/null
+++ b/po/zh_SG.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10秒"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2秒"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "防震"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "自动"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "美肌"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "黑白"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "中央重点"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "日光"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "脸部识别"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "闪光灯"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "萤光灯"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "微距"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "矩阵"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "测光"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "负片"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "无"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "关"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "开"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "自拍"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "深褐色"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "全景"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "单拍"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "慢动作"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "存储容量"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "室内强光"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "指南"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS标签"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "肖像"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "体育"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "派对 / 室内"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "日落"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "黎明"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "烟火"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "文本"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "烛光"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "背光灯"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "自动聚焦"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "场景模式"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "聚焦模式"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "户外能见度"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "计时器"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "效果"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "编辑快捷键"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "自动调整对比度"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "重置"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "设定"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "爆裂摄影"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "信息限制"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "快速运动"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5秒"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "多云"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "创建全景图像失败。 请稍后再试"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "地平线"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "正在创建全景图,请稍等"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "阴影"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "点"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "无法保存。存储空间不足"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "美肌拍摄"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "全景"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "拍摄模式"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "慢动作"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "白平衡"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "拍摄错误"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "拍摄时间已过。重新启动"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "无法启动照相机"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "通话时\n无法开启照相机"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "在 %d 秒内关闭摄像头"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "在设置中启用位置服务以使用 GPS 标记"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "按下快门"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "沿着箭头发向缓慢移动照相机"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "不支持功能表"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "安全政策限制使用照相机"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "已储存"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "横向"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "夜间"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "脸部识别"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "录制模式"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "要复位设置吗?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "微笑拍摄"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "存储卡"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "沙滩 / 下雪"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "曝光值"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "分辨率"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "录制失败"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "拍摄时间已过。请重新开始"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "自定义"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "处理中…"
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "已移除存储卡"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "无法使用闪光灯。 电量不足"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "使用音量键作为"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "缩放键"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "摄像头键"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "照片分辨率"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "视频分辨率"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "连拍图片保存时质量设置为高清"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "按住相机按钮以进行连拍"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "按音量增加键以拍照。按音量减小键以开始录制"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "如果已启用连拍,按音量增加键将进行连拍"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "不要再显示"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "提示"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "设备"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "按住图标,然后拖拽以编辑快捷方式的位置"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "最佳照片"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "共享拍摄"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "闪光灯"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "卡通"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "好友照片共享"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "秋色"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "另存为翻版"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "存储空间不足,无法保存视频"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "检查"
+
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100755
index 0000000..90b91e2
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,342 @@
+msgid "IDS_CAM_BODY_10_SEC"
+msgstr "10 秒"
+
+msgid "IDS_CAM_BODY_2_SEC"
+msgstr "2 秒"
+
+msgid "IDS_CAM_BODY_ANTI_SHAKE"
+msgstr "防手震"
+
+msgid "IDS_CAM_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_CAM_BODY_BEAUTY"
+msgstr "美顏模式"
+
+msgid "IDS_CAM_BODY_BLACK_AND_WHITE"
+msgstr "黑白"
+
+msgid "IDS_CAM_BODY_CENTER_WEIGHTED"
+msgstr "中心-重點測光"
+
+msgid "IDS_CAM_BODY_DAYLIGHT"
+msgstr "白天"
+
+msgid "IDS_CAM_BODY_FACE_DETECTION"
+msgstr "臉部偵測"
+
+msgid "IDS_CAM_BODY_FLASH"
+msgstr "閃光燈"
+
+msgid "IDS_CAM_BODY_FLUORESCENT"
+msgstr "螢光燈"
+
+msgid "IDS_CAM_BODY_ISO"
+msgstr "ISO"
+
+msgid "IDS_CAM_BODY_MACRO"
+msgstr "近拍"
+
+msgid "IDS_CAM_BODY_MATRIX"
+msgstr "矩陣"
+
+msgid "IDS_CAM_BODY_METERING"
+msgstr "測光"
+
+msgid "IDS_CAM_BODY_NEGATIVE"
+msgstr "負片"
+
+msgid "IDS_CAM_BODY_NONE"
+msgstr "無"
+
+msgid "IDS_CAM_BODY_OFF"
+msgstr "關"
+
+msgid "IDS_CAM_BODY_ON"
+msgstr "開啟"
+
+msgid "IDS_CAM_BODY_SELF_SHOT"
+msgstr "自拍"
+
+msgid "IDS_CAM_BODY_SEPIA"
+msgstr "褐色"
+
+msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA"
+msgstr "全景"
+
+msgid "IDS_CAM_BODY_SINGLE"
+msgstr "單拍"
+
+msgid "IDS_CAM_BODY_SLOW_MOTION"
+msgstr "慢動作"
+
+msgid "IDS_CAM_BODY_STORAGE"
+msgstr "儲存空間"
+
+msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT"
+msgstr "白熾燈"
+
+msgid "IDS_CAM_BODY_GUIDELINE"
+msgstr "指引線"
+
+msgid "IDS_CAM_BODY_GPS_TAG"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_SCENE_PORTRAIT"
+msgstr "人像"
+
+msgid "IDS_CAM_OPT_SCENE_SPORTS"
+msgstr "運動"
+
+msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR"
+msgstr "派對/室內"
+
+msgid "IDS_CAM_OPT_SCENEMODE_SUNSET"
+msgstr "日落"
+
+msgid "IDS_CAM_OPT_SCENE_DAWN"
+msgstr "黎明"
+
+msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK"
+msgstr "煙火"
+
+msgid "IDS_CAM_BODY_SCENEMODE_TEXT"
+msgstr "文字"
+
+msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT"
+msgstr "燭光"
+
+msgid "IDS_CAM_OPT_SCENE_BACKLIGHT"
+msgstr "背光"
+
+msgid "IDS_CAM_OPT_AUTO_FOCUS"
+msgstr "自動對焦"
+
+msgid "IDS_CAM_BODY_SCENE_MODE"
+msgstr "場景模式"
+
+msgid "IDS_CAM_BODY_FOCUS_MODE"
+msgstr "對焦模式"
+
+msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY"
+msgstr "戶外能見度"
+
+msgid "IDS_CAM_BODY_TIMER"
+msgstr "計時器"
+
+msgid "IDS_CAM_BODY_EFFECTS"
+msgstr "效果"
+
+msgid "IDS_CAM_OPT_EDIT_SHORTCUTS"
+msgstr "編輯快捷鍵"
+
+msgid "IDS_CAM_BODY_AUTO_CONTRAST"
+msgstr "自動對比"
+
+msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET"
+msgstr "重設"
+
+msgid "IDS_CAM_BODY_SETTINGS"
+msgstr "設定"
+
+msgid "IDS_CAM_OPT_BURST_SHOT_ABB"
+msgstr "連續快拍"
+
+msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_CAM_OPT_MESSAGE_LIMIT"
+msgstr "訊息限制"
+
+msgid "IDS_CAM_BODY_FAST_MOTION"
+msgstr "快動作"
+
+msgid "IDS_CAM_BODY_5_SEC"
+msgstr "5 秒"
+
+msgid "IDS_CAM_BODY_CLOUDY"
+msgstr "陰天"
+
+msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER"
+msgstr "無法組建全景影像。請稍後再試"
+
+msgid "IDS_CAM_BODY_HORIZON"
+msgstr "水平線"
+
+msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA"
+msgstr "請稍後,正在建立全景圖"
+
+msgid "IDS_CAM_BODY_SHADE"
+msgstr "陰影"
+
+msgid "IDS_CAM_BODY_SPOT"
+msgstr "點"
+
+msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"
+msgstr "無法儲存。記憶體不足"
+
+msgid "IDS_CAM_OPT_BEAUTY_SHOT"
+msgstr "美顏模式"
+
+msgid "IDS_CAM_OPT_GPS"
+msgstr "GPS"
+
+msgid "IDS_CAM_OPT_PANORAMA"
+msgstr "全景"
+
+msgid "IDS_CAM_OPT_SHOOTING_MODE"
+msgstr "拍攝模式"
+
+msgid "IDS_CAM_OPT_SLOW_MOTION"
+msgstr "慢動作"
+
+msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB"
+msgstr "白平衡"
+
+msgid "IDS_CAM_POP_CAPTURE_ERROR"
+msgstr "拍攝錯誤"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"
+msgstr "已超過拍攝時間。請重新開始"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA"
+msgstr "無法啟動相機"
+
+msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"
+msgstr "通話期間無法啟動相機"
+
+msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"
+msgstr "在 %d 秒內關閉相機"
+
+msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"
+msgstr "啟用設定中的位置服務以使用 GPS 標籤"
+
+msgid "IDS_CAM_POP_PRESS_SHUTTER"
+msgstr "按快門"
+
+msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW"
+msgstr "依據箭頭方式緩慢移動相機"
+
+msgid "IDS_CAM_POP_ERROR_MESSAGE"
+msgstr "選單不受支援"
+
+msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"
+msgstr "由於安全政策,使用相機被限制"
+
+msgid "IDS_CAM_POP_SAVED"
+msgstr "已儲存"
+
+msgid "IDS_CAM_OPT_SCENE_LANDSCAPE"
+msgstr "風景"
+
+msgid "IDS_CAM_OPT_SCENEMODE_NIGHT"
+msgstr "夜間"
+
+msgid "IDS_CAM_OPT_FACE_DETECTION"
+msgstr "臉部偵測"
+
+msgid "IDS_CAM_OPT_RECORDING_MODE"
+msgstr "錄製模式"
+
+msgid "IDS_CAM_POP_RESET_SETTINGS_Q"
+msgstr "要重設設定嗎?"
+
+msgid "IDS_CAM_OPT_SMILE_SHOT"
+msgstr "微笑拍攝"
+
+msgid "IDS_CAM_OPT_MEMORY_CARD"
+msgstr "記憶卡"
+
+msgid "IDS_CAM_OPT_BEACH_SNOW"
+msgstr "海灘/雪景"
+
+msgid "IDS_CAM_OPT_EXPOSURE_VALUE"
+msgstr "曝光值"
+
+msgid "IDS_CAM_BODY_RESOLUTION"
+msgstr "解析度"
+
+msgid "IDS_CAM_POP_ERROR_RECORDING_FAIL"
+msgstr "錄製失敗"
+
+msgid "IDS_CAM_POP_CAPTURE_TIME_IS_OVER_START_AGAIN"
+msgstr "拍攝時間結束。請重新開始"
+
+msgid "IDS_CAM_BODY_CUSTOM"
+msgstr "自訂"
+
+msgid "IDS_CAM_BODY_PROCESSING_ING"
+msgstr "正在處理..."
+
+msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED"
+msgstr "已移除記憶卡"
+
+msgid "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"
+msgstr "無法使用閃光燈.電量過低"
+
+msgid "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"
+msgstr "使用音量鍵作為"
+
+msgid "IDS_CAM_MBODY_THE_ZOOM_KEY"
+msgstr "縮放鍵"
+
+msgid "IDS_CAM_MBODY_THE_CAMERA_KEY"
+msgstr "相機鍵"
+
+msgid "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"
+msgstr "相片解析度"
+
+msgid "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"
+msgstr "影片解析度"
+
+msgid "IDS_CAM_BODY_BURST_SHOT_IMAGES_ARE_SAVED_WITH_THE_QUALITY_SET_AS_FINE"
+msgstr "連續快拍圖像以設定的高畫質儲存"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"
+msgstr "輕觸並按住相機鍵以拍攝連續快拍"
+
+msgid "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"
+msgstr "按下增加音量鍵以拍照。按下降低音量鍵以開始錄影"
+
+msgid "IDS_CAM_POP_IF_BURST_SHOT_IS_ENABLED_PRESSING_THE_VOLUME_UP_KEY_WILL_TAKE_A_BURST_SHOT"
+msgstr "若啟用連續快拍,按下增加音量鍵將拍攝連續快拍"
+
+msgid "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"
+msgstr "不再顯示"
+
+msgid "IDS_CAM_HEADER_TIPS"
+msgstr "提示"
+
+msgid "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY"
+msgstr "裝置"
+
+msgid "IDS_CAM_BODY_TAP_AND_HOLD_THE_ICON_THEN_DRAG_IT_TO_EDIT_THE_POSITION_OF_THE_SHORTCUT"
+msgstr "輕處並按住圖示,然後拖曳以編輯捷徑位置"
+
+msgid "IDS_CAM_BODY_BEST_PHOTO"
+msgstr "最佳照片"
+
+msgid "IDS_CAM_BODY_SHARE_SHOT"
+msgstr "分享照片"
+
+msgid "IDS_CAM_OPT_FLASH"
+msgstr "閃光燈"
+
+msgid "IDS_CAM_BODY_CARTOON"
+msgstr "動畫"
+
+msgid "IDS_CAM_OPT_BUDDY_PHOTO_SHARE"
+msgstr "好友圖片分享"
+
+msgid "IDS_CAM_OPT_AUTUMN_COLOUR"
+msgstr "秋色"
+
+msgid "IDS_CAM_BODY_SAVE_AS_FLIPPED"
+msgstr "儲存為翻轉"
+
+msgid "IDS_CAM_POP_VIDEOMEMORYFULL"
+msgstr "影片記憶體不足"
+
+msgid "IDS_CAM_BODY_REVIEW"
+msgstr "查看"
+
diff --git a/sounds/af_fail.wav b/sounds/af_fail.wav
new file mode 100755
index 0000000..cfc50c0
--- /dev/null
+++ b/sounds/af_fail.wav
Binary files differ
diff --git a/sounds/af_ok.wav b/sounds/af_ok.wav
new file mode 100755
index 0000000..bf2b432
--- /dev/null
+++ b/sounds/af_ok.wav
Binary files differ
diff --git a/sounds/count.wav b/sounds/count.wav
new file mode 100755
index 0000000..e2bdb68
--- /dev/null
+++ b/sounds/count.wav
Binary files differ
diff --git a/src/CamDeviceCapacity.cpp b/src/CamDeviceCapacity.cpp
new file mode 100755
index 0000000..0aa4026
--- /dev/null
+++ b/src/CamDeviceCapacity.cpp
@@ -0,0 +1,715 @@
+
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "CamDeviceCapacity.h"
+#include "cam_capacity_type.h"
+
+
+extern "C" {
+#include "cam_mm.h"
+#include "cam_debug.h"
+}
+
+#define CAM_ATTR_NOT_SUPPORTED (1)
+#define CAM_CP_FUNC_UNMARKED (0)
+CCamDeviceCapacity* CCamDeviceCapacity::m_pInstance = NULL;
+
+/////////////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+/////////////////////////////////////////////////////////////////////////////
+CCamDeviceCapacity::CCamDeviceCapacity()
+{
+ ResetCaps();
+}
+
+CCamDeviceCapacity::~CCamDeviceCapacity()
+{
+ Destroy();
+}
+
+void
+CCamDeviceCapacity::ResetCaps()
+{
+ m_CamRes.bChecked = FALSE;
+ m_RecRes.bChecked = FALSE;
+ m_Focus.bChecked = FALSE;
+ m_Effect.bChecked = FALSE;
+ m_WB.bChecked = FALSE;
+ m_Scene.bChecked = FALSE;
+ m_Metering.bChecked = FALSE;
+ m_ISO.bChecked = FALSE;
+ m_Flash.bChecked = FALSE;
+ m_Fps.bChecked = FALSE;
+ m_Shot.bChecked = FALSE;
+ m_Zoom.bChecked = FALSE;
+ m_Ev.bChecked = FALSE;
+ m_Br.bChecked = FALSE;
+ m_RecMode.bChecked = FALSE;
+
+ m_WDR.bChecked = FALSE;
+ m_AntiShake.bChecked = FALSE;
+ m_RecAntiShake.bChecked = FALSE;
+ m_Outdoorvisibility.bChecked = FALSE;
+
+ m_uFuncCaps = 0;
+
+}
+
+CCamDeviceCapacity*
+CCamDeviceCapacity::GetInstance()
+{
+ if(m_pInstance == NULL)
+ m_pInstance = new CCamDeviceCapacity;
+ return m_pInstance;
+}
+
+void
+CCamDeviceCapacity::Destroy()
+{
+ if(m_pInstance)
+ {
+ delete m_pInstance;
+ m_pInstance = NULL;
+ }
+}
+
+void
+CCamDeviceCapacity::GetCamDevFuncCaps(unsigned int *uCapacity, void *user_data)
+{
+ unsigned int uSearchCaps = CAM_CP_FUNC_BURST_SHOT_MODE;
+ unsigned int uCaps = 0;
+
+ int deviceType = 0;
+ if (!cam_mm_get_video_device(&deviceType)) {
+ cam_debug(LOG_CAM, "cam_mm_get_video_device() fail");
+ *uCapacity = 0;
+ return;
+ }
+
+ if (m_uFuncCaps == CAM_CP_FUNC_UNMARKED) {
+ for(int i = 0; i < CAM_CP_FUNC_COUNT; i++) {
+ if (IsSupported(uSearchCaps, (CamDeviceType)deviceType, user_data))
+ uCaps |= uSearchCaps;
+
+ uSearchCaps *= 2;
+ cam_debug(LOG_CAM, "i[%d] uSearchCaps [0x%x]", i, uSearchCaps);
+ }
+
+ m_uFuncCaps = uCaps;
+ }
+
+ *uCapacity = m_uFuncCaps;
+}
+
+
+bool
+CCamDeviceCapacity::GetCamDevSceneModeCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_Scene.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_SCENE_MODE, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_Scene.bSupported = TRUE;
+ else
+ m_Scene.bSupported = FALSE;
+
+ m_Scene.bChecked = TRUE;
+ m_Scene.unCaps = uCaps;
+
+ }
+
+ *uCapacity = m_Scene.unCaps;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevWBCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_WB.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_WHITE_BALANCE, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_WB.bSupported = TRUE;
+ else
+ m_WB.bSupported = FALSE;
+
+ m_WB.bChecked = TRUE;
+ m_WB.unCaps = uCaps;
+
+ }
+
+ *uCapacity = m_WB.unCaps;
+ return TRUE;
+}
+
+
+bool
+CCamDeviceCapacity::GetCamDevEffectCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_Effect.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_EFFECT_MODE, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_Effect.bSupported = TRUE;
+ else
+ m_Effect.bSupported = FALSE;
+
+ m_Effect.bChecked = TRUE;
+ m_Effect.unCaps = uCaps;
+ }
+
+ *uCapacity = m_Effect.unCaps;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevFocusCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_Focus.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_FOCUS_MODE, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_Focus.bSupported = TRUE;
+ else
+ m_Focus.bSupported = FALSE;
+
+ if (cam_mm_is_supported_face_detection())
+ uCaps |= CAM_CP_FOCUS_FACE_DETECTION;
+
+ m_Focus.bChecked = TRUE;
+ m_Focus.unCaps = uCaps;
+ }
+
+ *uCapacity = m_Focus.unCaps;
+ return TRUE;
+}
+
+
+bool
+CCamDeviceCapacity::GetCamDevShotModeCaps(unsigned int *uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ *uCapacity = 0;
+ m_Shot.bSupported = FALSE;
+ m_Shot.bChecked = TRUE;
+
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevRecModeCaps(unsigned int *uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ *uCapacity = 0;
+#ifdef CAMERA_MACHINE_I686
+ m_RecMode.bSupported = FALSE;
+ m_RecMode.bChecked = TRUE;
+
+#else
+ if (!m_RecMode.bChecked) {
+ m_RecMode.unCaps = 0;
+ m_RecMode.unCaps |= CAM_CP_REC_MODE_NORMAL;
+ m_RecMode.unCaps |= CAM_CP_REC_MODE_MMS;
+ m_RecMode.unCaps |= CAM_CP_REC_MODE_SLOW_MOTION;
+ m_RecMode.unCaps |= CAM_CP_REC_MODE_FAST_MOTION;
+
+ m_RecMode.bSupported = TRUE;
+ m_RecMode.bChecked = TRUE;
+ }
+
+ *uCapacity = m_RecMode.unCaps;
+#endif
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevCamResolutionCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_CamRes.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_CAM_RESOLUTION, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_CamRes.bSupported = TRUE;
+ else
+ m_CamRes.bSupported = FALSE;
+
+ m_CamRes.bSupported = TRUE;
+ m_CamRes.bChecked = TRUE;
+ m_CamRes.unCaps = uCaps;
+ }
+
+ *uCapacity = m_CamRes.unCaps;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevISOCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_ISO.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_ISO, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_ISO.bSupported = TRUE;
+ else
+ m_ISO.bSupported = FALSE;
+
+ m_ISO.bChecked = TRUE;
+ m_ISO.unCaps = uCaps;
+ }
+
+ *uCapacity = m_ISO.unCaps;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevMeteringCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_Metering.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_METERING, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_Metering.bSupported = TRUE;
+ else
+ m_Metering.bSupported = FALSE;
+
+ m_Metering.bChecked = TRUE;
+ m_Metering.unCaps = uCaps;
+ }
+
+ *uCapacity = m_Metering.unCaps;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevFlashCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_Flash.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_FLASH_MODE, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_Flash.bSupported = TRUE;
+ else
+ m_Flash.bSupported = FALSE;
+
+ m_Flash.bChecked = TRUE;
+ m_Flash.unCaps = uCaps;
+ }
+
+ *uCapacity = m_Flash.unCaps;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevRecResolutionCaps(unsigned int* uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_RecRes.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_REC_RESOLUTION, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_RecRes.bSupported = TRUE;
+ else
+ m_RecRes.bSupported = FALSE;
+
+ m_RecRes.bChecked = TRUE;
+ m_RecRes.unCaps = uCaps;
+ }
+
+ *uCapacity = m_RecRes.unCaps;
+ return TRUE;
+
+}
+
+
+bool
+CCamDeviceCapacity::GetCamDevFpsCaps(unsigned int *uCapacity, void *user_data)
+{
+ cam_retvm_if(uCapacity == NULL, FALSE, "input param is NULL");
+
+ unsigned int uCaps = 0;
+ *uCapacity = 0;
+
+ if (!m_Fps.bChecked) {
+ if (!cam_mm_get_caps_range(CAM_CP_FUNC_FPS, &uCaps, user_data)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if (cam_mm_get_caps_cb_cnt() > CAM_ATTR_NOT_SUPPORTED)
+ m_Fps.bSupported = TRUE;
+ else
+ m_Fps.bSupported = FALSE;
+
+ m_Fps.bChecked = TRUE;
+ m_Fps.bChecked = TRUE;
+ m_Fps.unCaps = uCaps;
+ }
+
+ *uCapacity = m_Fps.unCaps;
+ return TRUE;
+}
+
+
+bool
+CCamDeviceCapacity::GetCamDevZoomCaps(int *min, int *max)
+{
+ cam_retvm_if((min == NULL || max == NULL), FALSE, "input parameter is NULL");
+
+ int nMin, nMax = 0;
+
+ if (!m_Zoom.bChecked) {
+ if (!cam_mm_get_caps_minmax(CAM_CP_FUNC_ZOOM, &nMin, &nMax)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if ((nMin == 0) && (nMax == 0))
+ m_Zoom.bSupported = FALSE;
+ else
+ m_Zoom.bSupported = TRUE;
+
+ m_Zoom.bChecked = TRUE;
+ m_Zoom.nMin = nMin;
+ m_Zoom.nMax = nMax;
+ }
+
+ *min = m_Zoom.nMin;
+ *max = m_Zoom.nMax;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevEvCaps(int *min, int *max)
+{
+ cam_retvm_if((min == NULL || max == NULL), FALSE, "input parameter is NULL");
+
+ int nMin, nMax = 0;
+
+ if (!m_Ev.bChecked) {
+ if (!cam_mm_get_caps_minmax(CAM_CP_FUNC_EXPOSURE, &nMin, &nMax)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if ((nMin == 0) && (nMax == 0))
+ m_Ev.bSupported = FALSE;
+ else
+ m_Ev.bSupported = TRUE;
+
+ m_Ev.bChecked = TRUE;
+ m_Ev.nMin = nMin;
+ m_Ev.nMax = nMax;
+ }
+
+ *min = m_Ev.nMin;
+ *max = m_Ev.nMax;
+ return TRUE;
+}
+
+bool
+CCamDeviceCapacity::GetCamDevBrCaps(int *min, int *max)
+{
+ cam_retvm_if((min == NULL || max == NULL), FALSE, "input parameter is NULL");
+
+ int nMin, nMax = 0;
+
+ if (!m_Br.bChecked) {
+ if (!cam_mm_get_caps_minmax(CAM_CP_FUNC_BRIGHTNESS, &nMin, &nMax)) {
+ cam_debug(LOG_CAM, "cam_mm_get_caps_range() fail");
+ return FALSE;
+ }
+
+ if ((nMin == 0) && (nMax == 0))
+ m_Br.bSupported = FALSE;
+ else
+ m_Br.bSupported = TRUE;
+
+ m_Br.bChecked = TRUE;
+ m_Br.nMin = nMin;
+ m_Br.nMax = nMax;
+ }
+
+ *min = m_Br.nMin;
+ *max = m_Br.nMax;
+ return TRUE;
+}
+
+
+// private
+bool
+CCamDeviceCapacity::IsSupported(unsigned int type, CamDeviceType deviceType, void *user_data)
+{
+ bool ret = FALSE;
+ unsigned int uCaps = 0;
+ int min, max = 0;
+
+ switch(type) {
+ case CAM_CP_FUNC_FPS:
+ {
+ if (GetCamDevFpsCaps(&uCaps, user_data))
+ ret = m_Fps.bSupported;
+ }
+ break;
+ case CAM_CP_FUNC_CAM_RESOLUTION:
+ {
+ if (GetCamDevCamResolutionCaps(&uCaps, user_data))
+ ret = m_CamRes.bSupported;
+ }
+ break;
+ case CAM_CP_FUNC_REC_RESOLUTION:
+ {
+ if (GetCamDevRecResolutionCaps(&uCaps, user_data))
+ ret = m_RecRes.bSupported;
+ }
+ break;
+ case CAM_CP_FUNC_FLASH_MODE:
+ {
+ if (GetCamDevFlashCaps(&uCaps, user_data))
+ ret = m_Flash.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_SHOT_MODE:
+ {
+ if (GetCamDevShotModeCaps(&uCaps, user_data))
+ ret = m_Shot.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_REC_MODE:
+ {
+ if (GetCamDevRecModeCaps(&uCaps, user_data)) {
+ ret = m_RecMode.bSupported;
+ DEBUG_TRACE("ret:%d", ret);
+ }
+ }
+ break;
+
+ case CAM_CP_FUNC_SCENE_MODE:
+ {
+ if (GetCamDevSceneModeCaps(&uCaps, user_data))
+ ret = m_Scene.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_FOCUS_MODE:
+ {
+ if (GetCamDevFocusCaps(&uCaps, user_data))
+ ret = m_Focus.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_EFFECT_MODE:
+ {
+ if (GetCamDevEffectCaps(&uCaps, user_data))
+ ret = m_Effect.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_WHITE_BALANCE:
+ {
+ if (GetCamDevWBCaps(&uCaps, user_data))
+ ret = m_WB.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_ISO:
+ {
+ if (GetCamDevISOCaps(&uCaps, user_data))
+ ret = m_ISO.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_METERING:
+ {
+ if (GetCamDevMeteringCaps(&uCaps, user_data))
+ ret = m_Metering.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_OUTDOOR:
+ {
+ if (cam_mm_is_supported_outdoor_visibility())
+ m_Outdoorvisibility.bSupported = TRUE;
+ else
+ m_Outdoorvisibility.bSupported = FALSE;
+
+ ret = m_Outdoorvisibility.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_AUTO_CONTRAST: // not supported mmfw
+ {
+ #ifdef CAMERA_MACHINE_I686
+ ret = FALSE;
+ #else
+ if (deviceType == CAM_DEVICE_MEGA)
+ m_WDR.bSupported = TRUE;
+ else
+ m_WDR.bSupported = FALSE;
+ ret = m_WDR.bSupported;
+ #endif
+ }
+ break;
+
+ case CAM_CP_FUNC_ZOOM:
+ {
+ if (GetCamDevZoomCaps(&min, &max))
+ ret = m_Zoom.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_BRIGHTNESS:
+ {
+ if (GetCamDevBrCaps(&min, &max))
+ ret = m_Br.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_EXPOSURE:
+ {
+ if (GetCamDevEvCaps(&min, &max))
+ ret = m_Ev.bSupported;
+ }
+ break;
+
+ case CAM_CP_FUNC_CAM_ANS:
+ {
+ if (cam_mm_is_support_anti_hand_shake())
+ ret = TRUE;
+ }
+ break;
+ case CAM_CP_FUNC_REC_ANS: // not supported mmfw
+ ret = FALSE;
+ break;
+ case CAM_CP_FUNC_SELF_MODE:
+ {
+ #ifdef CAMERA_MACHINE_I686
+ ret = FALSE;
+ #else
+ if (cam_mm_is_support_front_camera())
+ ret = TRUE;
+ else
+ ret = FALSE;
+ #endif
+ }
+ break;
+ case CAM_CP_FUNC_GPS:
+ case CAM_CP_FUNC_STORAGE:
+ {
+ #ifdef CAMERA_MACHINE_I686
+ ret = FALSE;
+ #else
+ ret = TRUE;
+ #endif
+ }
+ break;
+ case CAM_CP_FUNC_BURST_SHOT_MODE:
+ ret = TRUE;
+ break;
+ case CAM_CP_FUNC_CAPTURE_VOICE:
+ ret = FALSE;
+ break;
+ case CAM_CP_FUNC_SAVE_AS_FLIP:
+ {
+ ret = FALSE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
diff --git a/src/CamTypeConverter.cpp b/src/CamTypeConverter.cpp
new file mode 100755
index 0000000..732ef73
--- /dev/null
+++ b/src/CamTypeConverter.cpp
@@ -0,0 +1,672 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CamTypeConverter.h"
+#include "cam_capacity_type.h"
+
+unsigned int
+CCamTypeConverter::CamIsoDevConvertCaps(camera_attr_iso_e iso)
+{
+ unsigned int ret = 0;
+
+ switch(iso) {
+ case CAMERA_ATTR_ISO_AUTO:
+ ret = CAM_CP_ISO_AUTO;
+ break;
+ case CAMERA_ATTR_ISO_50:
+ ret = CAM_CP_ISO_50;
+ break;
+ case CAMERA_ATTR_ISO_100:
+ ret = CAM_CP_ISO_100;
+ break;
+ case CAMERA_ATTR_ISO_200:
+ ret = CAM_CP_ISO_200;
+ break;
+ case CAMERA_ATTR_ISO_400:
+ ret = CAM_CP_ISO_400;
+ break;
+ case CAMERA_ATTR_ISO_800:
+ ret = CAM_CP_ISO_800;
+ break;
+ case CAMERA_ATTR_ISO_1600:
+ ret = CAM_CP_ISO_1600;
+ break;
+ case CAMERA_ATTR_ISO_3200:
+ ret = CAM_CP_ISO_3200;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+
+}
+
+unsigned int
+CCamTypeConverter::CamIsoCamConvertCaps(CamIso iso)
+{
+ unsigned int ret = 0;
+
+ switch(iso) {
+ case CAM_ISO_AUTO:
+ ret = CAM_CP_ISO_AUTO;
+ break;
+ case CAM_ISO_50:
+ ret = CAM_CP_ISO_50;
+ break;
+ case CAM_ISO_100:
+ ret = CAM_CP_ISO_100;
+ break;
+ case CAM_ISO_200:
+ ret = CAM_CP_ISO_200;
+ break;
+ case CAM_ISO_400:
+ ret = CAM_CP_ISO_400;
+ break;
+ case CAM_ISO_800:
+ ret = CAM_CP_ISO_800;
+ break;
+ case CAM_ISO_1600:
+ ret = CAM_CP_ISO_1600;
+ break;
+ case CAM_ISO_3200:
+ ret = CAM_CP_ISO_3200;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamEffectDevConvertCaps(camera_attr_effect_mode_e effect)
+{
+ unsigned int ret = 0;
+
+ switch(effect){
+ case CAMERA_ATTR_EFFECT_NONE:
+ ret = CAM_CP_EFFECT_NONE;
+ break;
+ case CAMERA_ATTR_EFFECT_MONO:
+ ret = CAM_CP_EFFECT_MONO;
+ break;
+ case CAMERA_ATTR_EFFECT_SEPIA:
+ ret = CAM_CP_EFFECT_SEPIA;
+ break;
+ case CAMERA_ATTR_EFFECT_NEGATIVE:
+ ret = CAM_CP_EFFECT_NEGATIVE;
+ break;
+ case CAMERA_ATTR_EFFECT_CARTOON:
+ ret = CAM_CP_EFFECT_CARTOON;
+ break;
+ case CAMERA_ATTR_EFFECT_WASHED:
+ ret = CAM_CP_EFFECT_WASHED;
+ break;
+ case CAMERA_ATTR_EFFECT_SELECTIVE_RED_YELLOW:
+ ret = CAM_CP_EFFECT_SELECTIVE_RED_YELLOW;
+ break;
+ case CAMERA_ATTR_EFFECT_SELECTIVE_BLUE:
+ ret = CAM_CP_EFFECT_SELECTIVE_BLUE;
+ break;
+ case CAMERA_ATTR_EFFECT_SELECTIVE_GREEN:
+ ret = CAM_CP_EFFECT_SELECTIVE_GREEN;
+ break;
+ case CAMERA_ATTR_EFFECT_SOLARIZATION:
+ ret = CAM_CP_EFFECT_SOLAR;
+ break;
+ case CAMERA_ATTR_EFFECT_POSTERIZATION:
+ ret = CAM_CP_EFFECT_POSTERIZATION;
+ break;
+ case CAMERA_ATTR_EFFECT_VINTAGE_WARM:
+ ret = CAM_CP_EFFECT_VINTAGE_WARM;
+ break;
+ case CAMERA_ATTR_EFFECT_VINTAGE_COLD:
+ ret = CAM_CP_EFFECT_VINTAGE_COLD;
+ break;
+
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamEffectCamConvertCaps(CamSettingsEffects effect)
+{
+ unsigned int ret = 0;
+
+ switch(effect){
+ case CAM_SETTINGS_EFFECTS_NOR:
+ ret = CAM_CP_EFFECT_NONE;
+ break;
+ case CAM_SETTINGS_EFFECTS_MONO:
+ ret = CAM_CP_EFFECT_MONO;
+ break;
+ case CAM_SETTINGS_EFFECTS_SEPIA:
+ ret = CAM_CP_EFFECT_SEPIA;
+ break;
+ case CAM_SETTINGS_EFFECTS_NEGATIVE:
+ ret = CAM_CP_EFFECT_NEGATIVE;
+ break;
+ case CAM_SETTINGS_EFFECTS_CARTOON:
+ ret = CAM_CP_EFFECT_CARTOON;
+ break;
+ case CAM_SETTINGS_EFFECTS_WASHED:
+ ret = CAM_CP_EFFECT_WASHED;
+ break;
+ case CAM_SETTINGS_EFFECTS_SELECTIVE_RED_YELLOW:
+ ret = CAM_CP_EFFECT_SELECTIVE_RED_YELLOW;
+ break;
+ case CAM_SETTINGS_EFFECTS_SELECTIVE_BLUE:
+ ret = CAM_CP_EFFECT_SELECTIVE_BLUE;
+ break;
+ case CAM_SETTINGS_EFFECTS_SELECTIVE_GREEN:
+ ret = CAM_CP_EFFECT_SELECTIVE_GREEN;
+ break;
+ case CAM_SETTINGS_EFFECTS_SOLARIZATION:
+ ret = CAM_CP_EFFECT_SOLAR;
+ break;
+ case CAM_SETTINGS_EFFECTS_POSTERIZATION:
+ ret = CAM_CP_EFFECT_POSTERIZATION;
+ break;
+ case CAM_SETTINGS_EFFECTS_VINTAGE_WARM:
+ ret = CAM_CP_EFFECT_VINTAGE_WARM;
+ break;
+ case CAM_SETTINGS_EFFECTS_VINTAGE_COLD:
+ ret = CAM_CP_EFFECT_VINTAGE_COLD;
+ break;
+
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+
+unsigned int
+CCamTypeConverter::CamFpsDevConvertCaps(camera_attr_fps_e fps)
+{
+ unsigned int ret = 0;
+
+ switch(fps) {
+ case CAMERA_ATTR_FPS_AUTO:
+ ret = CAM_CP_FPS_AUTO;
+ break;
+ case CAMERA_ATTR_FPS_8:
+ ret = CAM_CP_FPS_8;
+ break;
+ case CAMERA_ATTR_FPS_15:
+ ret = CAM_CP_FPS_15;
+ break;
+ case CAMERA_ATTR_FPS_24:
+ ret = CAM_CP_FPS_24;
+ break;
+ case CAMERA_ATTR_FPS_25:
+ ret = CAM_CP_FPS_25;
+ break;
+ case CAMERA_ATTR_FPS_30:
+ ret = CAM_CP_FPS_30;
+ break;
+ case CAMERA_ATTR_FPS_60:
+ ret = CAM_CP_FPS_60;
+ break;
+ case CAMERA_ATTR_FPS_120:
+ ret = CAM_CP_FPS_120;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+
+}
+
+unsigned int
+CCamTypeConverter::CamWbDevConvertCaps(camera_attr_whitebalance_e wb)
+{
+ unsigned int ret = 0;
+
+ switch(wb) {
+ case CAMERA_ATTR_WHITE_BALANCE_NONE:
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_AUTOMATIC:
+ ret = CAM_CP_WB_AUTO;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_DAYLIGHT:
+ ret = CAM_CP_WB_DAYLIGHT;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_CLOUDY:
+ ret = CAM_CP_WB_CLOUDY;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_FLUORESCENT:
+ ret = CAM_CP_WB_FLUORESCENT;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_INCANDESCENT:
+ ret = CAM_CP_WB_INCANDESCENT;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_SHADE:
+ ret = CAM_CP_WB_SHADE;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_HORIZON:
+ ret = CAM_CP_WB_HORIZON;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_FLASH:
+ ret = CAM_CP_WB_FLASH;
+ break;
+ case CAMERA_ATTR_WHITE_BALANCE_CUSTOM:
+ ret = CAM_CP_WB_CUSTOM;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamWbCamConvertCaps(CamSettingsWB wb)
+{
+ unsigned int ret = 0;
+
+ switch(wb) {
+ case CAM_SETTINGS_WB_AWB:
+ ret = CAM_CP_WB_AUTO;
+ break;
+ case CAM_SETTINGS_WB_DAYLIGHT:
+ ret = CAM_CP_WB_DAYLIGHT;
+ break;
+ case CAM_SETTINGS_WB_CLOUDY:
+ ret = CAM_CP_WB_CLOUDY;
+ break;
+ case CAM_SETTINGS_WB_FLUORESCENT:
+ ret = CAM_CP_WB_FLUORESCENT;
+ break;
+ case CAM_SETTINGS_WB_INCANDESCENT:
+ ret = CAM_CP_WB_INCANDESCENT;
+ break;
+ case CAM_SETTINGS_WB_SHADE:
+ ret = CAM_CP_WB_SHADE;
+ break;
+ case CAM_SETTINGS_WB_HORIZON:
+ ret = CAM_CP_WB_HORIZON;
+ break;
+ case CAM_SETTINGS_WB_FLASH:
+ ret = CAM_CP_WB_FLASH;
+ break;
+ case CAM_SETTINGS_WB_CUSTOM:
+ ret = CAM_CP_WB_CUSTOM;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+
+unsigned int
+CCamTypeConverter::CamFocusDevConvertCaps(camera_attr_af_mode_e focus)
+{
+ unsigned int ret = 0;
+
+ switch(focus) {
+ case CAMERA_ATTR_AF_NONE:
+ ret = CAM_CP_FOCUS_NONE;
+ break;
+ case CAMERA_ATTR_AF_NORMAL:
+ ret = CAM_CP_FOCUS_AUTO_FOCUS;
+ break;
+ case CAMERA_ATTR_AF_MACRO:
+ ret = CAM_CP_FOCUS_MACRO;
+ break;
+ case CAMERA_ATTR_AF_FULL:
+ ret = CAM_CP_FOCUS_CAF;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamFocusCamConvertCaps(CamFocusMode focus)
+{
+ unsigned int ret = 0;
+
+ switch(focus) {
+ case CAM_FOCUS_AUTO:
+ ret = CAM_CP_FOCUS_AUTO_FOCUS;
+ break;
+ case CAM_FOCUS_MACRO:
+ ret = CAM_CP_FOCUS_MACRO;
+ break;
+ case CAM_FOCUS_FACE:
+ ret = CAM_CP_FOCUS_FACE_DETECTION;
+ break;
+ case CAM_FOCUS_CAF:
+ ret = CAM_CP_FOCUS_CAF;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamMeteringDevConvertCaps(camera_attr_exposure_mode_e metering)
+{
+ unsigned int ret = 0;
+
+ switch(metering) {
+ case CAMERA_ATTR_EXPOSURE_MODE_CENTER:
+ ret = CAM_CP_METERING_CENTERWEIGHT;
+ break;
+ case CAMERA_ATTR_EXPOSURE_MODE_SPOT:
+ ret = CAM_CP_METERING_SPOT;
+ break;
+ case CAMERA_ATTR_EXPOSURE_MODE_ALL:
+ ret = CAM_CP_METERING_MATRIX;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamMeteringCamConvertCaps(CamMetering type)
+{
+ unsigned int ret = 0;
+
+ switch(type) {
+ case CAM_METERING_MATRIX:
+ ret = CAM_CP_METERING_MATRIX;
+ break;
+ case CAM_METERING_CENTER_WEIGHTED:
+ ret = CAM_CP_METERING_CENTERWEIGHT;
+ break;
+ case CAM_METERING_SPOT:
+ ret = CAM_CP_METERING_SPOT;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamSceneDevConvertCaps(camera_attr_scene_mode_e scene)
+{
+ unsigned int ret = 0;
+
+ switch(scene) {
+ case CAMERA_ATTR_SCENE_MODE_NORMAL:
+ ret = CAM_CP_SCENE_MODE_AUTO;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_PORTRAIT:
+ ret = CAM_CP_SCENE_MODE_PORTRAIT;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_LANDSCAPE:
+ ret = CAM_CP_SCENE_MODE_LANDSCAPE;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_SPORTS:
+ ret = CAM_CP_SCENE_MODE_SPORTS;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_PARTY_N_INDOOR:
+ ret = CAM_CP_SCENE_MODE_PARTY_AND_INDOOR;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_BEACH_N_INDOOR:
+ ret = CAM_CP_SCENE_MODE_BEACH_AND_SNOW;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_SUNSET:
+ ret = CAM_CP_SCENE_MODE_SUNSET;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_DUSK_N_DAWN:
+ ret = CAM_CP_SCENE_MODE_DUSK_AND_DAWN;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_FALL_COLOR:
+ ret = CAM_CP_SCENE_MODE_FALLCOLOR;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_NIGHT_SCENE:
+ ret = CAM_CP_SCENE_MODE_NIGHTSHOT;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_FIREWORK:
+ ret = CAM_CP_SCENE_MODE_FIREWORK;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_TEXT:
+ ret = CAM_CP_SCENE_MODE_TEXT;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_CANDLE_LIGHT:
+ ret = CAM_CP_SCENE_MODE_CANDLE_LIGHT;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_BACKLIGHT:
+ ret = CAM_CP_SCENE_MODE_BACK_LIGHT;
+ break;
+ case CAMERA_ATTR_SCENE_MODE_SHOW_WINDOW:
+ ret = CAM_CP_SCENE_MODE_SHOW_WINDOW;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+
+unsigned int
+CCamTypeConverter::CamSceneCamConvertCaps(CamSceneMode scene)
+{
+ unsigned int ret = 0;
+
+ switch(scene) {
+ case CAM_SCENE_NONE:
+ ret = CAM_CP_SCENE_MODE_AUTO;
+ break;
+ case CAM_SCENE_PORTRAIT:
+ ret = CAM_CP_SCENE_MODE_PORTRAIT;
+ break;
+ case CAM_SCENE_LANDSCAPE:
+ ret = CAM_CP_SCENE_MODE_LANDSCAPE;
+ break;
+ case CAM_SCENE_SPORTS:
+ ret = CAM_CP_SCENE_MODE_SPORTS;
+ break;
+ case CAM_SCENE_PARTY:
+ ret = CAM_CP_SCENE_MODE_PARTY_AND_INDOOR;
+ break;
+ case CAM_SCENE_BEACHSNOW:
+ ret = CAM_CP_SCENE_MODE_BEACH_AND_SNOW;
+ break;
+ case CAM_SCENE_SUNSET:
+ ret = CAM_CP_SCENE_MODE_SUNSET;
+ break;
+ case CAM_SCENE_DUSKDAWN:
+ ret = CAM_CP_SCENE_MODE_DUSK_AND_DAWN;
+ break;
+ case CAM_SCENE_FALL:
+ ret = CAM_CP_SCENE_MODE_FALLCOLOR;
+ break;
+ case CAM_SCENE_NIGHT:
+ ret = CAM_CP_SCENE_MODE_NIGHTSHOT;
+ break;
+ case CAM_SCENE_FIREWORK:
+ ret = CAM_CP_SCENE_MODE_FIREWORK;
+ break;
+ case CAM_SCENE_TEXT:
+ ret = CAM_CP_SCENE_MODE_TEXT;
+ break;
+ case CAM_SCENE_CANDLELIGHT:
+ ret = CAM_CP_SCENE_MODE_CANDLE_LIGHT;
+ break;
+ case CAM_SCENE_BACKLIGHT:
+ ret = CAM_CP_SCENE_MODE_BACK_LIGHT;
+ break;
+ case CAM_SCENE_SHOW_WINDOW:
+ ret = CAM_CP_SCENE_MODE_SHOW_WINDOW;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamFlashDevConvertCaps(camera_attr_flash_mode_e flash)
+{
+ unsigned int ret = 0;
+
+ switch(flash) {
+ case CAMERA_ATTR_FLASH_MODE_OFF:
+ ret = CAM_CP_FLASH_OFF;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_ON:
+ ret = CAM_CP_FLASH_ON;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_AUTO:
+ ret = CAM_CP_FLASH_AUTO;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_REDEYE_REDUCTION:
+ ret = CAM_CP_FLASH_REDEYE;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_SLOW_SYNC:
+ ret = CAM_CP_FLASH_SLOW_SYNC;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_FRONT_CURTAIN:
+ ret = CAM_CP_FLASH_FRONT_CURTAIN;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_REAR_CURTAIN:
+ ret = CAM_CP_FLASH_REAR_CURTAIN;
+ break;
+ case CAMERA_ATTR_FLASH_MODE_PERMANENT:
+ ret = CAM_CP_FLASH_PERMANENT;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamFlashCamConvertCaps(CamFlashMode flash)
+{
+ unsigned int ret = 0;
+
+ switch(flash) {
+ case CAM_FLASH_OFF:
+ ret = CAM_CP_FLASH_OFF;
+ break;
+ case CAM_FLASH_ON:
+ ret = CAM_CP_FLASH_ON;
+ break;
+ case CAM_FLASH_AUTO:
+ ret = CAM_CP_FLASH_AUTO;
+ break;
+ case CAM_FLASH_MOVIE_ON:
+ ret = CAM_CP_FLASH_PERMANENT;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+unsigned int
+CCamTypeConverter::CamResolutionCamConvertCaps(unsigned int res)
+{
+ unsigned int ret = 0;
+
+ switch(res) {
+ case CAM_RESOLUTION_3264x2448:
+ ret = CAM_CP_SIZE_3264X2448;
+ break;
+ case CAM_RESOLUTION_3264x2176:
+ ret = CAM_CP_SIZE_3264X2176;
+ break;
+ case CAM_RESOLUTION_3264x1960:
+ ret = CAM_CP_SIZE_3264X1960;
+ break;
+ case CAM_RESOLUTION_3264x1836:
+ ret = CAM_CP_SIZE_3264X1836;
+ break;
+ case CAM_RESOLUTION_2560x1920:
+ ret = CAM_CP_SIZE_2560X1920;
+ break;
+ case CAM_RESOLUTION_2560x1536:
+ ret = CAM_CP_SIZE_2560X1536;
+ break;
+ case CAM_RESOLUTION_2560x1440:
+ ret = CAM_CP_SIZE_2560X1440;
+ break;
+ case CAM_RESOLUTION_2048x1536:
+ ret = CAM_CP_SIZE_2048X1536;
+ break;
+ case CAM_RESOLUTION_2048x1152:
+ ret = CAM_CP_SIZE_2048X1152;
+ break;
+ case CAM_RESOLUTION_1920x1080:
+ ret = CAM_CP_SIZE_1920X1080;
+ break;
+ case CAM_RESOLUTION_1600x1200:
+ ret = CAM_CP_SIZE_1600X1200;
+ break;
+ case CAM_RESOLUTION_1392x1392:
+ ret = CAM_CP_SIZE_1392X1392;
+ break;
+ case CAM_RESOLUTION_1280x960:
+ ret = CAM_CP_SIZE_1280X960;
+ break;
+ case CAM_RESOLUTION_1280x720:
+ ret = CAM_CP_SIZE_1280X720;
+ break;
+ case CAM_RESOLUTION_SVGA:
+ ret = CAM_CP_SIZE_800X600;
+ break;
+ case CAM_RESOLUTION_WVGA:
+ ret = CAM_CP_SIZE_800X480;
+ break;
+ case CAM_RESOLUTION_WVGA2:
+ ret = CAM_CP_SIZE_720X480;
+ break;
+ case CAM_RESOLUTION_VGA:
+ ret = CAM_CP_SIZE_640X480;
+ break;
+ case CAM_RESOLUTION_WQVGA:
+ ret = CAM_CP_SIZE_400X240;
+ break;
+ case CAM_RESOLUTION_QVGA:
+ ret = CAM_CP_SIZE_320X240;
+ break;
+ case CAM_RESOLUTION_QCIF:
+ ret = CAM_CP_SIZE_176X144;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+
diff --git a/src/cam.c b/src/cam.c
new file mode 100755
index 0000000..cbbea46
--- /dev/null
+++ b/src/cam.c
@@ -0,0 +1,924 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+
+#include <stdio.h>
+#include <pthread.h>
+#include <X11/Xlib.h>
+#include <utilX.h>
+#include <power.h>
+#include <ui-gadget-module.h>
+#include "cam.h"
+#include "cam_app.h"
+#include "camera_utils.h"
+#include "cam_ta.h"
+#include "cam_mm.h"
+#include "cam_debug.h"
+#include "cam_toolbar_edc_callback.h"
+#include "cam_zoom_edc_callback.h"
+#include "cam_indicator_edc_callback.h"
+#include "cam_common_edc_callback.h"
+#include "cam_rec.h"
+#include "cam_file.h"
+#include "cam_menu_composer.h"
+#include "cam_device_capacity.h"
+
+
+#define CAM_EXT_LIB_PATH "/usr/lib/libcamera-external-engine.so"
+
+void *handle = NULL;
+
+
+static Evas_Object *__create_base_layout(Evas_Object *parent);
+static void __low_battery_cb(void *data);
+static gboolean __device_orientation_cb(app_device_orientation_e mode, void *data);
+static int __is_idle_lock(void);
+static Eina_Bool __resume_camera(void* data);
+static int __convert_orientation_to_angle(app_device_orientation_e orientation);
+void *__cam_start_thread_run(void *data);
+static void __accelerometer_cb(unsigned long long timestamp, sensor_data_accuracy_e accuracy, float x, float y, float z, void *user_data);
+static gboolean __start_sensor(void* data);
+
+
+static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("==on_create==", 0);
+ cam_debug(LOG_UI, "############## on_create START ##############");
+
+ cam_retvm_if(ug == NULL, NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+ Ecore_X_Display *dpy = NULL;
+
+ bindtextdomain(PACKAGE, "/usr/ug/res/locale");
+
+ ad->camera_ug = ug;
+
+ /* get parent's layout */
+ ad->win_main = ug_get_window();
+ cam_retvm_if(ad->win_main == NULL, NULL, "ug_get_window failed");
+
+ /* create base layout */
+ ad->ug_base = __create_base_layout(ad->win_main);
+ cam_retvm_if(ad->ug_base == NULL, NULL, "__create_base_layout failed");
+
+ /* Camera does not support desktop mode */
+ const char *str = "mobile";
+ elm_win_profiles_set(ad->win_main, &str, 1);
+
+ /* remove effect */
+ dpy = ecore_x_display_get();
+ if (dpy) {
+ Ecore_X_Window win;
+ win = elm_win_xwindow_get(ad->win_main);
+
+ cam_debug(LOG_UI, "dpy is not null .. set no effect to display = %d\n", win);
+ utilx_set_window_effect_style(dpy, win,
+ UTILX_EFFECT_TYPE_ROTATION,
+ UTILX_EFFECT_STYLE_NONE);
+ }
+
+ ad->evas = evas_object_evas_get(ad->win_main);
+ ad->ee = ecore_evas_ecore_evas_get(ad->evas);
+ ad->main_xid = elm_win_xwindow_get(ad->win_main);
+
+ /* camera application initialization */
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_init", 0);
+ if (!cam_app_init(ad)) {
+ cam_critical(LOG_UI, "cam_app_init failed");
+ return NULL;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_init", 0);
+
+ /*add camera exteral engine lib load*/
+ if (!open_cam_ext_handle()) {
+ cam_critical(LOG_UI, "open_cam_ext_handle failed");
+ }
+
+ ad->rot_current = app_get_device_orientation();
+ ad->rot_previous = ad->rot_current;
+ int win_angle = elm_win_rotation_get(ad->win_main);
+ ad->angle = __convert_orientation_to_angle(ad->rot_current);
+
+ if(win_angle != ad->angle) {
+ cam_critical(LOG_UI, "win_angle:%d device_angle:%d ", win_angle, ad->angle);
+ elm_win_rotation_with_resize_set(ad->win_main, ad->angle);
+ }
+
+ evas_object_show(ad->win_main);
+
+ if (!cam_check_dir()) {
+ cam_app_notice_popup(ad, "Cannot make default path", cam_app_timeout_notice_response_cb);
+ return NULL;
+ }
+
+ if (!cam_utils_check_torchlight_status(ad)) {
+ DEBUG_TRACE("Can not get torchlight status");
+ }
+
+ /* remove exe args */
+ if (ad->exe_args) {
+ if (ad->exe_args->caller) {
+ free(ad->exe_args->caller);
+ ad->exe_args->caller = NULL;
+ }
+ free(ad->exe_args);
+ ad->exe_args = NULL;
+ }
+
+ char *operation = NULL;
+ int ret = service_get_operation(service, &operation);
+ if (ret != SERVICE_ERROR_NONE) {
+ cam_critical(LOG_UI, "service_get_operation failed");
+ return NULL;
+ }
+
+ if (operation == NULL) {
+ cam_critical(LOG_UI, "operation is null");
+ return NULL;
+ }
+
+ if (strcmp(operation, SERVICE_OPERATION_CREATE_CONTENT) == 0) {
+ cam_debug(LOG_UI, "Operation is SERVICE_OPERATION_CREATE_CONTENT");
+
+ ad->launching_mode = CAM_LAUNCHING_MODE_EXTERNAL;
+
+ ret = service_clone(&ad->service_handle, service);
+ if (ret != SERVICE_ERROR_NONE) {
+ cam_critical(LOG_UI, "service_clone failed");
+ return NULL;
+ }
+
+ CamExeArgs *args = (CamExeArgs *)malloc(sizeof(CamExeArgs));
+ if (args == NULL) {
+ cam_critical(LOG_UI, "Memory allocation failed");
+ return NULL;
+ }
+ memset(args, 0, sizeof(CamExeArgs));
+
+ if (!cam_app_parse_args(args, service)) {
+ cam_critical(LOG_UI, "cam_app_parse_args failed");
+ if (args) {
+ if (args->caller) {
+ free(args->caller);
+ args->caller = NULL;
+ }
+ free(args);
+ args = NULL;
+ }
+ return NULL;
+ }
+ ad->exe_args = args;
+
+ if (!cam_mm_create(CAM_DEVICE_MEGA, ad->exe_args->cam_mode)) {
+ cam_critical(LOG_MM, "cam_mm_create failed");
+ ad->error_type = CAM_ERROR_TYPE_UNABLE_TO_LAUNCH;
+ return NULL;
+ }
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_handle_init", 0);
+ if (!cam_handle_init(ad, ad->exe_args->cam_mode)) {
+ cam_critical(LOG_CAM, "cam_handle_init failed");
+ return NULL;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_handle_init", 0);
+
+ cam_app_init_with_args(ad);
+ } else {
+ ad->launching_mode = CAM_LAUNCHING_MODE_NORMAL;
+
+ if (!cam_mm_create(CAM_DEVICE_MEGA, CAM_CAMERA_MODE)) {
+ cam_critical(LOG_MM, "cam_mm_create failed");
+ ad->error_type = CAM_ERROR_TYPE_UNABLE_TO_LAUNCH;
+ return NULL;
+ }
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_handle_init", 0);
+ if (!cam_handle_init(ad, CAM_CAMERA_MODE)) {
+ cam_critical(LOG_CAM, "cam_handle_init failed");
+ return NULL;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_handle_init", 0);
+ }
+
+ ad->error_type = CAM_ERROR_TYPE_NONE;
+
+ if (cam_utils_check_battery_critical_low()) {
+ ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
+ } else if (cam_utils_check_battery_warning_low()) {
+ ad->battery_status = LOW_BATTERY_WARNING_STATUS;
+ } else {
+ ad->battery_status = NORMAL_BATTERY_STATUS;
+ }
+
+ if (cam_utils_check_call_running())
+ ad->is_calling = TRUE;
+ else
+ ad->is_calling = FALSE;
+
+ if ( ad->battery_status != LOW_BATTERY_CRITICAL_STATUS
+ || ad->is_calling == FALSE) {
+ if (pthread_create(&(ad->camera_start_thread), NULL, __cam_start_thread_run, (void *)ad) < 0) {
+ cam_critical(LOG_CAM, "Create camera start thread failed");
+ return NULL;
+ }
+ }
+
+ cam_debug(LOG_UI, "############## on_create END ##############");
+ CAM_TA_ACUM_ITEM_END("==on_create==", 0);
+
+ return ad->ug_base;
+}
+
+static void on_start(ui_gadget_h ug, service_h service, void *priv)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("==on_start==", 0);
+ cam_debug(LOG_UI, "############## on_start START ##############");
+
+ cam_retm_if(ug == NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ ad->ug_state = CAM_UG_RESET_STATE;
+
+#ifdef EFL_TEMP_CODE
+ cam_win_transparent_set(ad);
+#endif
+
+ cam_app_get_win_size(ad);
+
+ power_lock_state(POWER_STATE_NORMAL, 0);
+
+ /*elm_win_alpha_set(ad->win_main, EINA_TRUE);*/
+
+ ad->setting_menu_composer = NULL;
+
+ if( ad->setting_menu_composer == NULL){
+ ad->setting_menu_composer = calloc(1, sizeof(cam_menu_composer));
+ cam_compose_setting_menu((void*)ad, ad->setting_menu_composer);
+ }
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_layout_init", 0);
+ if (!cam_layout_init(ad)) {
+ cam_critical(LOG_UI, "cam_layout_init failed");
+ return;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_layout_init", 0);
+
+ __start_sensor(ad);
+
+ cam_debug(LOG_UI, "############## on_start END##############");
+ CAM_TA_ACUM_ITEM_END("==cam_service==", 0);
+}
+
+static void on_pause(ui_gadget_h ug, service_h service, void *priv)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("==on_pause==", 0);
+ cam_debug(LOG_UI, "############## on_pause ##############");
+
+ cam_retm_if(ug == NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ ad->ug_state = CAM_UG_PAUSE_STATE;
+
+ int ret = -1;
+ ret = sensor_stop(ad->sensor, SENSOR_ACCELEROMETER);
+ if(ret != SENSOR_ERROR_NONE){
+ cam_critical(LOG_MM, "sensor_stop fail %d", ret);
+ return;
+ }
+
+ if (ad->location_ug) {
+ ug_destroy(ad->location_ug);
+ ad->location_ug = NULL;
+ }
+
+ if (ad->imageviewer_ug) {
+ DEBUG_TRACE("imageviewer_ug exist");
+ return;
+ }
+
+ CAM_TA_ACUM_ITEM_BEGIN(" app_stop", 0);
+ DEBUG_TRACE(" ");
+
+ cam_app_pause(ad);
+
+ power_unlock_state(POWER_STATE_NORMAL);
+ CAM_TA_ACUM_ITEM_END(" app_stop", 0);
+
+ CAM_TA_ACUM_ITEM_END("==on_pause==", 0);
+}
+
+static void on_resume(ui_gadget_h ug, service_h service, void *priv)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("==on_resume==", 0);
+ cam_debug(LOG_UI, "############## on_resume ##############");
+
+ cam_retm_if(ug == NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ ad->ug_state = CAM_UG_RESUME_STATE;
+
+ evas_object_raise(ad->win_main);
+
+ if (!cam_check_dir()) {
+ cam_app_notice_popup(ad, "Cannot make default path",
+ cam_app_timeout_notice_response_cb);
+ return;
+ }
+
+ int ret = -1;
+ ret = sensor_start(ad->sensor, SENSOR_ACCELEROMETER);
+ if(ret != SENSOR_ERROR_NONE){
+ cam_critical(LOG_MM, "sensor_start fail %d ", ret);
+ return;
+ }
+
+ cam_mm_set_display_visible(TRUE);
+
+ if (!cam_utils_check_torchlight_status(ad)) {
+ DEBUG_TRACE("Can not get torchlight status");
+ }
+
+ app_device_orientation_e rot_current = app_get_device_orientation();
+ DEBUG_TRACE("rot_current:%d, ad->rot_current:%d, ad->angle:%d", rot_current, ad->rot_current, ad->angle);
+ if (rot_current != ad->rot_current) {
+ ecore_idler_add(__resume_camera, ad);
+ }
+
+ if (ad->imageviewer_ug) { /* bug fix camera app overlab with imageviewer_ug */
+ DEBUG_TRACE("imageviewer_ug exist");
+ return;
+ }
+
+ power_lock_state(POWER_STATE_NORMAL, 0);
+
+ CAM_TA_INIT();
+
+ if (ad) {
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_resume", 0);
+ if (!cam_app_resume(ad))
+ return;
+ CAM_TA_ACUM_ITEM_END(" cam_app_resume", 0);
+ }
+
+ CAM_TA_ACUM_ITEM_END("==on_resume==", 0);
+}
+
+static void on_destroy(ui_gadget_h ug, service_h service, void *priv)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("==on_destroy==", 0);
+ cam_debug(LOG_UI, "############## on_destroy ##############");
+
+ cam_retm_if(ug == NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ ad->ug_state = CAM_UG_TERMINATE_STATE;
+
+ sensor_accelerometer_unset_cb(ad->sensor);
+ if(sensor_stop(ad->sensor, SENSOR_ACCELEROMETER) == SENSOR_ERROR_NONE)
+ sensor_destroy(ad->sensor);
+
+ if (ad->camera_start_thread) {
+ pthread_join(ad->camera_start_thread, NULL);
+ }
+
+#ifdef USE_FIFO_THREAD
+ cam_app_FIFO_thread_exit();
+#endif
+
+ cam_app_file_register_thread_exit(ad);
+
+ cam_continuous_shot_file_save_thread_exit(ad);
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_stop", 0);
+ cam_app_stop(ad);
+ CAM_TA_ACUM_ITEM_END(" cam_app_stop", 0);
+
+ power_unlock_state(POWER_STATE_NORMAL);
+
+ CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(CAM_TA_SHOW_FILE);
+ CAM_TA_RELEASE();
+
+ close_cam_ext_handle();
+
+ CAM_TA_ACUM_ITEM_END("==on_destroy==", 0);
+}
+
+static void on_message(ui_gadget_h ug, service_h msg, service_h service, void *priv)
+{
+ cam_critical(LOG_UI, "############## on_message ##############");
+
+ cam_retm_if(ug == NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ /* Check service for DFT mmi-check */
+ if ((ad->ug_state == CAM_UG_RESUME_STATE) || (ad->ug_state == CAM_UG_RESET_STATE)) {
+ char *mmi_check = NULL;
+ service_get_extra_data(service, "MMICHECK_CAMERA", (char **)&mmi_check);
+ if (mmi_check) {
+ cam_critical(LOG_UI, "MMICHECK_CAMERA %s", mmi_check);
+ if (0 == strcmp(mmi_check, "1")) {
+ if (!cam_do_capture(ad)) {
+ cam_critical(LOG_UI, "cam_do_capture failed");
+ }
+ }
+ } else {
+ cam_critical(LOG_UI, "not mmi check case, error!");
+ }
+ }
+}
+
+static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv)
+{
+ cam_critical(LOG_UI, "############## on_event ##############");
+
+ cam_retm_if(ug == NULL, "ui_gadget_h is NULL");
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ switch (event) {
+ case UG_EVENT_LOW_BATTERY:
+ __low_battery_cb(ad);
+ break;
+ case UG_EVENT_LANG_CHANGE:
+ case UG_EVENT_ROTATE_PORTRAIT:
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ case UG_EVENT_LOW_MEMORY:
+ case UG_EVENT_REGION_CHANGE:
+ default:
+ DEBUG_TRACE("Ignore Event - [%d]", event);
+ break;
+ }
+}
+
+gboolean open_cam_ext_handle()
+{
+ if (!handle) {
+ /*NOTE: RTLD_LAZY: it will check dynamic lib api while use it,
+ RTLD_NOW: it will check each api before open dynamic lib*/
+ handle = dlopen(CAM_EXT_LIB_PATH, RTLD_LAZY);
+ if ( !handle ) {
+ char *msg = NULL;
+ msg = strdup(dlerror());
+ DEBUG_TRACE("error: %s", msg);
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void close_cam_ext_handle()
+{
+ if (handle) {
+ dlclose(handle);
+ handle = NULL;
+ }
+}
+
+static Evas_Object *__create_base_layout(Evas_Object *parent)
+{
+ Evas_Object *base;
+ int r = 0;
+
+ base = elm_layout_add(parent);
+ cam_retvm_if(base == NULL, NULL, "elm_layout_add failed");
+
+ r = elm_layout_file_set(base, CAM_MAIN_LAYOUT_EDJ_NAME, "main_layout");
+ if (!r) {
+ evas_object_del(base);
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(base);
+
+ return base;
+}
+
+static void __low_battery_cb(void *data)
+{
+ cam_info(LOG_SYS, "Low battery !!");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ if (evas_object_visible_get(ad->win_main)) {
+ int state = cam_mm_get_state();
+ if ((state == RECORDER_STATE_RECORDING
+ || state == RECORDER_STATE_PAUSED)
+ &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ camapp->rec_stop_type = CAM_REC_STOP_LOW_BATTERY;
+ ad->recording_commit =
+ ecore_idler_add(cam_video_idler_record_stop, ad);
+ } else {
+ cam_app_exit(ad);
+ }
+ }
+}
+
+static gboolean __device_orientation_cb(app_device_orientation_e mode, void *data)
+{
+ cam_debug(LOG_UI, "############## cam_device_orientation_cb ##############");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ cam_retvm_if(ad->camapp_handle == NULL, FALSE, "ad->camapp_handle is NULL");
+
+ if(ad->camapp_handle->continuous_shot_data &&
+ ad->camapp_handle->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING){
+ cam_debug(LOG_UI, "capturing");
+ return FALSE;
+ }
+ if (ad->bestshot_thumbnails_edje) {
+ cam_debug(LOG_UI, "is creating best shot thumbnails");
+ return FALSE;
+ }
+ cam_debug(LOG_UI, "rotated : %d", mode);
+
+ /*TODO: now just return, if the last rotated is not finished*/
+ if (ad->is_rotating) {
+ cam_debug(LOG_UI, "rotating...");
+ return FALSE;
+ }
+
+ int angle = 0;
+ ui_gadget_h ug = NULL;
+
+ enum ug_event ev = UG_EVENT_ROTATE_LANDSCAPE;
+ ad->rot_previous = ad->rot_current;
+ ad->rot_current = mode;
+
+ if (ad->toolbar_edj_file)
+ free(ad->toolbar_edj_file);
+ ad->toolbar_edj_file = NULL;
+
+ switch (mode) {
+ case APP_DEVICE_ORIENTATION_0:
+ angle = 0;
+ ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT;
+ ev = UG_EVENT_ROTATE_PORTRAIT;
+ ad->camcorder_rotate = CAMERA_ROTATION_90;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_EDJ_NAME);
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ angle = 270;
+ ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE;
+ ev = UG_EVENT_ROTATE_LANDSCAPE;
+ ad->camcorder_rotate = CAMERA_ROTATION_NONE;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ angle = 180;
+ ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT_INVERSE;
+ ev = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN;
+ ad->camcorder_rotate = CAMERA_ROTATION_270;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_INVERSE_EDJ_NAME);
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ angle = 90;
+ ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE;
+ ev = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN;
+ ad->camcorder_rotate = CAMERA_ROTATION_180;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_INVERSE_EDJ_NAME);
+ break;
+
+ default:
+ break;
+ }
+ ad->angle = angle;
+
+ if (ad->imageviewer_ug) {
+ ug = ad->imageviewer_ug;
+ } else if (ad->location_ug) {
+ ug = ad->location_ug;
+ }
+ if (ug) {
+ enum ug_mode md = ug_get_mode(ug);
+ if (md == UG_MODE_FULLVIEW) {
+
+ int rotate = 0;
+ int ret = -1;
+
+ ret = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &rotate);
+ if (ret != 0) {
+ return FALSE;
+ }
+
+ if (rotate == 0) {
+ cam_critical(LOG_UI, "Rotation is lock");
+ return FALSE;
+ }
+
+ elm_win_rotation_with_resize_set(ad->win_main, angle);
+ /* send event to ug */
+ ug_send_event(ev);
+ }
+ } else {
+
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR);
+ }
+
+ return TRUE;
+}
+
+static int __is_idle_lock(void)
+{
+ int vconf_val = 0;
+ int vconf_ret = 0;
+
+ vconf_ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &vconf_val);
+ if(vconf_ret == 0){
+ if (vconf_val == VCONFKEY_IDLE_LOCK) {
+ DEBUG_TRACE(" IDLE IN LOCK STATE ");
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+static Eina_Bool __resume_camera(void *data)
+{
+ struct appdata *ad = data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ ad->rot_current = app_get_device_orientation();
+ ad->rot_previous = ad->rot_current;
+ int angle = 0;
+ ui_gadget_h ug = NULL;
+ enum ug_event ev = UG_EVENT_ROTATE_LANDSCAPE;
+ switch (ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ angle = 0;
+ ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT;
+ ev = UG_EVENT_ROTATE_PORTRAIT;
+ ad->camcorder_rotate = CAMERA_ROTATION_90;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_EDJ_NAME);
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ angle = 270;
+ ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE;
+ ev = UG_EVENT_ROTATE_LANDSCAPE;
+ ad->camcorder_rotate = CAMERA_ROTATION_NONE;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ angle = 180;
+ ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT_INVERSE;
+ ev = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN;
+ ad->camcorder_rotate = CAMERA_ROTATION_270;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_INVERSE_EDJ_NAME);
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ angle = 90;
+ ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE;
+ ev = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN;
+ ad->camcorder_rotate = CAMERA_ROTATION_180;
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_INVERSE_EDJ_NAME);
+ break;
+
+ default:
+ break;
+ }
+ ad->angle = angle;
+ if (ad->imageviewer_ug) {
+ ug = ad->imageviewer_ug;
+ } else if (ad->location_ug) {
+ ug = ad->location_ug;
+ }
+ if (ug) {
+ enum ug_mode md = ug_get_mode(ug);
+ if (md == UG_MODE_FULLVIEW) {
+ elm_win_rotation_with_resize_set(ad->win_main, ad->angle);
+ /* send event to ug */
+ ug_send_event(ev);
+ }
+ } else {
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR);
+ }
+ return ECORE_CALLBACK_CANCEL;
+
+}
+
+static int __convert_orientation_to_angle(app_device_orientation_e orientation)
+{
+
+ switch (orientation) {
+ case APP_DEVICE_ORIENTATION_0:
+ return 0;
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ return 180;
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ return 270;
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ return 90;
+ break;
+ default:
+ return 0;
+ }
+}
+
+void *__cam_start_thread_run(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, NULL);
+
+ if(cam_mm_is_created()){
+ if (!cam_app_start(ad)){
+ cam_critical(LOG_CAM, "cam_app_start failed");
+ ad->error_type = CAM_ERROR_TYPE_UNABLE_TO_LAUNCH;
+ }
+ }
+
+ if(ad->error_type == CAM_ERROR_TYPE_UNABLE_TO_LAUNCH){
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_ERROR_POPUP);
+ }
+
+ ad->camera_start_thread = NULL;
+ pthread_exit(NULL);
+
+ return NULL;
+}
+
+static void __accelerometer_cb(unsigned long long timestamp, sensor_data_accuracy_e accuracy, float x, float y, float z, void *user_data)
+{
+ #define RADIAN_VALUE (57.2957)
+ #define PITCH_MIN 35
+ #define PITCH_MAX 145
+
+ struct appdata *ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->ug_state == CAM_UG_TERMINATE_STATE
+ || ad->ug_state == CAM_UG_PAUSE_STATE) {/*NOTE: in pause state, and terminate state, not cb*/
+ return ;
+ }
+
+ double atan_v, norm_z, raw_z;
+ int acc_theta, acc_pitch;
+
+ static app_device_orientation_e rotate = APP_DEVICE_ORIENTATION_0;
+
+ atan_v = atan2(y, x);
+ acc_theta = (int)(atan_v * (RADIAN_VALUE) + 270)%360;
+ raw_z = (double)(z/(0.004 * 9.81));
+
+ if (raw_z > 250) {
+ norm_z = 1.0;
+ } else if (raw_z < -250) {
+ norm_z = -1.0;
+ } else {
+ norm_z = ((double)raw_z)/250;
+ }
+
+ acc_pitch = (int)(acos(norm_z) * (RADIAN_VALUE));
+
+ if ((acc_pitch > 35) && (acc_pitch < 145)) {
+ if ((acc_theta >= 315 && acc_theta <= 359) || (acc_theta >=0 && acc_theta < 45)) {
+ rotate = APP_DEVICE_ORIENTATION_0;
+ } else if (acc_theta >= 45 && acc_theta < 135) {
+ rotate = APP_DEVICE_ORIENTATION_90;
+ } else if (acc_theta >= 135 && acc_theta < 225) {
+ rotate = APP_DEVICE_ORIENTATION_180;
+ } else if (acc_theta >= 225 && acc_theta < 315) {
+ rotate = APP_DEVICE_ORIENTATION_270;
+ }
+ }
+
+ ad->rot_current = rotate;
+ if (ad->rot_previous != rotate) {
+ if(__device_orientation_cb(rotate, (void*)ad)){
+ ad->rot_previous = ad->rot_current;
+ }
+ }
+}
+
+static gboolean __start_sensor(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ int ret = -1;
+ ret = sensor_create(&ad->sensor);
+ if(ret != SENSOR_ERROR_NONE)
+ {
+ cam_critical(LOG_UI, "sensor_create fail %d", ret);
+ return FALSE;
+ }
+
+
+ bool is_supported = FALSE;
+
+
+ ret = sensor_is_supported(SENSOR_ACCELEROMETER, &is_supported);
+ if(ret != SENSOR_ERROR_NONE)
+ {
+ cam_critical(LOG_UI, "sensor_create fail %d", ret);
+ return FALSE;
+ }
+
+ if (is_supported == FALSE) {
+ cam_critical(LOG_UI, "sensor_create fail %d", ret);
+ }else{
+
+ sensor_accelerometer_set_cb(ad->sensor, 300, __accelerometer_cb, (void*)ad);
+ ret = sensor_start(ad->sensor, SENSOR_ACCELEROMETER );
+
+ if(ret != SENSOR_ERROR_NONE)
+ {
+ cam_critical(LOG_UI, "sensor_start fail %d", ret);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ struct appdata *ugd;
+
+ cam_debug(LOG_UI, "UG_MODULE_INIT");
+
+ if (!ops) {
+ cam_critical(LOG_UI, "ops is NULL");
+ return -1;
+ }
+
+ ugd = calloc(1, sizeof(struct appdata));
+ if (!ugd) {
+ cam_critical(LOG_UI, "Memory allocation failed.");
+ return -1;
+ }
+
+ CAM_TA_INIT();
+ g_type_init();
+
+ ops->create = on_create;
+ ops->start = on_start;
+ ops->pause = on_pause;
+ ops->resume = on_resume;
+ ops->destroy = on_destroy;
+ ops->message = on_message;
+ ops->event = on_event;
+ ops->priv = ugd;
+ ops->opt = UG_OPT_INDICATOR_DISABLE;
+
+ return 0;
+}
+
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+ struct appdata *ugd;
+
+ cam_debug(LOG_UI, "UG_MODULE_EXIT");
+
+ if (!ops) {
+ cam_critical(LOG_UI, "ops is NULL");
+ return;
+ }
+
+ ugd = ops->priv;
+ if (ugd)
+ free(ugd);
+
+ CAM_TA_RELEASE();
+}
+
+//end file
diff --git a/src/cam_animation.c b/src/cam_animation.c
new file mode 100755
index 0000000..42b9fd4
--- /dev/null
+++ b/src/cam_animation.c
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_file.h"
+#ifdef ENABLE_CAPTURE_ANIMATION
+#include "cam_animation.h"
+#include "camera_utils.h"
+
+static void __cam_app_shutter_animation_finished(void *data, Evas_Object *obj,
+ const char *emission,
+ const char *source)
+{
+ cam_debug(LOG_MM, " __cam_app_shutter_animation_finished \n\n ");
+ struct appdata *ad = (struct appdata *)data;
+// edje_object_signal_emit(_EDJ(ad->shutter_screen), "bright", "");
+ DEL_EVAS_OBJECT(ad->shutter_screen);
+ DEL_EVAS_OBJECT(ad->rect_image);
+
+ ad->is_capture_animation_processing = FALSE;
+}
+
+static void __cam_animation_get_preview_coordinate_by_direction(int *preview_offset_x,
+ int *preview_offset_y,
+ int *preview_w,
+ int *preview_h,
+ void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *preview_offset_x = ad->preview_offset_x;
+ *preview_offset_y = ad->preview_offset_y;
+ *preview_w = ad->preview_w;
+ *preview_h = ad->preview_h;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *preview_offset_x = ad->preview_offset_y;
+ *preview_offset_y = ad->preview_offset_x;
+ *preview_w = ad->preview_h;
+ *preview_h = ad->preview_w;
+ break;
+ default:
+ DEBUG_TRACE("reached unable reached codes. error");
+ }
+}
+
+void cam_animation_create_rect_image(void *data)
+{
+ struct appdata *ad = data;
+ Evas_Coord witdh = 0, height = 0;
+
+ char *group_name = "shutter_rect";
+
+ DEL_EVAS_OBJECT(ad->rect_image);
+
+ ad->rect_image = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, group_name);
+ cam_retm_if(ad->rect_image == NULL, "rect_image load failed");
+
+ ecore_x_window_size_get(ad->main_xid, &witdh, &height);
+ evas_object_resize(ad->rect_image, witdh, height);
+ edje_object_signal_callback_add(_EDJ(ad->rect_image),
+ "shutter_rect,finish", "*",
+ __cam_app_shutter_animation_finished,
+ ad);
+ return;
+
+}
+
+Eina_Bool cam_start_capture_animation(void *data)
+{
+ cam_debug(LOG_MM, " cam_start_capture_animation \n\n ");
+
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ Evas_Coord x, y, w, h;
+ x = y = w = h = 0;
+
+ int window_width, window_height;
+ int pre_width, pre_height;
+ int pre_x, pre_y;
+
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL, "camapp_handle is NULL");
+
+ window_width = ad->win_width;
+ window_height = ad->win_height;
+ pre_width = ad->preview_w;
+ pre_height = ad->preview_h;
+
+ __cam_animation_get_preview_coordinate_by_direction(&pre_x, &pre_y, &pre_width, &pre_height, ad);
+ if (ad->preview_w <= ad->win_width) {
+ ad->shutter_src_rect.x = pre_x;
+ ad->shutter_src_rect.width = pre_width;
+ } else {
+ ad->shutter_src_rect.x = 0;
+ ad->shutter_src_rect.width = pre_width;
+ }
+
+ if (ad->preview_h <= ad->win_height) {
+ ad->shutter_src_rect.y = pre_y;
+ ad->shutter_src_rect.height = pre_height;
+ } else {
+ ad->shutter_src_rect.y = 0;
+ ad->shutter_src_rect.height = pre_height;
+ }
+
+ ad->shutter_des_rect.x = ad->shutter_src_rect.x;
+ ad->shutter_des_rect.y = y ;
+ ad->shutter_des_rect.width = w;
+ ad->shutter_des_rect.height = h;
+
+ evas_object_stack_above(ad->rect_image, ad->shutter_screen);
+ evas_object_resize(ad->rect_image, ad->shutter_src_rect.width, ad->shutter_src_rect.height);
+ evas_object_move(ad->rect_image, ad->shutter_src_rect.x, ad->shutter_src_rect.y);
+ evas_object_show(ad->rect_image);
+ edje_object_signal_emit(_EDJ(ad->rect_image), "shutter_rect,start", "prog");
+
+ return EINA_TRUE;
+}
+
+gboolean cam_app_create_start_animation(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ ad->is_capture_animation_processing = TRUE;
+
+ cam_app_create_shutter_screen(ad);
+ cam_animation_create_rect_image(ad);
+ cam_start_capture_animation(ad);
+
+ return FALSE;
+}
+
+gboolean cam_app_create_screennail_and_start_animation(void *user_data)
+{
+ struct appdata *ad = (struct appdata *)user_data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+#if 1/*note: using pipe handle*/
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_SHUTTER_ANIMATION);
+#else
+ cam_app_create_start_animation(ad);
+#endif
+ return TRUE;
+}
+
+gboolean cam_app_create_shutter_screen(void *data)
+{
+ struct appdata *ad = data;
+ Evas_Coord witdh = 0, height = 0;
+
+ char *group_name = "shutter_image";
+
+ DEL_EVAS_OBJECT(ad->shutter_screen);
+
+ ad->shutter_screen = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, group_name);
+ if (ad->shutter_screen == NULL) {
+ cam_critical(LOG_UI, "shutter_screen load failed ");
+ return FALSE;
+ }
+
+ ecore_x_window_size_get(ad->main_xid, &witdh, &height);
+ evas_object_resize(ad->shutter_screen, witdh, height);
+
+ /*evas_object_lower(ad->shutter_screen);*/
+ evas_object_show(ad->shutter_screen);
+ evas_object_show(ad->win_main);
+
+ /*edje_object_signal_emit(_EDJ(ad->shutter_screen), "start_animation", "");*/
+
+ edje_object_signal_callback_add(_EDJ(ad->shutter_screen),
+ "animation_finish", "*",
+ __cam_app_shutter_animation_finished,
+ ad);
+ return TRUE;
+}
+#endif
diff --git a/src/cam_app.c b/src/cam_app.c
new file mode 100755
index 0000000..e89705a
--- /dev/null
+++ b/src/cam_app.c
@@ -0,0 +1,8653 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <X11/Xlib.h>
+#include <X11/keysymdef.h>
+#include <sys/wait.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <aul.h>
+#include <power.h>
+#include <syspopup_caller.h>
+#include <ui-gadget.h>
+#include <ui-gadget-module.h>
+
+#include "cam.h"
+#include "cam_app.h"
+#include "edc_string.h"
+#include "cam_sound.h"
+#include "cam_continuous_shot.h"
+#include "cam_file.h"
+#include "cam_ta.h"
+#include "cam_error.h"
+#include "cam_config.h"
+#include "cam_mm.h"
+#include "cam_rec.h"
+#include "cam_lbs.h"
+#include "cam_popup.h"
+
+#include "cam_common_edc_callback.h"
+#include "cam_indicator_edc_callback.h"
+#include "cam_recording_edc_callback.h"
+#include "cam_toolbar_edc_callback.h"
+#include "cam_zoom_edc_callback.h"
+#include "cam_ev_edc_callback.h"
+#include "camera_utils.h"
+
+#include "cam_face_detection_focus.h"
+#include "cam_ui_effect_utils.h"
+#include "cam_ui_rotate_utils.h"
+
+#include "cam_menu_composer.h"
+#include "cam_device_capacity.h"
+
+#ifdef ENABLE_CAPTURE_ANIMATION
+#include "cam_animation.h"
+#endif
+#define GPS_TIME_OUT 220
+#define ZSL_MAX_REL (1280*720) /* 1m wide */
+#define FOCUS_FOCUSED_TIME_OUT 2
+#define THUMBNAIL_UPDATE_WAIT_TIME (100*1000)
+
+
+/* 5m ZSL TEST*/
+/* #define ZSL_5M_TEST (2560*1920) */
+
+#define NEW_NOTI_API
+
+
+static CamAppData *cam_handle = NULL;
+static struct appdata *app_handle = NULL;
+
+/* static Ecore_Idler *spy_rotation_idler=NULL; */
+
+#define TEMP_SAVE_PATH "/tmp/temp_image.jpg" /* not used maybe... */
+#define SELF_SHOT_TEMP_SAVE_PATH "/tmp/self_temp_shot.jpg"
+
+#define ZOOM_LONG_PRESS_INTERVAL 0.05 /* sec */
+
+#define INAGE_FILE_NAME "IMAGE"
+#define VIDEO_FILE_NAME "VIDEO"
+#define TEMP_FILE_NAME ".camera_result"
+#define IMAGE_FILE_EXTENSION ".jpg"
+#define VIDEO_FILE_EXTENSION_3GP ".3gp"
+#define VIDEO_FILE_EXTENSION_MP4 ".mp4"
+
+#define SHUTTER_W_RATIO 0.1
+#define SHUTTER_H_RATIO 0.34
+#define SCREEN_RATIO 1.0
+/* #define CAMAPP_SIG_HANDLING */
+
+/* #define ENABLE_CHECK_CAM_STATUS //provent camera hang, */
+
+#ifdef ENABLE_CHECK_CAM_STATUS
+#define CAM_CHECK_STATUS_INTERVAL_TIME 10
+#ifndef CAMAPP_SIG_HANDLING
+#define CAMAPP_SIG_HANDLING
+#endif
+#endif
+
+
+static int cam_app_start_rotate(struct appdata *ad, bool bInitial);
+
+#ifdef ENABLE_CHECK_CAM_STATUS
+static void cam_app_check_status();
+#endif
+
+static gboolean cam_power_key_press(void *data);
+static void cam_app_update_gps_level(void *data, int gps_level);
+static gboolean cam_app_return_ext_app(void *data, const char *r_file_path);
+
+/* vconf changed cb */
+static void cam_app_battery_update_cb(keynode_t *key, void *data);
+static void cam_app_battery_status_cb(keynode_t *key, void *data);
+static void cam_mmc_state_change_cb(keynode_t *key, void *data);
+static void cam_torchlight_update_cb(keynode_t *key, void *data);
+
+void cam_app_preview_start_coordinate(CamVideoRectangle src,
+ CamVideoRectangle dst,
+ CamVideoRectangle *result);
+void cam_app_timeout_notice_response_cb(void *data, Evas_Object *obj, void *event_info);
+static void cam_app_capture_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
+Eina_Bool cam_app_launch_after_preview_began(void *data);
+
+static Eina_Bool cam_app_gps_timer_cb(void *data);
+static void cam_app_timer_update_count(void *data);
+static Eina_Bool __focus_guide_destroy(void *data);
+static void __cam_capture_cb(camera_image_data_s* image,
+ camera_image_data_s* postview, camera_image_data_s* thumbnail,void *user_data);
+static Eina_Bool __cam_ug_destroy(void *data);
+static Eina_Bool __cam_app_display_error_popup_idler(void *data);
+static Eina_Bool __cam_continuous_af_timer_cb(void *data);
+
+
+/* video streamming */
+static gboolean video_stream_skip_flag = false;
+
+/* thumbnail image check count */
+static int g_thumbnail_image_check_count = 0;
+
+/*popup */
+gboolean g_blocking_popup = false;
+
+void cam_app_set_blocking_popup()
+{
+ g_blocking_popup = true;
+}
+
+void cam_app_free_blocking_popup()
+{
+ g_blocking_popup = false;
+}
+
+gboolean cam_app_check_blocking_popup()
+{
+ return !g_blocking_popup;
+}
+
+struct noti_callback {
+ char *setting_key;
+ void (*noti_func) (keynode_t *, void *);
+};
+
+#define CAMERA_NOTI_MAX 5
+struct noti_callback notis[CAMERA_NOTI_MAX] = {
+ {VCONFKEY_SYSMAN_BATTERY_CAPACITY, *cam_app_battery_update_cb},
+ {VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, *cam_app_battery_update_cb},
+ {VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, *cam_app_battery_status_cb},
+ {VCONFKEY_SYSMAN_MMC_STATUS, *cam_mmc_state_change_cb},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT, *cam_torchlight_update_cb}
+};
+
+#ifdef CAMAPP_SIG_HANDLING
+#include <signal.h>
+static struct sigaction cam_app_act;
+static struct sigaction cam_app_act_old;
+
+static void cam_app_register_sigsegv(void);
+static void cam_app_sigsegv_handler(int signal_no, siginfo_t *info,
+ void *context);
+#endif
+
+static void cam_app_pipe_handler(void *data, void *buffer, unsigned int nbyte);
+static int cam_app_camera_state_manager(int previous, int current, gboolean by_asm);
+static int cam_app_recorder_state_manager(int previous, int current, gboolean by_asm);
+
+static void cam_app_close_ug(void *data);
+Eina_Bool __ug_destory_postprocessing(void *data);
+
+static Eina_Bool cam_app_timeout_checker_cb(void *data);
+
+gdouble _get_current_time(void)
+{
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return (gdouble) tv.tv_sec + (gdouble) tv.tv_usec / 1E6;
+}
+
+void cam_app_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ if (obj) {
+ evas_object_del(obj);
+ obj = NULL;
+ }
+}
+
+void cam_app_gps_popup_response_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_ret_if(obj == NULL);
+
+ DEBUG_TRACE("show location ug");
+
+ if (ad->confirm_popup) {
+ evas_object_del(ad->confirm_popup);
+ ad->confirm_popup = NULL;
+ }
+
+ if (!cam_app_run_location_ug(data)) {
+ DEBUG_TRACE("cam_app_run_location_ug() fail");
+ GValue b_value = { 0, };
+ g_value_init(&b_value, G_TYPE_BOOLEAN);
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_GPS, &b_value);
+
+ cam_app_notice_popup(data, ("Location Setting launch fail"),
+ cam_app_popup_response_cb);
+ }
+
+}
+
+void cam_app_gps_popup_response_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_ret_if(obj == NULL);
+ if (!cam_app_lbs_stop(ad))
+ DEBUG_TRACE("cam_app_lbs_stop failed");
+ if (ad->confirm_popup) {
+ evas_object_del(ad->confirm_popup);
+ ad->confirm_popup = NULL;
+ }
+}
+
+static Eina_Bool cam_delay_popup(void *data)
+{
+
+ cam_app_notice_popup(data, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"),
+ cam_app_timeout_notice_response_cb);
+ return ECORE_CALLBACK_CANCEL;
+
+}
+static void cam_add_longpress_key_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ if (!ad->longpress_timer) {
+ ad->longpress_timer = ecore_timer_add(0.5, cam_volume_key_press, ad);
+ }
+}
+
+static void cam_del_longpress_key_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ if (ad->longpress_timer) {
+ ecore_timer_del(ad->longpress_timer);
+ ad->longpress_timer = 0;
+ }
+}
+
+#ifdef EFL_TEMP_CODE
+void cam_win_transparent_set(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ Evas *evas;
+ Evas_Object *rect;
+ evas = evas_object_evas_get(ad->win_main);
+ rect = evas_object_rectangle_add(evas);
+ evas_object_color_set(rect, 0, 0, 0, 0);
+ evas_object_render_op_set(rect, EVAS_RENDER_COPY);
+ evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(rect);
+ elm_object_part_content_set(ad->ug_base, "transparent_layout", rect);
+}
+#endif
+
+void cam_set_orient_value(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ int orient_value = 0;
+ gboolean save_as_flip = FALSE;
+
+ if (cam_is_enabled_menu(ad, CAM_MENU_SAVE_AS_FLIP) && camapp->save_as_flip == TRUE)
+ save_as_flip = TRUE;
+
+ switch (ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ if (save_as_flip) {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ orient_value = 7;
+ } else {
+ if (camapp->self_portrait == TRUE)
+ orient_value = 6;
+ else
+ orient_value = 8;
+ }
+ } else {
+ if (camapp->self_portrait == TRUE)
+ orient_value = 8;
+ else
+ orient_value = 6;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ if (save_as_flip) {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ orient_value = 5;
+ } else {
+ if (camapp->self_portrait == TRUE)
+ orient_value = 8;
+ else
+ orient_value = 6;
+ }
+ } else {
+ if (camapp->self_portrait == TRUE)
+ orient_value = 6;
+ else
+ orient_value = 8;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ if (save_as_flip && camapp->camera_mode == CAM_CAMCORDER_MODE)
+ orient_value = 4;
+ else
+ orient_value = 3;
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ if (save_as_flip && camapp->camera_mode == CAM_CAMCORDER_MODE)
+ orient_value = 2;
+ else
+ orient_value = 1;
+ break;
+ default:
+ break;
+ }
+
+ DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", ad->rot_current, orient_value);
+
+ if (cam_mm_set_tag_img_orient(orient_value))
+ DEBUG_TRACE("set image orient succeed %d", orient_value);
+ else
+ DEBUG_TRACE("set image orient failed %d", orient_value);
+}
+
+int cam_noti_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ int i = 0;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
+
+ /* setting noti */
+ for (i = 0; i < CAMERA_NOTI_MAX; i++) {
+ if (0 != vconf_notify_key_changed(notis[i].setting_key, notis[i].noti_func, ad)) {
+ cam_critical(LOG_SYS, "vconf_notify_key_changed() failed. count=%d ", i);
+ }
+ }
+
+ return EXIT_SUCCESS;
+}
+
+int cam_noti_deinit(void *data)
+{
+ int i;
+ struct appdata *ad = (struct appdata *)data;
+
+ debug_fenter(LOG_SYS);
+
+ cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
+
+ for (i = 0; i < CAMERA_NOTI_MAX; i++) {
+ vconf_ignore_key_changed(notis[i].setting_key, notis[i].noti_func);
+ }
+
+ return EXIT_SUCCESS;
+}
+
+void *cam_appdata_get(void)
+{
+ if (app_handle) {
+ return app_handle;
+ }
+ return NULL;
+}
+
+void cam_app_get_win_size(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ ecore_x_window_size_get(ad->main_xid, &(ad->win_height), &(ad->win_width));
+
+ cam_debug(LOG_UI, "main window ----- win_width, win_height: [%d, %d]", ad->win_width, ad->win_height);
+}
+
+int cam_appdata_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, 0, "appdata is NULL");
+
+ app_handle = ad;
+
+ ad->main_pipe = ecore_pipe_add(cam_app_pipe_handler, ad);
+ ad->rot_current = app_get_device_orientation();
+ ad->rot_previous = ad->rot_current;
+
+ cam_app_get_win_size(ad);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_handle_create", 0);
+ if (!cam_handle_create(data)) {
+ cam_critical(LOG_CAM, "cam_handle_create failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_handle_create", 0);
+
+ ad->last_camera_zoom_mode = 1;
+
+ return 1;
+}
+
+int cam_appdata_fini(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ cam_retvm_if(ad == NULL, 0, "appdata is NULL");
+
+ cam_layout_del_all(ad);
+
+ if (ad->service_handle) {
+ service_destroy(ad->service_handle);
+ ad->service_handle = NULL;
+ }
+ if (ad->imageviewer_service) {
+ service_destroy(ad->imageviewer_service);
+ ad->imageviewer_service = NULL;
+ }
+ if (ad->key_down) {
+ ecore_event_handler_del(ad->key_down);
+ ad->key_down = NULL;
+ }
+ if (ad->key_up) {
+ ecore_event_handler_del(ad->key_up);
+ ad->key_up = NULL;
+ }
+ if (ad->mouse_up) {
+ ecore_event_handler_del(ad->mouse_up);
+ ad->mouse_up = NULL;
+ }
+ if (ad->mouse_down) {
+ ecore_event_handler_del(ad->mouse_down);
+ ad->mouse_down = NULL;
+ }
+ /* Remove Idle handler of capture callback. wh01.cho@samsung.com. 2010-12-15. */
+ if (ad->capture_cb_list) {
+ cam_utils_remove_idler_all(ad);
+ }
+
+ REMOVE_IDLER(ad->recording_commit);
+ REMOVE_IDLER(ad->still_captured_idle);
+ REMOVE_IDLER(ad->capture_idle);
+ REMOVE_IDLER(ad->auto_shot_idle);
+ REMOVE_IDLER(ad->update_thumbnail_idler);
+
+ REMOVE_TIMER(ad->rec_icon_updater);
+ REMOVE_TIMER(ad->rec_time_updater);
+ REMOVE_TIMER(ad->rec_pause_timer);
+ REMOVE_TIMER(ad->check_af_timer);
+ REMOVE_TIMER(ad->continuous_shot_timer);
+ REMOVE_TIMER(ad->shutter_long_tap_timer);
+ REMOVE_TIMER(ad->timeout_checker);
+ REMOVE_TIMER(ad->setting_toolbar_hide_timer);
+ REMOVE_TIMER(ad->gps_animation_timer);
+ REMOVE_TIMER(ad->battery_animation_timer);
+ REMOVE_TIMER(ad->continuous_af_timer);
+ REMOVE_TIMER(ad->timer_timer);
+ REMOVE_TIMER(ad->longpress_timer);
+ REMOVE_TIMER(ad->focus_guide_hide_timer);
+
+ if( ad->setting_menu_composer != NULL){
+ cam_compose_free(ad->setting_menu_composer);
+ ad->setting_menu_composer = NULL;
+ }
+ if( ad->sub_menu_composer != NULL){
+ cam_compose_free(ad->sub_menu_composer);
+ ad->sub_menu_composer = NULL;
+ }
+ if (ad->camapp_handle) {
+ cam_handle_free(ad);
+ }
+ if (ad->exe_args) {
+ if (ad->exe_args->caller) {
+ free(ad->exe_args->caller);
+ ad->exe_args->caller = NULL;
+ }
+ free(ad->exe_args);
+ ad->exe_args = NULL;
+ }
+
+ if (ad->file_reg_thread) {
+ pthread_join(ad->file_reg_thread, NULL);
+ }
+
+ if (ad->file_reg_queue) {
+ while (!g_queue_is_empty(ad->file_reg_queue)) {
+ char *filename = NULL;
+ filename = g_queue_pop_head(ad->file_reg_queue);
+
+ cam_critical(LOG_FILE, "[%s] didn't processed",
+ filename);
+
+ if (!strcmp(REG_THREAD_EXIT, filename)) {
+ free(filename);
+ } else {
+ __cam_single_shot_reg_file(filename);
+ free(filename);
+ filename = NULL;
+ cam_debug(LOG_FILE, " register done.");
+ }
+ }
+ g_queue_free(ad->file_reg_queue);
+ ad->file_reg_queue = NULL;
+ }
+
+ /* disconnect media content */
+ CAM_TA_ACUM_ITEM_BEGIN(" media_content_disconnect", 0);
+
+ if(media_content_disconnect() == MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("dis connection is success");
+ } else {
+ cam_critical(LOG_SYS, " media_content_disconnect failed");
+ }
+
+ CAM_TA_ACUM_ITEM_END(" media_content_disconnect", 0);
+
+ cam_popup_delete(ad);
+
+ if (ad->main_pipe) {
+ ecore_pipe_del(ad->main_pipe);
+ ad->main_pipe = NULL;
+ }
+ /* init global handle */
+ app_handle = NULL;
+
+ return 1;
+}
+
+CamAppData *cam_handle_get(void)
+{
+ if (cam_handle) {
+ return cam_handle;
+ }
+ return NULL;
+}
+
+gboolean cam_app_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ GError *error = NULL;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_face_detection_focus_init();
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_appdata_init", 0);
+ if (!cam_appdata_init(ad)) {
+ cam_critical(LOG_CAM, "cam_appdata_init failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_appdata_init", 0);
+
+ cam_retvm_if(ad->camapp_handle == NULL, FALSE, "camapp_handle is NULL");
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_config_init", 0);
+ if (!cam_config_init(&error)) {
+ cam_critical(LOG_SYS, "cam_config_init failed");
+ if (error != NULL) {
+ cam_critical(LOG_SYS, "cam_config_init error [%s]",
+ error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_config_init", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_noti_init", 0);
+ if (EXIT_FAILURE == cam_noti_init(ad)) {
+ cam_critical(LOG_CAM, "cam_noti_init failed");
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_noti_init", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_file_init", 0);
+ if (!cam_file_init(&error)) {
+ cam_critical(LOG_FILE, "cam_file_init failed");
+ if (error != NULL) {
+ cam_critical(LOG_FILE, "cam_file_init error [%s]",
+ error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_file_init", 0);
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_sound_init", 0);
+ if (!cam_sound_init(&error)) {
+ cam_critical(LOG_SND, "cam_sound_init failed");
+ if (error != NULL) {
+ cam_critical(LOG_SND, "cam_sound_init error [%s]",
+ error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_sound_init", 0);
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_lbs_init", 0);
+ if (!cam_lbs_init()) {
+ cam_critical(LOG_FWK, "cam_lbs_init is failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_lbs_init", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_create_file_register_thread", 0);
+ if (!cam_app_create_file_register_thread(ad)) {
+ cam_critical(LOG_SYS,
+ " cam_app_create_file_register_thread failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_create_file_register_thread", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_continuous_shot_create_file_save_thread", 0);
+ if (!cam_continuous_shot_create_file_save_thread(ad)) {
+ cam_critical(LOG_SYS,
+ " cam_continuous_shot_create_file_save_thread failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_continuous_shot_create_file_save_thread", 0);
+
+#ifdef CAMAPP_SIG_HANDLING
+ /* register singal handler */
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_create_file_register_thread", 0);
+ cam_app_register_sigsegv();
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_create_file_register_thread", 0);
+#endif
+
+ if(media_content_connect() == MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("connection is success");
+ } else {
+ cam_critical(LOG_SYS, " media_content_connect failed");
+ return FALSE;
+ }
+ if (error != NULL) {
+ g_error_free(error);
+ error = NULL;
+ }
+ return TRUE;
+}
+
+gboolean cam_app_start(void *data)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("#########cam_app_start", 0);
+
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_CAM);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ /* init gps value */
+ camapp->gps_level = CAM_LBS_STATE_DISABLE;
+ camapp->gps = FALSE;
+ camapp->need_gps_on = FALSE;
+
+ /*init guideline value*/
+ camapp->guideline = FALSE;
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_callback_init", 0);
+ if (!cam_callback_init(ad)) {
+ cam_critical(LOG_CAM, "cam_init_mm_callback failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_callback_init", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_init_attribute", 0);
+ if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_app_init_attribute failed");
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_init_attribute", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0);
+
+ cam_continuous_af_start(ad);
+ if (!cam_app_preview_start(ad)) {
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0);
+ cam_mm_set_mdnie_mode(TRUE);
+
+
+ if(!cam_key_grab_init(ad))
+ DEBUG_TRACE("cam_key_grab_init fail");
+ cam_app_key_event_init(ad);
+ cam_app_timeout_checker_init(ad);
+
+#ifdef ENABLE_CHECK_CAM_STATUS
+ alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */
+#endif
+ CAM_TA_ACUM_ITEM_END("#########cam_app_start", 0);
+
+ ad->displayed_setting_popup = FALSE;
+
+ return TRUE;
+}
+
+gboolean cam_app_pause(void *data)
+{
+ DEBUG_TRACE("#############cam_app_pause - START #############\n");
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ int mm_state = 0;
+ mm_state = cam_mm_get_state();
+
+ cam_mm_set_display_visible(FALSE);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
+ if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
+ DEBUG_TRACE(" contact is paused ");
+ service_h reply;
+ service_create(&reply);
+ service_add_extra_data(reply, "camera_end", "1");
+ service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_CANCELED);
+ service_destroy(reply);
+ }
+ }
+
+ if ((mm_state == RECORDER_STATE_RECORDING
+ || mm_state == RECORDER_STATE_PAUSED)
+ &&(camapp->camera_mode == CAM_CAMCORDER_MODE)) {
+ int shutter_sound_state = 0;
+ /* get current sound */
+ cam_mm_get_shutter_sound(&shutter_sound_state);
+ /* disable shutter sound */
+ cam_mm_set_shutter_sound(FALSE);
+ /*stop recording */
+ cam_video_record_stop(ad);
+ /*restore shutter sound */
+ cam_mm_set_shutter_sound(shutter_sound_state);
+ }
+
+ cam_app_stop_capture(ad);
+
+ if(camapp->af_mode == CAM_FOCUS_FACE){
+ cam_face_detection_reset();
+ }
+
+ if (ad->timer_activated)
+ cam_app_cancel_timer(ad);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ while (cam_mm_get_cam_state() == CAMERA_STATE_CAPTURING) {
+ cam_critical(LOG_CAM, "state is capturing");
+ }
+ cam_app_preview_start(ad);
+ }
+
+ cam_mm_set_mdnie_mode(FALSE);
+
+ if (camapp->outdoor_visibility)
+ cam_mm_set_outdoor_visibility(FALSE);
+
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop fail");
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
+
+ if (EXIT_FAILURE == cam_noti_deinit(ad))
+ cam_critical(LOG_UI, "cam_noti_deinit failed");
+
+ if(!cam_app_key_event_deinit(ad))
+ cam_critical(LOG_UI, "cam_app_key_event_deinit failed");
+
+ if(!cam_key_grab_deinit(ad))
+ cam_critical(LOG_UI, "cam_key_grab_deinit failed");
+
+ if (camapp->gps == TRUE) {
+ int gps_level =CAM_LBS_STATE_DISABLE;
+ gps_level = cam_lbs_get_state();
+ if (gps_level >=CAM_LBS_STATE_SERVICE_ENABLE)
+ camapp->need_gps_on= TRUE;
+ if (ad->gps_animation_timer)
+ REMOVE_TIMER(ad->gps_animation_timer);
+ if (cam_app_lbs_stop(ad))
+ DEBUG_TRACE("The LBS failed to stop");
+ }
+
+ cam_app_timeout_checker_remove();
+ DEBUG_TRACE("#############cam_app_pause - END #############\n");
+ return TRUE;
+}
+
+gboolean cam_app_resume(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ int cam_state = -1;
+ debug_fenter(LOG_CAM);
+
+ if (!cam_condition_check_to_start_camera(ad)) {
+ cam_critical(LOG_CAM, "cannot start camera");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ GValue value = {0, };
+ CAM_GVALUE_SET_INT(value, CAM_CAMERA_MODE);
+ if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
+ return ECORE_CALLBACK_CANCEL;
+ }
+ }
+ }
+
+ indicator_update_storage(ad);
+ cam_app_timeout_checker_init(ad);
+
+ if (ad->imageviewer_ug == NULL) { /* home key destory imageviewer_ug */
+ cam_state = cam_mm_get_state();
+ cam_app_get_preview_offset_coordinate(ad);
+
+ cam_continuous_af_start((void*)ad);
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0);
+
+ if (ad->torchlight_on && camapp->flash != CAM_FLASH_OFF)
+ cam_mm_set_flash(CAM_FLASH_OFF);
+
+ /* reset zoom */
+ cam_mm_set_zoom(camapp->zoom_min);
+ camapp->zoom_mode = camapp->zoom_min;
+
+ if (!cam_app_preview_start(ad)) {
+ if (ad->fw_error_type == CAMERA_ERROR_SOUND_POLICY || ad->fw_error_type == RECORDER_ERROR_SOUND_POLICY) {
+ DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
+ ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
+ return TRUE;
+ }
+
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ cam_app_notice_popup(ad,
+ "PREVIEW START FAILED !!",
+ cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0);
+ cam_mm_set_mdnie_mode(TRUE);
+
+ if (camapp->outdoor_visibility)
+ cam_mm_set_outdoor_visibility(TRUE);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if(camapp->af_mode == CAM_FOCUS_FACE){
+ /*start face detection*/
+ if (cam_mm_is_supported_face_detection()) {
+ cam_mm_start_camera_face_detection(camapp->face_detect_cb, (void *)ad);
+ if (!cam_mm_set_preview_cb(cam_face_detection_focus_start_stream, (void*)ad)) {
+ DEBUG_TRACE("preview callback set error");
+ }
+ cam_app_run_video_stream();
+ } else {
+ DEBUG_TRACE("not support face detect mode");
+ }
+ }
+
+ }
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_noti_init", 0);
+ if (EXIT_FAILURE == cam_noti_init(ad))
+ cam_critical(LOG_CAM, "cam_noti_init failed");
+ CAM_TA_ACUM_ITEM_END(" cam_noti_init", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_key_grab_init", 0);
+ if (!cam_key_grab_init(ad))
+ DEBUG_TRACE("cam_key_grab_init fail");
+ CAM_TA_ACUM_ITEM_END(" cam_key_grab_init", 0);
+
+ cam_app_key_event_init(ad);
+ cam_app_update_quickview_icon(ad);
+ cam_toolbar_update(ad);
+ }
+
+ if (camapp->need_gps_on== TRUE) {
+ camapp->need_gps_popup = FALSE;
+ if (!cam_app_lbs_start(ad)) {
+ if (!cam_app_lbs_stop(ad))
+ DEBUG_TRACE("The LBS failed to stop");
+ }
+ }
+
+#ifdef ENABLE_CHECK_CAM_STATUS
+ alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */
+#endif
+
+ return TRUE;
+}
+
+gboolean cam_app_stop(void *data)
+{
+ debug_fenter(LOG_CAM);
+ char *filename = NULL;
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_stop", 0);
+
+ /* return aul result path */
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
+ if (ad->exe_args == NULL) {
+ DEBUG_TRACE("ad->exe_args is NULL");
+ return FALSE;
+ }
+ if (ad->path_in_return) {
+ if (((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0))
+ || ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "ug-setting-call-efl") == 0))) {
+ DEBUG_TRACE("contacts -not need sending result");
+ } else {
+ if (ad->ug_state != CAM_UG_PAUSE_STATE) {
+ if (camapp->filename != NULL) {
+ filename = strdup(camapp->filename);
+ cam_app_return_ext_app(ad, filename);
+ }
+ }
+ }
+ } else {
+ cam_app_return_ext_app(ad, filename);
+ }
+ }
+
+ if (cam_mm_is_created()) {
+ /*TODO: new logic will be add for save file while camera process is killed*/
+ /*stop*/
+ int state = 0;
+ state = cam_mm_get_state();
+ if (ad->camapp_handle) {
+ if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
+ switch (state) {
+ case RECORDER_STATE_NONE:
+ case RECORDER_STATE_CREATED:
+ break;
+ case RECORDER_STATE_READY:
+ break;
+ case RECORDER_STATE_RECORDING:
+ case RECORDER_STATE_PAUSED:
+ cam_video_record_stop(ad);
+ break;
+ default:
+ /*g_assert_not_reached();*/
+ break;
+ }
+ }
+ }
+
+ cam_mm_set_mdnie_mode(FALSE);
+
+ if (camapp->outdoor_visibility)
+ cam_mm_set_outdoor_visibility(FALSE);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop failed");
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_destory", 0);
+ if (!cam_mm_destory()) {
+ cam_critical(LOG_MM, "cam_mm_destory failed");
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_mm_destory", 0);
+ }
+
+ if (ad->imageviewer_ug || ad->location_ug) {
+ cam_app_close_ug(ad);
+ }
+
+ cam_popup_remove_all();
+
+ /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+ cam_utils_remove_idler_all(ad);
+
+ if (EXIT_FAILURE == cam_noti_deinit(ad))
+ cam_critical(LOG_UI, "cam_noti_deinit failed");
+
+ if(!cam_app_key_event_deinit(ad))
+ cam_critical(LOG_UI, "cam_app_key_event_deinit failed");
+
+ if(!cam_key_grab_deinit(ad))
+ cam_critical(LOG_UI, "cam_key_grab_deinit failed");
+
+ /* crear data & engine */
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_app_clear_engine_data", 0);
+ cam_app_clear_engine_data(data, true);
+ CAM_TA_ACUM_ITEM_END(" cam_app_clear_engine_data", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_file_finalize", 0);
+ cam_file_finalize();
+ CAM_TA_ACUM_ITEM_END(" cam_file_finalize", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_sound_finalize", 0);
+ cam_sound_finalize();
+ CAM_TA_ACUM_ITEM_END(" cam_sound_finalize", 0);
+
+ /* clean config */
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_config_finalize", 0);
+ cam_config_finalize();
+ CAM_TA_ACUM_ITEM_END(" cam_config_finalize", 0);
+
+ /* finialize gps */
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_gps_finialize", 0);
+ cam_lbs_finialize();
+ CAM_TA_ACUM_ITEM_END(" cam_gps_finialize", 0);
+
+ /* cam_handle_free(ad); */
+ cam_face_detection_focus_finish();
+ cam_appdata_fini(ad);
+
+ if (filename != NULL) {
+ free(filename);
+ filename = NULL;
+ }
+
+ CAM_TA_ACUM_ITEM_END(" cam_app_stop", 0);
+
+ return TRUE;
+}
+
+gboolean cam_app_preview_start(void *data)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("----cam_app_preview_start", 0);
+ DEBUG_TRACE
+ ("------------------------------START---------------------------------");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ int state = cam_mm_get_state();
+ DEBUG_TRACE("state: %d ", state);
+
+ if (((camapp->camera_mode == CAM_CAMERA_MODE) && (state < CAMERA_STATE_NONE))
+ || ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (state < RECORDER_STATE_NONE)))
+ return FALSE;
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ switch(state) {
+ case CAMERA_STATE_CREATED:
+ case CAMERA_STATE_CAPTURED:
+ {
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_preview_start", 0);
+ if (!cam_mm_preview_start(camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_mm_preview_start failed");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_mm_preview_start", 0);
+ }
+ break;
+ case CAMERA_STATE_CAPTURING:
+ {
+ if (cam_mm_capture_stop(FALSE, camapp->camera_mode) == FALSE) {
+ cam_critical(LOG_MM, "cam_mm_capture_stop failed");
+ return FALSE;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ switch(state) {
+ case RECORDER_STATE_CREATED:
+ case RECORDER_STATE_PAUSED:
+ {
+ if (!cam_mm_preview_start(camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_mm_preview_start failed");
+ return FALSE;
+ }
+ }
+ break;
+ default:
+ break;
+
+ }
+ }
+
+ CAM_TA_ACUM_ITEM_END("----cam_app_preview_start", 0);
+ return TRUE;
+}
+
+gboolean cam_app_preview_stop(void)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, FALSE, "ad is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING
+ || camapp->touch_af_state == CAM_TOUCH_AF_STATE_READY)
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+
+ if (!cam_mm_preview_stop(camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_mm_preview_stop failed");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void cam_app_timer_icon_rotate(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->timer_icon_edje);
+ cam_app_timer_update_count(ad);
+}
+
+static int cam_app_start_rotate(struct appdata *ad, bool bInitial)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ cam_debug(LOG_UI, "rotated : %d, window rotation angle=%d", ad->rot_current); /*, elm_win_rotation_get(ad->win_main)); */
+
+
+ int angle = 0;
+
+ switch (ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ ad->camcorder_rotate = CAMERA_ROTATION_90;
+ ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT;
+ angle = 0;
+ break;
+
+ case APP_DEVICE_ORIENTATION_180:
+ ad->camcorder_rotate = CAMERA_ROTATION_270;
+ ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT_INVERSE;
+ angle = 180;
+ break;
+
+ case APP_DEVICE_ORIENTATION_270:
+ ad->camcorder_rotate = CAMERA_ROTATION_NONE;
+ ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE;
+ angle = 270;
+ break;
+
+ case APP_DEVICE_ORIENTATION_90:
+ ad->camcorder_rotate = CAMERA_ROTATION_180;
+ ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE;
+ angle = 90;
+ break;
+
+ default:
+ break;
+ }
+ ad->angle = angle;
+ ad->angle_pre = ad->angle;
+
+////////////////////////////////////////////////////////////////////////////
+ if (ad->toolbar_edj_file) {
+ free(ad->toolbar_edj_file);
+ ad->toolbar_edj_file = NULL;
+ }
+
+ switch (ad->angle) {
+ case 270:
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
+ break;
+ case 0:
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_EDJ_NAME);
+ break;
+ case 90:
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_INVERSE_EDJ_NAME);
+ break;
+ case 180:
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_INVERSE_EDJ_NAME);
+ break;
+ default:
+ ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
+ break;
+
+ }
+
+ if(elm_win_rotation_get(ad->win_main) != ad->angle)
+ elm_win_rotation_with_resize_set(ad->win_main, ad->angle);
+
+ cam_app_get_preview_offset_coordinate(ad);
+
+ if (!bInitial) {
+ if (ad->toolbar_edje)
+ cam_toolbar_rotate(ad);
+
+ if (ad->indicator_edje)
+ cam_indicator_rotate(ad);
+
+ if (ad->recording_edje)
+ cam_recording_rotate(ad);
+
+ if (ad->timer_icon_edje)
+ cam_app_timer_icon_rotate(ad);
+
+ if (ad->ev_edje) {
+ unload_ev_edje(ad);
+ load_ev_edje(ad);
+ }
+
+ if (ad->zoom_edje) {
+ unload_zoom_edje(ad);
+ load_zoom_edje(ad);
+ }
+ /* guideline */
+ if (ad->guideline_edje)
+ settings_guideline_refresh(ad);
+
+ }
+ return 0;
+}
+
+gboolean cam_layout_init(void *data)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->win_main == NULL) {
+ cam_critical(LOG_UI, "win_main is NULL");
+ return FALSE;
+ }
+ ad->pinch_edje = NULL;
+
+ cam_app_start_rotate(ad, TRUE);
+ DEBUG_TRACE("ad->angle = %d", ad->angle);
+
+ elm_theme_extension_add(NULL, CAM_SETTING_POPUP_STYLE_EDJ_NAME);
+ elm_theme_extension_add(NULL, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME);
+ elm_theme_extension_add(NULL, CAM_SLIDER_STYLE_EDJ_NAME);
+ elm_theme_extension_add(NULL, CAM_LABEL_STYLE_EDJ_NAME);
+ elm_theme_extension_add(NULL, CAM_BUTTON_STYLE_EDJ_NAME);
+
+#ifndef CAMERA_MACHINE_I686
+ define_mouse_callback(ad);
+#endif
+
+ CAM_TA_ACUM_ITEM_BEGIN(" load_toolbar_edje", 0);
+ if (cam_toolbar_create(ad)) {
+ CAM_TA_ACUM_ITEM_END(" load_toolbar_edje", 0);
+ cam_critical(LOG_UI, " load_toolbar_edje failed ");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" load_toolbar_edje", 0);
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_indicator_create", 0);
+ if (cam_indicator_create(ad)) {
+ CAM_TA_ACUM_ITEM_END(" cam_indicator_create", 0);
+ cam_critical(LOG_UI, "cam_indicator_create failed ");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_indicator_create", 0);
+
+ cam_app_focus_guide_create(ad);
+ cam_app_update_quickview_icon(ad);
+ settings_guideline_refresh(ad);
+
+ /*note: */
+ /*reading from ini: whether need show popup tip*/
+ gboolean show_popup_tip = FALSE;
+ show_popup_tip = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, POP_TIP_DEFAULT);
+ if (show_popup_tip) {
+ cam_tip_popup_create(ad, CAM_TIP_POPUP_BURSTSHOT_HELP);
+ }
+
+ if (ad->battery_status == LOW_BATTERY_CRITICAL_STATUS
+ || ad->battery_status == LOW_BATTERY_WARNING_STATUS
+ || ad->is_calling == TRUE ){
+ ecore_idler_add(__cam_app_display_error_popup_idler, ad);
+ }
+
+ DEBUG_TRACE("END");
+
+ return TRUE;
+}
+
+gboolean cam_handle_create(void *data)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("------cam_handle_create", 0);
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_CAM);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->camapp_handle && cam_handle) {
+ cam_handle_free(ad);
+ }
+
+ camapp = (CamAppData *)malloc(sizeof(CamAppData));
+ cam_retv_if(camapp == NULL, FALSE);
+ memset(camapp, 0x00, sizeof(CamAppData));
+
+ cam_handle = camapp;
+ ad->camapp_handle = camapp;
+ CAM_TA_ACUM_ITEM_END("------cam_handle_create", 0);
+
+ return TRUE;
+}
+
+gboolean cam_handle_free(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_CAM);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_config_save();
+
+ if (camapp && cam_handle) {
+ if (camapp->conti_image) {
+ evas_object_del(camapp->conti_image);
+ camapp->conti_image = NULL;
+ }
+
+ if (camapp->filename) {
+ free(camapp->filename);
+ camapp->filename = NULL;
+ }
+
+ if (camapp->thumbnail_name) {
+ free(camapp->thumbnail_name);
+ camapp->thumbnail_name = NULL;
+ }
+ cam_continuous_shot_data_free(ad);
+ if (camapp) {
+ free(camapp);
+ camapp = NULL;
+ }
+
+ DEBUG_TRACE();
+ ad->camapp_handle = NULL;
+ cam_handle = NULL;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_toolbar_menu_config_init(void *data, int mode) {
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ int i = 0;
+
+#ifdef CAMERA_MACHINE_I686
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ char buf[16+1] = { '\0', };
+ snprintf(buf, 16, "toolbar_%d", i);
+ ad->toolbar_menu_arrays[i].menu_type = CAM_MENU_EMPTY;
+ }
+#else
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ char buf[16+1] = { '\0', };
+ snprintf(buf, 16, "toolbar_%d", i);
+ ad->toolbar_menu_arrays[i].menu_type = cam_config_get_int(buf, CAM_MENU_EMPTY);
+
+ if (ad->toolbar_menu_arrays[i].menu_type == CAM_MENU_SELF_PORTRAIT) {
+ if (cam_mm_is_support_front_camera() == FALSE)
+ ad->toolbar_menu_arrays[i].menu_type = CAM_MENU_EMPTY;
+ }
+ }
+#endif
+
+ return TRUE;
+}
+
+gboolean cam_toolbar_menu_config_update(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ char buf[16+1] = { '\0', };
+ snprintf(buf, 16, "toolbar_%d", i);
+ int tmp_type = cam_config_get_int(buf, CAM_MENU_EMPTY);
+ if (ad->toolbar_menu_arrays[i].menu_type != tmp_type) {
+ cam_config_set_int(buf, ad->toolbar_menu_arrays[i].menu_type);
+ }
+ }
+ return TRUE;
+}
+
+gboolean cam_handle_init(void *data, int mode)
+{
+ struct appdata *ad = data;
+ CamAppData *camapp = NULL;
+ int charging = 0;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_info(LOG_UI, "mode : %d ", mode);
+ camapp->camera_mode = mode;
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_COMMON, PROP_MODE_NAME, mode);
+
+ cam_app_set_config_group(camapp->camera_mode);
+ /* load init value from ini file */
+ /* camapp->camera_mode = cam_config_get_int(PROP_MODE_NAME, MODE_DEFAULT); */
+
+ vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, &(camapp->storage));
+
+ camapp->anti_shake = cam_config_get_int(PROP_AHS_NAME, AHS_DEFAULT);
+
+ camapp->self_portrait = FALSE;
+
+ /* use shot mode as default value */
+ camapp->recording_mode = RECMODE_DEFAULT;
+ camapp->shooting_mode = SHOTMODE_DEFAULT;
+
+ camapp->scene_mode = cam_config_get_int(PROP_SCENE_MODE_NAME, PG_MODE_DEFAULT);
+ camapp->iso = cam_config_get_int(PROP_ISO_NAME, ISO_DEFAULT);
+ /*camapp->af_mode = cam_config_get_int(PROP_AF_NAME, AF_DEFAULT); */
+ camapp->af_mode = AF_DEFAULT;
+ /* camapp->white_balance = cam_config_get_int(PROP_WB_NAME, WB_DEFAULT); */
+ camapp->white_balance = WB_DEFAULT;
+
+ camapp->flash = cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT);
+
+ /*batterylevel*/
+ if (cam_utils_check_battery_warning_low()) {
+ camapp->flash = CAM_FLASH_OFF;
+ }
+ camapp->guideline = cam_config_get_boolean(PROP_GUIDELINE_NAME, GUIDE_LINE_DEFAULT);
+ DEBUG_TRACE("camapp->guideline = %d" ,camapp->guideline);
+ camapp->effect = EFFECT_DEFAULT;
+
+ camapp->wdr = cam_config_get_int(PROP_WDR_NAME, WDR_DEFAULT);
+ camapp->auto_exposure = cam_config_get_int(PROP_METERING_NAME, AE_DEFAULT);
+
+ camapp->photo_resolution = cam_config_get_int(PROP_PHOTO_RESOLUTION_NAME, IMAGE_RESOLUTION_DEFAULT);
+ camapp->video_resolution = cam_config_get_int(PROP_VIDEO_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
+
+ camapp->auto_contrast = FALSE;
+ camapp->image_quality = QUALITY_DEFAULT;
+ camapp->video_quality = QUALITY_DEFAULT;
+ camapp->audio_recording = AUDIOREC_DEFAULT;
+ camapp->review = cam_config_get_boolean(PROP_REVIEW_NAME, FALSE);
+
+ camapp->battery_level = cam_utils_get_battery_level();
+ charging = cam_utils_get_charging_status();
+ if (charging == 1)
+ camapp->battery_charging = charging;
+ else
+ camapp->battery_charging = 0;
+
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ camapp->shutter_sound = SHUTTER_SOUND_DEFAULT;
+#endif
+ /*sound*/
+
+ cam_mm_set_shutter_sound(SOUND_DEFAULT);
+ camapp->shutter_sound = SHUTTER_SOUND_DEFAULT; /* on */
+
+ /* below item had been saved in ini file */
+ camapp->zoom_mode = ZOOM_DEFAULT;
+ camapp->image_count = IMAGE_COUNT_DEFAULT;
+ camapp->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
+ camapp->size_limit = REC_SIZE_LIMIT_DEFAULT;
+ camapp->timer = TIMER_DEFAULT;
+ camapp->fps = FPS_DEFAULT;
+
+ camapp->continuous_shot_data = NULL;
+
+ camapp->enable_touch_af = TRUE;
+
+ camapp->outdoor_visibility = FALSE;
+
+ camapp->burst_shot = cam_config_get_boolean(PROP_BURST_SHOT_NAME, BURST_SHOT_DEFAULT);
+
+ camapp->device_type = CAM_DEVICE_MEGA;
+
+ camapp->volume_key = cam_config_get_int(PROP_VOLUME_KEY_NAME, CAM_VOLUME_KEY_ZOOM);
+
+ camapp->save_as_flip = FALSE;
+
+ /*init toolbar menu config */
+ cam_toolbar_menu_config_init((void*)ad, mode);
+
+ /* init reserved setting data */
+ camapp->reserved_setting_data.front_photo_resolution = cam_config_get_int(PROP_SELF_PHOTO_RESOLUTION_NAME, SELF_IMAGE_RESOLUTION_DEFAULT);
+ camapp->reserved_setting_data.front_video_resolution = cam_config_get_int(PROP_SELF_VIDEO_RESOLUTION_NAME, SELF_REC_RESOLUTION_DEFAULT);
+ camapp->reserved_setting_data.rear_photo_resolution = cam_config_get_int(PROP_PHOTO_RESOLUTION_NAME, IMAGE_RESOLUTION_DEFAULT);
+ camapp->reserved_setting_data.rear_video_resolution = cam_config_get_int(PROP_VIDEO_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
+ camapp->reserved_setting_data.front_shooting_mode = CAM_SELF_SINGLE_MODE;
+ camapp->reserved_setting_data.front_recording_mode = CAM_RECORD_SELF;
+ camapp->reserved_setting_data.rear_shooting_mode = SHOTMODE_DEFAULT;
+ camapp->reserved_setting_data.rear_recording_mode = RECMODE_DEFAULT;
+ camapp->reserved_setting_data.front_effect = EFFECT_DEFAULT;
+ camapp->reserved_setting_data.rear_effect = EFFECT_DEFAULT;
+ camapp->reserved_setting_data.front_wb = WB_DEFAULT;
+ camapp->reserved_setting_data.rear_wb = WB_DEFAULT;
+
+ return TRUE;
+}
+
+gboolean cam_handle_value_set(void *data, int type, const GValue *value)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_debug(LOG_CAM, "type : %d", type);
+
+ switch (type) {
+ case PROP_MODE:
+ {
+ gint current = 0;
+ gint tempval = g_value_get_int(value);
+
+ current = camapp->camera_mode;
+
+ //camapp->camera_mode = tempval;
+ if (!cam_mode_change(ad, tempval)) {
+ cam_critical(LOG_CAM, "MODE CHANGE IS FAILED by MIDDLE WARE");
+ camapp->camera_mode = current;
+ cam_app_notice_popup(data, "MODE CHANGE FAILED !!", cam_app_timeout_notice_response_cb);
+ }
+ }
+ break;
+
+ case PROP_SELF_PORTRAIT:
+ {
+ GValue set_value = { 0 };
+ gboolean tempval = g_value_get_boolean(value);
+
+ /* stop preview and destory mmfw handle */
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop faild");
+ return FALSE;
+ }
+
+ if (!cam_mm_destory()) {
+ cam_critical(LOG_MM, "cam_mm_destory faild");
+ return FALSE;
+ }
+
+ if (camapp->self_portrait == TRUE) {
+ camapp->device_type = CAM_DEVICE_VGA;
+ } else {
+ camapp->device_type = CAM_DEVICE_MEGA;
+ }
+
+ DEBUG_TRACE("device_type = %d", camapp->device_type);
+
+ cam_config_set_boolean(PROP_SELF_PORTRAIT_NAME, tempval);
+
+ if (!cam_mm_create(camapp->device_type, camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_mm_create failed");
+ cam_app_notice_popup(ad, "cam_app_preview_start faild ", cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+
+ ResetCaps();
+ define_mouse_callback(ad);
+
+ /* get reserved setting value */
+ if (camapp->self_portrait == FALSE) {
+ camapp->photo_resolution = camapp->reserved_setting_data.rear_photo_resolution;
+ camapp->video_resolution = camapp->reserved_setting_data.rear_video_resolution;
+ camapp->shooting_mode = camapp->reserved_setting_data.rear_shooting_mode;
+ camapp->recording_mode = camapp->reserved_setting_data.rear_recording_mode;
+ } else {
+ camapp->photo_resolution = camapp->reserved_setting_data.front_photo_resolution;
+ camapp->video_resolution = camapp->reserved_setting_data.front_video_resolution;
+ camapp->shooting_mode = camapp->reserved_setting_data.front_shooting_mode;
+ camapp->recording_mode = camapp->reserved_setting_data.front_recording_mode;
+ }
+
+ /* set shot, rec mode */
+ CAM_GVALUE_SET_INT(set_value, camapp->shooting_mode);
+ cam_handle_value_set(ad, PROP_SHOT_MODE, &set_value);
+ CAM_GVALUE_SET_INT(set_value, camapp->recording_mode);
+ cam_handle_value_set(ad, PROP_REC_MODE, &set_value);
+
+ camapp->zoom_mode = ZOOM_DEFAULT;
+
+ /* start preview */
+ if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_app_init_attribute failed");
+ }
+
+ cam_continuous_af_start(ad);
+ if (!cam_app_preview_start(ad)) {
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+
+ settings_guideline_refresh(ad);
+
+ if(camapp->af_mode == CAM_FOCUS_FACE){
+ /*start face detection*/
+ if (cam_mm_is_supported_face_detection()) {
+ cam_mm_start_camera_face_detection(camapp->face_detect_cb, (void *)ad);
+ if (!cam_mm_set_preview_cb(cam_face_detection_focus_start_stream, (void*)ad)) {
+ DEBUG_TRACE("preview callback set error");
+ }
+ cam_app_run_video_stream();
+ } else {
+ DEBUG_TRACE("not support face detect mode");
+ }
+ }
+ }
+ break;
+
+ case PROP_SHOT_MODE:
+ {
+ gint tempval = g_value_get_int(value);
+ gint cur_mode = camapp->shooting_mode;
+
+ camapp->shooting_mode = tempval;
+
+ if (!cam_shooting_mode_change(ad)) {
+ cam_critical(LOG_UI, "shot mode set fail");
+ camapp->shooting_mode = cur_mode;
+ return FALSE;
+ }
+
+ if (camapp->self_portrait == FALSE) {
+ camapp->reserved_setting_data.rear_shooting_mode = tempval;
+ } else {
+ camapp->reserved_setting_data.front_shooting_mode = tempval;
+ }
+
+ cam_app_focus_guide_update(ad);
+ }
+ break;
+ case PROP_REC_MODE:
+ {
+ gint tempval = g_value_get_int(value);
+ int video_resolution = 0;
+ GValue set_value = { 0, };
+ g_value_init(&set_value, G_TYPE_INT);
+
+ camapp->recording_mode = tempval;
+
+ if (camapp->self_portrait == FALSE) {
+ camapp->reserved_setting_data.rear_recording_mode = tempval;
+ } else {
+ camapp->reserved_setting_data.front_recording_mode = tempval;
+ }
+
+ if (camapp->recording_mode == CAM_RECORD_NORMAL) {
+ video_resolution = cam_config_get_int(PROP_VIDEO_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
+ g_value_set_int(&set_value, video_resolution);
+ } else if (camapp->recording_mode == CAM_RECORD_SLOW || camapp->recording_mode == CAM_RECORD_FAST) {
+ g_value_set_int(&set_value, CAM_RESOLUTION_QVGA);
+ } else if (camapp->recording_mode == CAM_RECORD_SELF) {
+ video_resolution = cam_config_get_int(PROP_SELF_VIDEO_RESOLUTION_NAME, SELF_REC_RESOLUTION_DEFAULT);
+ g_value_set_int(&set_value, video_resolution);
+ } else if (camapp->recording_mode == CAM_RECORD_MMS || camapp->recording_mode == CAM_RECORD_SELF_MMS) {
+ g_value_set_int(&set_value, CAM_RESOLUTION_QCIF);
+ }
+
+ cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &set_value);
+/*
+ if (!cam_recording_mode_change(ad, tempval)) {
+ cam_critical(LOG_UI, "rec mode change fail - mode[%d]", tempval);
+ return FALSE;
+ }
+*/
+ }
+ break;
+ case PROP_SCENE_MODE:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_program_mode(tempval)) {
+ cam_warning(LOG_UI, "program mode set fail");
+ return FALSE;
+ }
+ camapp->scene_mode = tempval;
+
+ /* set flash */
+ int flash = CAM_FLASH_OFF;
+ if(camapp->scene_mode == CAM_SCENE_NONE){
+ flash = cam_config_get_int(PROP_SCENE_MODE_NAME, PG_MODE_DEFAULT);
+ }else if(camapp->scene_mode == CAM_SCENE_CANDLELIGHT){
+ flash = CAM_FLASH_ON;
+ }else {
+ flash = CAM_FLASH_OFF;
+ }
+ GValue set_value = { 0, };
+ g_value_init(&set_value, G_TYPE_INT);
+ g_value_set_int(&set_value, flash);
+ cam_handle_value_set(ad, PROP_FLASH, &set_value);
+
+ }
+ break;
+ case PROP_PHOTO_RESOLUTION:
+ {
+ gint tempval = g_value_get_int(value);
+
+ DEBUG_TRACE("*******************************************************");
+ DEBUG_TRACE("value set : PROP_RESOLUTION setting");
+ DEBUG_TRACE(" tempval = %d ", tempval);
+ DEBUG_TRACE("CAM_RESOLUTION_W = %d ,CAM_RESOLUTION_H=%d ", CAM_RESOLUTION_W(tempval), CAM_RESOLUTION_H(tempval));
+ DEBUG_TRACE("*******************************************************");
+
+ if (!cam_app_reset_resolution(ad, CAM_RESOLUTION_W(tempval), CAM_RESOLUTION_H(tempval), FALSE)) {
+ cam_warning(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+
+ settings_guideline_refresh(ad);
+
+ camapp->photo_resolution = tempval;
+
+ if (camapp->self_portrait == FALSE) {
+ camapp->reserved_setting_data.rear_photo_resolution = tempval;
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ cam_config_set_int(PROP_PHOTO_RESOLUTION_NAME, tempval);
+ }
+ } else {
+ camapp->reserved_setting_data.front_photo_resolution = tempval;
+ cam_config_set_int(PROP_SELF_PHOTO_RESOLUTION_NAME, tempval);
+ }
+
+ cam_app_get_preview_offset_coordinate(ad);
+ ad->remained_count = cam_system_get_still_count_by_resolution(ad);
+ indicator_update_remain_count(ad);
+ }
+ break;
+ case PROP_VIDEO_RESOLUTION:
+ {
+ gint tempval = g_value_get_int(value);
+
+ camapp->video_resolution = tempval;
+
+ if (camapp->self_portrait == FALSE) {
+ camapp->reserved_setting_data.rear_video_resolution = tempval;
+ if (camapp->recording_mode == CAM_RECORD_NORMAL) {
+ cam_config_set_int(PROP_VIDEO_RESOLUTION_NAME, tempval);
+ }
+ } else {
+ camapp->reserved_setting_data.front_video_resolution = tempval;
+ if (camapp->recording_mode == CAM_RECORD_SELF) {
+ cam_config_set_int(PROP_SELF_VIDEO_RESOLUTION_NAME, tempval);
+ }
+ }
+ }
+ break;
+ case PROP_FPS:
+ { /* fps may not set it alone */
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_fps(tempval)) {
+ cam_warning(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+ camapp->fps = tempval;
+ }
+ break;
+ case PROP_BRIGHTNESS:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_brightness(tempval)) {
+ cam_warning(LOG_UI, "brightness set fail");
+ return FALSE;
+ }
+ camapp->brightness = tempval;
+ }
+ break;
+ case PROP_WB:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_white_balance(tempval)) {
+ cam_warning(LOG_UI,
+ "white balance set fail: %d",
+ tempval);
+ return FALSE;
+ }
+
+ camapp->white_balance = tempval;
+
+ if (camapp->self_portrait)
+ camapp->reserved_setting_data.front_wb = tempval;
+ else
+ camapp->reserved_setting_data.rear_wb = tempval;
+
+ }
+ break;
+ case PROP_ISO:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_iso(tempval)) {
+ cam_warning(LOG_UI, "iso set fail");
+ return FALSE;
+ }
+ camapp->iso = tempval;
+ cam_config_set_int(PROP_ISO_NAME, tempval);
+ }
+ break;
+ case PROP_AUTO_CONTRAST:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+ if (!cam_mm_enable_auto_contrast(tempval)) {
+ cam_warning(LOG_UI, "contrast set fail");
+ return FALSE;
+ }
+ camapp->auto_contrast = tempval;
+ cam_config_set_int(PROP_AUTO_CONTRAST_NAME, tempval);
+ }
+ break;
+ case PROP_METERING:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_auto_exposure(tempval)) {
+ cam_warning(LOG_UI, "auto_exposure set fail");
+ return FALSE;
+ }
+ camapp->auto_exposure = tempval;
+ cam_config_set_int(PROP_METERING_NAME, tempval);
+ }
+ break;
+ case PROP_EFFECT:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_effect(tempval)) {
+ cam_warning(LOG_UI, "effect set fail : %d",
+ tempval);
+ return FALSE;
+ }
+ camapp->effect = tempval;
+
+ if (camapp->self_portrait == FALSE) {
+ camapp->reserved_setting_data.rear_effect = tempval;
+ } else {
+ camapp->reserved_setting_data.front_effect = tempval;
+ }
+ }
+ break;
+ case PROP_AF_MODE:
+ {
+ gint tempval = g_value_get_int(value);
+ gint oldval = cam_config_get_int(PROP_AF_NAME, CAM_FOCUS_AUTO);
+ if (oldval == CAM_FOCUS_FACE && tempval != CAM_FOCUS_FACE) {
+ cam_mm_stop_camera_face_detection();
+ cam_app_stop_video_stream();
+ }
+
+ if (tempval == CAM_FOCUS_FACE) {
+ if (!cam_mm_set_focus_mode(CAMERA_ATTR_AF_NORMAL)) {
+ cam_warning(LOG_UI, "detect mode set fail");
+ return FALSE;
+ }
+
+ /*start face detection*/
+ if (cam_mm_is_supported_face_detection()) {
+ cam_mm_start_camera_face_detection(camapp->face_detect_cb, (void *)ad);
+ if (!cam_mm_set_preview_cb(cam_face_detection_focus_start_stream, (void*)ad)) {
+ DEBUG_TRACE("preview callback set error");
+ }
+ cam_app_run_video_stream();
+ } else {
+ DEBUG_TRACE("not support face detect mode");
+ }
+
+
+ } else if ((tempval == CAM_FOCUS_AUTO) || (tempval == CAM_FOCUS_MACRO)) {
+ if (!cam_mm_set_focus_mode(tempval)) {
+ cam_warning(LOG_UI, "af mode set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_set_preview_cb(camapp->preview_cb, (void*)ad)) {
+ DEBUG_TRACE("preview callback set error");
+ }
+
+ } else {
+ cam_warning(LOG_UI, "unknow af mode : %d", tempval);
+ return FALSE;
+ }
+ camapp->af_mode = tempval;
+ cam_app_focus_guide_update(ad);
+ if (camapp->camera_mode == CAM_CAMERA_MODE && camapp->shooting_mode == CAM_SINGLE_MODE){
+ cam_config_set_int(PROP_AF_NAME, tempval);
+ }
+ }
+ break;
+ case PROP_AHS:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+
+ if (!cam_mm_set_anti_hand_shake(tempval)) {
+ cam_warning(LOG_UI, "anti_shake set fail");
+ return FALSE;
+ }
+
+ camapp->anti_shake = tempval;
+ cam_config_set_int(PROP_AHS_NAME, tempval);
+ }
+ break;
+ case PROP_WDR:/*auto contrast*/
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_wdr(tempval)) {
+ cam_warning(LOG_UI, "wdr set fail");
+ return FALSE;
+ }
+ camapp->wdr = tempval;
+ cam_config_set_int(PROP_WDR_NAME, tempval);
+ }
+ break;
+ case PROP_FLASH:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_flash(tempval)) {
+ cam_warning(LOG_UI, "flash set fail");
+ return FALSE;
+ }
+ camapp->flash = tempval;
+ /*fix me ,why only when in camera single mode ,
+ save the FLASH setting value to config file*/
+ if ((camapp->camera_mode == CAM_CAMERA_MODE
+ && camapp->shooting_mode == CAM_SINGLE_MODE)
+ || camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ cam_config_set_int(PROP_FLASH_NAME, tempval);
+ }
+ }
+ break;
+ case PROP_TIMER:
+ {
+ gint tempval = g_value_get_int(value);
+ camapp->timer = tempval;
+ }
+ break;
+ case PROP_IMAGE_QUALITY:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_image_enc_quality(tempval)) {
+ cam_warning(LOG_UI,
+ "image quality[%d] set fail",
+ tempval);
+ return FALSE;
+ }
+ camapp->image_quality = tempval;
+ }
+ break;
+ case PROP_VIDEO_QUALITY:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_app_set_video_quality(ad, tempval)) {
+ cam_warning(LOG_UI,
+ "video quality[%d] set fail",
+ tempval);
+ return FALSE;
+ }
+ camapp->video_quality = tempval;
+ }
+ break;
+ case PROP_AUDIO_REC:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+ if (!cam_mm_set_audio_recording(tempval)) {
+ cam_warning(LOG_UI, "audio_recording set fail");
+ return FALSE;
+ }
+ camapp->audio_recording = tempval;
+ }
+ break;
+ case PROP_AUDIO_QUALITY:
+ {
+ gint tempval = g_value_get_int(value);
+ camapp->audio_quality = tempval;
+ }
+ break;
+ case PROP_BATTERY_CHARG:
+ {
+ gint tempval_charging = g_value_get_int(value);
+
+ DEBUG_TRACE("charging = %d", tempval_charging);
+ camapp->battery_charging = tempval_charging;
+ camapp->battery_level = cam_utils_get_battery_level();
+ indicator_update_battery(ad, camapp->battery_level);
+ }
+ break;
+ case PROP_BATTERY_LEVEL:
+ {
+ gint tempval = g_value_get_int(value);
+ camapp->battery_charging = cam_utils_get_charging_status();
+ camapp->battery_level = tempval;
+ indicator_update_battery(ad, camapp->battery_level);
+
+ }
+ break;
+ case PROP_ZOOM:
+ {
+ gint tempval = g_value_get_int(value);
+ DEBUG_TRACE("tempval:%d", tempval);
+ if (!cam_mm_set_zoom(tempval)) {
+ cam_warning(LOG_UI, "zoom set fail");
+ return FALSE;
+ }
+ /*camapp->zoom_mode = tempval;*/ /*note: zoom_mode is zoom level, is not same this value*/
+ }
+ break;
+ case PROP_STORAGE:
+ {
+ gint tempval = g_value_get_int(value);
+
+ camapp->storage = tempval;
+
+ vconf_set_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, camapp->storage);
+// cam_config_set_int(PROP_STORAGE_NAME, tempval);
+
+ indicator_update_storage(ad);
+ }
+ break;
+ case PROP_GUIDELINE:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+
+ camapp->guideline = tempval;
+ cam_config_set_boolean(PROP_GUIDELINE_NAME, tempval);
+ }
+ break;
+ case PROP_GPS:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+
+ if (tempval) {
+ camapp->need_gps_popup = TRUE;
+ if (!cam_app_lbs_start(ad))
+ return FALSE;
+
+ return TRUE;
+ } else {
+ if (ad->gps_animation_timer)
+ REMOVE_TIMER(ad->gps_animation_timer);
+ if (!cam_app_lbs_stop(ad))
+ return FALSE;
+
+ return TRUE;
+ }
+ }
+ break;
+ case PROP_GPS_LEVEL:
+ {
+ gint tempval = g_value_get_int(value);
+
+ camapp->gps_level = tempval;
+ indicator_update_gps_level(ad);
+ }
+ break;
+ case PROP_REVIEW:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+ camapp->review = tempval;
+ cam_config_set_boolean(PROP_REVIEW_NAME, tempval);
+ }
+ break;
+ case PROP_IMAGE_COUNT:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_mm_set_image_count(tempval)) {
+ cam_warning(LOG_UI, "image_count set fail");
+ return FALSE;
+ }
+ camapp->image_count = tempval;
+ }
+ break;
+ case PROP_SHUTTER_SOUND:
+ {
+ gint tempval = g_value_get_int(value);
+ camapp->shutter_sound = tempval;
+ }
+ break;
+ case PROP_SIZE_LIMIT:
+ {
+ gint tempval = g_value_get_int(value);
+ if (!cam_app_set_size_limit(tempval, camapp->size_limit_type)) {
+ cam_warning(LOG_UI, "size_limit set fail");
+ return FALSE;
+ }
+ camapp->size_limit = tempval;
+ }
+ break;
+ case PROP_SIZE_LIMIT_TYPE:
+ {
+ gint tempval = g_value_get_int(value);
+ camapp->size_limit_type = tempval;
+ }
+ break;
+ case PROP_REC_TIME:
+ {
+ guint tempval = g_value_get_uint(value);
+ camapp->rec_elapsed = tempval;
+ }
+ break;
+ case PROP_REC_FILE_SIZE:
+ {
+ guint tempval = g_value_get_uint(value);
+ camapp->rec_filesize = tempval;
+ }
+ break;
+ case PROP_OUTDOOR_VISIBILITY:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+ cam_mm_set_outdoor_visibility(tempval);
+ camapp->outdoor_visibility = tempval;
+ }
+ break;
+ case PROP_VOLUME_KEY:
+ {
+ gint tempval = g_value_get_int(value);
+ camapp->volume_key = tempval;
+ cam_config_set_int(PROP_VOLUME_KEY_NAME, tempval);
+ }
+ break;
+ case PROP_SAVE_AS_FLIP:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ cam_app_preview_stop();
+ cam_mm_set_image_flip(tempval);
+ cam_app_preview_start(ad);
+ }
+
+ camapp->save_as_flip= tempval;
+ }
+ break;
+ case PROP_BURST_SHOT:
+ {
+ gboolean tempval = g_value_get_boolean(value);
+
+ camapp->burst_shot = tempval;
+ cam_config_set_boolean(PROP_BURST_SHOT_NAME, tempval);
+ }
+ break;
+ default:
+ cam_warning(LOG_UI, "unknow type :%d ", type);
+ return FALSE;
+ break;
+ }
+ /* indicator should be updated here!!! */
+/* change_indicator_mode_icons(ad); */
+ return TRUE;
+}
+
+/*note: in this function ,just do data logic,please do not add any EFL code in it*/
+gboolean cam_app_mode_change(void *data, int to_mode)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+
+ debug_fenter(LOG_UI);
+
+ ad->timer_activated = FALSE;
+ ad->emit_continuous_shutter = FALSE;;
+ /*camapp->guideline = FALSE;*/
+ cam_app_timeout_checker_remove();
+ /* draw to_mode icon in preview area */
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ if (ad->play_rec_sound != 0)
+ return TRUE;
+#endif
+
+ if (cam_mm_get_state() == CAMERA_STATE_CAPTURING
+ && (camapp->camera_mode == CAM_CAMERA_MODE)) {
+ cam_mm_capture_stop(true, CAM_CAMERA_MODE);
+ }
+
+ /* stop preview and destory mmfw handle */
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop faild");
+ goto MODE_CHANGE_FAILED;
+
+ }
+
+ /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+ cam_utils_remove_idler_all(ad);
+
+ if (to_mode == CAM_CAMCORDER_MODE) {
+
+ camapp->camera_mode = CAM_CAMCORDER_MODE;
+
+ GValue value = { 0, };
+ g_value_init(&value, G_TYPE_INT);
+
+ ad->last_camera_zoom_mode = camapp->zoom_mode;
+
+ switch(camapp->recording_mode)
+ {
+ case CAM_RECORD_SLOW:
+ case CAM_RECORD_FAST:
+ {
+ ad->camapp_handle->enable_touch_af = FALSE;
+ camapp->video_resolution = CAM_RESOLUTION_QVGA;
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ double rate = 0.0;
+
+ if (camapp->recording_mode == CAM_RECORD_SLOW) {
+ g_value_set_int(&value, SLOW_MOTION_REC_FPS);
+ rate = SLOW_MOTION_PLAY_FPS;
+ } else {
+ g_value_set_int(&value, FAST_MOTION_REC_FPS);
+ rate = FAST_MOTION_PLAY_FPS;
+ }
+
+ if (!cam_mm_set_recording_motion(rate)) {
+ cam_critical(LOG_UI, "slow motion set fail");
+ return FALSE;
+ }
+
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, CAM_RESOLUTION_QVGA);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (camapp->zoom_mode != 1) {
+ camapp->zoom_mode = 1;
+
+ CAM_GVALUE_SET_INT(value, 10);
+ if (!cam_handle_value_set(ad, PROP_ZOOM, &value)) {
+ cam_critical(LOG_UI, "zoom set fail");
+ return FALSE;
+ }
+ }
+ }
+ break;
+ case CAM_RECORD_SELF:
+ {
+ ad->camapp_handle->enable_touch_af = FALSE;
+ camapp->video_resolution = cam_config_get_int(PROP_SELF_VIDEO_RESOLUTION_NAME, SELF_REC_RESOLUTION_DEFAULT);
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ g_value_set_int(&value, FPS_DEFAULT);
+
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, CAM_RESOLUTION_VGA);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ }
+ break;
+ case CAM_RECORD_MMS:
+ case CAM_RECORD_SELF_MMS:
+ {
+ ad->camapp_handle->enable_touch_af = TRUE;
+ camapp->video_resolution = CAM_RESOLUTION_QCIF;
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ g_value_set_int(&value, FPS_SLOW);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, CAM_RESOLUTION_QCIF);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, CAM_REC_MMS_MAX_SIZE);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ }
+ break;
+ case CAM_RECORD_NORMAL:
+ {
+ ad->camapp_handle->enable_touch_af = TRUE;
+ camapp->video_resolution = cam_config_get_int(PROP_VIDEO_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ g_value_set_int(&value, FPS_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, resolution_n);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ } else {
+ camapp->camera_mode = CAM_CAMERA_MODE;
+ camapp->zoom_mode = ad->last_camera_zoom_mode;
+
+ switch (camapp->shooting_mode) {
+ case CAM_SINGLE_MODE:
+ ad->camapp_handle->enable_touch_af = TRUE;
+ camapp->photo_resolution = cam_config_get_int(PROP_PHOTO_RESOLUTION_NAME, IMAGE_RESOLUTION_DEFAULT);
+ break;
+ case CAM_SELF_SINGLE_MODE:
+ ad->camapp_handle->enable_touch_af = FALSE;
+ camapp->photo_resolution = cam_config_get_int(PROP_SELF_PHOTO_RESOLUTION_NAME, SELF_IMAGE_RESOLUTION_DEFAULT);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!cam_callback_init(ad)) {
+ cam_critical(LOG_MM, "cam_init_mm_callback failed");
+ goto MODE_CHANGE_FAILED;
+
+ }
+ DEBUG_TRACE("camera mode = %d", to_mode);
+ if (!cam_app_init_attribute(ad, to_mode)) {
+ cam_critical(LOG_MM, "cam_app_init_attribute failed");
+ }
+
+ if (!cam_app_preview_start(ad)) {
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ goto MODE_CHANGE_FAILED;
+
+ }
+ cam_app_timeout_checker_init(ad);
+
+ return TRUE;
+
+MODE_CHANGE_FAILED:
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+
+}
+
+gboolean cam_mode_change(void *data, int to_mode)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+
+ debug_fenter(LOG_UI);
+
+ cam_elm_cache_flush();
+
+ evas_object_hide(ad->timer_icon_edje);
+ REMOVE_TIMER(ad->timer_timer);
+ ad->timer_activated = FALSE;
+ ad->emit_continuous_shutter = FALSE;
+ DEL_EVAS_OBJECT(ad->timer_icon_edje);
+ DEL_EVAS_OBJECT(ad->guideline_edje);
+ /*camapp->guideline = FALSE;*/
+ cam_app_timeout_checker_remove();
+ /* draw to_mode icon in preview area */
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ if (ad->play_rec_sound != 0)
+ return TRUE;
+#endif
+
+ if (cam_mm_get_state() == CAMERA_STATE_CAPTURING
+ && (camapp->camera_mode == CAM_CAMERA_MODE)) {
+ cam_mm_capture_stop(true, CAM_CAMERA_MODE);
+ }
+
+ cam_app_destroy_progressbar(ad);
+ toolbar_shot_guide_popup_destory(ad);
+
+ /* stop preview and destory mmfw handle */
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop faild");
+ goto MODE_CHANGE_FAILED;
+
+ }
+
+ /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+ cam_utils_remove_idler_all(ad);
+
+ if (to_mode == CAM_CAMCORDER_MODE) {
+
+ camapp->camera_mode = CAM_CAMCORDER_MODE;
+
+ GValue value = { 0, };
+ g_value_init(&value, G_TYPE_INT);
+
+ ad->last_camera_zoom_mode = camapp->zoom_mode;
+
+ switch(camapp->recording_mode)
+ {
+ case CAM_RECORD_SLOW:
+ case CAM_RECORD_FAST:
+ {
+ ad->camapp_handle->enable_touch_af = FALSE;
+ camapp->video_resolution = CAM_RESOLUTION_QVGA;
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ double rate = 0.0;
+
+ if (camapp->recording_mode == CAM_RECORD_SLOW) {
+ g_value_set_int(&value, SLOW_MOTION_REC_FPS);
+ rate = SLOW_MOTION_PLAY_FPS;
+ } else {
+ g_value_set_int(&value, FAST_MOTION_REC_FPS);
+ rate = FAST_MOTION_PLAY_FPS;
+ }
+
+ if (!cam_mm_set_recording_motion(rate)) {
+ cam_critical(LOG_UI, "slow motion set fail");
+ return FALSE;
+ }
+
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, CAM_RESOLUTION_QVGA);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (camapp->zoom_mode != 1) {
+ camapp->zoom_mode = 1;
+
+ CAM_GVALUE_SET_INT(value, 10);
+ if (!cam_handle_value_set(ad, PROP_ZOOM, &value)) {
+ cam_critical(LOG_UI, "zoom set fail");
+ return FALSE;
+ }
+ }
+ }
+ break;
+ case CAM_RECORD_SELF:
+ {
+ ad->camapp_handle->enable_touch_af = FALSE;
+ camapp->video_resolution = cam_config_get_int(PROP_SELF_VIDEO_RESOLUTION_NAME, SELF_REC_RESOLUTION_DEFAULT);
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ g_value_set_int(&value, FPS_DEFAULT);
+
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, CAM_RESOLUTION_VGA);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ }
+ break;
+ case CAM_RECORD_MMS:
+ case CAM_RECORD_SELF_MMS:
+ {
+ ad->camapp_handle->enable_touch_af = TRUE;
+ camapp->video_resolution = CAM_RESOLUTION_QCIF;
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ g_value_set_int(&value, FPS_SLOW);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, CAM_RESOLUTION_QCIF);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, CAM_REC_MMS_MAX_SIZE);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ }
+ break;
+ case CAM_RECORD_NORMAL:
+ {
+ ad->camapp_handle->enable_touch_af = TRUE;
+ camapp->video_resolution = cam_config_get_int(PROP_VIDEO_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
+ camapp->photo_resolution = cam_app_get_max_image_size_by_ratio(ad, camapp->video_resolution);
+
+ g_value_set_int(&value, FPS_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ #if 0
+ g_value_set_int(&value, resolution_n);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ #endif
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ } else {
+ camapp->camera_mode = CAM_CAMERA_MODE;
+ camapp->zoom_mode = ad->last_camera_zoom_mode;
+
+ switch (camapp->shooting_mode) {
+ case CAM_SINGLE_MODE:
+ ad->camapp_handle->enable_touch_af = TRUE;
+ camapp->photo_resolution = cam_config_get_int(PROP_PHOTO_RESOLUTION_NAME, IMAGE_RESOLUTION_DEFAULT);
+ break;
+ case CAM_SELF_SINGLE_MODE:
+ ad->camapp_handle->enable_touch_af = FALSE;
+ camapp->photo_resolution = cam_config_get_int(PROP_SELF_PHOTO_RESOLUTION_NAME, SELF_IMAGE_RESOLUTION_DEFAULT);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!cam_callback_init(ad)) {
+ cam_critical(LOG_MM, "cam_init_mm_callback failed");
+ goto MODE_CHANGE_FAILED;
+
+ }
+ DEBUG_TRACE("camera mode = %d", to_mode);
+ if (!cam_app_init_attribute(ad, to_mode)) {
+ cam_critical(LOG_MM, "cam_app_init_attribute failed");
+ }
+
+ cam_app_get_preview_offset_coordinate(ad);
+
+ cam_reset_focus_mode(ad);
+
+ if (!cam_app_preview_start(ad)) {
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ goto MODE_CHANGE_FAILED;
+
+ }
+ cam_app_timeout_checker_init(ad);
+
+ return TRUE;
+
+MODE_CHANGE_FAILED:
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+}
+
+gboolean cam_recording_mode_change(void *data, int rec_mode)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ //CamDeviceType device_type = CAM_DEVICE_MEGA;
+ GValue value = { 0 };
+ int video_dev = 0;
+ gboolean cam_reset = FALSE;
+
+ debug_fenter(LOG_CAM);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_app_timeout_checker_remove();
+
+ g_value_init(&value, G_TYPE_INT);
+
+ cam_mm_get_video_device(&video_dev);
+ if (((camapp->recording_mode == CAM_RECORD_SELF || camapp->recording_mode == CAM_RECORD_SELF_MMS )&& video_dev == CAM_DEVICE_MEGA)
+ || ((camapp->recording_mode != CAM_RECORD_SELF || camapp->recording_mode == CAM_RECORD_SELF_MMS) && video_dev == CAM_DEVICE_VGA)) {
+
+ /* stop preview and destory mmfw handle */
+ cam_reset = TRUE;
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop faild");
+ return FALSE;
+ }
+ if (!cam_mm_destory()) {
+ cam_critical(LOG_MM, "cam_mm_destory faild");
+ return FALSE;
+ }
+#if 0
+ if (camapp->recording_mode == CAM_RECORD_SELF ||camapp->recording_mode == CAM_RECORD_SELF_MMS ) {
+ device_type = CAM_DEVICE_VGA;
+ } else {
+ device_type = CAM_DEVICE_MEGA;
+ }
+#endif
+ if (!cam_mm_create(camapp->device_type, camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_mm_create failed");
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+ cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
+ DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
+
+ }else {
+ if (!cam_app_preview_stop()) {
+ cam_critical(LOG_MM, "cam_app_preview_stop faild");
+ return FALSE;
+ }
+ }
+ if (rec_mode == CAM_RECORD_SLOW || rec_mode == CAM_RECORD_FAST) {
+ ad->camapp_handle->enable_touch_af = FALSE;
+
+ double rate = 0.0;
+
+ if (rec_mode == CAM_RECORD_SLOW) {
+ g_value_set_int(&value, SLOW_MOTION_REC_FPS);
+ rate = SLOW_MOTION_PLAY_FPS;
+ } else {
+ g_value_set_int(&value, FAST_MOTION_REC_FPS);
+ rate = FAST_MOTION_PLAY_FPS;
+ }
+
+ if (!cam_mm_set_recording_motion(rate)) {
+ cam_critical(LOG_UI, "slow motion set fail");
+ return FALSE;
+ }
+
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ g_value_set_int(&value, CAM_RESOLUTION_QVGA);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (camapp->zoom_mode != 1) {
+ camapp->zoom_mode = 1;
+
+ GValue value = { 0, };
+
+ CAM_GVALUE_SET_INT(value, 10);
+ if (!cam_handle_value_set(ad, PROP_ZOOM, &value)) {
+ cam_critical(LOG_UI, "zoom set fail");
+ return FALSE;
+ }
+ }
+
+ camapp->recording_mode = rec_mode;
+
+ } else {
+ ad->camapp_handle->enable_touch_af = TRUE;
+
+ if(rec_mode == CAM_RECORD_SELF) {
+
+ ad->camapp_handle->enable_touch_af = FALSE;
+ g_value_set_int(&value, FPS_SLOW);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ int resolution = cam_config_get_int(PROP_SELF_VIDEO_RESOLUTION_NAME, SELF_REC_RESOLUTION_DEFAULT);
+
+ g_value_set_int(&value, resolution);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ camapp->recording_mode = CAM_RECORD_SELF;
+ } else if (rec_mode == CAM_RECORD_MMS ||rec_mode == CAM_RECORD_SELF_MMS ) {
+ g_value_set_int(&value, FPS_SLOW);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ g_value_set_int(&value, CAM_RESOLUTION_QCIF);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+
+ g_value_set_int(&value, CAM_REC_MMS_MAX_SIZE);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ if (rec_mode == CAM_RECORD_MMS)
+ camapp->recording_mode = CAM_RECORD_MMS;
+ else
+ camapp->recording_mode = CAM_RECORD_SELF_MMS;
+
+ } else {
+ int resolution_n =
+ cam_config_get_int(PROP_VIDEO_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
+
+ g_value_set_int(&value, FPS_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
+ cam_critical(LOG_UI, "fps set fail");
+ return FALSE;
+ }
+
+ g_value_set_int(&value, resolution_n);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ cam_critical(LOG_UI, "resolution set fail");
+ return FALSE;
+ }
+
+ g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
+ if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
+ cam_critical(LOG_UI, "size limit set fail");
+ return FALSE;
+ }
+
+ if (!cam_mm_reset_recording_motion_fps()) {
+ cam_critical(LOG_UI,
+ "slow motion fps set fail");
+ return FALSE;
+ }
+ camapp->recording_mode = CAM_RECORD_NORMAL;
+
+ }
+ if (cam_reset) {
+ if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
+ cam_critical(LOG_MM, "cam_app_init_attribute failed");
+// return FALSE;
+ }
+ } else {
+ if (!cam_app_set_recording_mode(ad, rec_mode)) {
+ DEBUG_TRACE("cam_app_set_recording_mode failed");
+// return FALSE;
+ }
+ }
+ }
+ cam_app_get_preview_offset_coordinate(ad);
+
+ if (!cam_callback_init(ad)) {
+ cam_critical(LOG_MM, "cam_init_mm_callback failed");
+ cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+
+ cam_continuous_af_start(ad);
+ if (!cam_app_preview_start(ad)) {
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+
+ cam_app_timeout_checker_init(ad);
+
+ return TRUE;
+
+}
+
+static gboolean cam_app_set_capture_format_shooting_mode(int mode)
+{
+ switch (mode) {
+ case CAM_SINGLE_MODE:
+ case CAM_SELF_SINGLE_MODE:
+ if (!cam_mm_set_capture_format(CAMERA_PIXEL_FORMAT_JPEG))
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+
+ cam_debug(LOG_UI,
+ "\n################# shooting mode set return success : %d\n",
+ mode);
+
+ return TRUE;
+}
+
+static void cam_shooting_mode_reset(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_CAM);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_app_destroy_progressbar(ad);
+
+ return;
+}
+
+gboolean cam_shooting_mode_change(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ GValue value = { 0 };
+
+ debug_fenter(LOG_CAM);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_elm_cache_flush();
+
+ cam_app_stop_video_stream();
+ cam_app_timeout_checker_remove();
+ cam_shooting_mode_reset(ad);
+
+ g_value_init(&value, G_TYPE_INT);
+
+ cam_debug(LOG_CAM, "Shooting mode = %d ", camapp->shooting_mode);
+
+ cam_continuous_shot_data_free(ad);
+
+ if (ad->shot_mode_guide_popup)
+ toolbar_shot_guide_popup_destory(ad);
+ ad->emit_continuous_shutter = FALSE;
+ switch (camapp->shooting_mode) {
+ case CAM_SINGLE_MODE:
+ {
+ int resolution = 0, flash = 0, auto_focus = 0, scene_mode = 0, wb = 0, effect = 0;
+ resolution = cam_config_get_int(PROP_PHOTO_RESOLUTION_NAME, IMAGE_RESOLUTION_DEFAULT);
+ flash = cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT);
+ auto_focus = cam_config_get_int(PROP_AF_NAME, AF_DEFAULT);
+ scene_mode = cam_config_get_int(PROP_SCENE_MODE_NAME, PG_MODE_DEFAULT);
+ wb = camapp->reserved_setting_data.rear_wb;
+ effect = camapp->reserved_setting_data.rear_effect;
+
+ /* set resolution */
+ g_value_set_int(&value, resolution);
+ cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &value);
+
+ /* set flash */
+ g_value_set_int(&value, flash);
+ cam_handle_value_set(ad, PROP_FLASH, &value);
+
+ /* set auto focus */
+ g_value_set_int(&value, auto_focus);
+ cam_handle_value_set(ad, PROP_AF_MODE, &value);
+
+ /* set scene */
+ g_value_set_int(&value, scene_mode);
+ cam_handle_value_set(ad, PROP_SCENE_MODE, &value);
+
+ /* set wb */
+ g_value_set_int(&value, wb);
+ cam_handle_value_set(ad, PROP_WB, &value);
+
+ /* set effect */
+ g_value_set_int(&value, effect);
+ cam_handle_value_set(ad, PROP_EFFECT, &value);
+
+ /* set capture count */
+ g_value_set_int(&value, IMAGE_COUNT_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_COUNT, &value);
+ }
+ break;
+
+ case CAM_SELF_SINGLE_MODE:
+ {
+ int resolution, effect, wb = 0;
+
+ resolution = cam_config_get_int(PROP_SELF_PHOTO_RESOLUTION_NAME, SELF_IMAGE_RESOLUTION_DEFAULT);
+ effect = camapp->reserved_setting_data.front_effect;
+ wb = camapp->reserved_setting_data.front_wb;
+
+ /* set resolution */
+ g_value_set_int(&value, resolution);
+ cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &value);
+
+ /* set flash off */
+ g_value_set_int(&value, CAM_FLASH_OFF);
+ cam_handle_value_set(ad, PROP_FLASH, &value);
+
+ /* set auto focus */
+ g_value_set_int(&value, CAM_FOCUS_AUTO);
+ cam_handle_value_set(ad, PROP_AF_MODE, &value);
+
+ /* set scene to NONE */
+ g_value_set_int(&value, CAM_SCENE_NONE);
+ cam_handle_value_set(ad, PROP_SCENE_MODE, &value);
+
+ /* set effect */
+ g_value_set_int(&value, effect);
+ cam_handle_value_set(ad, PROP_EFFECT, &value);
+
+ /* set capture count */
+ g_value_set_int(&value, IMAGE_COUNT_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_COUNT, &value);
+
+ // set wb
+ g_value_set_int(&value, wb);
+ cam_handle_value_set(ad, PROP_WB, &value);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!cam_callback_init(ad)) {
+ cam_critical(LOG_MM, "cam_init_mm_callback failed");
+ cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+
+ cam_app_timeout_checker_init(ad);
+ return TRUE;
+}
+
+gboolean __cam_single_shot_reg_file(char *file_path)
+{
+ GError *error = NULL;
+
+ if (file_path) {
+ DEBUG_TRACE("register file : %s", file_path);
+
+ if (!cam_file_register(file_path, &error)) {
+ cam_critical(LOG_FILE, "cam_file_register fail");
+ if (error != NULL) {
+ if (error->message != NULL) {
+ cam_critical(LOG_FILE,
+ "cam_file_register error [%s]",
+ error->message);
+ } else {
+ cam_critical(LOG_FILE,
+ "cam_file_register error but error message is NULL");
+ }
+ g_error_free(error);
+ error = NULL;
+ }
+ }
+ } else {
+ cam_warning(LOG_FILE, " file path is NULL...");
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void cam_app_timer_update_count(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ cam_debug(LOG_UI, "timer count ... [ %d ]", ad->timer_count);
+
+ char count_string[3] = "";
+
+ elm_object_part_content_unset(ad->ug_base, "timer_layout");
+
+ if (ad->timer_icon_edje == NULL) {
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->timer_icon_edje = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "timer_icon_landscape");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->timer_icon_edje = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "timer_icon_portrait");
+ break;
+ default:
+ DEBUG_TRACE("Invalid direction type!!!");
+ }
+
+ cam_retm_if(ad->timer_icon_edje == NULL, "timer_icon_edje is NULL");
+ elm_object_part_content_set(ad->ug_base, "timer_layout", ad->timer_icon_edje);
+ }
+
+ snprintf(count_string, sizeof(count_string), "%d", ad->timer_count);
+
+ edje_object_part_text_set(_EDJ(ad->timer_icon_edje), "text", count_string);
+
+ evas_object_show(ad->timer_icon_edje);
+
+ return;
+}
+static Eina_Bool cam_app_gps_timer_cb(void *data)
+{
+ DEBUG_TRACE(" ");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ ad->gps_animation_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ int gps_level = CAM_LBS_STATE_DISABLE;
+ static int count =0;
+
+ gps_level = cam_lbs_get_state(); //real gps level
+ if (gps_level >=CAM_LBS_STATE_SERVICE_ENABLE) {
+ camapp->gps = TRUE;
+ camapp->gps_level = cam_lbs_get_state();
+
+ if (ad->gps_animation_timer)
+ ad->gps_animation_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ indicator_update_gps_level(ad);
+ if (camapp->gps_level == CAM_LBS_STATE_ACCURANCY_DETAILED ) {
+ camapp->gps_level = CAM_LBS_STATE_SERVICE_START;
+ }
+
+ if (count > GPS_TIME_OUT) {
+ count = 0;
+ camapp->gps = FALSE;
+ cam_lbs_stop();
+ camapp->gps_level = cam_lbs_get_state();
+ indicator_update_gps(ad); /* update gps icon */
+ if(!cam_mm_remove_geo_tag())
+ DEBUG_TRACE("cam_mm_remove_geo_tag failed");
+
+ if (ad->gps_animation_timer)
+ ad->gps_animation_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+ camapp->gps_level ++;
+ count ++;
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool cam_app_timer_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
+
+ CamAppData *camapp = NULL;
+
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ cam_critical(LOG_UI, "camapp_handle is NULL");
+
+ if (ad->timer_timer)
+ ad->timer_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ ad->timer_count = ad->timer_count - 1;
+
+ if (ad->timer_count > 0) {
+ cam_debug(LOG_UI, "timer continue ... ");
+ cam_app_timer_update_count(ad);
+ if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF)
+ cam_sound_play(CAM_SOUND_EFFECT_TICK, ad);
+ return ECORE_CALLBACK_RENEW;
+ } else {
+ cam_debug(LOG_UI, "timer terminated ...");
+
+ ad->timer_activated = false;
+
+ if (ad->timer_icon_edje != NULL) {
+ evas_object_del(ad->timer_icon_edje);
+ ad->timer_icon_edje = NULL;
+ }
+
+ cam_toolbar_update(ad);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ cam_set_orient_value(ad);
+ if (!cam_image_capture_start(ad))
+ cam_critical(LOG_UI, "cam_image_capture_start failed");
+ } else {
+ if (!cam_video_record_start(ad))
+ cam_critical(LOG_UI, "cam_video_record_start failed");
+ }
+
+ if (ad->timer_timer)
+ ad->timer_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+}
+
+static void cam_app_start_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ ad->timer_activated = true;
+
+ switch (camapp->timer) {
+ case CAM_SETTINGS_TIMER_2SEC:
+ ad->timer_count = 2;
+ break;
+ case CAM_SETTINGS_TIMER_5SEC:
+ ad->timer_count = 5;
+ break;
+ case CAM_SETTINGS_TIMER_10SEC:
+ ad->timer_count = 10;
+ break;
+
+ case CAM_SETTINGS_TIMER_OFF:
+ default:
+ CAM_UI_LOG("can not reach here");
+ return;
+ }
+
+ if (camapp->default_capture_mode == CAM_CAPTURE_BURST)
+ return;
+
+ cam_toolbar_update(ad);
+
+ cam_app_timer_update_count(ad);
+
+ if (ad->timer_timer != NULL) {
+ ecore_timer_del(ad->timer_timer);
+ ad->timer_timer = NULL;
+ }
+
+ ad->timer_timer = ecore_timer_add(1.0, cam_app_timer_cb, ad);
+}
+
+void cam_app_cancel_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ ad->timer_activated = FALSE;
+
+ REMOVE_TIMER(ad->timer_timer);
+ DEL_EVAS_OBJECT(ad->timer_icon_edje);
+
+ cam_toolbar_update(ad);
+}
+
+static void _popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ /* cam_app_free_blocking_popup(); */
+ Evas_Object *notify = (Evas_Object *)data;
+ cam_popup_remove(notify);
+ /* evas_object_del(notify); */
+}
+
+gboolean cam_image_capture_start(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ gint64 remain = 0;
+ gboolean ret = TRUE;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_image_capture_start", 0);
+ if (camapp->af_mode == CAM_FOCUS_FACE) {
+ cam_app_stop_video_stream();
+ }
+ DEBUG_TRACE("camapp->burst_shot %d", camapp->burst_shot);
+ DEBUG_TRACE("camapp->shooting_mode %d", camapp->shooting_mode);
+ DEBUG_TRACE("camapp->default_capture_mode %d", camapp->default_capture_mode);
+ remain = cam_system_get_still_count_by_resolution(ad);
+
+ if(remain <= 0){
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"), cam_app_popup_response_cb);
+ CAM_TA_ACUM_ITEM_END(" cam_image_capture_start", 0);
+ return FALSE;
+ }
+
+ if (camapp->gps) {
+ int gps_level = CAM_LBS_STATE_DISABLE;
+ gps_level = cam_lbs_get_state();
+
+ if (gps_level >=CAM_LBS_STATE_SERVICE_ENABLE) {
+ double longitude = -1.0;
+ double latitude = -1.0;
+ double altitude = -1.0;
+ time_t time_stamp = -1.0;
+ if (cam_lbs_get_current_position(&longitude, &latitude, &altitude, &time_stamp)) {
+ DEBUG_TRACE("GEO TAG [longitude = %d, latitude = %d, altitude = %d]", longitude, latitude, altitude);
+ if (!cam_mm_set_gps_data(latitude, longitude, (double)altitude))
+ DEBUG_TRACE("cam_mm_set_gps_data failed");
+ }
+ }
+ }
+ cam_set_orient_value(ad);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ switch (camapp->shooting_mode) {
+ case CAM_SINGLE_MODE:
+ case CAM_SELF_SINGLE_MODE:
+ if (camapp->burst_shot == TRUE && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
+ camapp->capture_cb = (camera_capturing_cb)cam_continuous_shot_capture_callback;
+ cam_continuous_shot_capture_start(ad);
+ } else {
+ camapp->capture_cb = (camera_capturing_cb)__cam_capture_cb;
+ ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad);
+ }
+ break;
+ default:
+ ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad); /*capture on recoring */
+ break;
+ }
+ }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad);
+ }
+
+ CAM_TA_ACUM_ITEM_END(" cam_image_capture_start", 0);
+ CAM_TA_ACUM_ITEM_BEGIN(" capture_start to capturecallback", 0);
+ return ret;
+}
+
+static gboolean cam_image_capture_stop(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_UI);
+ ad->stop_continuous_shot = FALSE;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if (camapp->shooting_mode == CAM_SINGLE_MODE && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
+ ad->stop_continuous_shot = TRUE;
+ }
+
+ return TRUE;
+}
+
+Eina_Bool cam_image_capture_handle_idler(void *itm)
+{
+ CamIdlerItem *item = (CamIdlerItem *) itm;
+ struct appdata *ad = NULL;
+ cam_retvm_if(!item, ECORE_CALLBACK_CANCEL, "CamIdlerItem is NULL");
+
+ ad = (struct appdata *)item->data;
+ cam_retvm_if(!ad, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ cam_info(LOG_UI, "call idler[ %p] ", item->idler);
+ ad->capture_cb_list = g_list_remove(ad->capture_cb_list, item->idler);
+ if (item->idler) {
+ ecore_idler_del(item->idler);
+ item->idler = NULL;
+ }
+ free(item);
+ item = NULL;
+ return cam_image_capture_handle(ad);
+}
+static Eina_Bool __cam_app_hide_rect_image(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ HIDE_EVAS_OBJECT(ad->rect_image);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool cam_capture_on_recording_handle(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL,
+ "camapp_handle is NULL");
+ gboolean preview_skip = FALSE;
+
+ if (camapp->filename) {
+ cam_debug(LOG_SYS, "#########camapp->filename=%s", camapp->filename);
+ CAM_TA_ACUM_ITEM_BEGIN(" send signal to register thread", 0);
+ g_queue_push_tail(ad->file_reg_queue, strdup(camapp->filename));
+ pthread_cond_signal(&ad->file_reg_cond);
+ CAM_TA_ACUM_ITEM_END(" send signal to register thread", 0);
+ } else {
+ cam_app_notice_popup(ad, "Your storage have trouble ", cam_app_popup_response_cb);
+ }
+ if (!cam_mm_capture_stop (preview_skip, CAM_CAMERA_MODE)) {
+ cam_critical(LOG_MM, " cam_mm_capture_stop error ");
+ }
+ ecore_timer_add(0.50, __cam_app_hide_rect_image, ad);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool __cam_run_image_viewer_idler(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
+
+ gboolean launch_special_view = FALSE;
+
+ if (!cam_app_run_image_viewer_ug(ad, camapp->filename, launch_special_view)) {
+ cam_critical(LOG_UI, "cam_app_run_image_viewer_ug failed");
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void* __cam_run_image_viewer_thread_run(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ if(ad == NULL){
+ pthread_exit(NULL);
+ return NULL;
+ }
+ CamAppData *camapp = ad->camapp_handle;
+
+ if(camapp == NULL){
+ pthread_exit(NULL);
+ return NULL;
+ }
+
+ while (ad->is_capture_animation_processing) {
+// DEBUG_TRACE("wait capture animation!");
+ }
+
+ ecore_idler_add(__cam_run_image_viewer_idler, (void *)ad);
+
+ pthread_exit(NULL);
+ return NULL;
+}
+
+static Ecore_Timer *progress_timer = NULL;
+
+Eina_Bool cam_image_capture_handle(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL, "camapp_handle is NULL");
+
+ CAM_TA_ACUM_ITEM_END(" captured message to cam_image_capture_handle", 0);
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_image_capture_handle", 0);
+
+ pthread_t run_image_viewer_thread;
+
+ switch (camapp->shooting_mode) {
+
+ case CAM_SINGLE_MODE:
+ case CAM_SELF_SINGLE_MODE:
+ DEBUG_TRACE("start single shot capture. capture mode %d", camapp->default_capture_mode);
+
+ cam_critical(LOG_UI, "completed");
+
+ if( camapp->default_capture_mode == CAM_CAPTURE_SINGLE ||camapp->burst_shot == FALSE) {
+ if (camapp->filename) {
+ cam_debug(LOG_SYS, "#########camapp->filename=%s", camapp->filename);
+ CAM_TA_ACUM_ITEM_BEGIN(" send signal to register thread", 0);
+ g_queue_push_tail(ad->file_reg_queue, strdup(camapp->filename));
+ pthread_cond_signal(&ad->file_reg_cond);
+ CAM_TA_ACUM_ITEM_END(" send signal to register thread", 0);
+ cam_app_update_thumbnail();
+ } else {
+ cam_app_notice_popup(ad, "Your storage have trouble ", cam_app_popup_response_cb);
+ }
+ } else {
+ if (camapp->continuous_shot_data == NULL) {
+ cam_critical(LOG_SYS, " continuous_shot_data is NULL");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ int i = 0;
+
+ camapp->continuous_shot_data->capture_status = CAM_CONTI_SHOT_STATUS_STOPPED;
+
+ if (camapp->filename)
+ free(camapp->filename);
+
+ camapp->filename = strdup(camapp->continuous_shot_data->file_path[camapp->continuous_shot_data->shot_num - 1]);
+
+ cam_app_destroy_progressbar(ad);
+ if (camapp->continuous_shot_data->error != NULL) {
+ cam_debug(LOG_SYS, " Start to unlink captured files");
+
+ /* unlink all captured files */
+ for (i = 0; i < camapp->continuous_shot_data->shot_num; i++) {
+ if (camapp->continuous_shot_data->file_path[i]
+ && !access(camapp->continuous_shot_data->file_path[i], F_OK)) {
+ unlink(camapp->continuous_shot_data->file_path[i]);
+ }
+ }
+
+ cam_debug(LOG_SYS, " Unlink done");
+ cam_app_notice_popup(ad, camapp->continuous_shot_data->error->message, cam_app_popup_response_cb);
+ } else {
+ cam_critical(LOG_UI, "start to register continuous shot");
+
+ }
+
+ #if 1 /*TODO: need ui guide, for display popup*/
+ elm_progressbar_value_set(ad->progress_popup_bar, 1.0);
+ if (progress_timer) {
+ ecore_timer_del(progress_timer);
+ }
+ ad->is_processing = FALSE;
+ cam_popup_delete(ad);
+#endif
+
+ cam_continuous_shot_data_free(ad);
+ cam_toolbar_update(ad);
+ cam_app_update_thumbnail();
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+ cam_reset_focus_mode(ad);
+ }
+
+
+ if (camapp->review) {
+ if (pthread_create(&run_image_viewer_thread, NULL, __cam_run_image_viewer_thread_run, (void *)ad) < 0) {
+ cam_critical(LOG_CAM, "create run_image_viewer_thread failed");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ }
+
+ break;
+
+ default:
+ cam_debug(LOG_UI, " Not matched shooting mode [%d]",
+ camapp->shooting_mode);
+ break;
+ }
+ ad->remained_count--;
+ indicator_update_remain_count(ad);
+
+ if (camapp->af_mode == CAM_FOCUS_FACE) { /*note: face focus mode, if start capture,stop draw rect*/
+ cam_app_run_video_stream();
+ }
+
+ CAM_TA_ACUM_ITEM_END(" cam_image_capture_handle", 0);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+gboolean cam_camera_touch_af_press(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ debug_fenter(LOG_UI);
+
+ camapp->focus_mode = CAM_FOCUS_MODE_TOUCH_AUTO;
+
+ if (!ad->camapp_handle->key_lock) {
+ ad->camapp_handle->key_lock = TRUE;
+ if (!cam_camera_key_half_press(ad)) {
+ DEBUG_TRACE("cam_camera_key_half_press failed state");
+ ad->camapp_handle->key_lock = FALSE;
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ return FALSE;
+ }
+ ad->camapp_handle->key_lock = FALSE;
+ }
+ else
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+
+ return TRUE;
+}
+
+gboolean cam_camera_key_half_press(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ debug_fenter(LOG_UI);
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if (!(capacity & CAM_CP_FUNC_FOCUS_MODE))
+ return FALSE;
+
+ if (camapp->af_mode != CAM_FOCUS_FACE) {
+ cam_mm_stop_focusing();
+
+ if (!cam_mm_set_af_area(ad->af_x, ad->af_y, ad->camera_focus_w, ad->camera_focus_h)) {
+ DEBUG_TRACE("cam_mm_set_af_area failed");
+ return FALSE;
+ }
+ DEBUG_TRACE("focus mode = %d", camapp->focus_mode);
+
+ if (!cam_mm_start_focusing(camapp->focus_mode)) {
+ cam_critical(LOG_MM, " cam_mm_start_focusing error " );
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+gboolean cam_camera_key_half_release(void *data)
+{
+ debug_fenter(LOG_UI);
+ return TRUE;
+}
+
+gboolean cam_do_capture(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int state = 0;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ if (ad->is_rotating)
+ return FALSE;/*note: now is rotating*/
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_camera_key_press", 0);
+
+ if (ad->continuous_af_timer) {
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __cam_continuous_af_timer_cb, ad);
+ }
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ switch (state) {
+ case CAMERA_STATE_PREVIEW:
+ case CAMERA_STATE_CAPTURED:
+ if (ad->timer_activated) {
+ CAM_UI_LOG("timer activated!");
+ cam_app_cancel_timer(ad);
+ if (!cam_image_capture_start(ad)) {
+ return FALSE;
+ }
+ } else if (camapp->timer > CAM_SETTINGS_TIMER_OFF) {
+ CAM_UI_LOG("timer start");
+ cam_app_start_timer(ad);
+ } else if (!cam_image_capture_start(ad)) {
+ return FALSE;
+ }
+
+ break;
+ case CAMERA_STATE_CAPTURING:
+ cam_debug(LOG_UI, "capturing state");
+ return TRUE;
+ break;
+ case CAMERA_STATE_NONE:
+ case CAMERA_STATE_CREATED:
+ return FALSE;
+ break;
+ default:
+ return FALSE;
+ break;
+
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+
+
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ switch (state) {
+ case RECORDER_STATE_RECORDING:
+ case RECORDER_STATE_PAUSED:
+ if(!cam_image_capture_start(ad)) {
+ HIDE_EVAS_OBJECT(ad->rect_image);
+ return FALSE;
+ }
+ break;
+ case RECORDER_STATE_NONE:
+ case RECORDER_STATE_CREATED:
+ case RECORDER_STATE_READY:
+ return FALSE;
+ default:
+ return FALSE;
+ break;
+
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean cam_do_record(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int state = 0;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ if (ad->is_rotating)
+ return FALSE;/*note: now is rotating*/
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_camera_key_press", 0);
+
+ if (ad->continuous_af_timer) {
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __focus_guide_destroy, ad);
+ }
+
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ state = cam_mm_get_state();
+ cam_critical(LOG_UI, " state = %d", state);
+ switch (state) {
+ case RECORDER_STATE_READY:
+ {
+ if (ad->timer_activated) {
+ CAM_UI_LOG("timer activated!");
+ cam_app_cancel_timer(ad);
+ if (!cam_video_record_start(ad)) {
+ return FALSE;
+ }
+ } else if (camapp->timer > CAM_SETTINGS_TIMER_OFF) {
+ CAM_UI_LOG("timer start");
+ cam_app_start_timer(ad);
+ } else if (!cam_video_record_start(ad)) {
+ return FALSE;
+ }
+ }
+ break;
+ case RECORDER_STATE_RECORDING:
+ cam_critical(LOG_UI, "RECORDER_STATE_NONE ");
+ return FALSE;
+ break;
+ case RECORDER_STATE_NONE:
+ cam_critical(LOG_UI, "RECORDER_STATE_NONE ");
+ return FALSE;
+ break;
+ case RECORDER_STATE_CREATED:
+ cam_critical(LOG_UI, "RECORDER_STATE_CREATED ");
+ return FALSE;
+ break;
+ case RECORDER_STATE_PAUSED:
+ cam_critical(LOG_UI, "RECORDER_STATE_PAUSED ");
+ return FALSE;
+ break;
+ default:
+ return FALSE;
+ break;
+
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean cam_camera_key_press(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ debug_fenter(LOG_UI);
+
+ int state = 0;
+
+ if (ad->is_rotating)
+ return FALSE;/*note: now is rotating*/
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_camera_key_press", 0);
+
+ if (ad->continuous_af_timer) {
+ REMOVE_TIMER(ad->continuous_af_timer);
+
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE)
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __focus_guide_destroy, ad);
+ else
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __cam_continuous_af_timer_cb, ad);
+ }
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ switch (state) {
+ case CAMERA_STATE_PREVIEW:
+ case CAMERA_STATE_CAPTURED:
+ if (ad->timer_activated) {
+ CAM_UI_LOG("timer activated!");
+ } else if (camapp->timer >
+ CAM_SETTINGS_TIMER_OFF) {
+ CAM_UI_LOG("timer start");
+ cam_app_start_timer(ad);
+ } else if (!cam_image_capture_start(ad)) {
+ return FALSE;
+ }
+ break;
+ case CAMERA_STATE_CAPTURING:
+ cam_debug(LOG_UI, "capturing state");
+ return TRUE;
+ break;
+ case CAMERA_STATE_NONE:
+ case CAMERA_STATE_CREATED:
+ return FALSE;
+ break;
+ default:
+ return FALSE;
+ break;
+
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ switch (state) {
+ case RECORDER_STATE_READY:
+ {
+ if (ad->timer_activated) {
+ CAM_UI_LOG("timer activated!");
+ } else if (camapp->timer >
+ CAM_SETTINGS_TIMER_OFF) {
+ CAM_UI_LOG("timer start");
+ cam_app_start_timer(ad);
+ } else if (!cam_video_record_start(ad)) {
+ return FALSE;
+ }
+ }
+ break;
+ case RECORDER_STATE_RECORDING:
+#if 1
+ camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
+ if (!cam_video_record_stop(ad)) {
+ return FALSE;
+ }
+ return FALSE;
+#endif
+ break;
+ case RECORDER_STATE_NONE:
+ case RECORDER_STATE_CREATED:
+ case RECORDER_STATE_PAUSED:
+ return FALSE;
+ break;
+ default:
+ return FALSE;
+ break;
+
+ }
+ } else {
+ cam_critical(LOG_MM, "Unknow camera mode");
+ return FALSE;
+ }
+ CAM_TA_ACUM_ITEM_END(" cam_camera_key_press", 0);
+ return TRUE;
+}
+
+gboolean cam_camera_key_release(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int state = 0;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ switch (state) {
+ case CAMERA_STATE_CAPTURING:
+ if (!cam_image_capture_stop(ad)) {
+ return FALSE;
+ }
+ return TRUE;
+ break;
+ case CAMERA_STATE_PREVIEW:
+ case CAMERA_STATE_CREATED:
+ case CAMERA_STATE_NONE:
+ case CAMERA_STATE_CAPTURED:
+ return FALSE;
+ break;
+ default:
+ return FALSE;
+ break;
+
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+#if 0
+ state = cam_mm_get_state();
+ switch (state) {
+ case MM_CAMCORDER_STATE_PREPARE:
+ if (!cam_video_record_start(ad)) {
+ return FALSE;
+ }
+ break;
+ case MM_CAMCORDER_STATE_RECORDING:
+ if (!cam_video_record_stop(ad)) {
+ return FALSE;
+ }
+ return FALSE;
+ break;
+ case MM_CAMCORDER_STATE_NONE:
+ case MM_CAMCORDER_STATE_NULL:
+ case MM_CAMCORDER_STATE_READY:
+ case MM_CAMCORDER_STATE_CAPTURING:
+ case MM_CAMCORDER_STATE_PAUSED:
+ return FALSE;
+ break;
+ default:
+ return FALSE;
+ break;
+
+ }
+#endif
+ } else {
+ cam_critical(LOG_MM, "Unknow camera mode");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void cam_reset_focus_coordinate(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ ad->af_x = (ad->win_width / 2) - ad->preview_offset_x;
+ ad->af_y = (ad->win_height / 2) - ad->preview_offset_y;
+
+ ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
+ ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
+
+ /* init */
+ ad->touch_lcd_x = (ad->win_height / 2);
+ ad->touch_lcd_y = (ad->win_width / 2);
+
+ ad->af_start_x = 0;
+ ad->af_start_y = 0;
+
+ switch (ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ {
+ ad->af_start_x = ad->touch_lcd_x;
+ ad->af_start_y = ad->touch_lcd_y;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ {
+ ad->af_start_x = ad->win_height - ad->touch_lcd_x;
+ ad->af_start_y = ad->win_width - ad->touch_lcd_y;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ {
+ ad->af_start_x = ad->touch_lcd_y;
+ ad->af_start_y = ad->win_height - ad->touch_lcd_x;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ {
+ ad->af_start_x = ad->win_width - ad->touch_lcd_y;
+ ad->af_start_y = ad->touch_lcd_x;
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* adjust */
+ DEBUG_TRACE("ad->af_start_x=%f, ad->af_start_y=%f", ad->af_start_x, ad->af_start_y);
+
+ ad->camera_focus_w = CAMERA_FOCUS_W * elm_config_scale_get();
+ ad->camera_focus_h = CAMERA_FOCUS_H * elm_config_scale_get();
+ DEBUG_TRACE("ad->camera_focus_w=%f, ad->camera_focus_h=%f", ad->camera_focus_w, ad->camera_focus_h);
+
+ ad->af_start_x = ad->af_start_x - (ad->camera_focus_w / 2);
+ ad->af_start_y = ad->af_start_y - (ad->camera_focus_h / 2);
+ DEBUG_TRACE("af area box start x,y =[%f,%f]\n", ad->af_start_x, ad->af_start_y);
+
+ if (ad->rot_current == APP_DEVICE_ORIENTATION_270
+ || ad->rot_current == APP_DEVICE_ORIENTATION_90) {
+ if (ad->af_start_x < ad->preview_offset_x) {
+ ad->af_start_x = ad->preview_offset_x;
+ }
+ if (ad->af_start_y < ad->preview_offset_y) {
+ ad->af_start_y = ad->preview_offset_y;
+ }
+ if ((ad->af_start_x + ad->camera_focus_w) >
+ (ad->preview_w + ad->preview_offset_x)) {
+ ad->af_start_x =
+ (ad->preview_w + ad->preview_offset_x) -
+ ad->camera_focus_w;
+ }
+ if ((ad->af_start_y + ad->camera_focus_h) >
+ (ad->preview_h + ad->preview_offset_y)) {
+ ad->af_start_y =
+ (ad->preview_h + ad->preview_offset_y) -
+ ad->camera_focus_h;
+ }
+
+ } else {
+ if (ad->af_start_y < ad->preview_offset_x) {
+ ad->af_start_y = ad->preview_offset_x;
+ }
+ if (ad->af_start_x < ad->preview_offset_y) {
+ ad->af_start_x = ad->preview_offset_y;
+ }
+ if ((ad->af_start_y + ad->camera_focus_h) >
+ (ad->preview_w + ad->preview_offset_x)) {
+ ad->af_start_y =
+ (ad->preview_w + ad->preview_offset_x) -
+ ad->camera_focus_h;
+ }
+ if ((ad->af_start_x + ad->camera_focus_w) >
+ (ad->preview_h + ad->preview_offset_y)) {
+ ad->af_start_x =
+ (ad->preview_h + ad->preview_offset_y) -
+ ad->camera_focus_w;
+ }
+ }
+
+
+}
+
+Eina_Bool cam_continuous_af_start(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL, "camapp_handle is NULL");
+
+ /* cam_mm_set_af_area include init focusing */
+ DEBUG_TRACE("start continuous AF");
+ if (cam_mm_set_af_area(ad->af_x, ad->af_y, ad->camera_focus_w, ad->camera_focus_h)) {
+ DEBUG_TRACE("cam_mm_set_af_area success!");
+ /*focus guide update*/
+ } else {
+ DEBUG_TRACE("cam_mm_set_af_area error!");
+ }
+
+ camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS;
+
+ if (!cam_mm_start_focusing(camapp->focus_mode)) {
+ cam_critical(LOG_MM, "cam_mm_start_focusing error");
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool cam_volume_key_press(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->longpress_timer)
+ ad->longpress_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (ad->cancel_key_press == TRUE) {
+ if (ad->longpress_timer)
+ ad->longpress_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if(ad->is_rotating){
+ cam_critical(LOG_MM, "rotating...");
+ if (ad->longpress_timer)
+ ad->longpress_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING) {
+ cam_critical(LOG_UI, "touch_af_state is [%d], do not zoom", camapp->touch_af_state);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ DEL_EVAS_OBJECT(ad->focus_edje);
+ cam_mm_stop_focusing();
+
+ int state = 0;
+ gboolean up_key = ad->up_key;
+ debug_fenter(LOG_UI);
+
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ switch (state) {
+ case RECORDER_STATE_RECORDING:
+ case RECORDER_STATE_PAUSED:
+ case RECORDER_STATE_READY:
+ {
+ if (!camapp->zoom_lock
+ && camapp->recording_mode != CAM_RECORD_SLOW) {
+ zoom_in(ad, up_key, 1);
+ }
+ }
+ break;
+ case RECORDER_STATE_NONE:
+ case RECORDER_STATE_CREATED:
+ break;
+ default:
+ break;
+ }
+ } else if(camapp->camera_mode == CAM_CAMERA_MODE) {
+ switch (state) {
+ case CAMERA_STATE_PREVIEW:
+ case CAMERA_STATE_CAPTURED:
+ {
+ if (!camapp->zoom_lock
+ && camapp->recording_mode != CAM_RECORD_SLOW) {
+ zoom_in(ad, up_key, 1);
+ }
+
+ }
+ break;
+ case CAMERA_STATE_NONE:
+ case CAMERA_STATE_CREATED:
+ case CAMERA_STATE_CAPTURING:
+ break;
+ default:
+ break;
+ }
+
+ }
+
+
+ if (ad->longpress_timer)
+ ecore_timer_interval_set(ad->longpress_timer, ZOOM_LONG_PRESS_INTERVAL);
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static gboolean cam_power_key_press(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ power_lock_state(POWER_STATE_SCREEN_OFF, 0);
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if (ad->mm_state < CAMERA_STATE_PREVIEW) {
+ goto lock_and_exit;
+ } else if (ad->mm_state == CAMERA_STATE_PREVIEW) {
+ goto lock_and_exit;
+ } else if (ad->mm_state > CAMERA_STATE_PREVIEW) {
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ DEBUG_TRACE("camera mode");
+ } else {
+ camapp->rec_stop_type = CAM_REC_STOP_POWER_KEY;
+ if (!cam_video_record_stop(ad)) {
+ DEBUG_TRACE("record stop fail");
+ }
+ }
+ }
+ return TRUE;
+
+ lock_and_exit:
+ power_unlock_state(POWER_STATE_SCREEN_OFF);
+
+ return TRUE;
+}
+#if 0
+static gboolean __cam_end_key_grab_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ Ecore_X_Display *disp = NULL;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
+
+ disp = ecore_x_display_get();
+ cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
+
+ if (utilx_grab_key(disp, ad->main_xid, KEY_END, SHARED_GRAB) == -1) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_END);
+ }
+
+ return TRUE;
+}
+#endif
+gboolean cam_key_grab_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ Ecore_X_Display *disp = NULL;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
+ int success = 0;
+ int ret = TRUE;
+
+ if (ad->isGrabed)
+ return TRUE;
+
+ DEBUG_TRACE("key_grab_init############################");
+
+ ad->cancel_key_press = FALSE;
+
+ disp = ecore_x_display_get();
+ cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
+
+ /* volume key */
+ if (utilx_grab_key(disp, ad->main_xid, KEY_VOLUMEUP, TOP_POSITION_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_VOLUMEUP);
+ ret = FALSE;
+ }
+ if (utilx_grab_key(disp, ad->main_xid, KEY_VOLUMEDOWN, TOP_POSITION_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_VOLUMEDOWN);
+ ret = FALSE;
+ }
+
+ #if 0
+ if (vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 1))
+ cam_critical(LOG_SYS, "VCONFKEY_STARTER_USE_VOLUME_KEY set fail");
+ #endif
+
+ /* camera key */
+ if (utilx_grab_key(disp, ad->main_xid, KEY_CAMERA, TOP_POSITION_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_CAMERA);
+ ret = FALSE;
+ }
+ if (utilx_grab_key(disp, ad->main_xid, KEY_CONFIG, TOP_POSITION_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_CONFIG);
+ ret = FALSE;
+ }
+ /* power key */
+ if (utilx_grab_key(disp, ad->main_xid, KEY_POWER, SHARED_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_POWER);
+ ret = FALSE;
+ }
+
+ /* etc */
+ if (utilx_grab_key(disp, ad->main_xid, KEY_SEND, SHARED_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_SEND);
+ ret = FALSE;
+ }
+ if (utilx_grab_key(disp, ad->main_xid, KEY_END, SHARED_GRAB) != success) {
+ cam_critical(LOG_SYS, "%s key grap fail", KEY_END);
+ ret = FALSE;
+ }
+
+ ad->isGrabed = TRUE;
+ return ret;
+}
+
+gboolean cam_key_grab_deinit(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ Ecore_X_Display *disp = NULL;
+ int success = 0;
+ int ret = TRUE;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
+
+ if (!ad->isGrabed)
+ return TRUE;
+ DEBUG_TRACE("key_grab_deinit############################");
+
+ disp = ecore_x_display_get();
+ cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
+
+ /* volume key */
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_VOLUMEUP) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_VOLUMEUP);
+ ret = FALSE;
+ }
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_VOLUMEDOWN) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_VOLUMEDOWN);
+ ret = FALSE;
+ }
+
+ /* camera key */
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_CAMERA) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_CAMERA);
+ ret = FALSE;
+
+ }
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_CONFIG) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_CONFIG);
+ ret = FALSE;
+ }
+
+ /* power key */
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_POWER) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_POWER);
+ ret = FALSE;
+ }
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_PAUSE) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_PAUSE);
+ ret = FALSE;
+ }
+
+ /* etc */
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_SEND) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_SEND);
+ ret = FALSE;
+ }
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_SELECT) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_SELECT);
+ ret = FALSE;
+ }
+ if (utilx_ungrab_key(disp, ad->main_xid, KEY_END) != success){
+ cam_critical(LOG_SYS, "%s key ungrap fail", KEY_END);
+ ret = FALSE;
+ }
+
+ ad->isGrabed = FALSE;
+ return ret;
+}
+
+gboolean cam_app_key_event_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ DEBUG_TRACE("cam_app_key_event_init");
+
+ if (ad == NULL) {
+ cam_critical(LOG_UI, "appdata is NULL, maybe not created");
+ return FALSE;
+ }
+ if (ad->key_down == NULL) {
+ ad->key_down =
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, cam_hard_key_down, ad);
+ }
+ if (ad->key_up == NULL) {
+ ad->key_up =
+ ecore_event_handler_add(ECORE_EVENT_KEY_UP, cam_hard_key_up, ad);
+ }
+
+ return TRUE;
+}
+
+gboolean cam_app_key_event_deinit(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ DEBUG_TRACE("cam_app_key_event_deinit");
+
+ if (ad == NULL) {
+ cam_critical(LOG_UI, "appdata is NULL, maybe not created");
+ return FALSE;
+ }
+ if (ad->key_down) {
+ ecore_event_handler_del(ad->key_down);
+ ad->key_down = NULL;
+ }
+ if (ad->key_up) {
+ ecore_event_handler_del(ad->key_up);
+ ad->key_up = NULL;
+ }
+
+ return TRUE;
+}
+
+Eina_Bool cam_hard_key_down(void *data, int type, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_DONE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_DONE, "camapp_handle is NULL");
+
+ Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info;
+ cam_debug(LOG_UI, "Key name : %s", kd->keyname);
+
+ if (ad->confirm_popup) {
+ cam_debug(LOG_UI, "confirm popup exist. ignore key event");
+ return ECORE_CALLBACK_DONE;
+ }
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ cam_app_timeout_checker_update();
+
+ /* Camera key Press */
+ if (0 == strcmp(kd->keyname, KEY_CANCEL)) {
+ ad->cancel_key_press = TRUE;
+ }
+ if (0 == strcmp(kd->keyname, KEY_CONFIG)) { /* camera key - full */
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ CAM_TA_ACUM_ITEM_BEGIN("Total capture time", 0);
+ CAM_TA_ACUM_ITEM_BEGIN
+ (" camera key to capture start", 0);
+ if (!cam_camera_key_press(ad)) {
+ cam_warning(LOG_UI, "cam_camera_key_press failed");
+ }
+ camapp->key_lock = FALSE;
+ }
+ }
+ /* Camera key HALF press */
+ else if (0 == strcmp(kd->keyname, KEY_CAMERA)) { /* camera key - half */
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+
+ if (!cam_camera_key_half_press(ad)) {
+ cam_warning(LOG_UI, "cam_camera_key_half_press failed");
+ }
+ camapp->key_lock = FALSE;
+ }
+ } else if (0 == strcmp(kd->keyname, KEY_VOLUMEUP)) {
+ if (camapp->volume_key == CAM_VOLUME_KEY_ZOOM) {
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ ad->up_key = TRUE;
+ cam_volume_key_press(ad);
+ cam_add_longpress_key_timer(ad);
+ camapp->key_lock = FALSE;
+ }
+ } else {
+ cam_toolbar_shutter_button_cb(ad, NULL, "press_shutter_sig", "hard_key");
+ }
+ } else if (0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) {
+ if (camapp->volume_key == CAM_VOLUME_KEY_ZOOM) {
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ ad->up_key = FALSE;
+ cam_volume_key_press(ad);
+ cam_add_longpress_key_timer(ad);
+ camapp->key_lock = FALSE;
+ }
+ } else {
+ if (!ad->is_recording) {
+ cam_toolbar_recording_button_cb(ad, NULL, "click_shutter_sig", "hard_key");
+ } else {
+ cam_toolbar_recording_stop_button_cb(ad, NULL, "click_shutter_sig", "hard_key");
+ }
+ }
+ } else if (0 == strcmp(kd->keyname, KEY_SELECT)) {
+
+ } else if ((0 == strcmp(kd->keyname, KEY_SELECT))
+ && ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ }
+ } else if (0 == strcmp(kd->keyname, KEY_POWER)) {
+#if 0
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ power_unlock_state(POWER_STATE_NORMAL);
+ cam_power_key_press(ad);
+ camapp->key_lock = FALSE;
+ }
+#endif
+ }
+
+ return ECORE_CALLBACK_DONE;
+}
+
+Eina_Bool cam_hard_key_up(void *data, int type, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_DONE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_DONE, "camapp_handle is NULL");
+
+ Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info;
+ cam_debug(LOG_UI, "Key name : %s", kd->keyname);
+
+ if (ad->confirm_popup) {
+ cam_debug(LOG_UI, "confirm popup exist. ignore key event");
+ return ECORE_CALLBACK_DONE;
+ }
+
+ cam_app_timeout_checker_update();
+
+ if (0 == strcmp(kd->keyname, KEY_CANCEL)) {
+ ad->cancel_key_press = FALSE;
+ }
+
+ if(ad->cancel_key_press == TRUE) {
+ if (ad->longpress_timer) { /*volume key long press */
+ cam_del_longpress_key_timer(ad);
+ }
+ return ECORE_CALLBACK_DONE;
+ }
+
+ if (0 == strcmp(kd->keyname, KEY_CONFIG)) { /* camera key - full */
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ if (!cam_camera_key_release(ad)) {
+ cam_warning(LOG_UI, "cam_camera_key_release failed");
+ }
+ camapp->key_lock = FALSE;
+ }
+ } else if (0 == strcmp(kd->keyname, KEY_CAMERA)) { /* camera key - half */
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ if (!cam_camera_key_half_release(ad)) {
+ cam_warning(LOG_UI, "cam_camera_key_release failed");
+ }
+ camapp->key_lock = FALSE;
+ }
+ } else if (0 == strcmp(kd->keyname, KEY_VOLUMEUP)
+ || 0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) {
+ if (camapp->volume_key == CAM_VOLUME_KEY_ZOOM) {
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ cam_del_longpress_key_timer(ad);
+ camapp->key_lock = FALSE;
+ }
+ } else {
+ cam_toolbar_shutter_button_cb(ad, NULL, "release_shutter_sig", "hard_key");
+ }
+ }
+ return ECORE_CALLBACK_DONE;
+}
+
+Eina_Bool cam_mouse_button_down(void *data, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, EINA_FALSE, "camapp_handle is NULL");
+
+ if (ad->pinch_edje) {
+ if (ad->focus_edje)
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return FALSE;
+ }
+
+ Evas_Event_Mouse_Down *md = (Evas_Event_Mouse_Down *) event_info;
+
+ switch (ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ {
+ ad->touch_lcd_x = md->canvas.x; /* LCD x */
+ ad->touch_lcd_y = md->canvas.y; /* LCD y */
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ {
+ ad->touch_lcd_x = ad->win_height - md->canvas.x; /* LCD x */
+ ad->touch_lcd_y = ad->win_width - md->canvas.y; /* LCD y */
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ {
+ ad->touch_lcd_x = ad->win_height - md->canvas.y; /* LCD x */
+ ad->touch_lcd_y = md->canvas.x; /* LCD y */
+
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ {
+ ad->touch_lcd_x = md->canvas.y; /* LCD x */
+ ad->touch_lcd_y = ad->win_width - md->canvas.x; /* LCD y */
+ }
+ break;
+ default:
+ break;
+ }
+
+ ad->af_x = ad->touch_lcd_y - ad->preview_offset_x;
+ ad->af_y = ad->preview_h - ad->touch_lcd_x;
+
+ ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
+ ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
+
+ DEBUG_TRACE("*************************************************************************************");
+ DEBUG_TRACE("touched lcd x,y=[%d,%d] af x,y=[%d,%d]\n", ad->touch_lcd_x, ad->touch_lcd_y, ad->af_x, ad->af_y);
+ DEBUG_TRACE("*************************************************************************************");
+
+ int state = cam_mm_get_state();
+ if (!(camapp->camera_mode == CAM_CAMERA_MODE && state == CAMERA_STATE_CAPTURING) ){
+ if (camapp->enable_touch_af == TRUE
+ && camapp->touch_af_state == CAM_TOUCH_AF_STATE_NONE) {
+ REMOVE_TIMER(ad->continuous_af_timer);
+ cam_app_draw_af_box(ad);
+
+ camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
+ cam_app_focus_guide_create(ad);
+ cam_app_focus_guide_update(ad);
+ cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
+ CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
+ CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
+ CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_READY;
+ }
+ } else
+ DEBUG_TRACE("camera mode[%d], camera state[%d] not available focus",camapp->camera_mode,state);
+
+ return EINA_TRUE;
+}
+
+Eina_Bool cam_mouse_button_up(void *data, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, EINA_FALSE, "camapp is NULL");
+
+ if (ad->pinch_edje) {
+ if (ad->focus_edje)
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return FALSE;
+ }
+
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_READY) {
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_DOING;
+ cam_app_draw_af_box(ad);
+ evas_object_show(ad->focus_edje);
+ cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
+ CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
+ CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
+ CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
+
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE && ad->is_recording) {
+ if (ad->caf_button)
+ cam_toolbar_show_cafbutton(ad, TRUE);
+ }
+
+ cam_camera_touch_af_press(ad);
+ }
+ return EINA_TRUE;
+}
+
+void cam_app_set_config_group(gint mode)
+{
+ cam_debug(LOG_UI, "mode : %d", mode);
+
+ if (mode == CAM_CAMERA_MODE) {
+ cam_config_set_group_name(CAM_CONFIG_TYPE_PREVIEW, "still");
+ } else {
+ cam_config_set_group_name(CAM_CONFIG_TYPE_PREVIEW, "video");
+ }
+
+ debug_fleave(LOG_UI);
+
+ return;
+}
+
+int cam_app_get_latest_mode(void)
+{
+ cam_config_set_group_name(CAM_CONFIG_TYPE_COMMON, "common");
+ int last_mode =
+ cam_config_get_int_by_type(CAM_CONFIG_TYPE_COMMON, "mode",
+ CAM_CAMERA_MODE);
+
+ debug_msg(LOG_UI, "last mode:%d", last_mode);
+ return last_mode;
+}
+
+const gchar *cam_app_get_target_path(void)
+{
+ CamAppData *camapp = NULL;
+
+ camapp = cam_handle_get();
+
+ if (camapp) {
+
+ const gchar *default_path = NULL;
+ switch (camapp->storage) {
+ case CAM_STORAGE_INTERNAL:
+ default_path = cam_file_get_internal_image_path();
+ break;
+ case CAM_STORAGE_EXTERNAL:
+ default_path = cam_file_get_external_image_path();
+ break;
+ default:
+ cam_critical(LOG_UI, "Unknow storage type : %d", camapp->storage);
+ break;
+ }
+
+ cam_debug(LOG_UI, "target path : [%s]", default_path);
+ return default_path;
+ } else {
+ cam_critical(LOG_UI, "camapp handle is NULL");
+ return NULL;
+ }
+}
+
+gchar *cam_app_get_last_filename(void)
+{
+ CamAppData *camapp = NULL;
+ gchar *last_file_path = NULL;
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ camapp = cam_handle_get();
+ cam_retvm_if(camapp == NULL, NULL, "cam_handle is NULL");
+
+ last_file_path = cam_file_get_last_file_path(ad, cam_app_get_target_path());
+
+ if (last_file_path) {
+ cam_debug(LOG_UI, "last_file_path : %s", last_file_path);
+ } else {
+ cam_critical(LOG_UI, "last_file_path is NULL");
+ return NULL;
+ }
+ return last_file_path;
+}
+
+gchar *cam_app_get_next_filename(CamFileExtention extension)
+{
+
+ CamAppData *camapp = NULL;
+ gchar *new_filename = NULL;
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ camapp = cam_handle_get();
+ cam_retvm_if(camapp == NULL, NULL, "cam_handle is NULL");
+ int mm_state = 0;
+ mm_state = cam_mm_get_state();
+
+ if( extension == CAM_FILE_EXTENTION_IMAGE){
+ new_filename = cam_file_get_next_filename(cam_app_get_target_path(), INAGE_FILE_NAME, IMAGE_FILE_EXTENSION);
+ } else {
+ if ((camapp->recording_mode == CAM_RECORD_MMS)
+ || (camapp->recording_mode == CAM_RECORD_SELF_MMS))
+ new_filename = cam_file_get_next_filename(cam_app_get_target_path(), VIDEO_FILE_NAME, VIDEO_FILE_EXTENSION_3GP);
+ else
+ new_filename = cam_file_get_next_filename(cam_app_get_target_path(), VIDEO_FILE_NAME, VIDEO_FILE_EXTENSION_MP4);
+ }
+
+ if (new_filename) {
+ cam_debug(LOG_UI, "next filename : %s", new_filename);
+ } else {
+ cam_critical(LOG_UI, "new_filename is NULL");
+ }
+
+ return new_filename;
+}
+
+static void __cam_preview_cb(camera_preview_data_s *preview_frame, void *user_data)
+{
+
+ cam_retm_if(user_data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)user_data;
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is null");
+}
+
+static void __cam_state_change_cb(camera_state_e previous, camera_state_e current,
+ bool by_policy, void *user_data)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+ ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "camapp is null");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is null");
+ DEBUG_TRACE("current= %d, previous = %d, ad->enable_mode_change = %d", current, previous, ad->enable_mode_change);
+
+ if (current == CAMERA_STATE_PREVIEW) {
+ ad->enable_mode_change = TRUE;
+ } else {
+ ad->enable_mode_change = FALSE;
+ }
+
+ DEBUG_TRACE("current= %d, previous = %d, ad->enable_mode_change = %d", current, previous, ad->enable_mode_change);
+ cam_app_camera_state_manager(previous, current, by_policy);
+
+}
+
+static void __cam_focus_cb(camera_focus_state_e state, void *user_data)
+{
+ struct appdata *ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ cam_debug(LOG_MM, " Focus state changed to [%d]", state);
+
+ if (ad->ug_state == CAM_UG_PAUSE_STATE)
+ return;
+
+ camapp->focus_state = state ;
+
+ if (ad->is_rotating == FALSE) {
+ if (evas_object_visible_get(ad->focus_edje) == TRUE)
+ cam_app_focus_guide_update(ad);
+ }
+
+ switch (state) {
+ case CAMERA_FOCUS_STATE_RELEASED:
+ cam_debug(LOG_MM, "release");
+ break;
+ case CAMERA_FOCUS_STATE_ONGOING:
+ cam_debug(LOG_MM, "ongoing");
+ break;
+ case CAMERA_FOCUS_STATE_FOCUSED:
+ cam_debug(LOG_MM, "focused");
+ if (camapp->camera_mode == CAM_CAMERA_MODE && ad->mm_state < CAMERA_STATE_CAPTURING) {
+ if ((camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO
+ || camapp->focus_mode == CAM_FOCUS_MODE_HALFSHUTTER)
+ && camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF)
+ cam_sound_play (CAM_SOUND_EFFECT_AF_OK, ad);
+
+ if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_READY
+ ||camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING)
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __cam_continuous_af_timer_cb, ad);
+ }
+
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE && ad->mm_state <= RECORDER_STATE_RECORDING) {
+ if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO
+ && camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF
+ && ad->mm_state != RECORDER_STATE_RECORDING)
+ cam_sound_play (CAM_SOUND_EFFECT_AF_OK, ad);
+
+ if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_READY
+ ||camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING)
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ }
+
+ REMOVE_TIMER(ad->continuous_af_timer);
+
+ if (ad->is_recording)
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __focus_guide_destroy, ad);
+ } else {
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ }
+ break;
+ case CAMERA_FOCUS_STATE_FAILED:
+ cam_debug(LOG_MM, "failed");
+ if (camapp->camera_mode == CAM_CAMERA_MODE && ad->mm_state < CAMERA_STATE_CAPTURING) {
+ if ((camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO
+ || camapp->focus_mode == CAM_FOCUS_MODE_HALFSHUTTER)
+ && camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF)
+ cam_sound_play (CAM_SOUND_EFFECT_AF_FAIL, ad);
+
+ if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_READY
+ ||camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING)
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __cam_continuous_af_timer_cb, ad);
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE && ad->mm_state <= RECORDER_STATE_RECORDING) {
+ if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO
+ && camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF
+ && ad->mm_state != RECORDER_STATE_RECORDING)
+ cam_sound_play (CAM_SOUND_EFFECT_AF_FAIL, ad);
+
+ if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_READY
+ ||camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING)
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ }
+
+ REMOVE_TIMER(ad->continuous_af_timer);
+
+ if (ad->is_recording)
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __focus_guide_destroy, ad);
+ } else {
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void __cam_capture_cb(camera_image_data_s* image,
+ camera_image_data_s* postview,
+ camera_image_data_s* thumbnail,
+ void *user_data)
+{
+ struct appdata *ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ if (camapp->af_mode == CAM_FOCUS_FACE) {
+ cam_app_stop_video_stream();
+ }
+ gchar *filename = NULL;
+ FILE *fp = NULL;
+ if ((image->format == CAMERA_PIXEL_FORMAT_YUYV)
+ || (image->format == CAMERA_PIXEL_FORMAT_NV12)) {
+ cam_debug(LOG_UI,
+ "got raw data - format [%d] data [%p], length [%d], width [%d], height [%d]",
+ image->format, image->data, image->size, image->width,
+ image->height);
+ /* encode data */
+ /* MMImageJpegEncodeToFile(filename, src->data, src->width,src->height, src->format, 90); */
+ } else if (image->format == CAMERA_PIXEL_FORMAT_JPEG) {
+ cam_debug(LOG_UI,
+ "got JPEG data - data [%p], length [%d], width [%d], height [%d]",
+ image->data, image->size, image->width, image->height);
+ if (camapp->camera_mode == CAM_CAMERA_MODE
+ && camapp->shooting_mode == CAM_SELF_SINGLE_MODE) {
+ ;
+ } else {
+ cam_app_create_screennail_and_start_animation(user_data);
+ }
+
+ /* save file */
+ filename = cam_app_get_next_filename(CAM_FILE_EXTENTION_IMAGE);
+ if (filename == NULL) {
+ cam_critical(LOG_SYS, " Get next filename FAILED");
+ return;
+ }
+
+ fp = fopen(filename, "w+");
+ if (fp == NULL) {
+ cam_critical(LOG_SYS, "FileOPEN error!!");
+ return;
+ } else {
+ cam_debug(LOG_SYS, "FileOPEN success");
+ if (fwrite(image->data, image->size, 1, fp) != 1) {
+ cam_critical(LOG_SYS, "File write error!!");
+ fclose(fp);
+ return;
+ }
+ /*fsync(fp->_fileno);*/
+ /*block for increasing formance of shot-to-shot */
+ cam_debug(LOG_SYS, "File write success");
+ fclose(fp);
+ }
+ if (camapp->filename)
+ free(camapp->filename);
+ camapp->filename = strdup(filename);
+ free(filename);
+ filename = NULL;
+ }
+}
+
+void cam_app_create_capture_complete_ui_idlers(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ CamIdlerItem *item = NULL;
+ item = (CamIdlerItem *)g_malloc(sizeof(CamIdlerItem));
+ cam_ret_if(item == NULL);
+
+ if (item) {
+ item->data = data;
+ item->idler = ecore_idler_add(cam_image_capture_handle_idler, item);
+
+ if (item->idler)
+ ad->capture_cb_list = g_list_append(ad->capture_cb_list, item->idler);
+
+ cam_info(LOG_UI, "image capture idler add : %p ", item->idler);
+ }
+}
+
+static Eina_Bool __cam_app_progressbar_timer(void *data)
+{
+ double value=0.0;
+
+ Evas_Object *progressbar = (Evas_Object*) data;
+ if (progressbar == NULL) {
+ progress_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ value = elm_progressbar_value_get(progressbar);
+ if (value == 1.0) value = 0.0;
+ value = value + 0.025;
+ elm_progressbar_value_set(progressbar, value);
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+void cam_app_create_burst_popup(void *data)
+{
+#if 1/*TODO: need ui guide, for display popup*/
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+
+ ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) &&
+ (camapp->burst_shot == TRUE) && camapp->continuous_shot_data) {
+ ad->is_processing = TRUE;
+ REMOVE_TIMER(ad->continuous_af_timer);
+ cam_mm_stop_focusing();
+ cam_toolbar_update_shutter_button(ad, TOOLBAR_ITEM_STATE_DIM);
+
+ if (!cam_popup_for_burst_create(ad)) {/*TODO: need ui guide for this popup*/
+ cam_debug(LOG_UI, "cam_progress_popup_create() fail");
+ return;
+ }
+
+ if (!cam_popup_add_progress_bar(ad))
+ cam_debug(LOG_UI, "cam_popup_add_progress_bar() fail");
+
+ if (!cam_popup_set_text(ad, dgettext(PACKAGE, "IDS_CAM_BODY_PROCESSING_ING")))
+ cam_debug(LOG_UI, "cam_progress_popup_set_text() fail");
+ }
+ progress_timer = ecore_timer_add(0.01, __cam_app_progressbar_timer, ad->progress_popup_bar);
+#endif
+
+}
+
+static void __cam_capture_completed_cb(void *user_data)
+{
+ DEBUG_TRACE();
+ struct appdata *ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "cam_handle is NULL");
+
+ if (camapp->af_mode == CAM_FOCUS_FACE) {
+ cam_app_run_video_stream();
+ }
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) &&
+ (camapp->burst_shot == TRUE) && camapp->continuous_shot_data) {
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_BURST_SHOT_DISPLAY_POPUP);
+ cam_continuous_shot_finish_save_image();
+ } else {
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_BEST_SHOT_IMAGE_HANDLE);
+ }
+
+ DEBUG_TRACE("camapp->focus_mode %d ", camapp->focus_mode);
+ if (camapp->focus_mode == CAM_FOCUS_MODE_HALFSHUTTER) {
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->continuous_af_timer = ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, __cam_continuous_af_timer_cb, ad);
+ }
+ DEBUG_TRACE("camapp->burst_shot %d ", camapp->burst_shot);
+ DEBUG_TRACE("camapp->default_capture_mode %d ", camapp->default_capture_mode);
+ DEBUG_TRACE("ad->stop_continuous_shot %d ", ad->stop_continuous_shot);
+
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE)
+ && camapp->burst_shot == TRUE
+ && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
+ DEBUG_TRACE("TEST");
+ }
+
+ if (ad->ug_state == CAM_UG_PAUSE_STATE){
+ cam_critical(LOG_MM, "CAM_UG_PAUSE_STATE");
+ return;
+ }
+
+ if (!cam_app_preview_start(ad)) {
+ cam_critical(LOG_MM, "cam_app_preview_start failed");
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ return;
+ }
+ }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ DEBUG_TRACE("MM_MESSAGE_CAMCORDER_VIDEO_SNAPSHOT_CAPTURED");
+ ecore_idler_add(cam_capture_on_recording_handle, ad);
+ }
+ DEBUG_TRACE();
+}
+static void __cam_interrupted_cb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("policy is [%d]",policy);
+
+ switch (policy) {
+ case CAMERA_POLICY_SOUND:
+ DEBUG_TRACE("occur incoming call");
+ break;
+ case CAMERA_POLICY_SECURITY:
+ cam_app_mdm_syspopup(ad);
+ break;
+ default:
+ break;
+ }
+}
+
+static void __rec_interrupted_cb(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("policy is [%d]",policy);
+
+ switch (policy) {
+ case RECORDER_POLICY_SOUND:
+ DEBUG_TRACE("occur incoming call");
+ break;
+ case RECORDER_POLICY_SECURITY:
+ cam_app_mdm_syspopup(ad);
+ break;
+ default:
+ break;
+ }
+}
+
+static void __cam_error_cb(int error, camera_state_e current_state, void *user_data)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+
+ ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ int state = 0;
+ state = current_state;
+ cam_warning(LOG_MM,"MM ERROR occurs : code [%x], state [%d]",error, state);
+
+ char msg[1024] = { '\0', };
+
+ snprintf(msg, sizeof(msg), "Internal error %x", error);
+ cam_app_notice_popup(ad, msg, cam_app_timeout_notice_response_cb);
+
+}
+
+static void __recorder_state_cb(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+
+ ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ if (current == RECORDER_STATE_READY) {
+ ad->enable_mode_change = TRUE;
+ } else {
+ ad->enable_mode_change = FALSE;
+ }
+ cam_app_recorder_state_manager(previous, current, by_policy);
+}
+
+void __recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+ ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ /* update current time */
+ DEBUG_TRACE();
+ guint elapsed = 0;
+ guint filesize = 0;
+ elapsed = elapsed_time / 1000;
+ filesize = file_size;
+ if (camapp->rec_elapsed < elapsed) {
+ GValue value = { 0, };
+
+ cam_debug(LOG_UI, "time updated: %u ", elapsed);
+ CAM_GVALUE_SET_UINT(value, elapsed);
+ cam_handle_value_set(ad, PROP_REC_TIME, &value);
+ }
+ if (camapp->rec_filesize < filesize) {
+ GValue value = { 0, };
+
+ cam_debug(LOG_UI, "filesize updated: %u ", filesize);
+ CAM_GVALUE_SET_UINT(value, filesize);
+ cam_handle_value_set(ad, PROP_REC_FILE_SIZE, &value);
+ }
+}
+
+void __recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+ ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ DEBUG_TRACE("");
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (type == RECORDER_RECORDING_LIMIT_FREE_SPACE)
+ camapp->rec_stop_type = CAM_REC_STOP_NO_SPACE;
+ else if (type == RECORDER_RECORDING_LIMIT_TIME
+ || type == RECORDER_RECORDING_LIMIT_SIZE)
+ camapp->rec_stop_type = CAM_REC_STOP_TIME_LIMIT;
+ else {
+ DEBUG_TRACE("invalid type:%d", type);
+ camapp->rec_stop_type = CAM_REC_STOP_TIME_LIMIT;
+ }
+ ad->recording_commit = ecore_idler_add(cam_video_idler_record_stop, ad);
+ }
+}
+
+gboolean cam_callback_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+ camapp->error_cb = __cam_error_cb;
+ camapp->focus_cb = __cam_focus_cb;
+ camapp->state_cb = __cam_state_change_cb;
+ camapp->preview_cb = __cam_preview_cb;
+ camapp->capture_completed_cb = __cam_capture_completed_cb;
+ camapp->cam_interrupted_cb = __cam_interrupted_cb;
+
+ camapp->recording_status_cb = __recording_status_cb;
+ camapp->recording_state_changed_cb = __recorder_state_cb;
+ camapp->recording_limit_reached_cb = __recording_limit_reached_cb;
+ camapp->rec_interrupted_cb = __rec_interrupted_cb;
+
+ /*set face detect cb*/
+ camapp->face_detect_cb = cam_face_detection_focus_face_detected_cb;
+ camapp->capture_cb = __cam_capture_cb;
+
+ int ret = 1;
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ /*ret &= cam_mm_recorder_unset_state_changed_cb();*/
+ ret &= cam_mm_set_preview_cb(camapp->preview_cb, (void*)ad);
+ ret &= cam_mm_set_focus_changed_cb(camapp->focus_cb, (void*)ad);
+ ret &= cam_mm_set_state_changed_cb(camapp->state_cb, (void*)ad);
+ ret &= cam_mm_set_error_cb(camapp->error_cb, (void*)ad);
+ ret &= cam_mm_set_camera_interrupted_cb(camapp->cam_interrupted_cb, (void*)ad);
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ ret &= cam_mm_unset_state_changed_cb();
+ ret &= cam_mm_set_focus_changed_cb(camapp->focus_cb, (void*)ad);
+ ret &= cam_mm_recorder_set_state_changed_cb(camapp->recording_state_changed_cb, (void*)ad);
+ ret &= cam_mm_recorder_set_recording_status_cb(camapp->recording_status_cb, (void*)ad);
+ ret &= cam_mm_recorder_set_recording_limit_reached_cb(camapp->recording_limit_reached_cb, (void*)ad);
+ ret &= cam_mm_set_recorder_interrupted_cb(camapp->rec_interrupted_cb, (void*)ad);
+ }
+
+
+ return ret;
+
+}
+gboolean cam_app_lbs_stop(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ int ret = FALSE;
+
+ ret = cam_lbs_stop();
+ if(ret == FALSE) {
+ DEBUG_TRACE("cam_app_lbs_stop failed");
+ return FALSE;
+ }
+ camapp->gps = FALSE;
+ camapp->gps_level = cam_lbs_get_state();
+ indicator_update_gps(ad); /* update gps icon */
+ if (!cam_mm_remove_geo_tag())
+ DEBUG_TRACE("cam_mm_remove_geo_tag failed");
+
+ return TRUE;
+
+}
+gboolean cam_app_lbs_start(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ int ret = FALSE;
+
+ ret = cam_lbs_start(cam_app_update_gps_level, ad);
+ if (ret == FALSE) {
+ if(camapp->need_gps_popup == TRUE) {
+ cam_app_gps_enable_popup(ad,
+ dgettext(PACKAGE, "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG"), NULL);
+ }
+ return FALSE;
+ }
+ camapp->gps = TRUE;
+
+ REMOVE_TIMER(ad->gps_animation_timer);
+ ad->gps_animation_timer = ecore_timer_add(0.5, cam_app_gps_timer_cb, ad);
+
+ return TRUE;
+
+}
+
+static void cam_app_close_ug(void *data)
+{
+ cam_debug(LOG_UI, " ");
+ struct appdata *ad = (struct appdata *)data;
+ /* IDS problem */
+
+ cam_info(LOG_UI, "ad->imageviewer_ug : %p", ad->imageviewer_ug);
+ if (ad->imageviewer_ug) {
+ ug_destroy(ad->imageviewer_ug);
+ ad->imageviewer_ug = NULL;
+ }
+ if (ad->location_ug) {
+ ug_destroy(ad->location_ug);
+ ad->location_ug = NULL;
+ }
+
+ cam_file_init(NULL);
+ return;
+}
+
+static void __ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+ cam_debug(LOG_UI, " ");
+
+ Evas_Object *base;
+
+ if (!ug || !priv)
+ return;
+
+ base = ug_get_layout(ug);
+ if (!base)
+ return;
+
+ switch (mode) {
+ case UG_MODE_FULLVIEW:
+ evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ ug_disable_effect(ug);/*note: disable Image viewer ug effect*/
+ evas_object_show(base);
+ break;
+ default:
+ break;
+ }
+}
+
+void __ug_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ cam_debug(LOG_UI, " ");
+
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "cam_handle is NULL");
+
+ char *val = NULL;
+ ad->path_in_return = false;
+
+ if (ad->imageviewer_ug) {
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
+ if (result == NULL) {
+ return;
+ }
+
+ if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
+ service_h reply;
+ service_create(&reply);
+
+ service_get_extra_data(result, "crop_image_path", &val);
+ service_add_extra_data(reply, "crop_image_path", val);
+ service_get_extra_data(result, "image_path", &val);
+ service_add_extra_data(reply, "image_path", val);
+
+ service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
+ service_destroy(reply);
+
+ ad->path_in_return = true;
+ } else if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "ug-setting-call-efl") == 0)) {
+ service_h reply;
+ service_create(&reply);
+
+ service_get_extra_data(result, "crop_image_path", &val);
+ service_add_extra_data(reply, SERVICE_DATA_SELECTED, val);
+
+ service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
+ service_destroy(reply);
+
+ ad->path_in_return = true;
+ } else {
+ /* get result value. */
+ service_get_extra_data(result, "Result", &val);
+
+ if (strcmp(val, "Ok") == 0) {
+ ad->path_in_return = true;
+ }
+ else if (strcmp(val, "Cancel") == 0) {
+ ad->path_in_return = false;
+ }
+ }
+ }
+ }
+}
+
+void __ug_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ cam_debug(LOG_UI, " ");
+
+ if (!ug || !priv)
+ return;
+
+ struct appdata *ad = (struct appdata *)priv;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ if (ad->path_in_return) {
+ elm_win_lower(ad->win_main);
+ cam_app_exit(ad);
+ } else {
+ ad->ug_is_deleting_process = TRUE;
+
+ cam_app_timeout_checker_init(ad);
+
+ if (ad->imageviewer_ug) {
+ ug_destroy(ad->imageviewer_ug);
+ ad->imageviewer_ug = NULL;
+ }
+
+ if (ad->location_ug) {
+ ug_destroy(ad->location_ug);
+ ad->location_ug = NULL;
+ camapp->need_gps_popup = FALSE;
+ if (!cam_app_lbs_start(ad)) {
+ if (!cam_app_lbs_stop(ad))
+ DEBUG_TRACE("The LBS failed to stop");
+ }
+ }
+
+ cam_app_start_rotate(ad, false);
+
+ ecore_idler_add(__ug_destory_postprocessing, ad);
+ }
+
+ return;
+}
+
+Eina_Bool __ug_destory_postprocessing(void *data)
+{
+ struct appdata *ad = data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ ad->ug_is_deleting_process = TRUE;
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ cam_app_focus_guide_create(ad);
+ show_toolbar_edje(ad);
+
+ if (!cam_file_check_exists(camapp->filename)) {
+ free(camapp->filename);
+ camapp->filename = NULL;
+ }
+
+ if (!cam_app_preview_start(ad)) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ }
+
+ cam_mm_set_mdnie_mode(TRUE);
+
+ if (camapp->outdoor_visibility)
+ cam_mm_set_outdoor_visibility(TRUE);
+
+ power_lock_state(POWER_STATE_NORMAL, 0);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if(camapp->af_mode == CAM_FOCUS_FACE){
+ /*start face detection*/
+ if (cam_mm_is_supported_face_detection()) {
+ cam_mm_start_camera_face_detection(camapp->face_detect_cb, (void *)ad);
+ if (!cam_mm_set_preview_cb(cam_face_detection_focus_start_stream, (void*)ad)) {
+ DEBUG_TRACE("preview callback set error");
+ }
+ cam_app_run_video_stream();
+ } else {
+ DEBUG_TRACE("not support face detect mode");
+ }
+ }
+ }
+ if (!cam_key_grab_init(ad))
+ DEBUG_TRACE("cam_key_grab_init fail");
+ cam_app_key_event_init(ad);
+
+ cam_app_update_quickview_icon(ad);
+ cam_file_init(NULL);
+ ad->ug_is_deleting_process = FALSE;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+gboolean cam_app_run_location_ug(void *data)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ if (ad->ug_is_deleting_process) /*NOTE:before old ug is not deleted completely, should not create new ug*/
+ return FALSE;
+
+ if (ad->location_ug) {
+ ug_destroy(ad->location_ug);
+ ad->location_ug = NULL;
+ }
+
+ DEL_EVAS_OBJECT(ad->focus_edje);
+
+ struct ug_cbs cbs = { 0, };
+
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_result_cb;
+ cbs.destroy_cb = __ug_destroy_cb;
+ cbs.priv = (void *)data;
+
+ /* Create UI gadget */
+ ad->location_ug = ug_create(NULL, LOCATION_UG_NAME, UG_MODE_FULLVIEW, NULL, &cbs);
+
+ if (!ad->location_ug) {
+ cam_critical(LOG_SYS, "location UI Gadget create fail...");
+ return FALSE;
+ } else {
+ if (ad->location_ug) {
+ cam_mm_set_mdnie_mode(FALSE);
+
+ if (camapp->outdoor_visibility)
+ cam_mm_set_outdoor_visibility(FALSE);
+
+ cam_app_preview_stop();
+ power_unlock_state(POWER_STATE_NORMAL);
+ } else {
+ cam_warning(LOG_UI, "Cannot create location_ug");
+ cam_file_init(NULL);
+ return FALSE;
+ }
+ }
+
+ cam_app_timeout_checker_remove();
+
+ return TRUE;
+}
+gboolean cam_app_run_image_viewer_ug(void *data, char *file_path, gboolean launch_special_view)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE,"camapp is NULL");
+ cam_retvm_if(file_path == NULL, FALSE, "file_path is NULL");
+
+ if (ad->ug_is_deleting_process) /*NOTE:before old ug is not deleted completely, should not create new ug*/
+ return FALSE;
+
+ cam_debug(LOG_UI, "path :%s", file_path);
+
+ if (ad->imageviewer_ug) {
+ return FALSE;/*NOTE: ug is login, not create ug again.*/
+ }
+ if (ad->is_rotating == TRUE) {
+ return FALSE; /*note: while rotating, could not create image view ug*/
+ }
+
+ DEL_EVAS_OBJECT(ad->focus_edje);
+
+ struct ug_cbs cbs = { 0, };
+
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_result_cb;
+ cbs.destroy_cb = __ug_destroy_cb;
+ cbs.priv = (void *)data;
+
+ /* param */
+ if (ad->imageviewer_service)
+ service_destroy(ad->imageviewer_service);
+
+ int ret = service_create(&ad->imageviewer_service);
+ if (ret != SERVICE_ERROR_NONE) {
+ cam_critical(LOG_UI, "service_create error [%d]", ret);
+ return FALSE;
+ }
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
+ if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "SETAS");
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_SET_AS_TYPE, "CallerID");
+ } else if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "ug-setting-call-efl") == 0)) {
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "SETAS");
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_SET_AS_TYPE, "VideoCallID");
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_RESOLUTION, "176x144");
+ } else {
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "DISPLAY");
+ }
+ } else if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "CAMERA");
+ }
+
+ service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_FILE_PATH_KEY_NAME, file_path);
+
+ /* Create UI gadget */
+ ad->imageviewer_ug = ug_create(NULL, IMAGE_VIEWER_UG_NAME, UG_MODE_FULLVIEW, ad->imageviewer_service, &cbs);
+
+ if (!ad->imageviewer_ug) {
+ cam_critical(LOG_SYS, "image viewer UI Gadget create fail...");
+ return FALSE;
+ } else {
+ if (ad->imageviewer_ug) {
+ cam_app_key_event_deinit(ad);
+ if(!cam_key_grab_deinit(ad)){
+ DEBUG_TRACE("cam_key_grab_deinit fail");
+ }
+ cam_mm_set_mdnie_mode(FALSE);
+
+ if (camapp->outdoor_visibility)
+ cam_mm_set_outdoor_visibility(FALSE);
+
+ cam_app_preview_stop();
+ power_unlock_state(POWER_STATE_NORMAL);
+ } else {
+ cam_warning(LOG_UI, "Cannot create imageviewer ug");
+ cam_file_init(NULL);
+ return FALSE;
+ }
+ }
+
+ if(camapp->af_mode == CAM_FOCUS_FACE){
+ cam_face_detection_reset();
+ }
+ DEBUG_TRACE("END");
+
+ cam_app_timeout_checker_remove();
+
+ return TRUE;
+}
+
+gboolean cam_app_run_media_browser(void *data, gchar *filename)
+{
+ cam_debug(LOG_UI, "filename = %s", filename);
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int state = 0;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ debug_fenter(LOG_UI);
+
+ state = cam_mm_get_state();
+ if (state > CAMERA_STATE_PREVIEW) {
+ cam_warning(LOG_MM, "Invaild state : %d", state);
+ return FALSE;
+ }
+
+ if (!cam_app_run_image_viewer_ug(ad, cam_app_get_last_filename(), FALSE)) {
+ DEBUG_TRACE("cam_app_run_image_viewer_ug failed");
+ return FALSE;
+ }
+
+ if (camapp->thumbnail_name) { /* Some image is deleted from image viewer and galler -> BS */
+ free(camapp->thumbnail_name);
+ camapp->thumbnail_name = NULL;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_app_clear_engine_data(void *data, gboolean release)
+{
+#ifndef CAMERA_MACHINE_I686
+
+ /* release is not used */
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ cam_debug(LOG_UI, "");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+#endif
+ return TRUE;
+}
+
+gboolean cam_app_check_wide_resolution(int id)
+{
+
+ gfloat get_value = (HIWORD(id) * 3.0) / (LOWORD(id) * 4.0);
+ if (ABS(get_value - 1.0) < CAM_EPSINON
+ || ABS((gfloat)((HIWORD(id) * 25.0) / (LOWORD(id) * 36.0)) - 1.0) < CAM_EPSINON) {
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_app_is_skip_video_stream()
+{ /*if true , must finish function in stream callback function */
+ return video_stream_skip_flag;
+}
+
+void cam_app_stop_video_stream()
+{
+ video_stream_skip_flag = TRUE;
+}
+
+void cam_app_run_video_stream()
+{
+ video_stream_skip_flag = FALSE;
+}
+
+Eina_Bool _auto_shot_idle_cb(void *data)
+{
+ debug_fenter(LOG_CAM);
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ gboolean capture_result = false;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ if (ad->auto_shot_idle) {
+ ecore_idler_del(ad->auto_shot_idle);
+ ad->auto_shot_idle = NULL;
+ }
+
+ cam_warning(LOG_CAM, "position state not enough");
+ debug_fleave(LOG_CAM);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+gboolean cam_app_create_progressbar(void *data)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_debug(LOG_UI, "");
+
+ cam_app_destroy_progressbar(ad);
+
+ ad->progressbar = elm_progressbar_add(ad->ug_base);
+ cam_retvm_if(ad->progressbar == NULL, FALSE, "Cannot create progressbar object\n");
+
+ elm_object_style_set(ad->progressbar, "list_progress");
+ evas_object_size_hint_align_set(ad->progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_show(ad->progressbar);
+
+ return TRUE;
+}
+
+gboolean cam_app_set_progressbar_value(void *data, double value)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progressbar) {
+ cam_debug(LOG_UI, " value [%f]", value);
+ elm_progressbar_value_set(ad->progressbar, value);
+ } else
+ UI_TEST_LOG("");
+
+ return TRUE;
+}
+
+gboolean cam_app_set_progressbar_text(void *data, const char *text)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_retv_if(text == NULL, FALSE);
+
+ if (ad->progressbar_edje)
+ edje_object_part_text_set(_EDJ(ad->progressbar_edje),
+ "progressbar_text", text);
+
+ return TRUE;
+}
+
+gboolean cam_app_destroy_progressbar(void *data)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_debug(LOG_UI, " start");
+ DEL_EVAS_OBJECT(ad->progressbar);
+ DEL_EVAS_OBJECT(ad->progressbar_edje);
+ cam_debug(LOG_UI, " done");
+
+ return TRUE;
+}
+
+gboolean cam_app_hide_progressbar(void *data)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_debug(LOG_UI, " start");
+ HIDE_EVAS_OBJECT(ad->progressbar);
+ HIDE_EVAS_OBJECT(ad->progressbar_edje);
+ cam_debug(LOG_UI, " done");
+
+ return TRUE;
+}
+
+gboolean cam_app_timeout_checker_update()
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+ gdouble c_time = 0.0;
+ cam_debug(LOG_UI, "");
+
+ ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ if (ad->timeout_checker) {
+ c_time = _get_current_time();
+ ecore_timer_delay(ad->timeout_checker,
+ (c_time - camapp->last_time));
+ camapp->last_time = c_time;
+ }
+
+ return TRUE;
+}
+
+void cam_app_mdm_syspopup(void *data)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ bundle *b = NULL;
+ b = bundle_create();
+ if (b != NULL) {
+ bundle_add(b, "_SYSPOPUP_CONTENT_", dgettext(PACKAGE, "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"));
+ syspopup_launch("mdm-syspopup", b);
+ bundle_free(b);
+ }
+
+ cam_app_exit(ad);
+}
+
+void cam_app_notice_popup(void *data, const char *msg,
+ void (*func) (void *data,
+ Evas_Object *obj,
+ void *event_info)
+ )
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ cam_retm_if(ad->ug_base == NULL, " ad->ug_base is NULL");
+ Evas_Object *popup = NULL;
+
+ popup = elm_popup_add(ad->ug_base);
+ if (popup == NULL)
+ return;
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, msg);
+ /*elm_popup_mode_set(popup, ELM_POPUP_TYPE_ALERT);*/
+ elm_popup_timeout_set(popup, 3.0);
+ evas_object_smart_callback_add(popup, "timeout", func, data);
+ ad->waring_popup = popup;
+ evas_object_show(popup);
+}
+
+static void cam_app_capture_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, " camapp is NULL");
+ if (obj)
+ evas_object_del(obj);
+ obj = NULL;
+
+ cam_app_stop_capture(ad);
+ cam_app_exit(ad);
+}
+
+void cam_app_gps_enable_popup(void *data, const char *msg,
+ Eina_Bool (*func) (void *data))
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ cam_retm_if(ad->ug_base == NULL, " ad->ug_base is NULL");
+ Evas_Object * popup = NULL;
+ popup = elm_popup_add(ad->ug_base);
+ if (popup == NULL)
+ return;
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ char popup_str[1024 + 1] = { '\0',};
+ snprintf(popup_str, 1024, "%s%s%s", _("<font=SLP:style=Roman><color=#000000><align=center>"),
+ msg, _("</align></color></font>"));
+
+ elm_object_text_set(popup, popup_str);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_text_set(btn1, dgettext(PACKAGE, "IDS_CAM_BODY_SETTINGS"));
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", cam_app_gps_popup_response_ok_cb, (void*)ad);
+ Evas_Object *btn2 = elm_button_add(popup);
+ elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+ elm_object_part_content_set(popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", cam_app_gps_popup_response_cancel_cb, (void*)ad);
+ ad->confirm_popup = popup;
+
+ evas_object_show(popup);
+
+}
+
+void cam_app_timeout_notice_response_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ if (obj){
+ evas_object_del(obj);
+ obj = NULL;
+ }
+
+ cam_app_stop_capture(ad);
+ cam_app_exit(ad);
+}
+
+/*set flash close*/
+void cam_close_flash_feature(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, " appdata is NULL");
+ if (camapp->flash > CAM_FLASH_OFF) {
+ GValue value = { 0 };
+ CAM_GVALUE_SET_INT(value, CAM_FLASH_OFF);
+ gint tempval = g_value_get_int(&value);
+ if (!cam_mm_set_flash(tempval)) {
+ cam_warning(LOG_UI, "flash set fail");
+ return;
+ }
+ camapp->flash = tempval;
+ }
+}
+/*lowbattery callback*/
+void cam_app_lowbattery_close_flash_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ if (obj)
+ evas_object_del(obj);
+ obj = NULL;
+ cam_close_flash_feature(ad);
+
+ cam_toolbar_update(ad);
+}
+
+static Eina_Bool cam_app_timeout_checker_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ CamAppData *camapp = NULL;
+ gdouble diff = 0.0;
+
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ ad->timeout_checker = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ ad->timeout_checker = NULL;
+
+ diff = _get_current_time() - camapp->last_time;
+
+ if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
+ && (diff >= CAMERA_APP_TIMEOUT)) {
+ cam_debug(LOG_UI, "Close camera application!!! diff time:[%lf]", diff);
+ ad->timeout_checker = NULL;
+ camapp->last_time = 0;
+ elm_win_lower(ug_get_window());
+ }
+
+ cam_debug(LOG_UI, "diff time : [%lf]", diff);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+gboolean cam_app_timeout_checker_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_CAM);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ if (ad->timeout_checker) {
+ ecore_timer_del(ad->timeout_checker);
+ ad->timeout_checker = NULL;
+ }
+ if (ad->timer_timer) {
+ ad->timer_activated = false;
+ DEL_EVAS_OBJECT(ad->timer_icon_edje);
+ REMOVE_TIMER(ad->timer_timer);
+ }
+ if (ad->continuous_shot_timer) {
+ REMOVE_TIMER(ad->continuous_shot_timer);
+ }
+ if (ad->check_af_timer) {
+ REMOVE_TIMER(ad->check_af_timer);
+ }
+ if (ad->gps_animation_timer) {
+ REMOVE_TIMER(ad->gps_animation_timer);
+ }
+
+ ad->timeout_checker = ecore_timer_add(CAMERA_APP_TIMEOUT, cam_app_timeout_checker_cb, ad);
+ camapp->last_time = _get_current_time();
+
+ return TRUE;
+}
+
+gboolean cam_app_timeout_checker_remove(void)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_CAM);
+
+ ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+
+ if (ad->timeout_checker) {
+ ecore_timer_del(ad->timeout_checker);
+ ad->timeout_checker = NULL;
+ }
+ camapp->last_time = 0;
+
+ return TRUE;
+}
+
+#ifdef USE_FIFO_THREAD
+void *cam_app_FIFO_thread_run(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ int fd = 0;
+
+ char buf[128] = { '\0', };
+
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ if (!access(CAM_FIFO_PATH, F_OK)) {
+ unlink(CAM_FIFO_PATH);
+ }
+
+ if (-1 == mkfifo(CAM_FIFO_PATH, 0666)) {
+ cam_critical(LOG_SYS, " Make CamApp FIFO failed.");
+ cam_app_exit(ad);
+ return NULL;
+ }
+
+ fd = open(CAM_FIFO_PATH, O_RDWR);
+ if (fd < 0) {
+ cam_critical(LOG_SYS, " Open CamApp FIFO failed.");
+ cam_app_exit(ad);
+ return NULL;
+ }
+
+ cam_debug(LOG_SYS, "Open CamApp FIFO [%s] success", CAM_FIFO_PATH);
+
+ while (1) {
+ memset(buf, 0x00, 128);
+
+ cam_debug(LOG_SYS, " Wait CamApp FIFO write...");
+
+ int count = read(fd, buf, 128);
+ if (count == -1)
+ cam_debug(LOG_SYS, " read error occur!");
+
+ cam_debug(LOG_SYS, " Read from CamApp FIFO : [%s]", buf);
+
+ if (!strcmp(buf, CAM_CAPTURE_AUTO_START)) {
+ cam_debug(LOG_SYS, " #### Start _auto_shot_idle_cb");
+ _auto_shot_idle_cb(data);
+ } else if (!strcmp(buf, CAM_FIFO_CMD_EXIT)) {
+ break;
+ } else {
+ /* Error */
+ cam_warning(LOG_SYS, " Skip this...");
+ }
+ }
+
+ close(fd);
+ unlink(CAM_FIFO_PATH);
+
+ cam_debug(LOG_SYS, " Exit CamApp FIFO thread...");
+
+ return NULL;
+}
+
+void cam_app_FIFO_thread_exit()
+{
+ int fd = open(CAM_FIFO_PATH, O_WRONLY);
+ char *str_write = CAM_FIFO_CMD_EXIT;
+
+ if (fd < 0) {
+ cam_critical(LOG_SYS, " Open CammApp FIFO file[%s] failed",
+ CAM_FIFO_PATH);
+ } else {
+ int count = write(fd, str_write, strlen(str_write));
+ if (count == -1)
+ cam_debug(LOG_SYS, " write error occur! ");
+ close(fd);
+
+ cam_debug(LOG_SYS, " Write [%s] to FIFO Done.", str_write);
+ }
+}
+
+#endif
+
+gboolean cam_app_create_file_register_thread(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ int err = 0;
+ cam_debug(LOG_SYS, "");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ err = pthread_mutex_init(&(ad->file_reg_mutex), NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register mutex failed");
+ return FALSE;
+ }
+
+ err = pthread_cond_init(&(ad->file_reg_cond), NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register cond failed");
+ return FALSE;
+ }
+
+ ad->file_reg_queue = g_queue_new();
+ if (ad->file_reg_queue == NULL) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register queue failed");
+ return FALSE;
+ }
+
+ err = pthread_create(&(ad->file_reg_thread), NULL, cam_app_file_register_thread_run, (void *)ad);
+
+ if (err != 0) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register thread failed");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void *cam_app_file_register_thread_run(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ gboolean Exit_loop = FALSE;
+ cam_debug(LOG_FILE, "");
+
+ pthread_mutex_lock(&ad->file_reg_mutex);
+
+ while (!Exit_loop) {
+ cam_debug(LOG_FILE, " wait signal...");
+
+ pthread_cond_wait(&ad->file_reg_cond, &ad->file_reg_mutex);
+
+ cam_debug(LOG_FILE, " signal received");
+ while (!g_queue_is_empty(ad->file_reg_queue)) {
+ char *filename = NULL;
+ filename = g_queue_pop_head(ad->file_reg_queue);
+ DEBUG_TRACE("filename is %s", filename);
+ if (strcmp(REG_THREAD_EXIT, filename) == 0) {
+ free(filename);
+ Exit_loop = TRUE;
+ break;
+ } else if (strcmp(UPDATE_THUMBNAIL, filename) == 0) {
+ /*TODO:*/
+ } else if (strcmp(UPDATE_THUMBNAIL_NO_ANI, filename) == 0) {
+ /*TODO:*/
+ } else if (strcmp(REC_FILE_SAVE_REG, filename) == 0) {
+ cam_rec_save_and_register_video_file(ad);
+ free(filename);
+ filename = NULL;
+ } else {
+ __cam_single_shot_reg_file(filename);
+ free(filename);
+ cam_debug(LOG_FILE, " register done.");
+ }
+ }
+ /*TODO: update thumbnail*/
+
+ }
+
+ pthread_mutex_unlock(&ad->file_reg_mutex);
+
+ pthread_mutex_destroy(&ad->file_reg_mutex);
+ pthread_cond_destroy(&ad->file_reg_cond);
+
+ cam_debug(LOG_SYS, " thread exit...");
+
+ return NULL;
+}
+
+void cam_app_file_register_thread_exit(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ char *exit_cmd = NULL;
+
+ if (ad->file_reg_queue != NULL) {
+ exit_cmd = strdup(REG_THREAD_EXIT);
+ g_queue_push_tail(ad->file_reg_queue, exit_cmd);
+ pthread_cond_signal(&ad->file_reg_cond);
+ }
+ return;
+}
+
+gboolean cam_app_init_with_args(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ cam_retvm_if(ad->camapp_handle == NULL, FALSE, "camapp is NULL");
+
+ cam_debug(LOG_SYS, "");
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
+ ad->camapp_handle->camera_mode = ad->exe_args->cam_mode;
+ if (CAM_CAMCORDER_MODE == ad->camapp_handle->camera_mode) {
+ if (ad->exe_args->resolution == CAM_RESOLUTION_QCIF) {
+ ad->camapp_handle->recording_mode = CAM_RECORD_MMS;
+ ad->camapp_handle->video_resolution = CAM_RESOLUTION_QCIF;
+ ad->camapp_handle->reserved_setting_data.rear_recording_mode = CAM_RECORD_MMS;
+ ad->camapp_handle->reserved_setting_data.rear_video_resolution = CAM_RESOLUTION_QCIF;
+ ad->camapp_handle->reserved_setting_data.front_recording_mode = CAM_RECORD_SELF_MMS;
+ ad->camapp_handle->reserved_setting_data.front_video_resolution = CAM_RESOLUTION_QCIF;
+ ad->camapp_handle->fps = FPS_SLOW;
+ if (ad->exe_args->size_limit <= 0) {
+ ad->camapp_handle->size_limit = CAM_REC_MMS_MAX_SIZE;
+ } else {
+ ad->camapp_handle->size_limit = ad->exe_args->size_limit;
+ }
+ ad->camapp_handle->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
+ } else {
+ ad->camapp_handle->recording_mode = CAM_RECORD_NORMAL;
+ ad->camapp_handle->video_resolution = ad->exe_args->resolution;
+ ad->camapp_handle->fps = FPS_DEFAULT;
+ if (ad->exe_args->size_limit <= 0) {
+ ad->camapp_handle->size_limit = CAM_REC_NORMAL_MAX_SIZE;
+ } else {
+ ad->camapp_handle->size_limit = ad->exe_args->size_limit;
+ }
+ ad->camapp_handle->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
+ }
+ } else {
+ ad->camapp_handle->shooting_mode = CAM_SINGLE_MODE;
+ ad->camapp_handle->default_capture_mode = CAM_CAPTURE_SINGLE;
+ if (ad->exe_args->width <= 0
+ || ad->exe_args->height <= 0) {
+ ad->camapp_handle->photo_resolution = CAM_RESOLUTION_VGA;
+ } else {
+ ad->camapp_handle->photo_resolution = CAM_RESOLUTION(ad->exe_args->width, ad->exe_args->height);
+ }
+ }
+ ad->camapp_handle->review = ad->exe_args->review;
+ } else {
+ cam_debug(LOG_SYS, " camera launch mode is normal.");
+ return FALSE;
+ }
+
+ cam_debug(LOG_SYS, " done");
+
+ return TRUE;
+}
+
+Eina_Bool cam_app_focus_guide_create(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, EINA_FALSE);
+
+ /*NOTE: TODO, perhaps there is issue:
+ while focus is animating, now delete focus_edje, what will occur?
+ */
+ cam_ui_effect_utils_stop_zoom_effect();
+ DEL_EVAS_OBJECT(ad->focus_edje);
+
+ ad->focus_edje = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "focus_image");
+
+ if (ad->focus_edje == NULL) {
+ cam_critical(LOG_UI, "focus_edje load failed ");
+ return EINA_FALSE;
+ }
+ evas_object_show(ad->focus_edje);
+
+#ifdef CAMERA_MACHINE_I686
+ evas_object_hide(ad->focus_edje);
+#endif
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool __focus_guide_hide_timer_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ if (ad->focus_guide_hide_timer)
+ ad->focus_guide_hide_timer = NULL;
+
+ if (ad->focus_edje)
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool cam_app_focus_guide_update(void *data)
+{
+ DEBUG_TRACE();
+#ifndef CAMERA_MACHINE_I686
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(ad->camapp_handle == NULL, EINA_FALSE, "camapp is NULL");
+
+ if (ad->focus_edje == NULL) {
+ return EINA_FALSE;
+ }
+
+ REMOVE_TIMER(ad->focus_guide_hide_timer);
+
+ /*note: relocation the focus edje*/
+ evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
+ evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
+ evas_object_show(ad->focus_edje);
+
+ if (ad->imageviewer_ug) {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return EINA_FALSE;
+ }
+
+ if (ad->confirm_popup) {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return EINA_FALSE;
+ }
+
+ if (ad->is_processing) {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return EINA_FALSE;
+ }
+
+ if (ad->setting_ctxpopup
+ || (ad->tip_popup)
+ || (ad->toolbar_setting_popup)
+ || (ad->edit_shortcuts_popup)) {
+ cam_debug(LOG_UI, "do not need to update focus");
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return EINA_FALSE;
+ }
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE
+ && ad->mm_state == CAMERA_STATE_CAPTURING) {
+ return EINA_FALSE;
+ }
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE
+ && (ad->mm_state < CAMERA_STATE_PREVIEW || camapp->af_mode == CAM_FOCUS_FACE)) {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ return EINA_FALSE;
+ } else {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE)
+ && (camapp->recording_mode == CAM_RECORD_SLOW
+ || camapp->recording_mode == CAM_RECORD_FAST
+ || camapp->recording_mode == CAM_RECORD_SELF
+ || camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ } else {
+ char signame[30] = { '\0', };
+ const char *focus_state_name[4] = {
+ "hide",
+ "notready",
+ "focused",
+ "failed",
+ };
+
+ snprintf(signame, sizeof(signame), "%s,%s", "focus", focus_state_name[camapp->focus_state]);
+ edje_object_signal_emit(_EDJ(ad->focus_edje), signame, "program");
+ }
+
+ if ((camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED) || (camapp->focus_state == CAMERA_FOCUS_STATE_FAILED))
+ ad->focus_guide_hide_timer = ecore_timer_add(1.0, __focus_guide_hide_timer_cb, ad);
+ }
+#endif
+ return EINA_TRUE;
+}
+
+static int cam_app_camera_state_manager(int previous, int current, gboolean by_asm)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+
+ cam_info(LOG_UI, "STATE_CHANGED : %d -> %d ", previous, current);
+
+ ad = (struct appdata *)cam_appdata_get();
+ cam_retv_if(ad == NULL, FALSE);
+
+ camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+
+ ad->mm_state = current;
+
+ if (current == CAMERA_STATE_PREVIEW) {
+ if (previous == CAMERA_STATE_CAPTURING) {
+ CAM_TA_ACUM_ITEM_END(" capture stop to preview", 0);
+ CAM_TA_ACUM_ITEM_END("Total capture time", 0);
+ cam_debug(LOG_MM, "capture end, preview start");
+ }
+ }
+
+ if (current == CAMERA_STATE_CAPTURING) {
+ if (previous == CAMERA_STATE_PREVIEW) {
+ cam_debug(LOG_MM, "capture start, preview end");
+ if ((camapp->shooting_mode == CAM_SELF_SINGLE_MODE
+ && camapp->default_capture_mode == CAM_CAPTURE_SINGLE)){
+ cam_app_create_screennail_and_start_animation(ad);
+ }
+ }
+ }
+
+ return 1;
+}
+
+static int cam_app_recorder_state_manager(int previous, int current, gboolean by_asm)
+{
+ struct appdata *ad = NULL;
+ CamAppData *camapp = NULL;
+
+ cam_info(LOG_UI, "STATE_CHANGED : %d -> %d ", previous, current);
+
+ ad = (struct appdata *)cam_appdata_get();
+ cam_retv_if(ad == NULL, FALSE);
+
+ camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+
+ ad->mm_state = current;
+
+ if (((previous == RECORDER_STATE_RECORDING)
+ && (current != RECORDER_STATE_PAUSED))
+ ||((previous == RECORDER_STATE_PAUSED)
+ && (current != RECORDER_STATE_RECORDING))) {/*finished recording*/
+
+ cam_info(LOG_UI, "Set gamma NORMAL");
+
+ if (camapp->filename) {
+ free(camapp->filename);
+ camapp->filename = NULL;
+ }
+
+ if (cam_mm_get_filename(&camapp->filename, 0) == FALSE) { /*file size not used,so set to 0*/
+ return FALSE;
+ }
+ cam_info(LOG_UI, "Recorded file name [%s] ", camapp->filename);
+
+/*note: shooting mode change*/
+#if 1
+ /* change to camera mode*/
+ /*
+ * TODO: if for any reason, not run here, there will be caused now now recording, but in record mode
+ * So: I suggest while click capture button: judge now state and whether recording.
+ */
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ if (ad->ug_state != CAM_UG_PAUSE_STATE) {/*if now is pause state, so do not set mode, just set while resume*/
+ if (cam_app_mode_change(ad, CAM_CAMERA_MODE) == FALSE)
+ return FALSE;;
+
+ }
+ }
+#endif
+ /*TODO: I think state manager callback is called in thread, so we could do data logic here,
+ and request ui operation to ecore_pipe*/
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_VIDEO_CAPTURE_HANDLE);
+
+ }
+ return TRUE;
+}
+
+static Eina_Bool __cam_ug_destroy(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ ug_destroy_me(ad->camera_ug);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+gboolean cam_app_exit(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ ecore_idler_add(__cam_ug_destroy, ad);
+
+ return TRUE;
+}
+
+static void cam_mmc_state_change_cb(keynode_t *key, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int mmc_state = vconf_keynode_get_int(key);
+
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_debug(LOG_SYS, " start");
+
+ if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED
+ && camapp->storage == CAM_STORAGE_EXTERNAL) {
+
+ GValue value = { 0 };
+ int mm_state = cam_mm_get_state();
+
+ if (mm_state == CAMERA_STATE_CAPTURING
+ && (camapp->shooting_mode == CAM_SINGLE_MODE
+ && camapp->default_capture_mode == CAM_CAPTURE_BURST)
+ &&camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (camapp->continuous_shot_data) {
+ if (camapp->continuous_shot_data->error != NULL) {
+ cam_debug(LOG_SYS, " error [%s,%d]", camapp->continuous_shot_data->error->message, camapp->continuous_shot_data->error->code);
+ g_error_free(camapp->continuous_shot_data->error);
+ camapp->continuous_shot_data->error = NULL;
+ }
+
+ camapp->continuous_shot_data->error = cam_error_new_literal(CAM_CONTI_SHOT_ERROR_MMC_REMOVED, dgettext(PACKAGE, "IDS_CAM_POP_MEMORY_CARD_REMOVED"));
+ } else {
+ cam_debug(LOG_SYS, " continuous_shot_data is NULL");
+ }
+ } else {
+ if ((mm_state == RECORDER_STATE_RECORDING
+ || mm_state == RECORDER_STATE_PAUSED)
+ &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ cam_video_record_cancel(ad);
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_REMOVE_MMC_RECORDING"), cam_app_popup_response_cb);
+ }
+#ifndef CAMERA_MACHINE_I686
+ else if (mm_state != CAMERA_STATE_CAPTURING
+ && camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (cam_app_check_blocking_popup()) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_MEMORY_CARD_REMOVED"), cam_app_popup_response_cb);
+ }
+ }
+#endif
+ }
+
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+
+ cam_info(LOG_UI, "MMC card is removed");
+ }
+
+ cam_toolbar_setting_popup_update(ad);
+ indicator_update_storage(ad);
+ return;
+}
+
+#ifdef CAMAPP_SIG_HANDLING
+/**
+* This function registers a user space signal handler for the signal SIGSEGV (Signal #11)
+*
+* @return nothing
+*/
+static void cam_app_register_sigsegv(void)
+{
+ debug_fenter(LOG_SYS);
+
+ /* cam_app_act.sa_flags = SA_SIGINFO | SA_NOCLDSTOP; */
+ cam_app_act.sa_flags = SA_SIGINFO;
+ cam_app_act.sa_handler = (void *)cam_app_sigsegv_handler;
+ sigemptyset(&cam_app_act.sa_mask);
+
+#ifdef ENABLE_CHECK_CAM_STATUS
+ sigaction(SIGALRM, &cam_app_act, &cam_app_act_old); /* register an action with a previous action */
+#endif
+ sigaction(SIGABRT, &cam_app_act, &cam_app_act_old);
+ sigaction(SIGSEGV, &cam_app_act, &cam_app_act_old);
+ sigaction(SIGILL, &cam_app_act, &cam_app_act_old);
+
+ debug_fleave(LOG_SYS);
+}
+
+static void
+cam_app_sigsegv_handler(int signal_no, siginfo_t *info, void *context)
+{
+ debug_fenter(LOG_SYS);
+
+ cam_debug(LOG_SYS, "signal_no = %d", signal_no);
+
+ if (signal_no == SIGALRM) { /* if alarm, check the camera status. */
+#ifdef ENABLE_CHECK_CAM_STATUS
+ cam_app_check_status();
+ alarm(CAM_CHECK_STATUS_INTERVAL_TIME);
+#endif
+ return;
+ } else {
+ sigaction(signal_no, &cam_app_act_old, NULL); /* register the previous action */
+ raise(signal_no);
+ }
+
+ debug_fleave(LOG_SYS);
+}
+
+#endif
+
+#ifdef ENABLE_CHECK_CAM_STATUS
+
+static void cam_app_check_status()
+{
+ cam_debug(LOG_SYS, "check status");
+}
+#endif /* ENABLE_CHECK_CAM_STATUS */
+
+void cam_app_toggle_indicator(void *data, gboolean hide)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ indicator_toggle(ad, hide);
+
+ return;
+}
+
+void cam_app_toggle_toolbar(void *data, gboolean hide)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (hide) {
+ hide_toolbar_edje(ad);
+ } else {
+ show_toolbar_edje(ad);
+ }
+
+ return;
+}
+
+static void
+cam_app_reset_settings_launch_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *notify = (Evas_Object *)data;
+ GValue i_value = { 0, };
+ GValue b_value = { 0, };
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ CamAppData *camapp = NULL;
+
+ cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
+
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, " cam_handle is NULL");
+
+ cam_popup_remove(notify);
+ hide_toolbar_edje(ad);
+
+ cam_app_preview_stop();
+
+ g_value_init(&i_value, G_TYPE_INT);
+ g_value_init(&b_value, G_TYPE_BOOLEAN);
+
+ /* auto focus */
+
+ g_value_set_int(&i_value, AF_DEFAULT);
+ cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
+
+ /* Timer */
+ g_value_set_int(&i_value, TIMER_DEFAULT);
+ cam_handle_value_set(ad, PROP_TIMER, &i_value);
+
+ /* white balance */
+ g_value_set_int(&i_value, WB_DEFAULT);
+ cam_handle_value_set(ad, PROP_WB, &i_value);
+
+ /* Effect */
+ g_value_set_int(&i_value, EFFECT_DEFAULT);
+ cam_handle_value_set(ad, PROP_EFFECT, &i_value);
+
+ /* ISO */
+ g_value_set_int(&i_value, ISO_DEFAULT);
+ cam_handle_value_set(ad, PROP_ISO, &i_value);
+
+ /* Metering */
+ g_value_set_int(&i_value, AE_DEFAULT);
+ cam_handle_value_set(ad, PROP_METERING, &i_value);
+
+ /* Anti-shake */
+ g_value_set_int(&i_value, AHS_DEFAULT);
+ cam_handle_value_set(ad, PROP_AHS, &i_value);
+
+ /* wild dynamic range */
+ g_value_set_int(&i_value, WDR_DEFAULT);
+ cam_handle_value_set(ad, PROP_WDR, &i_value);
+
+ /* Image quality */
+ g_value_set_int(&i_value, QUALITY_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
+
+ /* Video quality */
+ g_value_set_int(&i_value, QUALITY_DEFAULT);
+ cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
+
+ /* Guide Line */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
+ settings_guideline_refresh(ad);
+ /* Review */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_REVIEW, &b_value);
+
+ /* GPS Connect */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_GPS, &b_value);
+
+ /* shutter sound */
+ g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
+ cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
+
+ /* audio recording */
+ g_value_set_boolean(&b_value, TRUE);
+ cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
+
+ /* storage */
+ g_value_set_int(&i_value, STORAGE_DEFAULT);
+ cam_handle_value_set(ad, PROP_STORAGE, &i_value);
+
+ /* brightness */
+ g_value_set_int(&i_value, BRIGHTNESS_DEFAULT);
+ cam_handle_value_set(ad, PROP_BRIGHTNESS, &i_value);
+
+ /* Resolution */
+ g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
+ cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &i_value);
+
+ g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
+ cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &i_value);
+
+ if (ad->indicator_edje) {
+ /* delete indicator */
+ evas_object_hide(ad->indicator_edje);
+ cam_indicator_destory(ad);
+ }
+ cam_indicator_create(ad);
+
+ show_toolbar_edje(ad);
+
+ if (!cam_app_preview_start(ad)) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ }
+
+}
+
+void cam_app_reset_settings(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_popup_question_add(ad->ug_base,
+ dgettext(PACKAGE, "IDS_CAM_POP_RESET_CAMERA_SETTINGS"),
+ dgettext("sys_string", "IDS_COM_SK_YES"),
+ cam_app_reset_settings_launch_cb,
+ dgettext("sys_string", "IDS_COM_SK_NO"),
+ _popup_cancel_cb);
+
+}
+
+static gboolean __cam_toolbar_new_thumbnail_create(Evas_Object **obj,
+ struct appdata *ad,
+ Evas_Coord *thumbnail_x,
+ Evas_Coord *thumbnail_y,
+ Evas_Coord *thumbnail_w,
+ Evas_Coord *thumbnail_h)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+ cam_retv_if(obj == NULL, FALSE);
+ cam_retv_if(ad->evas == NULL, FALSE);
+ cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
+
+ if(camapp->thumbnail_name == NULL) {
+ *obj = NULL;
+ return TRUE;
+ }
+ Evas_Object *new_thumbnail_img = elm_bg_add(ad->toolbar.quickview_item.edje);
+ Evas_Coord x = 0, y = 0, w = 0, h = 0;
+ Evas_Object *layout = NULL;
+ Evas_Object *thumbnail_area = NULL;
+
+ cam_retv_if(new_thumbnail_img == NULL, FALSE);
+ elm_bg_file_set(new_thumbnail_img, camapp->thumbnail_name, NULL);
+
+ layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
+ thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout,"thumbnail_area");
+ cam_retv_if(thumbnail_area == NULL, FALSE);
+ evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
+ *thumbnail_x = x;
+ *thumbnail_y = y;
+ *thumbnail_w = w;
+ *thumbnail_h = h;
+
+ evas_object_resize(new_thumbnail_img, 0, 0);
+ evas_object_move(new_thumbnail_img, x, y);
+ evas_object_show(new_thumbnail_img);
+ *obj = new_thumbnail_img;
+ return TRUE;
+}
+
+static gboolean __filter_cam_app_pipe_handler(void *data, gint pipe_type)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ if (ad->ug_state == CAM_UG_TERMINATE_STATE
+ || ad->ug_state == CAM_UG_PAUSE_STATE) {
+ switch (pipe_type) {
+ case CAM_MAIN_PIPE_OP_TYPE_BEST_SHOT_IMAGE_HANDLE:
+ case CAM_MAIN_PIPE_OP_TYPE_VIDEO_CAPTURE_HANDLE:
+ return FALSE;
+ default:
+ break;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void cam_app_pipe_handler(void *data, void *buffer, unsigned int nbyte)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ /* Caution */
+ /* DO NOT free buffer in here */
+ /* buffer is freed by ecore */
+
+ if (buffer) {
+ Ecore_Pipe_Data_Info * pipe_info = (Ecore_Pipe_Data_Info *)buffer;
+ int main_pipe_type = pipe_info->cmd;
+ DEBUG_TRACE("main_pipe_type %d", main_pipe_type);
+
+ if (__filter_cam_app_pipe_handler(ad, main_pipe_type) == TRUE) {
+ return;
+ }
+
+ switch (main_pipe_type) {
+ case CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL:
+ {
+ Evas_Object *new_thumbnail_image = NULL;
+ Evas_Coord x = 0, y = 0, w = 0, h = 0;
+ gboolean ret = FALSE;
+ ret = __cam_toolbar_new_thumbnail_create(&new_thumbnail_image, ad, &x, &y, &w, &h);
+ if (ret == FALSE || !new_thumbnail_image) {
+ if (!new_thumbnail_image && ret) {
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
+ }
+ return;
+ }
+ cam_ui_effect_utils_set_thumbnail_effect(new_thumbnail_image,
+ x,
+ y,
+ w,
+ h,
+ CAM_THUMBNAIL_ANTIMATION_EFFECT_DURATION);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL_NO_ANI:
+ {
+ toolbar_update_quickview_thumbnail_no_animation(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR:
+ {
+ cam_ui_rotate_utils_rotate_start(ad, CAM_ROTATE_ICONS_ANTIMATION_DURATION);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_SHUTTER_ANIMATION:
+ {
+ cam_app_create_start_animation(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_BURST_SHOT_UPDATE_PROGRESS:
+ {
+ cam_continuous_shot_update_progress_value(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_BURST_SHOT_DISPLAY_POPUP:
+ {
+ cam_app_destroy_progressbar(ad);
+ cam_app_create_burst_popup(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_BEST_SHOT_IMAGE_HANDLE:
+ {
+ cam_image_capture_handle(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_UPDATE_VIEW:
+ {
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ camapp->update_view_cb(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_ERROR_POPUP:
+ {
+ cam_create_error_popup(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_VIDEO_CAPTURE_HANDLE:
+ {
+ cam_video_capture_handle(ad);
+ }
+ break;
+ case CAM_MAIN_PIPE_OP_TYPE_RUN_IMAGE_VIEWER:
+ {
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ cam_retm_if(camapp->filename == NULL, "camapp is NULL");
+ if (!cam_app_run_image_viewer_ug(ad, camapp->filename, FALSE)) {
+ return;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ /*note: free memory*/
+ if (pipe_info->data) {
+ free(pipe_info->data);
+ pipe_info = NULL;
+ }
+ }
+
+ return;
+}
+
+void cam_focus_edje_rotate(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->focus_edje);
+ ad->focus_edje = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "focus_image");
+
+ cam_retm_if(ad->focus_edje == NULL, "focus_edje load failed");
+
+ evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
+ evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
+ evas_object_show(ad->focus_edje);
+
+ cam_app_draw_af_box(ad);
+ cam_app_focus_guide_update(ad);
+}
+
+Eina_Bool cam_screen_rotate(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->imageviewer_ug) {
+ ad->is_rotating = FALSE;
+ return FALSE;
+ }
+
+ elm_win_rotation_with_resize_set(ad->win_main, ad->angle);
+
+ if (ad->focus_edje)
+ cam_focus_edje_rotate(ad);
+
+ if (ad->timer_icon_edje)
+ cam_app_timer_icon_rotate(ad);
+
+ if (ad->toolbar_edje)
+ cam_toolbar_rotate(ad);
+
+ if (ad->recording_edje)
+ cam_recording_rotate(ad);
+
+ if (ad->indicator_edje)
+ cam_indicator_rotate(ad);
+
+ if (ad->tip_popup)
+ cam_tip_popup_rotate(ad);
+
+ if (ad->pinch_edje)
+ cam_zoom_create_pinch_edje(ad);
+
+ if (ad->progress_popup != NULL)
+ cam_popup_rotate(ad);
+
+ cam_retvm_if(ad->camapp_handle == NULL, -1, "camapp_handle is NULL");
+
+ toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
+
+ if (ad->ev_edje) {
+ unload_ev_edje(ad);
+ load_ev_edje(ad);
+ }
+
+ if (ad->zoom_edje) {
+ unload_zoom_edje(ad);
+ load_zoom_edje(ad);
+ }
+
+ if (ad->guideline_edje)
+ settings_guideline_refresh(ad);
+
+ /*update thumbnail*/
+ toolbar_update_quickview_thumbnail_no_animation(ad);
+ /* rotate menu */
+ DEBUG_TRACE("ad->displayed_setting_popup = %d", ad->displayed_setting_popup);
+ DEBUG_TRACE("ad->show_edit_shortcuts_popup_after_rotate = %d", ad->show_edit_shortcuts_popup_after_rotate);
+ DEBUG_TRACE("ad->show_setting_popup_after_rotate = %d", ad->show_setting_popup_after_rotate);
+ if ((ad->displayed_setting_popup != DISPLAY_NONE_POPUP)
+ || (ad->show_edit_shortcuts_popup_after_rotate == TRUE)
+ || (ad->show_setting_popup_after_rotate == TRUE)) {
+ /*ecore_idler_add(cam_show_setting_menu, ad);*/
+ /*note: use timer to delay creating the popup*/
+ ecore_timer_add(0.1, cam_show_setting_menu, ad);
+ } else {
+ ad->is_rotating = FALSE;
+ }
+
+ if (ad->confirm_popup)
+ evas_object_raise(ad->confirm_popup);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Ecore_Idler *rotate_delay_idler = NULL;
+Eina_Bool cam_app_screen_rotate_idler(void *data)
+{
+ if (rotate_delay_idler) {
+ ecore_idler_del(rotate_delay_idler);
+ rotate_delay_idler = NULL;
+ }
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
+ if (ad->ug_state == CAM_UG_TERMINATE_STATE
+ || ad->ug_state == CAM_UG_PAUSE_STATE) {
+ ad->is_rotating = FALSE;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ cam_screen_rotate(ad);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void cam_app_screen_rotate(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ if (ad->ug_state == CAM_UG_TERMINATE_STATE
+ || ad->ug_state == CAM_UG_PAUSE_STATE) {
+ ad->is_rotating = FALSE;
+ return;
+ }
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_ret_if(cam_handle == NULL);
+ DEBUG_TRACE("");
+
+ if (ad->toolbar_edje) {
+ rotate_delay_idler = ecore_idler_add(cam_app_screen_rotate_idler, data);
+ }
+}
+
+gboolean cam_app_get_photo_resolution(int *width, int *height)
+{
+ cam_retv_if(width == NULL || height == NULL, FALSE);
+
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, FALSE, "ad is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(ad->camapp_handle == NULL, FALSE, "camapp_handle is NULL");
+
+ *width = CAM_RESOLUTION_W(camapp->photo_resolution);
+ *height = CAM_RESOLUTION_H(camapp->photo_resolution);
+
+ return TRUE;
+}
+
+gboolean cam_app_reset_resolution(void *data, int width, int height, gboolean force_set)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ gboolean ret = TRUE;
+ int state = 0;
+
+ cam_debug(LOG_MM, " reset resolution = [%d x %d], need_change_state = [%d]",
+ width, height, force_set);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ int cur_img_w, cur_img_h = 0;
+ int recommanded_cur_w, recommanded_cur_h = 0;
+ int recommanded_new_w, recommanded_new_h = 0;
+
+ ret &= cam_mm_get_image_size(&cur_img_w, &cur_img_h);
+
+ if ((cur_img_w == 1392) && (cur_img_h == 1392)) {
+ recommanded_cur_w = 1392;
+ recommanded_cur_h = 1392;
+ } else
+ cam_mm_get_recommanded_preview_size(&recommanded_cur_w, &recommanded_cur_h);
+
+ ret &= cam_mm_set_image_size(width, height);
+
+ if ((width == 1392) && (height == 1392)) {
+ recommanded_new_w = 1392;
+ recommanded_new_h = 1392;
+ } else
+ cam_mm_get_recommanded_preview_size(&recommanded_new_w, &recommanded_new_h);
+
+ DEBUG_TRACE("cam_mm_get_recommanded_preview_size CUR[%d %d] NEW[%d %d]",
+ recommanded_cur_w, recommanded_cur_h, recommanded_new_w, recommanded_new_h);
+
+ if ((recommanded_cur_w != recommanded_new_w)
+ ||(recommanded_cur_h != recommanded_new_h)
+ ||(force_set)) {
+
+ state = cam_mm_get_cam_state();
+
+ if (state == CAMERA_STATE_PREVIEW) {
+ ret &= cam_app_preview_stop();
+ ret &= cam_mm_set_video_size(recommanded_new_w, recommanded_new_h);
+ ret &= cam_app_preview_start(ad);
+ } else {
+ ret &= cam_mm_set_video_size(recommanded_new_w, recommanded_new_h);
+ }
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ int cur_video_w, cur_video_h = 0;
+ cam_mm_get_video_size(&cur_video_w, &cur_video_h);
+
+ if (((cur_video_w != width) || (cur_video_h != height)) && (force_set)) {
+ state = cam_mm_get_rec_state();
+
+ if (state == RECORDER_STATE_READY) {
+ ret &= cam_app_preview_stop();
+ ret &= cam_mm_set_video_size(width, height);
+ ret &= cam_app_preview_start(ad);
+ } else {
+ ret &= cam_mm_set_video_size(width, height);
+ }
+ } else {
+ ret &= cam_mm_set_video_size(width, height);
+ }
+ } else {
+ return FALSE;
+ }
+ return ret;
+}
+
+int cam_app_get_aenc_bitrate(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int bitrate = 0;
+
+ cam_retvm_if(ad == NULL, 0, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, 0, "camapp is NULL");
+
+ if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
+ bitrate = CAM_AUDIO_BITRATE_MMS;
+ } else {
+ bitrate = CAM_AUDIO_BITRATE_NORMAL;
+ }
+
+ return bitrate;
+}
+
+int cam_app_get_venc_bitrate(void *data, int quality)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int return_val = 0;
+
+ cam_retvm_if(ad == NULL, 0, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, 0, "camapp is NULL");
+
+ if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 64000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 32000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 16000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ } else if ((camapp->recording_mode == CAM_RECORD_SLOW) ||(camapp->recording_mode == CAM_RECORD_FAST)) {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 10000000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 4000000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 2000000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ } else {
+ switch (camapp->video_resolution) {
+ case CAM_RESOLUTION_FULLHD:
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 8000000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 4000000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 2000000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+ case CAM_RESOLUTION_HD:
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 10000000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 4000000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 2000000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+
+ case CAM_RESOLUTION_WVGA:
+ case CAM_RESOLUTION_WVGA2:
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 4000000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 2000000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 1000000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+
+ case CAM_RESOLUTION_VGA:
+
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 3000000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 1500000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 500000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+
+ case CAM_RESOLUTION_WQVGA:
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 2000000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 1000000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 500000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+
+ case CAM_RESOLUTION_QVGA:
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 384000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 192000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 64000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+
+ case CAM_RESOLUTION_QCIF:
+ {
+ switch (quality) {
+ case CAM_QUALITY_HIGH:
+ case CAM_QUALITY_BEST:
+ return_val = 384000;
+ break;
+
+ case CAM_QUALITY_MEDIUM:
+ return_val = 192000;
+ break;
+
+ case CAM_QUALITY_LOW:
+ return_val = 64000;
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+ break;
+
+ default:
+ cam_critical(LOG_MM, "INVALID QUAILTY");
+ break;
+ }
+ }
+
+ cam_debug(LOG_MM, "videoenc bit rate = %d, current quilty = %d",
+ return_val, quality);
+ return return_val;
+}
+
+gboolean cam_app_set_video_quality(void *data, int quality)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int v_bitrate = 0;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ v_bitrate = cam_app_get_venc_bitrate(ad, quality);
+ if (v_bitrate > 0) {
+ cam_mm_set_video_encoder_bitrate(v_bitrate);
+ } else {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_app_set_recording_mode(void *data, int mode)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ int video_codec = 0, audio_codec = 0, sample_rate = 0;
+ int file_format = RECORDER_FILE_FORMAT_MP4;
+ int channel = 0;
+ int a_bitrate = 0;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+ DEBUG_TRACE("mode = %d" , mode);
+ if (mode == CAM_RECORD_MMS || mode == CAM_RECORD_SELF_MMS) {
+ DEBUG_TRACE("mode = %d" , mode);
+ video_codec = RECORDER_VIDEO_CODEC_H263;
+ audio_codec = RECORDER_AUDIO_CODEC_AMR;
+ sample_rate = 8000;
+ file_format = RECORDER_FILE_FORMAT_3GP;
+ channel = 1;
+ } else {
+ DEBUG_TRACE("mode = %d" , mode);
+ video_codec = RECORDER_VIDEO_CODEC_MPEG4;
+ audio_codec = RECORDER_AUDIO_CODEC_AAC;
+ sample_rate = 44100;
+ file_format = RECORDER_FILE_FORMAT_MP4;
+ channel = 2;
+ }
+#ifdef CAMERA_MACHINE_I686
+ video_codec = RECORDER_VIDEO_CODEC_THEORA;
+ audio_codec = RECORDER_AUDIO_CODEC_VORBIS;
+#endif
+
+ if (!cam_mm_set_codec(audio_codec, video_codec))
+ return FALSE;
+
+ if (!cam_mm_set_audio_source(sample_rate, channel))
+ return FALSE;
+
+ a_bitrate = cam_app_get_aenc_bitrate(ad);
+ if (a_bitrate > 0) {
+ cam_mm_set_audio_encoder_bitrate(a_bitrate);
+ } else {
+ return FALSE;
+ }
+
+ if (!cam_app_set_video_quality(ad, camapp->video_quality))
+ return FALSE;
+
+ if (!cam_mm_set_file_format(file_format))
+ return FALSE;
+
+ return TRUE;
+}
+
+gboolean cam_app_set_size_limit(int max_val, int size_limit_type)
+{
+ int ret = 0;
+
+ switch (size_limit_type) {
+ case CAM_MM_SIZE_LIMIT_TYPE_BYTE:
+ ret = cam_mm_set_max_size(max_val);
+ if (!ret)
+ return FALSE;
+/*
+ ret = cam_mm_set_max_time(REC_MAX_TIME_LIMITED);
+ if (!ret)
+ return FALSE;
+*/
+ break;
+ case CAM_MM_SIZE_LIMIT_TYPE_SECOND:
+ ret = cam_mm_set_max_size(0);
+ if (!ret)
+ return FALSE;
+ ret = cam_mm_set_max_time(max_val);
+ if (!ret)
+ return FALSE;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ return TRUE;
+}
+
+gboolean cam_app_init_attribute(void *data, CamMode mode)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ gboolean ret = TRUE;
+ int width = 0;
+ int height = 0;
+ int state = 0;
+ int rotate = CAMERA_ROTATION_270;
+ int camera_rotate = CAMERA_ROTATION_NONE;
+ int video_dev = 0;
+ int capture_video_format = -1;
+ #ifdef TODO_SURRPORT
+ int recording_video_format = -1;
+ #endif
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
+
+ state = cam_mm_get_state();
+
+#if 0
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (state != RECORDER_STATE_CREATED) {
+ return FALSE;
+ }
+ } else if(camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (state != CAMERA_STATE_CREATED) {
+ return FALSE;
+ }
+ }
+#endif
+
+ cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
+ DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
+
+#ifdef CAMERA_MACHINE_I686
+ width = 320;
+ height = 240;
+#endif
+
+ if (CAM_CAMERA_MODE == mode) {
+ width = CAM_RESOLUTION_W(camapp->photo_resolution);
+ height = CAM_RESOLUTION_H(camapp->photo_resolution);
+
+ ret &= cam_mm_set_image_size(width, height);
+ ret &= cam_mm_set_image_count(camapp->image_count);
+ ret &= cam_mm_set_image_enc_quality(camapp->image_quality);
+#ifdef CAMERA_MACHINE_I686
+ ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_15);
+ ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_I420);
+#else
+ ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_AUTO);
+ ret &= cam_mm_get_video_source_format(NULL, &capture_video_format);
+ ret &= cam_mm_set_video_source_format(capture_video_format);
+#endif
+ ret &= cam_app_set_capture_format_shooting_mode(camapp->shooting_mode);
+
+ if (cam_is_enabled_menu(ad, CAM_MENU_SAVE_AS_FLIP))
+ ret &= cam_mm_set_image_flip(camapp->save_as_flip);
+ else
+ ret &= cam_mm_set_image_flip(FALSE);
+
+ ret &= cam_mm_set_anti_hand_shake(camapp->anti_shake);
+ } else if (CAM_CAMCORDER_MODE == mode) {
+ width = CAM_RESOLUTION_W(camapp->video_resolution);
+ height = CAM_RESOLUTION_H(camapp->video_resolution);
+
+ ret &= cam_mm_set_image_size(CAM_RESOLUTION_W(camapp->photo_resolution), CAM_RESOLUTION_H(camapp->photo_resolution));
+ ret &= cam_mm_set_image_enc_quality(camapp->image_quality);
+ ret &= cam_mm_set_video_profile();
+#ifdef CAMERA_MACHINE_I686
+ ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_15);
+ ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_I420);
+ DEBUG_TRACE("");
+#else
+ DEBUG_TRACE("");
+ ret &= cam_mm_set_fps(camapp->fps);
+ if (camapp->anti_shake) {
+ ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_NV12);
+ } else {
+ ret &= cam_mm_get_video_source_format(NULL, &recording_video_format);
+ DEBUG_TRACE("recording_video_format:%d", recording_video_format);
+ ret &= cam_mm_set_video_source_format(recording_video_format);
+ }
+#endif
+ ret &= cam_mm_set_audio_recording(camapp->audio_recording);
+ ret &= cam_app_set_recording_mode(ad, camapp->recording_mode);
+ DEBUG_TRACE("camapp->size_limit = %d" , camapp->size_limit);
+ DEBUG_TRACE("camapp->size_limit_type = %d" , camapp->size_limit_type);
+ ret &= cam_app_set_size_limit(camapp->size_limit, camapp->size_limit_type);
+ } else {
+ return FALSE;
+ }
+ cam_mm_get_video_device(&video_dev);
+ DEBUG_TRACE("video_dev = %d",video_dev);
+ if (video_dev == CAM_DEVICE_VGA) {
+ int value;
+ cam_mm_get_front_cam_display_rotate_value(&value, &rotate);
+
+ DEBUG_TRACE("get front camera rotate %d value = %d", rotate, value);
+ /*rotate = value;*/
+ #ifdef TODO_SURRPORT
+ rotate = CAMERA_ROTATION_270;
+ #endif /*TODO:if new capi will released, this could be removed,but take care.*/
+
+ }
+ cam_mm_get_zoom_valid_intrange(&camapp->zoom_min,&camapp->zoom_max);
+ DEBUG_TRACE("Zoom range [%d - %d]",camapp->zoom_min, camapp->zoom_max);
+
+ cam_mm_get_brightless_valid_intrange(&camapp->brightness_min,&camapp->brightness_max);
+ DEBUG_TRACE("brightness range [%d - %d]",camapp->brightness_min, camapp->brightness_max);
+ camapp->brightness = (camapp->brightness_min + camapp->brightness_max) /2;
+
+ ret &= cam_mm_remove_geo_tag();
+ DEBUG_TRACE("cam_mm_remove_geo_tag = %d", ret);
+ ret &= cam_mm_set_display_device(CAMERA_DISPLAY_TYPE_X11, GET_DISPLAY(ad->main_xid));
+ ret &= cam_mm_set_camera_rotate(camera_rotate);
+ ret &= cam_mm_set_display_rotate(rotate);
+ ret &= cam_mm_set_display_geometry_method(CAMERA_DISPLAY_MODE_LETTER_BOX);
+#ifndef USE_CAMERA_APP_SHUTTER_SOUND
+ ret &= cam_mm_set_shutter_sound(TRUE);
+#endif
+ ret &= cam_app_reset_resolution(ad, width, height, TRUE);
+ ret &= cam_mm_set_zoom(camapp->zoom_mode);
+ ret &= cam_mm_set_auto_exposure(camapp->auto_exposure);
+ ret &= cam_mm_set_iso(camapp->iso);
+ ret &= cam_mm_set_wdr(camapp->wdr);
+ ret &= cam_mm_set_brightness(camapp->brightness);
+ ret &= cam_mm_enable_auto_contrast(camapp->auto_contrast);
+ ret &= cam_mm_set_white_balance(camapp->white_balance);
+ ret &= cam_mm_set_effect(camapp->effect);
+ ret &= cam_mm_set_program_mode(camapp->scene_mode);
+
+ if (ad->torchlight_on && camapp->flash != CAM_FLASH_OFF)
+ ret &= cam_mm_set_flash(CAM_FLASH_OFF);
+ else
+ ret &= cam_mm_set_flash(camapp->flash);
+
+ if (camapp->af_mode == CAM_FOCUS_AUTO
+ || camapp->af_mode == CAM_FOCUS_MACRO) {
+ ret &= cam_mm_set_focus_mode(camapp->af_mode);
+ } else if (camapp->af_mode == CAM_FOCUS_FACE) {
+ ret &= cam_mm_set_focus_mode(CAMERA_ATTR_AF_NORMAL);
+ }
+
+ ret &= cam_mm_set_tag_enable(TRUE);
+ ret &= cam_mm_set_outdoor_visibility(camapp->outdoor_visibility);
+ ad->enable_mode_change = TRUE;
+ ad->is_recording = FALSE;
+ return ret;
+
+}
+
+static void cam_app_update_gps_level(void *data, int lbs_state)
+{
+ struct appdata *ad = (struct appdata *)data;
+ GValue value = { 0, };
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ cam_debug(LOG_UI, " cam_app_update_gps_level : %d", lbs_state);
+
+ CAM_GVALUE_SET_INT(value, lbs_state);
+ cam_handle_value_set(ad, PROP_GPS_LEVEL, &value);
+
+ return;
+}
+
+static gboolean cam_app_return_ext_app(void *data, const char *r_file_path)
+{
+ struct appdata *ad = (struct appdata *)data;
+ service_h reply;
+ service_create(&reply);
+
+ if (ad->service_mime != NULL) {
+ if (r_file_path == NULL) {
+ service_add_extra_data(reply, SERVICE_DATA_SELECTED, "exit");
+ service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_FAILED);
+ } else {
+ service_add_extra_data(reply, SERVICE_DATA_SELECTED, r_file_path);
+ service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
+ }
+ }
+
+ service_destroy(reply);
+ return TRUE;
+
+}
+static void cam_app_battery_status_cb(keynode_t *key, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ debug_fenter(LOG_UI);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ int low_status = -1;
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &low_status)) {
+ cam_debug(LOG_UI, "battery status low = %d", low_status);
+ if (low_status <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW) {
+ ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
+ cam_app_notice_popup(ad, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"),
+ cam_app_timeout_notice_response_cb);
+ } else if (low_status == VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
+ ad->battery_status = LOW_BATTERY_WARNING_STATUS;
+ cam_app_notice_popup((void *)ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"), cam_app_lowbattery_close_flash_cb);
+ } else {
+ ad->battery_status = NORMAL_BATTERY_STATUS;
+ }
+ }
+
+ return;
+}
+/*if torch light vconf key value is changed, this cb is called*/
+static void cam_torchlight_update_cb(keynode_t *key, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ int key_value = vconf_keynode_get_bool(key); /* -1: error, 1:True, 0:False */
+ if (key_value == -1) {
+ DEBUG_TRACE("vconf_keynode_get_bool failed");
+ return;
+ }
+ DEBUG_TRACE("VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT is changed to %d", key_value);
+ if (key_value) {
+ /* disable flash icon */
+ ad->torchlight_on = TRUE;
+ cam_mm_set_flash(CAM_FLASH_OFF);
+
+ } else {
+ /* enable flash icon */
+ ad->torchlight_on = FALSE;
+ cam_mm_set_flash(camapp->flash);
+ }
+ cam_toolbar_update(ad); /*update flash icon*/
+ return;
+}
+
+static void cam_app_battery_update_cb(keynode_t *key, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ char *keyname = NULL;
+
+ debug_fenter(LOG_UI);
+
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ keyname = vconf_keynode_get_name(key);
+
+ if (!strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW)) {
+ GValue value = { 0 };
+ gint charging = vconf_keynode_get_int(key);
+ DEBUG_TRACE("charging = %d", charging);
+ CAM_GVALUE_SET_INT(value, charging);
+ cam_handle_value_set(ad, PROP_BATTERY_CHARG, &value);
+
+ } else if (!strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CAPACITY)) {
+ GValue value = { 0 };
+ int battery_level = vconf_keynode_get_int(key);
+ CAM_GVALUE_SET_INT(value, battery_level);
+ cam_handle_value_set(ad, PROP_BATTERY_LEVEL, &value);
+ }
+ return;
+}
+
+#if 0
+Evas_Object *cam_screen_load_edj(Evas_Object *parent, const char *file,
+ const char *group)
+{
+ Evas_Object *eo;
+ int r;
+
+ eo = elm_layout_add(parent);
+ if (eo) {
+ r = elm_layout_file_set(eo, file, group);
+ if (!r) {
+ evas_object_del(eo);
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(eo,
+ EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ /* //if(!strcmp((const char *)elm_widget_type_get(parent), "win")) { */
+ elm_win_resize_object_add(parent, eo);
+ /* //} */
+ }
+
+ return eo;
+}
+#endif
+Evas_Object *cam_app_load_edj(Evas_Object *parent, const char *file,
+ const char *group)
+{
+ Evas_Object *eo = NULL;
+ int r = 0;
+
+ eo = elm_layout_add(parent);
+ if (eo) {
+ r = elm_layout_file_set(eo, file, group);
+ if (!r) {
+ evas_object_del(eo);
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(eo);
+ }
+
+ return eo;
+}
+
+Eina_Bool __cam_app_update_thumbnail_idler(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) {
+ return ECORE_CALLBACK_CANCEL;
+ }
+ CamAppData *camapp = ad->camapp_handle;
+
+ if (!camapp) {
+ REMOVE_IDLER(ad->update_thumbnail_idler);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ DEBUG_TRACE(" ");
+
+ if (!g_file_test(camapp->filename,G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
+ DEBUG_TRACE( "The captured File is not existed");
+ REMOVE_IDLER(ad->update_thumbnail_idler);
+ return ECORE_CALLBACK_CANCEL;;
+ }
+
+ gboolean ret = FALSE;
+
+ if (ad->imageviewer_ug) { /*review on */
+ DEBUG_TRACE("Image viewer was LAUNCHED. skip this...");
+ REMOVE_IDLER(ad->update_thumbnail_idler);
+ return ECORE_CALLBACK_CANCEL;;
+ }
+
+ if (camapp->thumbnail_name != NULL) {
+ free (camapp->thumbnail_name);
+ camapp->thumbnail_name = NULL;
+
+ }
+
+ ret = cam_file_get_cam_file_thumbnail_path(camapp->filename, &camapp->thumbnail_name);
+ DEBUG_TRACE("ret[0:success] = [%d] camapp->filename: [%s]",
+ ret, camapp->filename);
+ DEBUG_TRACE("ret[0:success] = [%d] camapp->thumbnail_name: [%s]",
+ ret, camapp->thumbnail_name);
+ if (!g_file_test(camapp->thumbnail_name, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
+
+ if (g_thumbnail_image_check_count > 10) {
+ REMOVE_IDLER(ad->update_thumbnail_idler);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ DEBUG_TRACE("The thumbnail File is not existed,try the %d nums", g_thumbnail_image_check_count);
+ g_thumbnail_image_check_count++;
+ usleep(THUMBNAIL_UPDATE_WAIT_TIME);
+ /*REMOVE_IDLER(ad->update_thumbnail_idler);*//*note:renew, do not delete idler*/
+ return ECORE_CALLBACK_RENEW;
+ }
+ else if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ DEBUG_TRACE("thumbnail image check count=[%d]", g_thumbnail_image_check_count);
+ toolbar_update_quickview_thumbnail(ad);
+ }
+ else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ toolbar_update_quickview_thumbnail(ad);
+
+ } else {
+ DEBUG_TRACE("NOT REACHED CODES REACHED!");
+ }
+ REMOVE_IDLER(ad->update_thumbnail_idler);
+ return ECORE_CALLBACK_CANCEL;
+}
+/* update thumbnail to quickview after first launching or return from image viewer */
+void cam_app_update_quickview_icon(void *data) {
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->camapp_handle == NULL);
+ gchar *filename = NULL;
+
+ DEBUG_TRACE("");
+
+ /*To update quickview image, get last filename*/
+ if (ad->camapp_handle->filename) {
+ free(ad->camapp_handle->filename);
+ ad->camapp_handle->filename = NULL;
+ }
+
+ if (ad->camapp_handle->thumbnail_name) {
+ free(ad->camapp_handle->thumbnail_name);
+ ad->camapp_handle->thumbnail_name = NULL;
+ }
+
+ filename = cam_app_get_last_filename();
+
+ if (filename != NULL) {
+ ad->camapp_handle->filename = strdup(filename);
+ free(filename);
+ filename = NULL;
+
+ if (!cam_file_get_cam_file_thumbnail_path
+ (ad->camapp_handle->filename, &ad->camapp_handle->thumbnail_name))
+ DEBUG_TRACE("cam_file_get_cam_file_thumbnail_path() fail");
+
+ }
+
+ toolbar_update_quickview_thumbnail_no_animation(ad);
+
+ return;
+}
+
+void cam_app_update_thumbnail()
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ DEBUG_TRACE("cam_app_update_thumbnail");
+
+ if (CAM_LAUNCHING_MODE_NORMAL == ad->launching_mode && camapp->filename) {
+ DEBUG_TRACE();
+ g_thumbnail_image_check_count = 0;
+ if (!ad->update_thumbnail_idler)
+ ad->update_thumbnail_idler = ecore_idler_add(__cam_app_update_thumbnail_idler, ad);
+ }
+ return;
+}
+
+gboolean cam_app_parse_args(CamExeArgs *args, service_h service)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retv_if(ad == NULL, FALSE);
+
+ ad->service_mime = NULL;
+
+ int ret = service_get_mime(service, &ad->service_mime);
+ if (ret != SERVICE_ERROR_NONE) {
+ cam_debug(LOG_UI, "service_get_mime is error ");
+ return FALSE;
+ }
+
+ if (ad->service_mime != NULL) {
+ /* get mode */
+ if ((strcmp(ad->service_mime, SERVICE_MIME_TYPE_IMAGE_1) == 0)
+ || (strcmp(ad->service_mime, SERVICE_MIME_TYPE_IMAGE_2) == 0)) {
+ cam_debug(LOG_UI, "CAM_CAMERA_MODE");
+ args->cam_mode = CAM_CAMERA_MODE;
+ } else if ((strcmp(ad->service_mime, SERVICE_MIME_TYPE_VIDEO_1) == 0)
+ || (strcmp(ad->service_mime, SERVICE_MIME_TYPE_VIDEO_2) == 0)) {
+ cam_debug(LOG_UI, "CAM_CAMCORDER_MODE");
+ args->cam_mode = CAM_CAMCORDER_MODE;
+ } else {
+ cam_critical(LOG_UI, "Invalid mime type");
+ args->cam_mode = CAM_CAMERA_MODE;
+ }
+ }
+
+ const char *val = NULL;
+ /* get caller appl. */
+ service_get_extra_data(service, "CALLER", (char **)&val);
+ if (val) {
+ cam_debug(LOG_UI, "CALLER %s", val);
+ args->caller = strdup(val);
+ } else {
+ args->caller = NULL;
+ }
+
+ /* resolution */
+ val = NULL;
+ int res = 0;
+ service_get_extra_data(service, "RESOLUTION", (char **)&val);
+ if (val) {
+ cam_debug(LOG_UI, "RESOLUTION %s", val);
+
+ if (args->cam_mode == CAM_CAMERA_MODE) {
+ if (0 == strcmp(val, CAM_CAPTURE_RES_VGA))
+ res = CAM_RESOLUTION_VGA;
+ else
+ res = IMAGE_RESOLUTION_DEFAULT;
+ } else {
+ if (0 == strcmp(val, CAM_RECORDING_RES_QCIF))
+ res = CAM_RESOLUTION_QCIF;
+ else
+ res = REC_RESOLUTION_DEFAULT;
+ }
+ } else {
+ if (args->cam_mode == CAM_CAMERA_MODE) {
+ res = IMAGE_RESOLUTION_DEFAULT;
+ } else {
+ res = REC_RESOLUTION_DEFAULT;
+ }
+ }
+ args->width = CAM_RESOLUTION_W(res);
+ args->height = CAM_RESOLUTION_H(res);
+ args->resolution = res;
+
+ /* size limit */
+ val = NULL;
+ service_get_extra_data(service, "LIMIT", (char **)&val);
+ if (val) {
+ cam_debug(LOG_UI, "LIMIT %s", val);
+ args->size_limit = atoi(val);
+ } else {
+ args->size_limit = 0;
+ }
+
+ args->review = TRUE;
+
+ /* print exe args */
+ cam_debug(LOG_SYS, "############### exe args ###############");
+ cam_debug(LOG_SYS, "mode =%d", args->cam_mode);
+ cam_debug(LOG_SYS, "caller =%s", args->caller);
+ cam_debug(LOG_SYS, "width =%d", args->width);
+ cam_debug(LOG_SYS, "height =%d", args->height);
+ cam_debug(LOG_SYS, "limit =%d", args->size_limit);
+ cam_debug(LOG_SYS, "review =%d", args->review);
+ cam_debug(LOG_SYS, "############### end ###############");
+
+ return TRUE;
+}
+
+
+void cam_app_draw_af_box(void *data)
+{
+
+ cam_retm_if(data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)data;
+ ad->af_start_x = 0;
+ ad->af_start_y = 0;
+
+ switch (ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ {
+ ad->af_start_x = ad->touch_lcd_x;
+ ad->af_start_y = ad->touch_lcd_y;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ {
+ ad->af_start_x = ad->win_height - ad->touch_lcd_x;
+ ad->af_start_y = ad->win_width - ad->touch_lcd_y;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ {
+ ad->af_start_x = ad->touch_lcd_y;
+ ad->af_start_y = ad->win_height - ad->touch_lcd_x;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ {
+ ad->af_start_x = ad->win_width - ad->touch_lcd_y;
+ ad->af_start_y = ad->touch_lcd_x;
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* adjust */
+ DEBUG_TRACE("ad->af_start_x=%f, ad->af_start_y=%f", ad->af_start_x, ad->af_start_y);
+
+ ad->camera_focus_w = CAMERA_FOCUS_W * elm_config_scale_get();
+ ad->camera_focus_h = CAMERA_FOCUS_H * elm_config_scale_get();
+ DEBUG_TRACE("ad->camera_focus_w=%f, ad->camera_focus_h=%f", ad->camera_focus_w, ad->camera_focus_h);
+
+ ad->af_start_x = ad->af_start_x - (ad->camera_focus_w / 2);
+ ad->af_start_y = ad->af_start_y - (ad->camera_focus_h / 2);
+ DEBUG_TRACE("af area box start x,y =[%f,%f]\n", ad->af_start_x, ad->af_start_y);
+
+ if (ad->rot_current == APP_DEVICE_ORIENTATION_270
+ || ad->rot_current == APP_DEVICE_ORIENTATION_90) {
+ if (ad->af_start_x < ad->preview_offset_x) {
+ ad->af_start_x = ad->preview_offset_x;
+ }
+ if (ad->af_start_y < ad->preview_offset_y) {
+ ad->af_start_y = ad->preview_offset_y;
+ }
+ if ((ad->af_start_x + ad->camera_focus_w) >
+ (ad->preview_w + ad->preview_offset_x)) {
+ ad->af_start_x =
+ (ad->preview_w + ad->preview_offset_x) -
+ ad->camera_focus_w;
+ }
+ if ((ad->af_start_y + ad->camera_focus_h) >
+ (ad->preview_h + ad->preview_offset_y)) {
+ ad->af_start_y =
+ (ad->preview_h + ad->preview_offset_y) -
+ ad->camera_focus_h;
+ }
+
+ } else {
+ if (ad->af_start_y < ad->preview_offset_x) {
+ ad->af_start_y = ad->preview_offset_x;
+ }
+ if (ad->af_start_x < ad->preview_offset_y) {
+ ad->af_start_x = ad->preview_offset_y;
+ }
+ if ((ad->af_start_y + ad->camera_focus_h) >
+ (ad->preview_w + ad->preview_offset_x)) {
+ ad->af_start_y =
+ (ad->preview_w + ad->preview_offset_x) -
+ ad->camera_focus_h;
+ }
+ if ((ad->af_start_x + ad->camera_focus_w) >
+ (ad->preview_h + ad->preview_offset_y)) {
+ ad->af_start_x =
+ (ad->preview_h + ad->preview_offset_y) -
+ ad->camera_focus_w;
+ }
+ }
+
+ if (ad->focus_edje) {
+ DEBUG_TRACE
+ ("####################################################");
+ DEBUG_TRACE("af area start ,ad->af_start_x,y =[%f,%f]\n",
+ ad->af_start_x, ad->af_start_y);
+ DEBUG_TRACE
+ ("####################################################");
+ evas_object_move(ad->focus_edje, ad->af_start_x,
+ ad->af_start_y);
+ DEBUG_TRACE(" MOVE FOCUS_EDJE : %f,%f", ad->af_start_x,
+ ad->af_start_y);
+ }
+
+}
+
+
+/* get preview start x,y coordinate */
+void cam_app_get_preview_offset_coordinate(void *data)
+{
+
+ cam_retm_if(data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)data;
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is null");
+
+ int width = 0;
+ int height = 0;
+ CamVideoRectangle result; /* result ractangle */
+ CamVideoRectangle window; /* target window ractangle */
+ CamVideoRectangle preview; /* target preview rectangle */
+ /*wow,now, the MMHandleType is not created*/
+ cam_mm_get_video_size(&width, &height);
+
+ ad->camfw_video_width = width;
+ ad->camfw_video_height = height;
+
+ preview.w = width;
+ preview.h = height;
+ DEBUG_TRACE("************************************************");
+ DEBUG_TRACE("preview.w =%d, preview.h=%d", preview.w, preview.h);
+
+ window.h = ad->win_height;
+ window.w = ad->win_width;
+ DEBUG_TRACE("window.w =%d, window.h=%d\n", window.w, window.h);
+ DEBUG_TRACE("************************************************");
+ cam_app_preview_start_coordinate(preview, window, &result);
+
+ ad->preview_offset_x = result.x;
+ ad->preview_offset_y = result.y;
+ ad->preview_w = result.w;
+ ad->preview_h = result.h;
+
+ DEBUG_TRACE("************************************************");
+ DEBUG_TRACE("ad->preview_offset_x = %d, ad->preview_offset_y = %d",
+ ad->preview_offset_x, ad->preview_offset_y);
+ DEBUG_TRACE("*************************************************");
+
+ camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
+ cam_app_focus_guide_update(ad);
+
+ /* init */
+ ad->af_x = (ad->win_width / 2) - ad->preview_offset_x;
+ ad->af_y = (ad->win_height / 2) - ad->preview_offset_y;
+
+ ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
+ ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
+ /* init */
+ ad->touch_lcd_x = (ad->win_height / 2);
+ ad->touch_lcd_y = (ad->win_width / 2);
+
+ DEBUG_TRACE("*************************************************");
+ DEBUG_TRACE(" ad->af_x=%d, ad->af_y=%d", ad->af_x, ad->af_y);
+ DEBUG_TRACE(" ad->af_start_x=%d, ad->af_start_y=%d", ad->af_start_x, ad->af_start_y);
+ DEBUG_TRACE(" ad->touch_lcd_x=%d, ad->touch_lcd_y=%d", ad->touch_lcd_x, ad->touch_lcd_y);
+ DEBUG_TRACE("*************************************************");
+
+ cam_app_draw_af_box(ad);
+
+ if (ad->focus_edje)
+ evas_object_show(ad->focus_edje);
+}
+
+void cam_app_preview_start_coordinate(CamVideoRectangle src,
+ CamVideoRectangle dst,
+ CamVideoRectangle *result)
+{
+ /* src is target preview rectangle */
+ /* dst is target window rectangle */
+ g_return_if_fail(result != NULL);
+ gdouble src_ratio, dst_ratio;
+ src_ratio = (gdouble) src.w / src.h;
+ dst_ratio = (gdouble) dst.w / dst.h;
+ if (src_ratio > dst_ratio) {
+ DEBUG_TRACE("#### case 1\n");
+ result->w = dst.w;
+ result->h = dst.w / src_ratio;
+ result->x = 0;
+ result->y = (dst.h - result->h) / 2;
+ } else if (src_ratio < dst_ratio) {
+ DEBUG_TRACE("#### case 2\n");
+ result->w = dst.h * src_ratio;
+ result->h = dst.h;
+ result->x = (dst.w - result->w) / 2;
+ result->y = 0;
+ } else {
+ DEBUG_TRACE("#### case 3\n");
+ result->x = 0;
+ result->y = 0;
+ result->w = dst.w;
+ result->h = dst.h;
+ }
+ DEBUG_TRACE
+ ("************************************************************");
+ DEBUG_TRACE
+ ("source is %dx%d dest is %dx%d, result window size is %dx%d result offset x= %dx y=%d",
+ src.w, src.h, dst.w, dst.h, result->w, result->h, result->x,
+ result->y);
+ DEBUG_TRACE
+ ("************************************************************");
+}
+
+
+void cam_remove_tmp_file()
+{
+ const gchar *default_path = NULL;
+ char tmpfile_name[256] = { 0 };
+
+ default_path = cam_file_get_internal_video_path();
+ DEBUG_TRACE(" video = %s", default_path);
+ snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", default_path,
+ TMPFILE_PREFIX);
+ if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
+ DEBUG_TRACE("REMOVE tmp file");
+ unlink(tmpfile_name);
+ }
+ default_path = cam_file_get_external_video_path();
+ DEBUG_TRACE(" video = %s", default_path);
+ snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", default_path,
+ TMPFILE_PREFIX);
+
+ if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
+ DEBUG_TRACE("REMOVE tmp file");
+ unlink(tmpfile_name);
+ }
+
+}
+
+Eina_Bool cam_app_launch_after_preview_began(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ cam_debug(LOG_UI, "cam_app_launch_after_preview_began");
+
+ int state = cam_mm_get_state();
+
+ if (state != RECORDER_STATE_RECORDING) {
+ cam_debug(LOG_UI, "remove previous file");
+ cam_remove_tmp_file();
+ }
+
+ cam_app_get_preview_offset_coordinate(data);
+ cam_toolbar_setting_popup_create(data);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void cam_utils_remove_idler_all(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ GList *list = NULL;
+ Ecore_Idler *idler = NULL;
+
+ debug_fenter(LOG_UI);
+
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ /*LOCK
+ In fact, a Lock is needed here. However, because all related functions are working main loop, practically it may not be needed. */
+
+ if (!ad->capture_cb_list) {
+ cam_debug(LOG_UI, "No idler is remained.");
+ } else {
+ list = ad->capture_cb_list;
+
+ while (list) {
+ idler = list->data;
+
+ if (!idler) {
+ cam_warning(LOG_UI,
+ "Fail to remove idler. The idler is NULL");
+ } else {
+ cam_debug(LOG_UI, "Remove idler[%p].", idler);
+ ecore_idler_del(idler);
+
+ ad->capture_cb_list =
+ g_list_remove(ad->capture_cb_list, idler);
+ }
+
+ list = g_list_next(list);
+ }
+
+ g_list_free(ad->capture_cb_list);
+ ad->capture_cb_list = NULL;
+ }
+
+ /* UNLOCK */
+ debug_fleave(LOG_UI);
+ return;
+}
+
+Eina_Bool cam_elm_cache_flush()
+{
+/*Make the canvas discard as much data as possible used by the engine at runtime.*/
+ DEBUG_TRACE("start");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ if (ad) {
+ if (ad->evas) {
+ evas_render_idle_flush(ad->evas);
+ }
+ }
+ elm_cache_all_flush();
+ DEBUG_TRACE("end");
+ return EINA_TRUE;
+}
+
+gboolean cam_condition_check_to_start_camera(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
+
+ /* check battery */
+ if (cam_utils_check_battery_critical_low()) {
+ ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
+ cam_app_notice_popup(ad, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+ } else if (cam_utils_check_battery_warning_low()) {
+ ad->battery_status = LOW_BATTERY_WARNING_STATUS;
+ cam_app_notice_popup((void *)ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"), cam_app_lowbattery_close_flash_cb);
+ } else {
+ ad->battery_status = NORMAL_BATTERY_STATUS;
+ }
+
+ if (cam_utils_check_call_running()) {
+ ad->is_calling = TRUE;
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"), cam_app_timeout_notice_response_cb);
+ return FALSE;
+ } else
+ ad->is_calling = FALSE;
+
+ return TRUE;
+}
+
+static Eina_Bool __cam_continuous_af_timer_cb(void *data)
+{
+ DEBUG_TRACE("");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ if (ad->continuous_af_timer)
+ ad->continuous_af_timer = NULL;
+
+ cam_reset_focus_mode(ad);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void cam_reset_focus_mode(void *data)
+{
+ DEBUG_TRACE("");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ if (ad->caf_button)
+ cam_toolbar_show_cafbutton(ad, FALSE);
+
+ cam_reset_focus_coordinate(ad);
+
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
+
+ cam_app_focus_guide_create(ad);
+ cam_app_focus_guide_update(ad);
+
+ cam_continuous_af_start(ad);
+}
+
+static Eina_Bool __focus_guide_destroy(void *data)
+{
+ DEBUG_TRACE("");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ if (ad->continuous_af_timer)
+ ad->continuous_af_timer = NULL;
+ DEL_EVAS_OBJECT(ad->focus_edje);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+gboolean cam_set_default_capture_mode(void *data, CamCaptureMode type)
+{
+ DEBUG_TRACE("");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE
+ && camapp->shooting_mode == CAM_SINGLE_MODE
+ && camapp->burst_shot == TRUE) {
+
+ camapp->default_capture_mode = type;
+ if (camapp->default_capture_mode == CAM_CAPTURE_BURST)
+ camapp->capture_cb = (camera_capturing_cb)cam_continuous_shot_capture_callback;
+ else
+ camapp->capture_cb = (camera_capturing_cb)__cam_capture_cb;
+
+ } else
+ return FALSE;
+
+
+ return TRUE;
+}
+
+gint cam_app_get_max_image_size_by_ratio(void *data, int resolution)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ gint result = 0;
+ unsigned int capacity = 0;
+ gdouble ratio = (gdouble) CAM_RESOLUTION_W(resolution) / CAM_RESOLUTION_H(resolution);
+
+ GetCamDevCamResolutionCaps(&capacity, ad);
+
+ if (ratio == (gdouble)4.0/3.0) {
+ if (capacity & CAM_CP_SIZE_3264X2448)
+ result = CAM_RESOLUTION_3264x2448;
+ else if (capacity & CAM_CP_SIZE_2048X1536)
+ result = CAM_RESOLUTION_2048x1536;
+ else if (capacity & CAM_CP_SIZE_1280X960)
+ result = CAM_RESOLUTION_1280x960;
+ else
+ result = CAM_RESOLUTION_VGA;
+ } else if (ratio == (gdouble)16.0/9.0) {
+ if (capacity & CAM_CP_SIZE_3264X1836)
+ result = CAM_RESOLUTION_3264x1836;
+ else if (capacity & CAM_CP_SIZE_2048X1152)
+ result = CAM_RESOLUTION_2048x1152;
+ else if (capacity & CAM_CP_SIZE_1280X720)
+ result = CAM_RESOLUTION_1280x720;
+ else
+ result = CAM_RESOLUTION_VGA;
+ } else if (ratio == (gdouble)3.0/2.0) {
+ if (capacity & CAM_CP_SIZE_3264X2176)
+ result = CAM_RESOLUTION_3264x2176;
+ else
+ result = CAM_RESOLUTION_VGA;
+ } else {
+ result = CAM_RESOLUTION_VGA;
+ }
+
+ return result;
+}
+
+void cam_app_stop_capture(void* data)
+{
+ cam_retm_if(data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)data;
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is null");
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (camapp->shooting_mode == CAM_SINGLE_MODE) {
+ if (camapp->continuous_shot_data && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING) {
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) && camapp->burst_shot == TRUE && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
+ DEBUG_TRACE("burst capture mode");
+ cam_mm_set_conti_shot_break(TRUE);
+ ad->emit_continuous_shutter = FALSE;
+ cam_app_destroy_progressbar(ad);
+ camapp->continuous_shot_data->capture_status = CAM_CONTI_SHOT_STATUS_STOPPED;
+ }
+ }
+ }
+ }
+}
+void cam_create_error_popup(void* data)
+{
+ cam_retm_if(data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)data;
+
+ if( ad->error_type == CAM_ERROR_TYPE_UNABLE_TO_LAUNCH){
+ if (ad->fw_error_type == CAMERA_ERROR_SOUND_POLICY ||ad->fw_error_type == RECORDER_ERROR_SOUND_POLICY) {
+ cam_app_notice_popup(data, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"), cam_app_timeout_notice_response_cb);
+ }else{
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ }
+ }
+}
+
+static Eina_Bool __cam_app_display_error_popup_idler(void *data)
+{
+ debug_fenter(LOG_CAM);
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->battery_status == LOW_BATTERY_CRITICAL_STATUS){
+ cam_app_notice_popup(ad, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"), cam_app_timeout_notice_response_cb);
+ } else if (ad->is_calling == TRUE) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"), cam_app_timeout_notice_response_cb);
+ } else if(ad->battery_status == LOW_BATTERY_WARNING_STATUS){
+ cam_app_notice_popup((void *)ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_USE_FLASH_BATTERY_LOW"), cam_app_lowbattery_close_flash_cb);
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+//end file
diff --git a/src/cam_config.c b/src/cam_config.c
new file mode 100644
index 0000000..02fc71b
--- /dev/null
+++ b/src/cam_config.c
@@ -0,0 +1,361 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/*
+#define DEBUG_CONFIG
+#include "cam.h"
+#include "cam_error.h"
+*/
+#include "cam_debug.h"
+#include "cam_config.h"
+static gchar **g_group_name = NULL; /* config information group name for save */
+static GKeyFile *g_key_file = NULL;
+static gboolean disable_set_mode = FALSE; /* if disable_set_mode is true unable to set setmode use for scene mode and ncr case ... */
+gboolean cam_config_set_group_name(CamConfigType config_type,
+ const gchar *set_group_name)
+{
+ g_return_val_if_fail(set_group_name, FALSE);
+ g_return_val_if_fail(g_group_name, FALSE);/*fix crash*/
+ if (g_group_name[config_type]) {
+ g_free(g_group_name[config_type]);
+ g_group_name[config_type] = NULL;
+ }
+ g_group_name[config_type] = g_strdup(set_group_name);
+ return TRUE;
+}
+
+gboolean cam_config_init(GError **error)
+{
+ GError *err = NULL;
+ debug_fenter(LOG_CONFIG);
+ if (!g_group_name) {
+ g_group_name = g_new0(gchar *, CAM_CONFIG_MAX);
+ cam_config_set_group_name(CAM_CONFIG_TYPE_COMMON, "common");
+ cam_config_set_group_name(CAM_CONFIG_TYPE_SHORTCUTS, "shortcuts");
+ }
+ if (g_key_file) {
+ warn_msg(LOG_UI, "already initialized.");
+ return TRUE;
+ }
+ g_key_file = g_key_file_new();
+ if (!g_key_file_load_from_file
+ (g_key_file, CONFIG_PATH, G_KEY_FILE_NONE, &err)) {
+ if (err != NULL) {
+ warn_msg(LOG_UI, "config file not exists. %s",
+ err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+ }
+ if (err != NULL) {
+ g_error_free(err);
+ err = NULL;
+ }
+ debug_fleave(LOG_UI);
+ return TRUE;
+}
+
+void cam_config_finalize(void)
+{
+ debug_fenter(LOG_UI);
+ cam_config_save();
+ if (g_group_name) {
+ int i;
+ for (i = 0; i < CAM_CONFIG_MAX; i++) {
+ if (g_group_name[i]) {
+ g_free(g_group_name[i]);
+ g_group_name[i] = NULL;
+ }
+ }
+ g_free(g_group_name);
+ g_group_name = NULL;
+ }
+ if (g_key_file) {
+ g_key_file_free(g_key_file);
+ g_key_file = NULL;
+ }
+ debug_fleave(LOG_UI);
+}
+
+void cam_config_save(void)
+{
+ debug_fenter(LOG_UI);
+ if (g_key_file != NULL) {
+ GError *err = NULL;
+ gchar *buf = NULL;
+ gsize len = 0;
+ buf = g_key_file_to_data(g_key_file, &len, &err);
+ if (buf) {
+ if (err) {
+ debug_msg(LOG_UI, "%s", err->message);
+ g_error_free(err);
+ err = NULL;
+ } else {
+#if 1
+ FILE *fp = fopen(CONFIG_PATH, "w");
+ if (fp != NULL) {
+ if (fwrite
+ ((const void *)buf, len, 1,
+ fp) != 1) {
+ /**fwrite return count(unsigned int) if write correct.
+ the-return-value is always >=0*/
+ critical_msg(LOG_CONFIG,
+ "fwrite failed");
+ } else {
+ cam_debug(LOG_CONFIG,
+ "save success");
+ }
+ fclose(fp);
+ } else {
+ critical_msg(LOG_CONFIG,
+ "fopen failed");
+ }
+
+#else
+ g_file_set_contents(CONFIG_PATH,
+ (const gchar *)buf, len,
+ &err);
+ if (err) {
+ critical_msg(LOG_CONFIG, "%s",
+ err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+#endif
+ }
+ g_free(buf);
+ }
+ if (err != NULL) {
+ g_error_free(err);
+ err = NULL;
+ }
+ }
+}
+
+void cam_config_set_control(gboolean enable)
+{
+ cam_debug(LOG_UI, "%d ", enable);
+ disable_set_mode = !enable;
+}
+
+void cam_config_set_int(const gchar *key, int nval)
+{
+ g_return_if_fail(g_key_file);
+ g_return_if_fail(g_group_name);
+ g_return_if_fail(key);
+ if (disable_set_mode) {
+ /* cam_warning(LOG_UI," disable_set_mode is true "); */
+ return;
+ }
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_PREVIEW, key, nval);
+ return;
+}
+
+void cam_config_set_string(const gchar *key, const gchar *strval)
+{
+ g_return_if_fail(g_key_file);
+ g_return_if_fail(g_group_name);
+ g_return_if_fail(key);
+ if (disable_set_mode) {
+ cam_warning(LOG_UI, " disable_set_mode is true ");
+ return;
+ }
+ cam_config_set_string_by_type(CAM_CONFIG_TYPE_PREVIEW, key, strval);
+ return;
+}
+
+void cam_config_set_boolean(const gchar *key, gboolean bval)
+{
+ g_return_if_fail(g_key_file);
+ g_return_if_fail(g_group_name);
+ g_return_if_fail(key);
+ if (disable_set_mode) {
+ cam_warning(LOG_UI, " disable_set_mode is true ");
+ return;
+ }
+#ifdef DEBUG_CONFIG
+ debug_msg(LOG_UI, "%s", bval ? "TRUE" : "FALSE");
+
+#endif /* */
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_PREVIEW, key, bval);
+ return;
+}
+
+int cam_config_get_int(const gchar *key, int default_value)
+{
+ g_return_val_if_fail(g_key_file, -1);
+ g_return_val_if_fail(g_group_name, -1);
+ g_return_val_if_fail(key, -1);
+ return cam_config_get_int_by_type(CAM_CONFIG_TYPE_PREVIEW, key,
+ default_value);
+}
+
+gchar *cam_config_get_string(const gchar *key, const gchar *default_value)
+{
+ g_return_val_if_fail(g_key_file, NULL);
+ g_return_val_if_fail(g_group_name, NULL);
+ g_return_val_if_fail(key, NULL);
+ return cam_config_get_string_by_type(CAM_CONFIG_TYPE_PREVIEW, key,
+ default_value);
+}
+
+gboolean cam_config_get_boolean(const gchar *key, gboolean default_value)
+{
+ g_return_val_if_fail(g_key_file, FALSE);
+ g_return_val_if_fail(g_group_name, FALSE);
+ g_return_val_if_fail(key, FALSE);
+ return cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_PREVIEW, key,
+ default_value);
+}
+
+void cam_config_set_int_by_type(CamConfigType config_type, const gchar *key,
+ int nval)
+{
+ g_return_if_fail(g_key_file);
+ g_return_if_fail(g_group_name);
+ g_return_if_fail(g_group_name[config_type]);
+ g_return_if_fail(key);
+ if (disable_set_mode) {
+ /* cam_warning(LOG_UI," disable_set_mode is true "); */
+ return;
+ }
+#ifdef DEBUG_CONFIG
+ debug_msg(LOG_UI, "%s,%s,%d", g_group_name[config_type], key, nval);
+
+#endif /* */
+ g_key_file_set_integer(g_key_file, g_group_name[config_type], key,
+ nval);
+}
+
+void cam_config_set_string_by_type(CamConfigType config_type, const gchar *key,
+ const gchar *strval)
+{
+ g_return_if_fail(g_key_file);
+ g_return_if_fail(g_group_name);
+ g_return_if_fail(g_group_name[config_type]);
+ g_return_if_fail(key);
+ if (disable_set_mode) {
+ cam_warning(LOG_UI, " disable_set_mode is true ");
+ return;
+ }
+#ifdef DEBUG_CONFIG
+ debug_msg(LOG_UI, "%s", strval);
+
+#endif /* */
+ g_key_file_set_string(g_key_file, g_group_name[config_type], key,
+ strval);
+}
+
+void cam_config_set_boolean_by_type(CamConfigType config_type, const gchar *key,
+ gboolean bval)
+{
+ g_return_if_fail(g_key_file);
+ g_return_if_fail(g_group_name);
+ g_return_if_fail(g_group_name[config_type]);
+ g_return_if_fail(key);
+ if (disable_set_mode) {
+ cam_warning(LOG_UI, " disable_set_mode is true ");
+ return;
+ }
+#ifdef DEBUG_CONFIG
+ debug_msg(LOG_UI, "%s", bval ? "TRUE" : "FALSE");
+
+#endif /* */
+ g_key_file_set_boolean(g_key_file, g_group_name[config_type], key,
+ bval);
+}
+
+int cam_config_get_int_by_type(CamConfigType config_type, const gchar *key,
+ int default_value)
+{
+ g_return_val_if_fail(g_key_file, -1);
+ g_return_val_if_fail(g_group_name, -1);
+ g_return_val_if_fail(g_group_name[config_type], -1);
+ g_return_val_if_fail(key, -1);
+ GError *error = NULL;
+ gint nval =
+ g_key_file_get_integer(g_key_file, g_group_name[config_type], key,
+ &error);
+ if (error) {
+
+/*
+ if (error->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND)
+ critical_msg("error:%s", error->message);
+*/
+ cam_config_set_int_by_type(config_type, key, default_value);
+ g_error_free(error);
+ error = NULL;
+ DEBUG_TRACE("-------- key[%s], value[%d]", key, default_value);
+ return default_value;
+ } else {
+ DEBUG_TRACE("-------- key[%s], value[%d]", key, nval);
+ return nval;
+ }
+}
+
+gchar *cam_config_get_string_by_type(CamConfigType config_type,
+ const gchar *key,
+ const gchar *default_value)
+{
+ g_return_val_if_fail(g_key_file, NULL);
+ g_return_val_if_fail(g_group_name, NULL);
+ g_return_val_if_fail(g_group_name[config_type], NULL);
+ g_return_val_if_fail(key, NULL);
+ GError *error = NULL;
+ const gchar *strval =
+ g_key_file_get_string(g_key_file, g_group_name[config_type], key,
+ &error);
+ if (error) {
+ if (error->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND)
+ critical_msg(LOG_CONFIG, "error:%s", error->message);
+ cam_config_set_string_by_type(config_type, key, default_value);
+ g_error_free(error);
+ error = NULL;
+ return default_value ? g_strdup(default_value) : NULL;
+ } else {
+ return strval ? g_strdup(strval) : NULL;
+ }
+}
+
+gboolean cam_config_get_boolean_by_type(CamConfigType config_type,
+ const gchar *key,
+ gboolean default_value)
+{
+ g_return_val_if_fail(g_key_file, FALSE);
+ g_return_val_if_fail(g_group_name, FALSE);
+ g_return_val_if_fail(g_group_name[config_type], FALSE);
+ g_return_val_if_fail(key, FALSE);
+ GError *error = NULL;
+ gboolean bval =
+ g_key_file_get_boolean(g_key_file, g_group_name[config_type], key,
+ &error);
+ if (error) {
+ if (error->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND)
+ critical_msg(LOG_CONFIG, "error:%s", error->message);
+ cam_config_set_boolean_by_type(config_type, key, default_value);
+ g_error_free(error);
+ error = NULL;
+ return default_value;
+ } else {
+ return bval;
+ }
+}
diff --git a/src/cam_continuous_shot.c b/src/cam_continuous_shot.c
new file mode 100755
index 0000000..ad3ea13
--- /dev/null
+++ b/src/cam_continuous_shot.c
@@ -0,0 +1,621 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_continuous_shot.h"
+#include "cam_ta.h"
+#include "cam_error.h"
+#include "cam_mm.h"
+#include "cam_sound.h"
+#include "cam_file.h"
+#include "camera_utils.h"
+#include "cam_app.h"
+
+/*
+static Ecore_Timer *conti_update_progressbar_timer = NULL;
+*/
+static int pre_shot_num = 0;
+static pthread_t file_save_thread;
+static pthread_mutex_t file_save_mutex;
+static pthread_cond_t file_save_cond;
+static GQueue *file_save_queue;
+
+static gboolean __data_init(void *data);
+static Eina_Bool __update_pb_timer_cb(void *data);
+static void __set_error(CamContinuousShotData *continuous_shot_data,
+ int code, char *message);
+
+
+static gboolean __data_init(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ gchar *temp_file_name1 = NULL, *filename = NULL;
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ camapp->continuous_shot_data = (CamContinuousShotData *)malloc(sizeof(CamContinuousShotData));
+ if (camapp->continuous_shot_data == NULL) {
+ cam_critical(LOG_SYS, "continuous_shot_data malloc failed.");
+ return FALSE;
+ }
+
+ camapp->continuous_shot_data->shot_num = 0;
+ camapp->continuous_shot_data->lock = FALSE;
+ camapp->continuous_shot_data->capture_status = CAM_CONTI_SHOT_STATUS_DEFAULT;
+ camapp->continuous_shot_data->error = NULL;
+
+ temp_file_name1 = cam_app_get_next_filename(CAM_FILE_EXTENTION_IMAGE);
+ if (temp_file_name1) {
+ filename = g_path_get_basename(temp_file_name1);
+ if (filename) {
+ char* save_string = NULL;
+ char* first_filename = strtok_r(filename, ".",&save_string);
+ if (first_filename == NULL) {
+ if (filename != NULL) {
+ free(filename);
+ filename = NULL;
+ save_string = NULL;
+ }
+ return FALSE;
+ }
+ camapp->continuous_shot_data->first_filename = strdup(first_filename);
+ if (filename != NULL) {
+ free(filename);
+ filename = NULL;
+ save_string = NULL;
+ }
+ }
+ free(temp_file_name1);
+ temp_file_name1 = NULL;
+ }
+
+ return TRUE;
+}
+
+
+static Eina_Bool __update_pb_timer_cb(void *data)
+{
+ struct appdata *ad = data;
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+ char pb_text[10] = "";
+ double pb_value = 0.0;
+ camapp = ad->camapp_handle;
+ DEBUG_TRACE("camapp->continuous_shot_data->shot_num %d", camapp->continuous_shot_data->shot_num);
+ DEBUG_TRACE("pre_shot_num %d", pre_shot_num);
+ if (camapp->continuous_shot_data->shot_num > pre_shot_num) {
+ pb_value =
+ (double)camapp->continuous_shot_data->shot_num /
+ (double)MAX_CONTINUOUS_SHOT;
+ cam_app_set_progressbar_value(ad, pb_value);
+
+ snprintf(pb_text, sizeof(pb_text), "%d/%d",
+ camapp->continuous_shot_data->shot_num,
+ MAX_CONTINUOUS_SHOT);
+ cam_app_set_progressbar_text(ad, pb_text);
+
+ pre_shot_num = camapp->continuous_shot_data->shot_num;
+ }
+
+ return 1;
+}
+
+void cam_continuous_shot_update_progress_value(void *data)
+{
+ struct appdata *ad = data;
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(camapp->continuous_shot_data == NULL);
+
+ char pb_text[10] = "";
+ double pb_value = 0.0;
+ camapp = ad->camapp_handle;
+ DEBUG_TRACE("camapp->continuous_shot_data->shot_num %d", camapp->continuous_shot_data->shot_num);
+ DEBUG_TRACE("pre_shot_num %d", pre_shot_num);
+ DEBUG_TRACE("ad->progressbar %p", ad->progressbar);
+ if (camapp->continuous_shot_data->shot_num > pre_shot_num) {
+ pb_value = (double)camapp->continuous_shot_data->shot_num / (double)MAX_CONTINUOUS_SHOT;
+ cam_app_set_progressbar_value(ad, pb_value);
+ snprintf(pb_text, sizeof(pb_text), "%d/%d", camapp->continuous_shot_data->shot_num, MAX_CONTINUOUS_SHOT);
+ cam_app_set_progressbar_text(ad, pb_text);
+ pre_shot_num = camapp->continuous_shot_data->shot_num;
+ }
+
+}
+
+static void __set_error(CamContinuousShotData *continuous_shot_data, int code, char *message)
+{
+ cam_debug(LOG_SYS, " start");
+
+ if (continuous_shot_data == NULL)
+ return;
+
+ if (continuous_shot_data->error == NULL) {
+ if (cam_utils_check_mmc_status() == VCONFKEY_SYSMAN_MMC_REMOVED) {
+ continuous_shot_data->error =
+ cam_error_new_literal(CAM_CONTI_SHOT_ERROR_MMC_REMOVED,
+ dgettext(PACKAGE, "IDS_CAM_POP_MEMORY_CARD_REMOVED"));
+ } else {
+ if (message)
+ continuous_shot_data->error = cam_error_new_literal(code, message);
+ }
+ }
+
+ continuous_shot_data->capture_status = CAM_CONTI_SHOT_STATUS_STOPPING;
+ cam_mm_set_conti_shot_break(TRUE);
+
+ if (continuous_shot_data->error && continuous_shot_data->error->message)
+ cam_critical(LOG_SYS, " Done: Continuous shot failed [%s]", continuous_shot_data->error->message);
+}
+
+
+void cam_continuous_shot_data_free(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_debug(LOG_FILE, "");
+
+ if (camapp->continuous_shot_data) {
+ int i = 0;
+ for (i = 0; i < camapp->continuous_shot_data->shot_num; i++) {
+ if (camapp->continuous_shot_data->file_path[i]) {
+ free(camapp->continuous_shot_data->file_path[i]);
+ camapp->continuous_shot_data->file_path[i] = NULL;
+ }
+ }
+
+ if(camapp->continuous_shot_data->first_filename){
+ free(camapp->continuous_shot_data->first_filename);
+ camapp->continuous_shot_data->first_filename = NULL;
+ }
+
+ if (camapp->continuous_shot_data->error) {
+ g_error_free(camapp->continuous_shot_data->error);
+ camapp->continuous_shot_data->error = NULL;
+ }
+
+ free(camapp->continuous_shot_data);
+ camapp->continuous_shot_data = NULL;
+
+ cam_debug(LOG_UI, "remove continuous_shot_data");
+ }
+
+ cam_debug(LOG_FILE, " done.");
+
+ return;
+}
+
+void cam_continuous_shot_capture_start(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+
+ cam_continuous_shot_data_free(ad);
+ __data_init(ad);
+
+ DEL_EVAS_OBJECT(ad->progressbar_edje);
+ elm_object_part_content_unset(ad->ug_base, "progressbar_layout");
+
+ cam_app_create_progressbar(ad);
+ ad->progressbar_edje = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, "progressbar");
+
+ cam_retm_if(ad->progressbar_edje == NULL,"ad->progressbar_edje is NULL");
+ elm_object_part_content_set(ad->progressbar_edje, "progressbar", ad->progressbar);
+ elm_object_part_content_set(ad->ug_base, "progressbar_layout", ad->progressbar_edje);
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ edje_object_signal_emit(_EDJ(ad->progressbar_edje), "progressbar,default", "prog");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ edje_object_signal_emit(_EDJ(ad->progressbar_edje), "progressbar,vertical", "prog");
+ break;
+ default:
+ DEBUG_TRACE("wow, reached un-able reached codes");
+ }
+
+ pre_shot_num = 0;
+
+ cam_set_orient_value(ad);
+
+ int remain = 0;
+ int max_count = 0;
+ remain = cam_system_get_still_count_by_resolution(ad);
+
+ if(remain <= MAX_CONTINUOUS_SHOT)
+ max_count = remain;
+ else
+ max_count = MAX_CONTINUOUS_SHOT;
+
+ if(max_count > 1) {
+ camapp->continuous_shot_data->capture_status = CAM_CONTI_SHOT_STATUS_CAPTURING;
+ cam_toolbar_update(ad);
+ cam_mm_continuous_capture_start(max_count, CONTINUOUS_SHOT_INTERVAL, (camera_capturing_cb)cam_continuous_shot_capture_callback, camapp->capture_completed_cb, (void*)ad);
+ } else {
+ cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad);
+ }
+}
+
+void *cam_continuous_shot_file_save_thread_run(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, NULL, "camapp_handle is NULL");
+
+ gboolean Exit_loop = FALSE;
+
+ cam_debug(LOG_FILE, "");
+
+ pthread_mutex_lock(&file_save_mutex);
+
+ while (!Exit_loop) {
+ cam_debug(LOG_FILE, " wait signal...");
+
+ pthread_cond_wait(&file_save_cond, &file_save_mutex);
+
+ cam_debug(LOG_FILE, " signal received");
+
+ while (!g_queue_is_empty(file_save_queue)) {
+ File_Save_Info *file_info = NULL;
+ /*TODO: consider sync*/
+ file_info = g_queue_pop_head(file_save_queue);
+
+ if ((file_info == NULL) || (file_info->cmd == NULL)) {
+ __set_error(camapp->continuous_shot_data, CAM_CONTI_SHOT_ERROR_FILE_WRITE, _("File Info Error"));
+ pthread_mutex_unlock(&file_save_mutex);
+ return NULL;
+ }
+
+ DEBUG_TRACE("%p", file_info);
+ DEBUG_TRACE("file_info->cmd %s", file_info->cmd);
+ DEBUG_TRACE("file_info->filename %s", file_info->filename);
+
+ if (strcmp(SAVE_THREAD_EXIT, file_info->cmd) == 0) {
+ if (file_info->buffer != NULL) {
+ free(file_info->buffer);
+ file_info->buffer = NULL;
+ }
+ if (file_info->filename != NULL) {
+ free(file_info->filename);
+ file_info->filename = NULL;
+ }
+ if (file_info->cmd == NULL) {
+ free(file_info->cmd);
+ file_info->cmd = NULL;
+ }
+ free(file_info);
+ file_info = NULL;
+ Exit_loop = TRUE;
+ break;
+ }
+
+ if (strcmp(SAVE_THREAD_FINISH, file_info->cmd) == 0) {
+ sync();
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_BEST_SHOT_IMAGE_HANDLE);
+ } else {
+ if (file_info->filename == NULL) {
+ __set_error(camapp->continuous_shot_data, CAM_CONTI_SHOT_ERROR_FILE_WRITE, _("File Name Error"));
+ pthread_mutex_unlock(&file_save_mutex);
+ return NULL;
+ }
+
+ /*note: write file*/
+ FILE *fd = fopen(file_info->filename, "w+");
+ if (fd == NULL) {
+ __set_error(camapp->continuous_shot_data, CAM_CONTI_SHOT_ERROR_FILE_WRITE, _("File Open Fail"));
+ pthread_mutex_unlock(&file_save_mutex);
+ return NULL;
+ } else {
+ int ret = fwrite(file_info->buffer, file_info->buf_size, 1, fd);
+ fclose(fd);
+
+ fd = NULL;
+ if (ret != 1) {
+ __set_error(camapp->continuous_shot_data, CAM_CONTI_SHOT_ERROR_FILE_WRITE, _("File Write Fail"));
+ pthread_mutex_unlock(&file_save_mutex);
+ return NULL;
+ }
+ }
+
+ /*note: reg to media info*/
+ __cam_single_shot_reg_file(file_info->filename);
+
+ cam_debug(LOG_FILE, " register done.");
+
+ if (file_info->buffer != NULL) {
+ free(file_info->buffer);
+ file_info->buffer = NULL;
+ }
+
+ if (file_info->filename != NULL) {
+ free(file_info->filename);
+ file_info->filename = NULL;
+ }
+
+ if (file_info->cmd == NULL) {
+ free(file_info->cmd);
+ file_info->cmd = NULL;
+ }
+
+ free(file_info);
+ file_info = NULL;
+ cam_debug(LOG_FILE, " save file done.");
+ }
+ }
+ }
+
+ pthread_mutex_unlock(&file_save_mutex);
+
+ pthread_mutex_destroy(&file_save_mutex);
+ pthread_cond_destroy(&file_save_cond);
+
+ cam_debug(LOG_SYS, " thread exit...");
+
+ return NULL;
+}
+
+void cam_continuous_shot_file_save_thread_exit(void *data)
+{
+ if (file_save_queue != NULL) {
+ File_Save_Info *file_info = calloc(1, sizeof(File_Save_Info));
+
+ if (file_info == NULL)
+ return;
+
+ file_info->buffer = NULL;
+ file_info->buf_size = 0;
+ file_info->filename = NULL;
+ file_info->cmd = strdup(SAVE_THREAD_EXIT);
+ g_queue_push_tail(file_save_queue, file_info);
+ pthread_cond_signal(&file_save_cond);
+ }
+ return;
+}
+
+gboolean cam_continuous_shot_create_file_save_thread(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ int err = 0;
+ cam_debug(LOG_SYS, "");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ err = pthread_mutex_init(&file_save_mutex, NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register mutex failed");
+ return FALSE;
+ }
+
+ err = pthread_cond_init(&file_save_cond, NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register cond failed");
+ return FALSE;
+ }
+
+ file_save_queue = g_queue_new();
+ if (file_save_queue == NULL) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register queue failed");
+ return FALSE;
+ }
+
+ err = pthread_create(&file_save_thread, NULL, cam_continuous_shot_file_save_thread_run, (void *)ad);
+ if (err != 0) {
+ cam_critical(LOG_CAM,
+ "Create Camera file register thread failed");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void cam_continuous_shot_finish_save_image()
+{
+ File_Save_Info *file_info = calloc(1, sizeof(File_Save_Info));
+
+ if (file_info == NULL)
+ return;
+
+ file_info->buffer = NULL;
+ file_info->buf_size = 0;
+ file_info->filename = NULL;
+ file_info->cmd = strdup(SAVE_THREAD_FINISH);
+
+ DEBUG_TRACE("file_info->cmd %s", file_info->cmd);
+ g_queue_push_tail(file_save_queue, file_info);
+ pthread_cond_signal(&file_save_cond);
+}
+
+void cam_continuous_shot_capture_callback(camera_image_data_s* image,
+ camera_image_data_s* postview,
+ camera_image_data_s* thumbnail,
+ void *user_data)
+{
+ struct appdata *ad = (struct appdata *)user_data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ cam_debug(LOG_MM, "");
+
+ if (ad->ug_state == CAM_UG_TERMINATE_STATE
+ || ad->ug_state == CAM_UG_PAUSE_STATE) {/*NOTE: in pause state, and terminate state, not cb*/
+ return;
+ }
+
+ gchar *filename = NULL;
+
+ if (image == NULL) {
+ if (camapp->filename)
+ free(camapp->filename);
+ camapp->filename = NULL;
+ DEBUG_TRACE(" ERROR - capture data is NULL");
+ cam_mm_set_conti_shot_break(TRUE);
+ return;
+ }
+ if (image->data == NULL) {
+ if (camapp->filename)
+ free(camapp->filename);
+ camapp->filename = NULL;
+ DEBUG_TRACE(" ERROR - capture data is NULL");
+ cam_mm_set_conti_shot_break(TRUE);
+ return;
+ }
+
+
+ if (camapp->continuous_shot_data == NULL) {
+ cam_critical(LOG_SYS, " continuous_shot_data is NULL");
+ CAM_TA_ACUM_ITEM_END(" cam_continuous_shot_capture_callback", 0);
+ cam_mm_set_conti_shot_break(TRUE);
+ return;
+ }
+
+ if (camapp->continuous_shot_data->lock == TRUE) {
+ cam_debug(LOG_MM, " Skip this data... because capture was stopped.");
+ CAM_TA_ACUM_ITEM_END(" cam_continuous_shot_capture_callback", 0);
+ cam_mm_set_conti_shot_break(TRUE);
+ return;
+ }
+
+ camapp->continuous_shot_data->lock = TRUE;
+
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ __cam_ta__(" cam_sound_play", cam_sound_play(camapp->shutter_sound, ad););
+#endif
+ filename = cam_file_get_next_filename_for_multishot(cam_app_get_target_path(),
+ (const gchar *)camapp->continuous_shot_data->first_filename,
+ (const gint) camapp->continuous_shot_data->shot_num,
+ (const gchar *)".jpg");
+
+ CAM_TA_ACUM_ITEM_BEGIN(" File open+write", 0);
+
+ if (filename == NULL) {
+ DEBUG_TRACE("");
+ return;
+ }
+
+ if (image->format == CAMERA_PIXEL_FORMAT_JPEG) {
+ /*TODO: use thread to save file*/
+ void *image_buffer = calloc(1, image->size);
+ if (image_buffer == NULL)
+ return;
+
+ memcpy(image_buffer, image->data, image->size);
+ File_Save_Info *file_info = calloc(1, sizeof(File_Save_Info));
+
+ if (file_info == NULL) {
+ if (image_buffer)
+ free(image_buffer);
+ return;
+ }
+
+ file_info->buffer = image_buffer;
+ file_info->buf_size = image->size;
+ file_info->filename = strdup(filename);
+ file_info->cmd = strdup("run_thread");
+
+ DEBUG_TRACE("file_info->cmd %s", file_info->cmd);
+ g_queue_push_tail(file_save_queue, file_info);
+ pthread_cond_signal(&file_save_cond);
+
+ {/*TODO: consider synchro issue in future*/
+ if (camapp->continuous_shot_data) {
+ camapp->continuous_shot_data->file_path[camapp->continuous_shot_data->shot_num] = filename;
+ camapp->continuous_shot_data->shot_num++;
+ cam_debug(LOG_MM, " Continuous shot captured [%s] count [%d]", filename, camapp->continuous_shot_data->shot_num);
+ } else {
+ cam_debug(LOG_MM, " continuous_shot_data is null");
+ return;
+ }
+ }
+ }
+
+ CAM_TA_ACUM_ITEM_END(" File open+write", 0);
+
+ if (camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_STOPPING
+ && camapp->continuous_shot_data->shot_num == 1) {
+ cam_mm_set_conti_shot_break(TRUE);
+ }
+
+ camapp->continuous_shot_data->lock = FALSE;
+
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_BURST_SHOT_UPDATE_PROGRESS);
+
+ if (ad->stop_continuous_shot == TRUE
+ || (camapp->continuous_shot_data && camapp->continuous_shot_data->shot_num == MAX_CONTINUOUS_SHOT)) {
+
+ camapp->continuous_shot_data->capture_status = CAM_CONTI_SHOT_STATUS_STOPPING;
+ cam_debug(LOG_UI, " Captured count [%d]", camapp->continuous_shot_data->shot_num);
+
+ if (ad->stop_continuous_shot)
+ cam_mm_set_conti_shot_break(TRUE);
+
+ ad->stop_continuous_shot =FALSE;
+ }
+
+ return;
+
+}
+
+gboolean cam_continuous_shot_reg_file(int shot_num, char *file_path[])
+{
+ int i = 0;
+ GError *error = NULL;
+
+ cam_debug(LOG_FILE, "");
+
+ for (i = 0; i < shot_num; i++) {
+ if (file_path[i]) {
+ cam_debug(LOG_FILE, "register file : %s", file_path[i]);
+
+ if (!cam_file_register(file_path[i], &error)) {
+ cam_critical(LOG_FILE,
+ "cam_file_register fail");
+ if (error != NULL) {
+ cam_critical(LOG_FILE,
+ "cam_file_register error [%s]",
+ error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ }
+ }
+ }
+
+ cam_debug(LOG_SYS, " file register done.");
+
+ return TRUE;
+}
+
diff --git a/src/cam_debug.c b/src/cam_debug.c
new file mode 100755
index 0000000..6b3c66c
--- /dev/null
+++ b/src/cam_debug.c
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_debug.h"
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+/* #include <debug-message.h> */
+
+#define LOG_LEVEL_FLAGS (G_LOG_LEVEL_INFO | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_DEBUG | \
+ G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | \
+ G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION)
+
+#define LOG_FILTER_CRITICAL G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR
+#define LOG_FILTER_WARNING LOG_FILTER_CRITICAL | G_LOG_LEVEL_WARNING
+#define LOG_FILTER_MESSAGE LOG_FILTER_WARNING | G_LOG_LEVEL_MESSAGE
+#define LOG_FILTER_INFO LOG_FILTER_MESSAGE | G_LOG_LEVEL_INFO
+#define LOG_FILTER_DEBUG LOG_FILTER_INFO | G_LOG_LEVEL_DEBUG
+#define LOG_FILTER_ALL LOG_FILTER_DEBUG
+
+#define BG_BLACK 40
+#define FG_RED 31
+#define FG_GREEN 32
+#define FG_YELLOW 33
+#define FG_PUPPLE 35
+#define FG_CYAN 36
+#define FG_BLUE 34
+
+#define __cam_print_debug(domain, msg) \
+do { \
+ printf("\x1b[%dm\x1b[%dm[DEBUG.%s] %s", BG_BLACK, FG_GREEN, domain, msg); \
+ printf("\x1b[0m\n"); \
+} while (0)
+
+#define __cam_print_info(domain, msg) \
+do { \
+ printf("\x1b[%dm\x1b[%dm[INFO.%s] %s", BG_BLACK, FG_PUPPLE, domain, msg); \
+ printf("\x1b[0m\n"); \
+} while (0)
+
+#define __cam_print_msg(domain, msg) \
+do { \
+ printf("\x1b[%dm\x1b[%dm[MESSAGE.%s] %s", BG_BLACK, FG_CYAN, domain, msg); \
+ printf("\x1b[0m\n"); \
+} while (0)
+
+#define __cam_print_warning(domain, msg) \
+do { \
+ printf("\x1b[%dm\x1b[%dm[WARNING.%s] %s", BG_BLACK, FG_YELLOW, domain, msg); \
+ printf("\x1b[0m\n"); \
+} while (0)
+
+#define __cam_print_critical(domain, msg) \
+do { \
+ printf("\x1b[%dm\x1b[%dm[CRITICAL.%s] %s", BG_BLACK, FG_RED, domain, msg); \
+ printf("\x1b[0m\n"); \
+} while (0)
+
+#define __cam_print_error(domain, msg) \
+do { \
+ printf("\x1b[%dm\x1b[%dm**ERROR.%s: %s", BG_BLACK, FG_RED, domain, msg); \
+ printf("\x1b[0m\n"); \
+} while (0)
+
+#ifdef ENABLE_TIME_MEASURE
+
+static GTimer *g_timer = NULL;
+static gdouble previous_elapsed = 0;
+
+static GTimer *g_measure_timer = NULL;
+static gdouble previous_time[MEASURE_TYPE_MAX] = { 0 };
+
+static char debug_type[MEASURE_TYPE_MAX][200] = {
+ "NORMAL_MEASURE_TYPE",
+ "APP_LAUNCHING_TYPE",
+ "CAPTURE_MEASURE_TIME",
+ "REGISTER_FILE_MEASURE_TIME",
+ "REC_START_MEASURE_TIME",
+ "REC_COMMIT_MEASURE_TIME",
+ "REVIEW_MEASURE_TIME",
+ "AUTO_FOCUSE_TIME",
+};
+
+#ifdef MEMCHECK
+
+gboolean memcheck = false;
+
+EXPORT_API void debug_start_memcheck()
+{
+ if (!memcheck) {
+ mwInit();
+ memcheck = true;
+ }
+}
+
+EXPORT_API void debug_stop_memcheck()
+{
+ if (memcheck) {
+ mwFlushNow();
+ mwTerm();
+ }
+}
+#endif
+
+void debug_measure_init()
+{
+ g_measure_timer = g_timer_new();
+
+ int type = 0;
+
+ for (type = 0; type < MEASURE_TYPE_MAX; type++) {
+ previous_time[type] = 0;
+ }
+
+ return;
+}
+
+void debug_measure_close()
+{
+ if (g_measure_timer) {
+ g_timer_destroy(g_measure_timer);
+ g_measure_timer = NULL;
+ }
+
+ int type = 0;
+
+ for (type = 0; type < MEASURE_TYPE_MAX; type++) {
+ previous_time[type] = 0;
+ }
+
+ return;
+}
+
+void debug_measure_start(cam_time_meature_type meature_type,
+ const gchar *format, ...)
+{
+ char buf[512] = { '\0', };
+ va_list ap;
+ va_start(ap, format);
+ vsnprintf(buf, sizeof(buf), format, ap);
+ va_end(ap);
+
+ bool request_reset = true;
+ int type = 0;
+/*
+ if(meature_type ==APP_LAUNCHING_TYPE)
+ {
+ if(g_measure_timer == NULL)
+ {
+ debug_measure_init();
+ previous_time[meature_type] = g_timer_elapsed(g_measure_timer, NULL);
+ }
+ }
+*/
+ if (g_measure_timer == NULL)
+ debug_measure_init();
+
+ for (type = 0; type < MEASURE_TYPE_MAX; type++) {
+ if (previous_time[type] != 0)
+ request_reset = false;
+ }
+
+ if (request_reset)
+ g_timer_reset(g_measure_timer);
+
+ previous_time[meature_type] = g_timer_elapsed(g_measure_timer, NULL);
+
+ /* cam_debug_time(LOG_TIME, "START %s : %s",debug_type[meature_type] , buf); */
+}
+
+void debug_measure_stop(cam_time_meature_type meature_type,
+ const gchar *format, ...)
+{
+ char buf[512] = { '\0', };
+ va_list ap;
+ va_start(ap, format);
+ vsnprintf(buf, sizeof(buf), format, ap);
+ va_end(ap);
+
+ gdouble current_elapsed = g_timer_elapsed(g_measure_timer, NULL);
+ gdouble meature_time = 0.0;
+
+ meature_time = (current_elapsed - previous_time[meature_type]);
+
+ cam_debug_time(LOG_TIME, "%s measure time = %.02f (sec) function %s\n",
+ debug_type[meature_type], (gfloat) (meature_time), buf);
+
+ previous_time[meature_type] = 0;
+}
+
+void debug_time_measure_log(const gchar *format, ...)
+{
+/*
+ g_return_if_fail(g_timer);
+ gdouble elapsed = g_timer_elapsed(g_timer, NULL);
+
+ char buf[512] = {'\0',};
+ va_list ap;
+ va_start(ap, format);
+ vsnprintf(buf, sizeof(buf), format, ap);
+ va_end(ap);
+
+ // cam_debug_time(LOG_TIME, "%s, measure_time = %.02f (ms)", buf, (gfloat)(elapsed - previous_elapsed));
+
+ previous_elapsed = elapsed;
+*/
+
+}
+
+void debug_time_measure_start(const gchar *format, ...)
+{
+ char buf[512] = { '\0', };
+ va_list ap;
+ va_start(ap, format);
+ vsnprintf(buf, sizeof(buf), format, ap);
+ va_end(ap);
+
+ if (g_timer == NULL) {
+ g_timer = g_timer_new();
+ } else {
+ g_timer_start(g_timer);
+ }
+
+ previous_elapsed = g_timer_elapsed(g_timer, NULL);
+
+ /*
+ cam_debug_time(LOG_TIME, "\nNEW MEASUREMENT: %s", buf);
+ cam_debug_time(LOG_TIME, "UNIT NAME, TOTAL ELAPSED, ELAPSED");
+ */
+}
+
+void debug_time_measure_stop(void)
+{
+ if (g_timer) {
+ g_timer_destroy(g_timer);
+ g_timer = NULL;
+ }
+}
+#endif /*ENABLE_TIME_MEASURE */
+
+#ifdef DEBUG_MESSAGE_ON
+#ifndef USE_DLOG_MESSAGE
+void
+cam_log_func(const gchar *_domain, GLogLevelFlags log_level,
+ const char *file_name, const char *func, int line_number,
+ const char *format, ...)
+{
+
+ va_list args;
+ char msg_buf[1024] = "\0", message[2048] = "\0";
+ char *p = NULL;
+ GET_FILE_NAME(p, (char *)file_name);
+
+ va_start(args, format);
+ vsnprintf(msg_buf, sizeof(msg_buf), format, args);
+
+ snprintf(message, sizeof(message), "[%s:%s:#%d]%s", p, func,
+ line_number, msg_buf);
+ va_end(args);
+
+ if (log_level & G_LOG_LEVEL_DEBUG) {
+ __cam_print_debug(_domain, message);
+ } else if (log_level & G_LOG_LEVEL_INFO) {
+ __cam_print_info(_domain, message);
+ } else if (log_level & G_LOG_LEVEL_MESSAGE) {
+ __cam_print_msg(_domain, message);
+ } else if (log_level & G_LOG_LEVEL_WARNING) {
+ __cam_print_warning(_domain, message);
+ } else if (log_level & G_LOG_LEVEL_CRITICAL) {
+ __cam_print_critical(_domain, message);
+ } else if (log_level & G_LOG_LEVEL_ERROR) {
+ __cam_print_error(_domain, message);
+ }
+
+}
+#endif
+#endif
diff --git a/src/cam_device_capacity.cpp b/src/cam_device_capacity.cpp
new file mode 100644
index 0000000..8f901e4
--- /dev/null
+++ b/src/cam_device_capacity.cpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CamDeviceCapacity.h"
+
+extern "C" {
+
+void ResetCaps()
+{
+ CCamDeviceCapacity::GetInstance()->ResetCaps();
+}
+
+
+void GetCamDevFuncCaps(unsigned int *eType, void *user_data)
+{
+ CCamDeviceCapacity::GetInstance()->GetCamDevFuncCaps(eType, user_data);
+}
+
+bool GetCamDevCamResolutionCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevCamResolutionCaps(uCapacity, user_data);
+}
+
+ bool GetCamDevRecResolutionCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevRecResolutionCaps(uCapacity, user_data);
+}
+
+bool GetCamDevFocusCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevFocusCaps(uCapacity, user_data);
+}
+
+ bool GetCamDevEffectCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevEffectCaps(uCapacity, user_data);
+}
+
+bool GetCamDevWBCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevWBCaps(uCapacity, user_data);
+}
+
+bool GetCamDevSceneModeCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevSceneModeCaps(uCapacity, user_data);
+}
+
+bool GetCamDevMeteringCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevMeteringCaps(uCapacity, user_data);
+}
+
+ bool GetCamDevISOCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevISOCaps(uCapacity, user_data);
+}
+
+ bool GetCamDevFlashCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevFlashCaps(uCapacity, user_data);
+}
+
+ bool GetCamDevFpsCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevFpsCaps(uCapacity, user_data);
+}
+
+bool GetCamDevShotModeCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevShotModeCaps(uCapacity, user_data);
+}
+
+bool GetCamDevRecModeCaps(unsigned int *uCapacity, void *user_data)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevRecModeCaps(uCapacity, user_data);
+}
+
+bool GetCamDevZoomCaps(int *min, int *max)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevZoomCaps(min, max);
+}
+
+ bool GetCamDevEvCaps(int *min, int *max)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevEvCaps(min, max);
+}
+
+bool GetCamDevBrCaps(int *min, int *max)
+{
+ return CCamDeviceCapacity::GetInstance()->GetCamDevBrCaps(min, max);
+}
+
+}
+
diff --git a/src/cam_exif_info.c b/src/cam_exif_info.c
new file mode 100644
index 0000000..12702c1
--- /dev/null
+++ b/src/cam_exif_info.c
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_debug.h"
+#include "cam_exif_info.h"
+#include <libexif/exif-loader.h>
+#include <string.h>
+
+
+
+//#include <libexif/exif-data.h>
+
+static void _set_uint16 (int is_motorola, void * out, unsigned short in)
+{
+ if (is_motorola) {
+ ((unsigned char *)out)[0] = in & 0x00ff;
+ ((unsigned char *)out)[1] = in >> 8;
+ } else {
+ ((unsigned char *)out)[0] = in >> 8;
+ ((unsigned char *)out)[1] = in & 0x00ff;
+ }
+}
+
+
+ExifData* cam_exif_get_exif_from_data(unsigned char *data, unsigned int data_size)
+{
+ ExifData *exif = NULL;
+ ExifLoader *loader = NULL;
+ unsigned char size[2];
+ unsigned int i;
+
+ loader = exif_loader_new();
+
+ if (loader != NULL) {
+ size[0] = (unsigned char) (data_size);
+ size[1] = (unsigned char) (data_size >> 8);
+ exif_loader_write (loader, size, 2);
+
+ for (i = 0; i < data_size && exif_loader_write (loader, data + i, 1); i++);
+
+ exif = exif_loader_get_data (loader);
+ if (exif == NULL)
+ cam_critical(LOG_CAM, "exif_loader_get_data() fail");
+
+ exif_loader_unref (loader);
+
+ } else
+ cam_critical(LOG_CAM, "exif_loader_new() fail");
+
+ return exif;
+}
+
+gboolean cam_exif_set_entry(ExifData *in_exif, ExifIfd ifd, ExifTag tag, ExifFormat format, unsigned long components, unsigned char *data)
+{
+ ExifData *exif = (ExifData *)in_exif;
+ ExifEntry *entry = NULL;
+
+ if (in_exif == NULL || format <= 0 || components <= 0 || data == NULL) {
+ cam_critical(LOG_CAM, "invalid input!! (exif:%p format:%d component=%lu data:%p)", in_exif, format, components, data);
+ return FALSE;
+ }
+
+ exif_content_remove_entry(exif->ifd[ifd], exif_content_get_entry(exif->ifd[ifd], tag));
+
+ entry = exif_entry_new();
+ if (entry == NULL) {
+ cam_critical(LOG_CAM, "exif_entry_new() return NULL");
+ return FALSE;
+ }
+
+ exif_entry_initialize(entry, tag);
+
+ entry->tag = tag;
+ entry->format = format;
+ entry->components = components;
+
+ if (entry->size == 0) {
+ entry->data = NULL;
+ entry->data = malloc(exif_format_get_size(format) * entry->components);
+ if (!entry->data) {
+ exif_entry_unref(entry);
+ cam_critical(LOG_CAM, "entry->data malloc fail");
+ return FALSE;
+ }
+
+ if (format == EXIF_FORMAT_ASCII) {
+ memset(entry->data, '\0', exif_format_get_size(format) * entry->components);
+ }
+ }
+
+ entry->size = exif_format_get_size(format) * entry->components;
+ memcpy(entry->data,data,entry->size);
+ exif_content_add_entry(exif->ifd[ifd], entry);
+ exif_entry_unref(entry);
+
+ return TRUE;
+
+
+}
+
+gboolean cam_exif_get_data_from_exif(unsigned char *out_data, unsigned int out_size, ExifData *in_exif)
+{
+ unsigned char *exif_raw = NULL;
+ unsigned int size = 0;
+
+ if (in_exif == NULL) {
+ cam_critical(LOG_CAM, "in_exif is NULL");
+ return FALSE;
+ }
+
+ cam_debug(LOG_CAM, "exif->ifd:%p", in_exif->ifd);
+
+ exif_data_save_data(in_exif, &exif_raw, &size);
+
+ if (exif_raw == NULL) {
+ cam_critical(LOG_CAM, "exif_data_save_data() is fail");
+ return FALSE;
+ }
+
+ if (out_data) {
+ free (out_data);
+ out_data = NULL;
+ out_size = 0;
+ }
+
+ out_data = exif_raw;
+ out_size = size;
+
+ return TRUE;
+
+}
+
+gboolean cam_exif_change_thumb_info(unsigned char *exif_raw, unsigned int exif_raw_size, unsigned char *thumb_data
+ , int thumb_w, int thumb_h, unsigned int thumb_size)
+{
+ ExifData *exif = NULL;
+ static ExifLong elong[10];
+
+ unsigned char *p_compressed = NULL;
+ int cntl = 0;
+
+ exif = cam_exif_get_exif_from_data(exif_raw, exif_raw_size);
+ exif->data = thumb_data;
+ exif->size = thumb_size;
+
+ // set thumbnail data
+ p_compressed = malloc(sizeof(ExifShort));
+ if (p_compressed != NULL) {
+ exif_set_short(p_compressed, exif_data_get_byte_order(exif), 6);
+
+ if (!cam_exif_set_entry(exif, EXIF_IFD_1, EXIF_TAG_COMPRESSION, EXIF_FORMAT_SHORT, 1, p_compressed)) {
+ cam_critical(LOG_CAM, "cam_exif_set_entry(tag:EXIF_TAG_COMPRESSION) fail");
+ goto exit;
+ }
+ } else {
+ cam_critical(LOG_CAM, "p_compressed is NULL");
+ goto exit;
+ }
+
+ // set thumbnail size
+ exif_set_long ((unsigned char *)&elong[cntl], exif_data_get_byte_order(exif), thumb_w);
+ if( !cam_exif_set_entry(exif, EXIF_IFD_1, EXIF_TAG_IMAGE_WIDTH, EXIF_FORMAT_LONG, 1, (unsigned char*)&elong[cntl++])) {
+ cam_critical(LOG_CAM, "cam_exif_set_entry(tag:EXIF_TAG_IMAGE_WIDTH) fail");
+ goto exit;
+ }
+ exif_set_long ((unsigned char *)&elong[cntl], exif_data_get_byte_order(exif), thumb_h);
+ if (!cam_exif_set_entry(exif, EXIF_IFD_1, EXIF_TAG_IMAGE_LENGTH, EXIF_FORMAT_LONG, 1, (unsigned char*)&elong[cntl++])) {
+ cam_critical(LOG_CAM, "cam_exif_set_entry(tag:EXIF_TAG_IMAGE_LENGTH) fail");
+ goto exit;
+ }
+
+ cam_debug(LOG_CAM, "exif:%p exif_size:%d", exif, exif->size);
+
+ if (!cam_exif_get_data_from_exif (exif_raw, exif_raw_size, exif)) {
+ cam_critical(LOG_CAM, "cam_exif_get_data_from_exif() fail");
+ goto exit;
+ }
+
+ exif->data = NULL;
+ exif->size = 0;
+ exif_data_unref (exif);
+
+ if(p_compressed != NULL)
+ free(p_compressed);
+ p_compressed = NULL;
+
+ return TRUE;
+
+ exit :
+ if(p_compressed != NULL)
+ free(p_compressed);
+ p_compressed = NULL;
+
+ return FALSE;
+
+}
+
+gboolean cam_exif_write_to_jpeg(unsigned char *in_data, unsigned int in_size, unsigned char *exif_data, unsigned int exif_size
+ ,unsigned char **out_data, unsigned int *out_size)
+{
+ unsigned char *data = NULL;
+ int data_size = 0;
+ unsigned short head[2] = {0,};
+ unsigned short head_len = 0;
+
+ data_size = 2 + 2 + 2 + exif_size + (in_size - 2);
+
+ data = (unsigned char*)malloc(sizeof(unsigned char)*data_size);
+ if (!data) {
+ cam_critical(LOG_SYS, "alloc fail");
+ goto exit;
+ }
+
+ _set_uint16(0, &head[0], 0xffd8);
+ _set_uint16(0, &head[1], 0xffe1);
+ _set_uint16(0, &head_len, (unsigned short)(exif_size + 2));
+
+
+ if (head[0] == 0 || head[1] == 0 || head_len == 0) {
+ cam_critical(LOG_SYS, "set header fail");
+ goto exit;
+ }
+
+ // Complete JPEG+EXIF //
+ // SOI marker //
+ memcpy(data, &head[0], 2);
+
+ //APP1 marker
+ memcpy(data + 2, &head[1], 2);
+ //length of APP1
+ memcpy(data + 2 + 2, &head_len, 2);
+ //EXIF
+ memcpy(data + 2 + 2 + 2, exif_data, exif_size);
+ //IMAGE
+ memcpy(data + 2 + 2 + 2 + exif_size, in_data + 2, in_size - 2);
+
+ if (data != NULL) {
+ *out_data = data;
+ *out_size = data_size;
+ }
+
+ return TRUE;
+
+ exit:
+ if (data)
+ free(data);
+ data = NULL;
+ return FALSE;
+
+}
diff --git a/src/cam_face_detection_focus.c b/src/cam_face_detection_focus.c
new file mode 100644
index 0000000..49c98f1
--- /dev/null
+++ b/src/cam_face_detection_focus.c
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <glib.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include "cam.h"
+#include "cam_error.h"
+#include "cam_debug.h"
+#include "cam_mm.h"
+#include "cam_face_detection_focus.h"
+
+static pthread_mutex_t face_detecton_mutex = PTHREAD_MUTEX_INITIALIZER;
+static gboolean is_face_zoom = FALSE; /*note: the flag: now is in face zoom state or not*/
+static CamFaceInfo face_info;
+
+
+#define RECT_CORRECTION_VALUE (20)
+
+
+/*note:check point whether in rect, @correction_value for enhance/weaken the condition*/
+static gboolean __check_point_whether_in_rect(int point_x,
+ int point_y,
+ CamVideoRectangle rect,
+ int correction_value)
+{
+
+ if (point_x > (rect.x - correction_value)
+ && point_y > (rect.y - correction_value)
+ && point_x < (rect.w + rect.x + correction_value)
+ && point_y < (rect.h + rect.y + correction_value)) {
+ DEBUG_TRACE("point is in rect");
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void cam_face_detection_focus_start_stream(camera_preview_data_s *preview_frame, void *user_data)
+{
+
+ cam_retm_if(user_data == NULL, "data is null");
+ cam_retm_if(preview_frame == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)user_data;
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is null");
+
+ if (cam_app_is_skip_video_stream()) {
+ return;
+ }
+ if (cam_utils_set_guide_rect_color(ad) ==FALSE) {
+ DEBUG_TRACE("cam_utils_set_guide_rect_color failed");
+ }
+ void *frame = NULL;
+ switch (preview_frame->num_of_planes) {
+ case 1:
+ frame = preview_frame->data.single_plane.yuv;
+ break;
+ case 2:
+ /*TODO: now do not support two planes*/
+ return;
+ case 3:
+ /*TODO: now do not support three planes*/
+ return;
+ default:
+ return;
+ }
+ pthread_mutex_lock(&face_detecton_mutex);
+ int i;
+ for(i = 0; i < face_info.count; i++ ) {
+
+ if(i == 0){
+ camapp->guide_rect_color = camapp->guide_rect_green;
+ }else{
+ camapp->guide_rect_color = camapp->guide_rect_white;
+ }
+
+ cam_utils_draw_guide_rectangle(ad,
+ frame,
+ face_info.faces[i].x,
+ face_info.faces[i].y,
+ face_info.faces[i].width,
+ face_info.faces[i].height);
+
+ }
+ pthread_mutex_unlock(&face_detecton_mutex);
+ return ;
+
+}
+
+gboolean cam_face_detection_focus_init()
+{
+ int err = 0;
+ err = pthread_mutex_init(&(face_detecton_mutex), NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM, "Create face detection mutex failed");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_face_detection_focus_finish()
+{
+ pthread_mutex_destroy(&face_detecton_mutex);
+ return TRUE;
+}
+
+
+/*note: in face detection focus mode, when face deteced , callback will be called*/
+void cam_face_detection_focus_face_detected_cb(camera_detected_face_s *faces, int count, void *user_data)
+{
+ pthread_mutex_lock(&face_detecton_mutex);
+
+ if(count > MAX_FACE_COUNT)
+ count = MAX_FACE_COUNT;
+
+ int i ;
+ for(i = 0; i < count; i++ ) {
+
+ face_info.faces[i].height = faces->height;
+ face_info.faces[i].id = faces->id;
+ face_info.faces[i].score = faces->score;
+ face_info.faces[i].width = faces->width;
+ face_info.faces[i].x = faces->x;
+ face_info.faces[i].y = faces->y;
+ faces++;
+ }
+ face_info.count = count;
+ pthread_mutex_unlock(&face_detecton_mutex);
+
+ return;
+}
+
+void cam_common_set_mouse_double_click_xy(Evas_Coord x, Evas_Coord y)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ if (is_face_zoom) {
+
+ cam_critical(LOG_CAM, "cancel face zoom");
+ if (cam_mm_camera_cancel_face_zoom())
+ is_face_zoom = FALSE;
+ return;
+ }
+
+ pthread_mutex_lock(&face_detecton_mutex);
+
+ if(face_info.count < 1 )
+ {
+ cam_debug(LOG_CAM, "not detected face");
+ pthread_mutex_unlock(&face_detecton_mutex);
+ return;
+ }
+
+ cam_debug(LOG_CAM, "x = %d, y = %d", x, y);
+
+ /*calculate*/
+ int i;
+ for(i=0; i<face_info.count; i++)
+ {
+ CamVideoRectangle src;
+ src.x = face_info.faces[i].x;
+ src.y = face_info.faces[i].y;
+ src.w = face_info.faces[i].width;
+ src.h = face_info.faces[i].height;
+
+ CamVideoRectangle dest;
+ cam_utils_set_videos_xy_to_windows_xy(src, &dest,(void *)ad);
+
+ cam_debug(LOG_CAM, "_x = %d, _y = %d", face_info.faces[i].x, face_info.faces[i].y);
+ cam_debug(LOG_CAM, "cam_face_x = %d, cam_face_y = %d", dest.x, dest.y);
+
+ gboolean point_in_rect = FALSE;
+ point_in_rect = __check_point_whether_in_rect(x, y, dest, RECT_CORRECTION_VALUE);
+
+ if (point_in_rect) {
+ cam_debug(LOG_CAM, "in rect");
+ if (is_face_zoom || (camapp->zoom_mode != camapp->zoom_min)) {
+ if (cam_mm_camera_cancel_face_zoom()){
+ is_face_zoom = FALSE;
+ camapp->zoom_mode = ZOOM_DEFAULT;
+ }
+ } else {
+ if (cam_mm_set_camera_face_zoom(face_info.faces[i].id)) {
+ is_face_zoom = TRUE;
+ }
+ }
+ }else{
+ cam_debug(LOG_CAM, "not matcing");
+ }
+ }
+ pthread_mutex_unlock(&face_detecton_mutex);
+
+
+}
+void cam_face_detection_reset()
+{
+ face_info.count = 0;
+}
+
+//end file
diff --git a/src/cam_file.c b/src/cam_file.c
new file mode 100755
index 0000000..2a6adb3
--- /dev/null
+++ b/src/cam_file.c
@@ -0,0 +1,489 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "cam_file.h"
+#include "cam_error.h"
+#include "cam_debug.h"
+#include "cam_ta.h"
+
+#include <sys/time.h>
+#include <sys/times.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <media_content.h>
+
+#define CAM_FILE_CONDITION_LENGTH 256
+
+gboolean cam_file_init(GError **error)
+{
+ debug_fenter(LOG_UI);
+
+ return TRUE;
+}
+
+void cam_file_finalize()
+{
+ debug_fenter(LOG_UI);
+ return;
+}
+
+gboolean cam_file_get_size(const char *filename, guint64 *size)
+{
+ struct stat buf;
+
+ if (stat(filename, &buf) != 0)
+ return FALSE;
+ *size = (guint64)buf.st_size;
+ return TRUE;
+}
+
+gboolean cam_file_check_exists(gchar *filename)
+{
+
+ FILE *fd = fopen(filename, "r");
+ if (fd == NULL) {
+ return FALSE;
+ } else {
+ fclose(fd);
+ return TRUE;
+ }
+}
+
+gboolean cam_file_register(const gchar *filename, GError **error)
+{
+ int err_code = 0;
+
+ CAM_TA_ACUM_ITEM_BEGIN(" cam_file_register", 0);
+
+ cam_debug(LOG_UI, "");
+
+ if (filename == NULL) {
+ cam_critical(LOG_FILE, "The filename is null");
+ CAM_TA_ACUM_ITEM_END(" cam_file_register", 0);
+ return FALSE;
+ }
+
+ if (!g_file_test(filename, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
+ cam_critical(LOG_FILE, "The File is not existed");
+ CAM_TA_ACUM_ITEM_END(" cam_file_register", 0);
+ return FALSE;
+ }
+ if (g_str_has_suffix(filename, ".jpg")) {
+ cam_debug(LOG_FILE, "jpg file!");
+
+ } else if (g_str_has_suffix(filename, ".3gp")) {
+ cam_debug(LOG_FILE, ".3gp file!");
+ } else if (g_str_has_suffix(filename, ".mp4")) {
+ cam_debug(LOG_FILE, ".mp4 file!");
+ } else {
+ cam_critical(LOG_FILE, "failed to get file type : [%s]",
+ filename);
+ return FALSE;
+ }
+
+ media_info_h info = NULL;
+ err_code = media_info_insert_to_db(filename, &info);
+
+ if (err_code != MEDIA_CONTENT_ERROR_NONE) {
+ cam_critical(LOG_FILE, "failed to media_file_register() : [%s], [%d]", filename, err_code);
+ CAM_TA_ACUM_ITEM_END(" cam_file_register", 0);
+ media_info_destroy(info);
+ return FALSE;
+ }
+ media_info_destroy(info);
+
+ cam_debug(LOG_FILE, "register success!");
+ CAM_TA_ACUM_ITEM_END(" cam_file_register", 0);
+ return TRUE;
+}
+
+gboolean cam_file_delete(const gchar *filename, GError **error)
+{
+ cam_debug(LOG_FILE, "%s", filename);
+
+ if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
+ cam_warning(LOG_FILE, "invalid file:%s", filename);
+ cam_set_error(error, CAM_ERROR_FILE_NOT_EXISTS,
+ "File not exists:%s", filename);
+ return FALSE;
+ }
+ return (g_unlink(filename) == 0) ? TRUE : FALSE;
+}
+
+gboolean
+cam_file_rename(const gchar *filename, const gchar *new_name, GError **error)
+{
+ gboolean bret = FALSE;
+
+ cam_debug(LOG_FILE, "[%s] -> [%s]", filename, new_name);
+
+ if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
+ cam_warning(LOG_FILE, "invalid file:%s", filename);
+ cam_set_error(error, CAM_ERROR_FILE_NOT_EXISTS,
+ "File not exists:%s", filename);
+ return FALSE;
+ }
+
+ bret = (g_rename(filename, new_name) == 0) ? TRUE : FALSE;
+
+ if (!bret) {
+ cam_critical(LOG_FILE, "operation failed");
+ }
+
+ if (!g_file_test(new_name, G_FILE_TEST_IS_REGULAR)) {
+ cam_warning(LOG_FILE, "renamed file not exists:%s", new_name);
+ bret = FALSE;
+ }
+
+ return bret;
+}
+
+const gchar *cam_file_get_internal_image_path(void)
+{
+ gchar * spath = INTERNAL_FILE_PATH;
+
+ return spath;
+}
+
+const gchar *cam_file_get_internal_video_path(void)
+{
+ gchar * spath = INTERNAL_FILE_PATH;
+
+ return spath;
+}
+
+const gchar *cam_file_get_external_image_path(void)
+{
+ gchar * spath = EXTERNAL_FILE_PATH;
+
+ return spath;
+}
+
+const gchar *cam_file_get_external_video_path(void)
+{
+ gchar * spath = EXTERNAL_FILE_PATH;
+
+ return spath;
+}
+
+gboolean cam_check_dir()
+{
+ DIR *internal_dir = NULL;
+ DIR *external_dir = NULL;
+ int ret;
+ internal_dir = opendir(INTERNAL_FILE_PATH);
+
+ if(internal_dir == NULL) {
+ ret = mkdir(INTERNAL_FILE_PATH,0777);
+ DEBUG_TRACE("ret = [%d]",ret);
+ if(ret <0) {
+ DEBUG_TRACE("Cannot make default path");
+ /*closedir(internal_dir);*/
+ return FALSE;
+ }
+ }
+ if (internal_dir) {
+ closedir(internal_dir);
+ internal_dir = NULL;
+ }
+
+ external_dir = opendir(EXTERNAL_FILE_PATH);
+ if(external_dir == NULL) {
+ ret = mkdir(EXTERNAL_FILE_PATH,0777);
+ DEBUG_TRACE("ret = [%d]",ret);
+ if(ret <0) {
+ DEBUG_TRACE("MMC is fault or not inserted");
+ }
+
+ }
+ if (external_dir) {
+ closedir(external_dir);
+ external_dir = NULL;
+ }
+
+ return TRUE;
+
+}
+gchar *cam_file_get_next_filename_for_multishot(const gchar *storage_root,
+ const gchar *first_file_name,
+ const gint shot_num,
+ const gchar *suffix)
+{
+ char *prefix = NULL;
+ char *result = NULL;
+ char *check_full_path = NULL;
+ char *check_full_name = NULL;
+ int cnt = 0;
+ gboolean bFinal = FALSE;
+
+ prefix = g_strdup_printf("%s/%s", storage_root, first_file_name);
+
+ if (shot_num == 0) {
+ check_full_name = g_strdup_printf("%s", prefix);
+ } else {
+ check_full_name =
+ g_strdup_printf("%s_%d", prefix, shot_num);
+ }
+ check_full_path = g_strdup_printf("%s%s", check_full_name, suffix);
+ /*NOTE: if worst sceanio: always failed.set max count 1000*/
+ #define MAX_SUB_NAME_NUMBER (1000)
+ while (bFinal == FALSE && check_full_path && (cnt < MAX_SUB_NAME_NUMBER)) {
+ if (!cam_file_check_exists(check_full_path)) {
+ bFinal = TRUE;
+ result = g_strdup(check_full_path);
+ } else {
+ cnt++;
+ if (check_full_path)
+ g_free(check_full_path);
+ check_full_path = NULL;
+ check_full_path =
+ g_strdup_printf("%s-%d%s", check_full_name, cnt, suffix);
+
+ bFinal = FALSE;
+ }
+ }
+
+ if (check_full_path)
+ g_free(check_full_path);
+ check_full_path = NULL;
+ if (check_full_name)
+ g_free(check_full_name);
+ check_full_name = NULL;
+
+ if (prefix)
+ g_free(prefix);
+ prefix = NULL;
+
+ cam_debug(LOG_FILE, "%s", result);
+
+ return result;
+}
+
+/*callback for:media_folder_foreach_media_from_db*/
+static bool __cam_file_get_latest_file_path_cb(media_info_h item, void *user_data)
+{
+ char **file_url = (char **) user_data;
+ if (media_info_get_file_path(item, file_url) != MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("Clone folder handle error");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*callback for:media_info_foreach_media_from_db*/
+/*note:here have to use bool, not gboolean, for callback define*/
+static bool __cam_file_get_cam_file_thumbnail_path_cb(media_info_h item, void *user_data)
+{
+ char **thumbnail_path = (char **) user_data;
+ if (media_info_get_thumbnail_path(item, thumbnail_path) != MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("get thumbnail path error");
+ return FALSE;
+ }
+ if (*thumbnail_path)
+ DEBUG_TRACE("thumbnail_path = %s", *thumbnail_path);
+ return TRUE;
+}
+
+/*callback for:media_folder_foreach_folder_from_db*/
+static bool __cam_file_get_storage_folder_id_cb(media_folder_h item, void *user_data)
+{
+ char **folder_uuid = (char **) user_data;
+ if (media_folder_get_folder_id(item, folder_uuid) != MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("Get folder id error");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+char *cam_file_get_cam_storage_folder_id(const gchar *storage_root)
+{
+ char condition[CAM_FILE_CONDITION_LENGTH + 1] = { '\0', };
+ snprintf(condition, CAM_FILE_CONDITION_LENGTH, "%s = \'%s\'", FOLDER_PATH, (char *)storage_root);
+ filter_h filter = NULL;
+ int ret = media_filter_create(&filter);
+ if(ret != MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("Fail to create filter");
+ return NULL;
+ }
+
+ ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ goto ERROR_THROW;
+ }
+
+ char *folder_uuid = NULL;
+ ret = media_folder_foreach_folder_from_db(filter,
+ __cam_file_get_storage_folder_id_cb,
+ &folder_uuid);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ goto ERROR_THROW;
+ }
+
+ if (folder_uuid) {
+ if (filter)
+ media_filter_destroy(filter);
+ filter = NULL;
+ return folder_uuid;
+ } else {
+ goto ERROR_THROW;
+ }
+
+ERROR_THROW:
+ if (filter)
+ media_filter_destroy(filter);
+ filter = NULL;
+ return NULL;
+}
+
+gboolean cam_file_get_cam_file_thumbnail_path(const gchar *file_path, gchar **thumbnail_path)
+{
+ if (thumbnail_path == NULL)
+ return FALSE;
+ char condition[CAM_FILE_CONDITION_LENGTH + 1] = { '\0', };
+ snprintf(condition, CAM_FILE_CONDITION_LENGTH, "%s = \'%s\'", MEDIA_PATH, (char *)file_path);
+ filter_h filter = NULL;
+ int ret = media_filter_create(&filter);
+ if(ret != MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("Fail to create filter");
+ goto ERROR_THROW;
+ }
+
+ ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ goto ERROR_THROW;
+ }
+
+ char *temp_thumbnail_path = NULL;
+ ret = media_info_foreach_media_from_db(filter,
+ __cam_file_get_cam_file_thumbnail_path_cb,
+ &temp_thumbnail_path);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ goto ERROR_THROW;
+ }
+ *thumbnail_path = temp_thumbnail_path;
+ if (filter)
+ media_filter_destroy(filter);
+ filter = NULL;
+ return TRUE;
+
+ERROR_THROW:
+ if (filter)
+ media_filter_destroy(filter);
+ filter = NULL;
+ return FALSE;
+}
+
+gchar *cam_file_get_last_file_path(void *data, const gchar *storage_root)
+{
+ struct appdata *ad =data;
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+ cam_retvm_if(storage_root == NULL, NULL, "storage_root is NULL");
+ DEBUG_TRACE("storage_root : %s", storage_root);
+
+
+ /*get folder id*/
+
+ char *folder_uuid = cam_file_get_cam_storage_folder_id(storage_root);
+ if (!folder_uuid) {
+ DEBUG_TRACE("not find %s", storage_root);
+ return NULL;
+ }
+
+ char condition[CAM_FILE_PATH_MAX + 1] = { '\0', };
+
+ snprintf(condition, CAM_FILE_PATH_MAX, "(%s=0 OR %s=1)", MEDIA_TYPE, MEDIA_TYPE);
+
+ filter_h filter = NULL;
+ int ret = media_filter_create(&filter);
+ if(ret != MEDIA_CONTENT_ERROR_NONE) {
+ DEBUG_TRACE("Fail to create filter");
+ goto ERROR_THROW;
+ }
+
+ ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ goto ERROR_THROW;
+ }
+
+ ret = media_filter_set_order(filter,
+ MEDIA_CONTENT_ORDER_DESC,
+ MEDIA_MODIFIED_TIME,
+ MEDIA_CONTENT_COLLATE_DEFAULT);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ goto ERROR_THROW;
+ }
+ ret = media_filter_set_offset(filter,
+ 0,/*offset*/
+ 1);/*count*/
+ char *file_url = NULL;
+ ret = media_folder_foreach_media_from_db(folder_uuid,
+ filter,
+ __cam_file_get_latest_file_path_cb,
+ &file_url);
+ if (ret < 0) {
+ DEBUG_TRACE("Failed to media_folder_foreach_media_from_db");
+ goto ERROR_THROW;
+ }
+
+ if (file_url == NULL) {
+ DEBUG_TRACE(" Failed ");
+ goto ERROR_THROW;
+ }
+ /*make last filename */
+ gchar last_file_path[255] = { 0, };
+ snprintf(last_file_path, sizeof(last_file_path), "%s", file_url);
+ free(file_url);
+ file_url = NULL;
+ media_filter_destroy(filter);
+ filter = NULL;
+
+ return g_strdup(last_file_path);
+
+ERROR_THROW:
+ if (filter)
+ media_filter_destroy(filter);
+ filter = NULL;
+ return NULL;
+
+}
+
+gchar *cam_file_get_next_filename(const gchar *storage_root,
+ const gchar *prefix_string,
+ const gchar *suffix)
+{
+ gchar target[255] = { 0, };
+ time_t t;
+ struct tm tm;
+
+ t = time(NULL);
+ tzset();
+ /*localtime_r : available since libc 5.2.5 */
+ if(localtime_r(&t,&tm) == NULL) {
+ return NULL;
+ }
+ snprintf(target, sizeof(target), "%s/%04i%02i%02i-%02i%02i%02i%s",
+ storage_root,
+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+ tm.tm_hour, tm.tm_min, tm.tm_sec, suffix);
+
+ cam_debug(LOG_FILE, "filename: %s", target);
+
+ return g_strdup(target);
+}
diff --git a/src/cam_lbs.c b/src/cam_lbs.c
new file mode 100755
index 0000000..3edb8ee
--- /dev/null
+++ b/src/cam_lbs.c
@@ -0,0 +1,304 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <time.h>
+#include <locations.h>
+#include "cam_lbs.h"
+#include "cam_debug.h"
+
+typedef struct {
+ location_manager_h location_handle;
+ CamLBSState m_lbs_state;
+ void (*lbs_update_cb) (void *data, int lbs_state);
+ void *cb_data;
+ double latitude;
+ double longitude;
+ double altitude;
+ time_t time_stamp;
+} CamLBSInfo;
+
+static CamLBSInfo *cam_lbs_info = NULL; /* lbs_info */
+
+void cam_lbs_set_state_from_accuracy_level()
+{
+ g_return_if_fail(cam_lbs_info);
+ g_return_if_fail(cam_lbs_info->location_handle);
+
+ location_accuracy_level_e accuracy_level;
+ double horizontal;
+ double vertical;
+
+ int ret = LOCATIONS_ERROR_NONE;
+
+ ret = location_manager_get_accuracy(cam_lbs_info->location_handle,
+ &accuracy_level, &horizontal, &vertical);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_get_accuracy failed!! error = %d", ret);
+ return;
+ }
+
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_DISABLE;
+
+ switch (accuracy_level) {
+ case LOCATIONS_ACCURACY_NONE:
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_SERVICE_START;
+ break;
+ case LOCATIONS_ACCURACY_COUNTRY:
+ case LOCATIONS_ACCURACY_REGION :
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_SERVICE_ENABLE;
+ break;
+ case LOCATIONS_ACCURACY_LOCALITY :
+ case LOCATIONS_ACCURACY_POSTALCODE:
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_ACCURANCY_ROUGH;
+ break;
+ case LOCATIONS_ACCURACY_STREET :
+ case LOCATIONS_ACCURACY_DETAILED :
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_ACCURANCY_DETAILED;
+ break;
+ default:
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_DISABLE;
+ break;
+ }
+}
+
+static void cam_lbs_position_updated_cb(double latitude, double longitude,
+ double altitude, time_t timestamp, void *user_data)
+{
+ cam_debug(LOG_SYS, "cam_lbs_position_updated_cb : lat(%f), long(%f), alt(%f), time(%f)",
+ latitude, longitude, altitude, timestamp);
+
+ g_return_if_fail(cam_lbs_info);
+
+ cam_lbs_set_state_from_accuracy_level();
+
+ cam_lbs_info->latitude = latitude;
+ cam_lbs_info->longitude = longitude;
+ cam_lbs_info->altitude = altitude;
+ cam_lbs_info->time_stamp = timestamp;
+
+ /* call callback function */
+ if (cam_lbs_info->lbs_update_cb)
+ cam_lbs_info->lbs_update_cb(cam_lbs_info->cb_data, cam_lbs_get_state());
+}
+
+static void cam_lbs_service_state_changed_cb(location_service_state_e state, void *user_data)
+{
+ cam_debug(LOG_SYS, "cam_lbs_service_state_changed_cb : state(%d)", state);
+
+ g_return_if_fail(cam_lbs_info);
+ g_return_if_fail(cam_lbs_info->location_handle);
+
+ switch (state){
+ case LOCATIONS_SERVICE_ENABLED : {
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_SERVICE_ENABLE;
+
+ double altitude = -1.0;
+ double latitude = -1.0;
+ double longitude = -1.0;
+ time_t timestamp = -1.0;
+
+ int ret = LOCATIONS_ERROR_NONE;
+
+ ret = location_manager_get_position(cam_lbs_info->location_handle,
+ &altitude, &latitude, &longitude, &timestamp);
+ if(ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_get_position failed!! error = %d", ret);
+ return;
+ }
+
+ cam_debug(LOG_SYS, "cam_lbs_service_state_changed_cb : alt(%f), lat(%f), long(%f), time(%f)",
+ altitude, latitude, longitude, timestamp);
+
+ cam_lbs_info->altitude = altitude;
+ cam_lbs_info->latitude = latitude;
+ cam_lbs_info->longitude = longitude;
+ cam_lbs_info->time_stamp = timestamp;
+
+ cam_lbs_set_state_from_accuracy_level();
+
+ /* call callback function */
+ if (cam_lbs_info->lbs_update_cb)
+ cam_lbs_info->lbs_update_cb(cam_lbs_info->cb_data, cam_lbs_get_state());
+ }
+
+ case LOCATIONS_SERVICE_DISABLED : {
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_DISABLE;
+
+ /* call callback function */
+ if (cam_lbs_info->lbs_update_cb)
+ cam_lbs_info->lbs_update_cb(cam_lbs_info->cb_data, cam_lbs_get_state());
+ }
+
+ default :
+ break;
+ }
+}
+
+gboolean cam_lbs_init(void)
+{
+ g_return_val_if_fail(!cam_lbs_info, FALSE);
+
+ debug_fenter(LOG_UI);
+
+ cam_lbs_info = g_new0(CamLBSInfo, 1);
+ cam_lbs_info->location_handle = NULL;
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_DISABLE;
+ cam_lbs_info->lbs_update_cb = NULL;
+ cam_lbs_info->cb_data = NULL;
+ cam_lbs_info->altitude = -1.0;
+ cam_lbs_info->latitude = -1.0;
+ cam_lbs_info->longitude = -1.0;
+ cam_lbs_info->time_stamp = -1.0;
+
+ int ret = LOCATIONS_ERROR_NONE;
+
+ ret = location_manager_create(LOCATIONS_METHOD_HYBRID, &cam_lbs_info->location_handle);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_create failed!! error = %d", ret);
+ goto ERROR;
+ }
+
+ ret = location_manager_set_service_state_changed_cb(cam_lbs_info->location_handle,
+ cam_lbs_service_state_changed_cb, (void*)NULL);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_set_service_state_changed_cb failed!! error = %d", ret);
+ goto ERROR;
+ }
+
+ ret = location_manager_set_position_updated_cb(cam_lbs_info->location_handle,
+ cam_lbs_position_updated_cb, 30, (void*)NULL);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_set_position_updated_cb failed!! error = %d", ret);
+ goto ERROR;
+ }
+
+ return TRUE;
+
+ ERROR:
+
+ if (cam_lbs_info)
+ g_free(cam_lbs_info);
+ cam_lbs_info = NULL;
+
+ return FALSE;
+}
+
+gboolean cam_lbs_finialize(void)
+{
+ g_return_val_if_fail(cam_lbs_info, FALSE);
+ g_return_val_if_fail(cam_lbs_info->location_handle, FALSE);
+
+ debug_fenter(LOG_UI);
+
+ int ret = LOCATIONS_ERROR_NONE;
+
+ ret = location_manager_destroy(cam_lbs_info->location_handle);
+
+ if (cam_lbs_info)
+ g_free(cam_lbs_info);
+ cam_lbs_info = NULL;
+
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_destroy failed!! error = %d", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_lbs_start(void (*lbs_update_cb) (void *data, int lbs_state), void *data)
+{
+ g_return_val_if_fail(cam_lbs_info, FALSE);
+ g_return_val_if_fail(cam_lbs_info->location_handle, FALSE);
+
+ cam_lbs_info->lbs_update_cb = lbs_update_cb;
+ cam_lbs_info->cb_data = data;
+
+ int ret = LOCATIONS_ERROR_NONE;
+
+ ret = location_manager_start(cam_lbs_info->location_handle);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_start failed!! error = %d", ret);
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_DISABLE;
+ return FALSE;
+ }
+
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_SERVICE_START;
+
+ return TRUE;
+}
+
+gboolean cam_lbs_stop(void)
+{
+ g_return_val_if_fail(cam_lbs_info, FALSE);
+ g_return_val_if_fail(cam_lbs_info->location_handle, FALSE);
+
+ int ret = LOCATIONS_ERROR_NONE;
+
+ ret = location_manager_stop(cam_lbs_info->location_handle);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ cam_debug(LOG_SYS, "location_manager_stop failed!! error = %d", ret);
+ return FALSE;
+ }
+
+ cam_lbs_info->m_lbs_state = CAM_LBS_STATE_DISABLE;
+
+ return TRUE;
+}
+
+gboolean cam_lbs_is_valid(void)
+{
+ g_return_val_if_fail(cam_lbs_info, FALSE);
+
+ if (cam_lbs_info->m_lbs_state > CAM_LBS_STATE_SERVICE_START)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+gboolean cam_lbs_get_current_position(double *longitude, double *latitude,
+ double *altitude, time_t *time_stamp)
+{
+ g_return_val_if_fail(cam_lbs_info, FALSE);
+ g_return_val_if_fail(cam_lbs_info->m_lbs_state >= CAM_LBS_STATE_SERVICE_ENABLE, FALSE);
+
+ cam_debug(LOG_SYS, "SYNC>> Current position:");
+ cam_debug(LOG_SYS, "\ttime: %f, lat: %f, long: %f, alt: %f",
+ cam_lbs_info->time_stamp, cam_lbs_info->latitude,
+ cam_lbs_info->longitude, cam_lbs_info->altitude);
+
+ *altitude = cam_lbs_info->altitude;
+ *latitude = cam_lbs_info->latitude;
+ *longitude = cam_lbs_info->longitude;
+ *time_stamp = cam_lbs_info->time_stamp;
+
+ return TRUE;
+}
+
+gboolean cam_lbs_get_address(char *address, int max_length)
+{
+ g_return_val_if_fail(cam_lbs_info, FALSE);
+
+ return TRUE;
+}
+
+int cam_lbs_get_state(void)
+{
+ g_return_val_if_fail(cam_lbs_info, CAM_LBS_STATE_DISABLE);
+
+ return cam_lbs_info->m_lbs_state;
+}
diff --git a/src/cam_long_press.c b/src/cam_long_press.c
new file mode 100755
index 0000000..28a0658
--- /dev/null
+++ b/src/cam_long_press.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <Elementary.h>
+#include "cam.h"
+#include "cam_long_press.h"
+
+typedef struct cb_item {
+ LONG_PRESS_START_CALLBACK start_func;
+ LONG_PRESS_CANCEL_CALLBACK cancel_func;
+ void *data;
+
+ Evas_Coord x;
+ Evas_Coord y;
+
+ Ecore_Timer *hold_timer;
+ double time;
+
+ bool runing;
+}long_press_timer_t;
+
+static long_press_timer_t g_timer[LONG_PRESS_ID_MAX_NUMS];
+
+bool cam_get_long_press_running_state(int index)
+{
+ if (index >=LONG_PRESS_ID_MAX_NUMS || index < 0) {
+ return FALSE;
+ }
+ return g_timer[index].runing;
+}
+static Eina_Bool _timer_cb(void *data)
+{
+ if(NULL == data) {
+ return FALSE;
+ }
+
+ long_press_timer_t *item = (long_press_timer_t*)data;
+
+ item->hold_timer = NULL;
+ if (item->start_func) {
+ item->start_func(item->data, item->x, item->y);
+ item->runing = TRUE;
+ }
+ return ECORE_CALLBACK_CANCEL;
+}
+
+int cam_long_press_register(int index, double time,
+ LONG_PRESS_START_CALLBACK start_func,
+ LONG_PRESS_CANCEL_CALLBACK end_func,
+ void *data)
+{
+ if(index >= LONG_PRESS_ID_MAX_NUMS)
+ return EXIT_FAILURE;
+
+ if(g_timer[index].hold_timer != NULL) {
+ DEBUG_TRACE("Already register! \n");
+ return EXIT_SUCCESS;
+ }
+
+ g_timer[index].start_func = start_func;
+ g_timer[index].cancel_func = end_func;
+ g_timer[index].data = data;
+ g_timer[index].runing = FALSE;
+ g_timer[index].time = time;
+
+ return EXIT_SUCCESS;
+}
+
+int cam_long_press_unregister(int index)
+{
+ if(index >= LONG_PRESS_ID_MAX_NUMS)
+ return EXIT_FAILURE;
+
+ if (g_timer[index].hold_timer) {
+ ecore_timer_del(g_timer[index].hold_timer);
+ g_timer[index].hold_timer = NULL;
+ }
+
+ return EXIT_SUCCESS;
+}
+
+void cam_long_press_trigger(int index, Evas_Coord x, Evas_Coord y)
+{
+ if(index >= LONG_PRESS_ID_MAX_NUMS)
+ return;
+
+ if (g_timer[index].hold_timer) {
+ return;
+ }
+
+ g_timer[index].hold_timer = ecore_timer_add(g_timer[index].time, _timer_cb, &g_timer[index]);
+ if (!g_timer[index].hold_timer) {
+ DEBUG_TRACE("Failed to trigger the hold timer\n");
+ }
+
+ /*Update valid region*/
+ g_timer[index].x = x;
+ g_timer[index].y = y;
+ g_timer[index].runing = FALSE;
+}
+
+void cam_long_press_validate(int index, Evas_Coord x, Evas_Coord y)
+{
+ if(index >= LONG_PRESS_ID_MAX_NUMS)
+ return;
+
+ int dx;
+ int dy;
+
+ if (!g_timer[index].hold_timer) {
+ return;
+ }
+
+ dx = (g_timer[index].x - x);
+ dx *= dx;
+
+ dy = (g_timer[index].y - y);
+ dy *= dy;
+
+ /*TODO:this condision is too strict*/
+ if ((dx + dy) > ((elm_config_finger_size_get() / 2) * (elm_config_finger_size_get() / 2))) {
+ DEBUG_TRACE("validate failed, del timer\n");
+ ecore_timer_del(g_timer[index].hold_timer);
+ g_timer[index].hold_timer = NULL;
+ }
+
+}
+
+void cam_long_press_cancel(int index)
+{
+ if(index >= LONG_PRESS_ID_MAX_NUMS)
+ return;
+
+ if (g_timer[index].hold_timer) {
+ ecore_timer_del(g_timer[index].hold_timer);
+ g_timer[index].hold_timer = NULL;
+ }
+ g_timer[index].runing = FALSE;
+ if (g_timer[index].cancel_func) {
+ g_timer[index].cancel_func(g_timer[index].data, g_timer[index].x, g_timer[index].y);
+ }
+}
+
+
diff --git a/src/cam_menu_composer.c b/src/cam_menu_composer.c
new file mode 100755
index 0000000..8893ec6
--- /dev/null
+++ b/src/cam_menu_composer.c
@@ -0,0 +1,1245 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <app.h>
+#include "cam_menu_composer.h"
+#include "cam_debug.h"
+#include "cam_capacity_type.h"
+#include "cam_device_capacity.h"
+
+
+const CAM_MENU_ITEM setting[] = {CAM_MENU_SHORTCUTS , CAM_MENU_VOLUME_KEY , CAM_MENU_BURST_SHOT_MODE , CAM_MENU_SELF_PORTRAIT , CAM_MENU_FLASH , CAM_MENU_SHOOTING_MODE
+ , CAM_MENU_RECORDING_MODE , CAM_MENU_SCENE_MODE , CAM_MENU_EXPLOSURE_VALUE , CAM_MENU_FOCUS_MODE , CAM_MENU_TIMER
+ , CAM_MENU_EFFECTS , CAM_MENU_PHOTO_RESOLUTION , CAM_MENU_VIDEO_RESOLUTION , CAM_MENU_WHITE_BALANCE , CAM_MENU_ISO
+ , CAM_MENU_METERING , CAM_MENU_ANTI_SHAKE , CAM_MENU_OUTDOOR_VISIBILITY , CAM_MENU_AUTO_CONTRAST , CAM_MENU_GUIDELINES
+ , CAM_MENU_CAPTURE_VOICE , CAM_MENU_GPS_TAG , CAM_MENU_SAVE_AS_FLIP , CAM_MENU_STORAGE , CAM_MENU_RESET};
+
+const CAM_MENU_ITEM scene_mode[] = {CAM_MENU_SCENE_AUTO , CAM_MENU_SCENE_PORTRAIT , CAM_MENU_SCENE_LANDSCAPE , CAM_MENU_SCENE_NIGHT , CAM_MENU_SCENE_SPORTS
+ , CAM_MENU_SCENE_PARTY , CAM_MENU_SCENE_BEACHSNOW , CAM_MENU_SCENE_SUNSET , CAM_MENU_SCENE_DUSKDAWN, CAM_MENU_SCENE_FALL
+ , CAM_MENU_SCENE_FIREWORK , CAM_MENU_SCENE_TEXT , CAM_MENU_SCENE_CANDLELIGHT, CAM_MENU_SCENE_BACKLIGHT, CAM_MENU_SCENE_SHOW_WINDOW};
+
+const CAM_MENU_ITEM shooting_mode[] = {CAM_MENU_SHOOTING_SINGLE, CAM_MENU_SHOOTING_SELF_SINGLE};
+
+const CAM_MENU_ITEM recording_mode[] = {CAM_MENU_RECORDING_MODE_NORMAL, CAM_MENU_RECORDING_MODE_SLOW, CAM_MENU_RECORDING_MODE_FAST, CAM_MENU_RECORDING_MODE_LIMIT,
+ CAM_MENU_RECORDING_MODE_SELF_NORMAL, CAM_MENU_RECORDING_MODE_SELF_LIMIT};
+
+const CAM_MENU_ITEM photo_resolution[] = {CAM_MENU_PHOTO_RESOLUTION_3264x2448 , CAM_MENU_PHOTO_RESOLUTION_3264x1960 , CAM_MENU_PHOTO_RESOLUTION_3264x1836 , CAM_MENU_PHOTO_RESOLUTION_2560x1920
+ , CAM_MENU_PHOTO_RESOLUTION_2560x1536 , CAM_MENU_PHOTO_RESOLUTION_2560x1440 , CAM_MENU_PHOTO_RESOLUTION_2048x1536 , CAM_MENU_PHOTO_RESOLUTION_2048x1152
+ , CAM_MENU_PHOTO_RESOLUTION_1920x1080 , CAM_MENU_PHOTO_RESOLUTION_1600x1200 , CAM_MENU_PHOTO_RESOLUTION_1392x1392 , CAM_MENU_PHOTO_RESOLUTION_1280x960
+ , CAM_MENU_PHOTO_RESOLUTION_1280x720 , CAM_MENU_PHOTO_RESOLUTION_640x480};
+
+const CAM_MENU_ITEM video_resolution[] = {CAM_MENU_VIDEO_RESOLUTION_FULLHD , CAM_MENU_VIDEO_RESOLUTION_HD , CAM_MENU_VIDEO_RESOLUTION_WVGA, CAM_MENU_VIDEO_RESOLUTION_VGA
+ , CAM_MENU_VIDEO_RESOLUTION_QVGA , CAM_MENU_VIDEO_RESOLUTION_QCIF};
+
+const CAM_MENU_ITEM wb[] = {CAM_MENU_WB_AWB , CAM_MENU_WB_INCANDESCENT , CAM_MENU_WB_FLUORESCENT , CAM_MENU_WB_DAYLIGHT
+ , CAM_MENU_WB_CLOUDY , CAM_MENU_WB_SHADE , CAM_MENU_WB_HORIZON , CAM_MENU_WB_FLASH
+ , CAM_MENU_WB_CUSTOM};
+
+const CAM_MENU_ITEM effect[] = {CAM_MENU_EFFECT_NONE , CAM_MENU_EFFECT_NEGATIVE , CAM_MENU_EFFECT_BLACKANDWHITE , CAM_MENU_EFFECT_SEPIA };
+
+const CAM_MENU_ITEM focus_mode[] = {CAM_MENU_FOCUS_AUTO , CAM_MENU_FOCUS_MACRO , CAM_MENU_FOCUS_FACE_DETECTION };
+
+const CAM_MENU_ITEM flash[] = {CAM_MENU_FLASH_OFF , CAM_MENU_FLASH_ON , CAM_MENU_FLASH_AUTO };
+
+const CAM_MENU_ITEM metering[] = {CAM_MENU_METERING_MATRIX , CAM_MENU_METERING_CENTER_WEIGHTED , CAM_MENU_METERING_SPOT };
+
+const CAM_MENU_ITEM iso[] = {CAM_MENU_ISO_AUTO , CAM_MENU_ISO_50 ,CAM_MENU_ISO_100, CAM_MENU_ISO_200
+ ,CAM_MENU_ISO_400 , CAM_MENU_ISO_80O, CAM_MENU_ISO_1600, CAM_MENU_ISO_320O};
+
+const CAM_MENU_ITEM storage[] = {CAM_MENU_STORAGE_PHONE, CAM_MENU_STORAGE_MMC};
+const CAM_MENU_ITEM timer[] = {CAM_MENU_TIMER_OFF,CAM_MENU_TIMER_2SEC, CAM_MENU_TIMER_5SEC,CAM_MENU_TIMER_10SEC};
+const CAM_MENU_ITEM volume_key[] = {CAM_MENU_VOLUME_KEY_ZOOM, CAM_MENU_VOLUME_KEY_SHUTTER};
+
+
+static gboolean __is_enabled_burstshot(void *data);
+static gboolean __is_enabled_flash(void* data);
+static gboolean __is_enabled_shooting_mode(void* data);
+static gboolean __is_enabled_recording_mode(void* data);
+static gboolean __is_enabled_scene_mode(void* data);
+static gboolean __is_enabled_explosure_value(void* data);
+static gboolean __is_enabled_focus_mode(void* data);
+static gboolean __is_enabled_timer(void* data);
+static gboolean __is_enabled_effects(void* data);
+static gboolean __is_enabled_photo_resolution(void* data);
+static gboolean __is_enabled_video_resolution(void* data);
+static gboolean __is_enabled_white_balance(void* data);
+static gboolean __is_enabled_iso(void* data);
+static gboolean __is_enabled_metering(void* data);
+static gboolean __is_enabled_anti_shake(void* data);
+static gboolean __is_enabled_rec_anti_shake(void* data);
+static gboolean __is_enabled_outdoor_visibility(void* data);
+static gboolean __is_enabled_auto_contrast(void* data);
+static gboolean __is_enabled_capture_voice(void* data);
+static gboolean __is_enabled_gps_tag(void* data);
+static gboolean __is_enalbed_storage(void* data);
+static gboolean __is_enabled_self_mode(void* data);
+static gboolean __is_enabled_save_as_flip(void *data);
+
+
+void cam_compose_setting_menu(void *data, cam_menu_composer* composer)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->title = strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SETTINGS"));
+ composer->array = eina_array_new(25);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 5);
+
+ unsigned int capacity = 0;
+ GetCamDevFuncCaps(&capacity, data);
+
+ /* Edit shortcuts */
+ eina_array_push(composer->array, (void*)&setting[0]);
+
+ /* Use volume key as */
+ eina_array_push(composer->array, (void*)&setting[1]);
+
+ if(capacity & CAM_CP_FUNC_BURST_SHOT_MODE)
+ eina_array_push(composer->array, (void*)&setting[2]);
+
+ if(capacity & CAM_CP_FUNC_SELF_MODE)
+ eina_array_push(composer->array, (void*)&setting[3]);
+
+ if(capacity & CAM_CP_FUNC_FLASH_MODE)
+ eina_array_push(composer->array, (void*)&setting[4]);
+
+ if(capacity & CAM_CP_FUNC_SHOT_MODE)
+ eina_array_push(composer->array, (void*)&setting[5]);
+
+ if(capacity & CAM_CP_FUNC_REC_MODE)
+ eina_array_push(composer->array, (void*)&setting[6]);
+
+ if(capacity & CAM_CP_FUNC_SCENE_MODE)
+ eina_array_push(composer->array, (void*)&setting[7]);
+
+ if(capacity & CAM_CP_FUNC_EXPOSURE)
+ eina_array_push(composer->array, (void*)&setting[8]);
+
+ if(capacity & CAM_CP_FUNC_FOCUS_MODE)
+ eina_array_push(composer->array, (void*)&setting[9]);
+
+ /* Timer */
+ eina_array_push(composer->array, (void*)&setting[10]);
+
+ if(capacity & CAM_CP_FUNC_EFFECT_MODE)
+ eina_array_push(composer->array, (void*)&setting[11]);
+
+ if(capacity & CAM_CP_FUNC_CAM_RESOLUTION)
+ eina_array_push(composer->array, (void*)&setting[12]);
+
+ if(capacity & CAM_CP_FUNC_REC_RESOLUTION)
+ eina_array_push(composer->array, (void*)&setting[13]);
+
+ if(capacity & CAM_CP_FUNC_WHITE_BALANCE)
+ eina_array_push(composer->array, (void*)&setting[14]);
+
+ if(capacity & CAM_CP_FUNC_ISO)
+ eina_array_push(composer->array, (void*)&setting[15]);
+
+ if(capacity & CAM_CP_FUNC_METERING)
+ eina_array_push(composer->array, (void*)&setting[16]);
+
+ if(capacity & CAM_CP_FUNC_CAM_ANS)
+ eina_array_push(composer->array, (void*)&setting[17]);
+
+ if(capacity & CAM_CP_FUNC_OUTDOOR)
+ eina_array_push(composer->array, (void*)&setting[18]);
+
+ if(capacity & CAM_CP_FUNC_AUTO_CONTRAST)
+ eina_array_push(composer->array, (void*)&setting[19]);
+
+ /* Guide lines */
+ eina_array_push(composer->array, (void*)&setting[20]);
+
+ /* Capture with voice */
+// eina_array_push(composer->array, (void*)&setting[21]);
+
+ if(capacity & CAM_CP_FUNC_GPS)
+ eina_array_push(composer->array, (void*)&setting[22]);
+
+// eina_array_push(composer->array, (void*)&setting[23]);
+
+ if(capacity & CAM_CP_FUNC_STORAGE)
+ eina_array_push(composer->array, (void*)&setting[24]);
+
+ /* Setting Reset */
+ eina_array_push(composer->array, (void*)&setting[25]);
+
+}
+
+void cam_compose_list_menu(void *data, int menu_type, cam_menu_composer* composer)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ switch((CAM_MENU_ITEM)menu_type)
+ {
+ case CAM_MENU_VOLUME_KEY:
+ cam_compose_menu_volume_key(data, composer);
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ cam_compose_menu_shooting_mode(data, composer);
+ break;
+ case CAM_MENU_FLASH:
+ cam_compose_menu_flash(data, composer);
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ cam_compose_menu_recording_mode(data, composer);
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ cam_compose_menu_photo_resolution(data, composer);
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ cam_compose_menu_video_resolution(data, composer);
+ break;
+ case CAM_MENU_ISO:
+ cam_compose_menu_iso(data, composer);
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ cam_compose_menu_focus_mode(data, composer);
+ break;
+ case CAM_MENU_TIMER:
+ cam_compose_menu_timer_mode(data, composer);
+ break;
+ case CAM_MENU_SCENE_MODE:
+ cam_compose_menu_scene_mode(data, composer);
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ cam_compose_menu_wb(data, composer);
+ break;
+ case CAM_MENU_EFFECTS:
+ cam_compose_menu_effect(data, composer);
+ break;
+ case CAM_MENU_METERING:
+ cam_compose_menu_metering(data, composer);
+ break;
+ case CAM_MENU_STORAGE:
+ cam_compose_menu_storage(data, composer);
+ break;
+ default:
+ cam_debug(LOG_UI, "invalid menu type");
+ break;
+ }
+}
+
+void cam_compose_menu_shooting_mode(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ composer->array = eina_array_new(10);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 5);
+
+ unsigned int capacity = 0;
+ GetCamDevShotModeCaps(&capacity, data);
+
+ if(camapp->device_type == CAM_DEVICE_MEGA){
+ if(capacity & CAM_CP_SHOT_MODE_SINGLE)
+ eina_array_push(composer->array, (void*)&shooting_mode[0]);
+
+ } else {
+ if(capacity & CAM_CP_SHOT_MODE_SINGLE)
+ eina_array_push(composer->array, (void*)&shooting_mode[9]);
+ }
+}
+
+void cam_compose_menu_scene_mode(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(15);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 20);
+
+ unsigned int capacity = 0;
+ GetCamDevSceneModeCaps(&capacity, data);
+
+ if(capacity & CAM_CP_SCENE_MODE_AUTO)
+ eina_array_push(composer->array, (void*)&scene_mode[0]);
+
+ if(capacity & CAM_CP_SCENE_MODE_PORTRAIT)
+ eina_array_push(composer->array, (void*)&scene_mode[1]);
+
+ if(capacity & CAM_CP_SCENE_MODE_LANDSCAPE)
+ eina_array_push(composer->array, (void*)&scene_mode[2]);
+
+ if(capacity & CAM_CP_SCENE_MODE_NIGHTSHOT)
+ eina_array_push(composer->array, (void*)&scene_mode[3]);
+
+ if(capacity & CAM_CP_SCENE_MODE_SPORTS)
+ eina_array_push(composer->array, (void*)&scene_mode[4]);
+
+ if(capacity & CAM_CP_SCENE_MODE_PARTY_AND_INDOOR)
+ eina_array_push(composer->array, (void*)&scene_mode[5]);
+
+ if(capacity & CAM_CP_SCENE_MODE_BEACH_AND_SNOW)
+ eina_array_push(composer->array, (void*)&scene_mode[6]);
+
+ if(capacity & CAM_CP_SCENE_MODE_SUNSET)
+ eina_array_push(composer->array, (void*)&scene_mode[7]);
+
+ if(capacity & CAM_CP_SCENE_MODE_DUSK_AND_DAWN)
+ eina_array_push(composer->array, (void*)&scene_mode[8]);
+
+ if(capacity & CAM_CP_SCENE_MODE_FALLCOLOR)
+ eina_array_push(composer->array, (void*)&scene_mode[9]);
+
+ if(capacity & CAM_CP_SCENE_MODE_FIREWORK)
+ eina_array_push(composer->array, (void*)&scene_mode[10]);
+
+ if(capacity & CAM_CP_SCENE_MODE_TEXT)
+ eina_array_push(composer->array, (void*)&scene_mode[11]);
+
+ if(capacity & CAM_CP_SCENE_MODE_CANDLE_LIGHT)
+ eina_array_push(composer->array, (void*)&scene_mode[12]);
+
+ if(capacity & CAM_CP_SCENE_MODE_BACK_LIGHT)
+ eina_array_push(composer->array, (void*)&scene_mode[13]);
+
+ if(capacity & CAM_CP_SCENE_MODE_SHOW_WINDOW)
+ eina_array_push(composer->array, (void*)&scene_mode[14]);
+}
+
+void cam_compose_menu_photo_resolution(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(10);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 15);
+
+ unsigned int capacity = 0;
+ GetCamDevCamResolutionCaps(&capacity, data);
+
+
+ if(capacity & CAM_CP_SIZE_3264X2448)
+ eina_array_push(composer->array, (void*)&photo_resolution[0]);
+
+ if(capacity & CAM_CP_SIZE_3264X1960)
+ eina_array_push(composer->array, (void*)&photo_resolution[1]);
+
+ if(capacity & CAM_CP_SIZE_3264X1836)
+ eina_array_push(composer->array, (void*)&photo_resolution[2]);
+
+ if(capacity & CAM_CP_SIZE_2560X1920)
+ eina_array_push(composer->array, (void*)&photo_resolution[3]);
+
+ if(capacity & CAM_CP_SIZE_2560X1536)
+ eina_array_push(composer->array, (void*)&photo_resolution[4]);
+
+ if(capacity & CAM_CP_SIZE_2560X1440)
+ eina_array_push(composer->array, (void*)&photo_resolution[5]);
+
+ if(capacity & CAM_CP_SIZE_2048X1536)
+ eina_array_push(composer->array, (void*)&photo_resolution[6]);
+
+ if(capacity & CAM_CP_SIZE_2048X1152)
+ eina_array_push(composer->array, (void*)&photo_resolution[7]);
+
+ if(capacity & CAM_CP_SIZE_1920X1080)
+ eina_array_push(composer->array, (void*)&photo_resolution[8]);
+
+ if(capacity & CAM_CP_SIZE_1600X1200)
+ eina_array_push(composer->array, (void*)&photo_resolution[9]);
+
+ if(capacity & CAM_CP_SIZE_1392X1392)
+ eina_array_push(composer->array, (void*)&photo_resolution[10]);
+
+ if(capacity & CAM_CP_SIZE_1280X960)
+ eina_array_push(composer->array, (void*)&photo_resolution[11]);
+
+ if(capacity & CAM_CP_SIZE_1280X720)
+ eina_array_push(composer->array, (void*)&photo_resolution[12]);
+
+ if(capacity & CAM_CP_SIZE_640X480)
+ eina_array_push(composer->array, (void*)&photo_resolution[13]);
+
+ int size = eina_array_count(composer->array);
+ cam_critical(LOG_MM, "size %d ",size );
+}
+
+void cam_compose_menu_video_resolution(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(10);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 5);
+
+ unsigned int capacity = 0;
+ GetCamDevRecResolutionCaps(&capacity, data);
+
+ if(capacity & CAM_CP_SIZE_1920X1080)
+ eina_array_push(composer->array, (void*)&video_resolution[0]);
+
+ if(capacity & CAM_CP_SIZE_1280X720)
+ eina_array_push(composer->array, (void*)&video_resolution[1]);
+
+ if(capacity & CAM_CP_SIZE_720X480)
+ eina_array_push(composer->array, (void*)&video_resolution[2]);
+
+ if(capacity & CAM_CP_SIZE_640X480)
+ eina_array_push(composer->array, (void*)&video_resolution[3]);
+
+ if(capacity & CAM_CP_SIZE_320X240)
+ eina_array_push(composer->array, (void*)&video_resolution[4]);
+
+ int size = eina_array_count(composer->array);
+ cam_critical(LOG_MM, "size %d ",size );
+}
+
+void cam_compose_menu_effect(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(5);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 10);
+
+ unsigned int capacity = 0;
+ GetCamDevEffectCaps(&capacity, data);
+
+ if(capacity & CAM_CP_EFFECT_NONE)
+ eina_array_push(composer->array, (void*)&effect[0]);
+
+ if(capacity & CAM_CP_EFFECT_NEGATIVE)
+ eina_array_push(composer->array, (void*)&effect[1]);
+
+ if(capacity & CAM_CP_EFFECT_MONO)
+ eina_array_push(composer->array, (void*)&effect[2]);
+
+ if(capacity & CAM_CP_EFFECT_SEPIA)
+ eina_array_push(composer->array, (void*)&effect[3]);
+}
+
+void cam_compose_menu_wb(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(5);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 10);
+
+ unsigned int capacity = 0;
+ GetCamDevWBCaps(&capacity, data);
+
+ if(capacity & CAM_CP_WB_AUTO)
+ eina_array_push(composer->array, (void*)&wb[0]);
+
+ if(capacity & CAM_CP_WB_INCANDESCENT)
+ eina_array_push(composer->array, (void*)&wb[1]);
+
+ if(capacity & CAM_CP_WB_FLUORESCENT)
+ eina_array_push(composer->array, (void*)&wb[2]);
+
+ if(capacity & CAM_CP_WB_DAYLIGHT)
+ eina_array_push(composer->array, (void*)&wb[3]);
+
+ if(capacity & CAM_CP_WB_CLOUDY)
+ eina_array_push(composer->array, (void*)&wb[4]);
+
+ if(capacity & CAM_CP_WB_SHADE)
+ eina_array_push(composer->array, (void*)&wb[5]);
+
+ if(capacity & CAM_CP_WB_HORIZON)
+ eina_array_push(composer->array, (void*)&wb[6]);
+
+ if(capacity & CAM_CP_WB_FLASH)
+ eina_array_push(composer->array, (void*)&wb[7]);
+
+ if(capacity & CAM_CP_WB_CUSTOM)
+ eina_array_push(composer->array, (void*)&wb[8]);
+}
+
+void cam_compose_menu_focus_mode(void *data, cam_menu_composer* composer)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(5);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 10);
+
+ unsigned int capacity = 0;
+ GetCamDevFocusCaps(&capacity, data);
+
+ if(capacity & CAM_CP_FOCUS_AUTO_FOCUS)
+ eina_array_push(composer->array, (void*)&focus_mode[0]);
+
+ if(capacity & CAM_CP_FOCUS_MACRO)
+ eina_array_push(composer->array, (void*)&focus_mode[1]);
+
+ if(!(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && camapp->camera_mode == CAM_CAMCORDER_MODE)){
+ if(capacity & CAM_CP_FOCUS_FACE_DETECTION)
+ eina_array_push(composer->array, (void*)&focus_mode[2]);
+ }
+}
+
+void cam_compose_menu_iso(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(10);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 15);
+
+ unsigned int capacity = 0;
+ GetCamDevISOCaps(&capacity, data);
+
+ if(capacity & CAM_CP_ISO_AUTO)
+ eina_array_push(composer->array, (void*)&iso[0]);
+
+ if(capacity & CAM_CP_ISO_50)
+ eina_array_push(composer->array, (void*)&iso[1]);
+
+ if(capacity & CAM_CP_ISO_100)
+ eina_array_push(composer->array, (void*)&iso[2]);
+
+ if(capacity & CAM_CP_ISO_200)
+ eina_array_push(composer->array, (void*)&iso[3]);
+
+ if(capacity & CAM_CP_ISO_400)
+ eina_array_push(composer->array, (void*)&iso[4]);
+
+ if(capacity & CAM_CP_ISO_800)
+ eina_array_push(composer->array, (void*)&iso[5]);
+
+#if 0
+ if(capacity & CAM_CP_ISO_1600)
+ eina_array_push(composer->array, (void*)&iso[6]);
+
+ if(capacity & CAM_CP_ISO_3200)
+ eina_array_push(composer->array, (void*)&iso[7]);
+#endif
+}
+
+void cam_compose_menu_metering(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(5);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 10);
+
+ unsigned int capacity = 0;
+ GetCamDevMeteringCaps(&capacity, data);
+
+ if(capacity & CAM_CP_METERING_MATRIX)
+ eina_array_push(composer->array, (void*)&metering[0]);
+
+ if(capacity & CAM_CP_METERING_CENTERWEIGHT)
+ eina_array_push(composer->array, (void*)&metering[1]);
+
+ if(capacity & CAM_CP_METERING_SPOT)
+ eina_array_push(composer->array, (void*)&metering[2]);
+
+}
+
+void cam_compose_menu_recording_mode(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ composer->array = eina_array_new(5);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 10);
+
+ unsigned int capacity = 0;
+ GetCamDevRecModeCaps(&capacity, NULL);
+
+ if(camapp->device_type == CAM_DEVICE_MEGA){
+ if(capacity & CAM_CP_REC_MODE_NORMAL)
+ eina_array_push(composer->array, (void*)&recording_mode[0]);
+
+ if(capacity & CAM_CP_REC_MODE_SLOW_MOTION)
+ eina_array_push(composer->array, (void*)&recording_mode[1]);
+
+ if(capacity & CAM_CP_REC_MODE_FAST_MOTION)
+ eina_array_push(composer->array, (void*)&recording_mode[2]);
+
+ if(capacity & CAM_CP_REC_MODE_MMS)
+ eina_array_push(composer->array, (void*)&recording_mode[3]);
+ } else {
+ if(capacity & CAM_CP_REC_MODE_NORMAL)
+ eina_array_push(composer->array, (void*)&recording_mode[4]);
+
+ if(capacity & CAM_CP_REC_MODE_MMS)
+ eina_array_push(composer->array, (void*)&recording_mode[5]);
+ }
+}
+
+
+void cam_compose_menu_flash(void *data, cam_menu_composer* composer)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(5);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 10);
+
+ unsigned int capacity = 0;
+ GetCamDevFlashCaps(&capacity, data);
+
+ if(capacity & CAM_CP_FLASH_OFF)
+ eina_array_push(composer->array, (void*)&flash[0]);
+
+ if(capacity & CAM_CP_FLASH_ON)
+ eina_array_push(composer->array, (void*)&flash[1]);
+
+ if(camapp->camera_mode == CAM_CAMERA_MODE){
+ if(capacity & CAM_CP_FLASH_AUTO)
+ eina_array_push(composer->array, (void*)&flash[2]);
+ }
+
+}
+
+void cam_compose_menu_timer_mode(void *data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(4);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 8);
+
+ eina_array_push(composer->array, (void*)&timer[0]);
+ eina_array_push(composer->array, (void*)&timer[1]);
+ eina_array_push(composer->array, (void*)&timer[2]);
+ eina_array_push(composer->array, (void*)&timer[3]);
+}
+
+void cam_compose_menu_storage(void* data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(2);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 4);
+
+ eina_array_push(composer->array, (void*)&storage[0]);
+ eina_array_push(composer->array, (void*)&storage[1]);
+}
+
+void cam_compose_menu_volume_key(void* data, cam_menu_composer* composer)
+{
+ cam_retm_if(composer == NULL, "composer is NULL");
+
+ composer->array = eina_array_new(2);
+ if (!(composer->array)) {
+ cam_critical(LOG_CAM, "could not create new eina array");
+ return;
+ }
+ eina_array_step_set(composer->array, sizeof(*(composer->array)), 2);
+
+ eina_array_push(composer->array, (void*)&volume_key[0]);
+ eina_array_push(composer->array, (void*)&volume_key[1]);
+}
+
+void cam_compose_free(cam_menu_composer* composer)
+{
+ cam_ret_if(composer == NULL);
+
+ if (composer->title)
+ free(composer->title);
+
+ if (composer->array)
+ eina_array_free(composer->array);
+
+ free(composer);
+}
+
+gboolean cam_is_enabled_menu(void *data, const CAM_MENU_ITEM item)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ switch(item) {
+ case CAM_MENU_SHORTCUTS:
+ return TRUE;
+ case CAM_MENU_BURST_SHOT_MODE:
+ return __is_enabled_burstshot((void*)ad);
+ case CAM_MENU_SELF_PORTRAIT:
+ return __is_enabled_self_mode((void*)ad);
+ case CAM_MENU_FLASH:
+ return __is_enabled_flash((void*)ad);
+ case CAM_MENU_SHOOTING_MODE:
+ return __is_enabled_shooting_mode((void*)ad);
+ case CAM_MENU_RECORDING_MODE:
+ return __is_enabled_recording_mode((void*)ad);
+ case CAM_MENU_SCENE_MODE:
+ return __is_enabled_scene_mode((void*)ad);
+ case CAM_MENU_EXPLOSURE_VALUE:
+ return __is_enabled_explosure_value((void*)ad);
+ case CAM_MENU_FOCUS_MODE:
+ return __is_enabled_focus_mode((void*)ad);
+ case CAM_MENU_TIMER:
+ return __is_enabled_timer((void*)ad);
+ case CAM_MENU_EFFECTS:
+ return __is_enabled_effects((void*)ad);
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return __is_enabled_photo_resolution((void*)ad);
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return __is_enabled_video_resolution((void*)ad);
+ case CAM_MENU_WHITE_BALANCE:
+ return __is_enabled_white_balance((void*)ad);
+ case CAM_MENU_ISO:
+ return __is_enabled_iso((void*)ad);
+ case CAM_MENU_METERING:
+ return __is_enabled_metering((void*)ad);
+ case CAM_MENU_ANTI_SHAKE:
+ return __is_enabled_anti_shake((void*)ad);
+ case CAM_MENU_OUTDOOR_VISIBILITY:
+ return __is_enabled_outdoor_visibility((void*)ad);
+ case CAM_MENU_AUTO_CONTRAST:
+ return __is_enabled_auto_contrast((void*)ad);
+ case CAM_MENU_GUIDELINES:
+ return TRUE;
+ case CAM_MENU_CAPTURE_VOICE:
+ return __is_enabled_capture_voice((void*)ad);
+ case CAM_MENU_SAVE_AS_FLIP:
+ return __is_enabled_save_as_flip((void*)ad);
+ case CAM_MENU_GPS_TAG:
+ return __is_enabled_gps_tag((void*)ad);
+ case CAM_MENU_STORAGE:
+ return __is_enalbed_storage((void*)ad);;
+ case CAM_MENU_RESET:
+ return TRUE;
+ case CAM_MENU_VOLUME_KEY:
+ return TRUE;
+ default:
+ break;
+ }
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_burstshot(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, NULL);
+
+ if (!(capacity & CAM_CP_FUNC_BURST_SHOT_MODE))
+ return FALSE;
+
+ if ((camapp->shooting_mode != CAM_SINGLE_MODE)
+ && (camapp->shooting_mode != CAM_SELF_SINGLE_MODE))
+ return FALSE;
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean __is_enabled_flash(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, NULL);
+
+ if(!(capacity & CAM_CP_FUNC_FLASH_MODE))
+ return FALSE;
+
+ if(ad->battery_status == LOW_BATTERY_WARNING_STATUS)
+ return FALSE;
+
+ if(!(camapp->scene_mode == CAM_SCENE_NONE
+ || camapp->scene_mode == CAM_SCENE_PORTRAIT
+ || camapp->scene_mode == CAM_SCENE_BACKLIGHT
+ || camapp->scene_mode == CAM_SCENE_PARTY
+ || camapp->scene_mode == CAM_SCENE_TEXT) )
+ return FALSE;
+
+ if (ad->torchlight_on)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_shooting_mode(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_SHOT_MODE))
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean __is_enabled_recording_mode(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && camapp->camera_mode == CAM_CAMERA_MODE)
+ return FALSE;
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && ad->exe_args->resolution == CAM_RESOLUTION_QCIF)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean __is_enabled_scene_mode(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_SCENE_MODE))
+ return FALSE;
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && camapp->camera_mode == CAM_CAMCORDER_MODE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_explosure_value(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_EXPOSURE))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_focus_mode(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_FOCUS_MODE))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_timer(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_effects(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_EFFECT_MODE))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_photo_resolution(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && camapp->camera_mode == CAM_CAMCORDER_MODE)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean __is_enabled_video_resolution(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(camapp->recording_mode == CAM_RECORD_MMS
+ || camapp->recording_mode == CAM_RECORD_SELF_MMS
+ || camapp->recording_mode == CAM_RECORD_SLOW
+ || camapp->recording_mode == CAM_RECORD_FAST)
+ return FALSE;
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && camapp->camera_mode == CAM_CAMERA_MODE)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean __is_enabled_white_balance(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_WHITE_BALANCE))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean __is_enabled_iso(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_ISO))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ if(camapp->camera_mode == CAM_CAMCORDER_MODE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_metering(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_METERING))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ if(camapp->camera_mode == CAM_CAMCORDER_MODE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_anti_shake(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if (!(capacity & CAM_CP_FUNC_CAM_ANS))
+ return FALSE;
+
+ if (camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_rec_anti_shake(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_REC_ANS))
+ return FALSE;
+
+ return TRUE;
+}
+
+
+static gboolean __is_enabled_outdoor_visibility(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_OUTDOOR))
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_auto_contrast(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_AUTO_CONTRAST))
+ return FALSE;
+
+ if(camapp->scene_mode != CAM_SCENE_NONE)
+ return FALSE;
+
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_self_mode(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_SELF_MODE))
+ return FALSE;
+ return TRUE;
+
+}
+
+
+static gboolean __is_enabled_capture_voice(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_CAPTURE_VOICE))
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_gps_tag(void* data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_GPS))
+ return FALSE;
+
+ return TRUE;
+
+}
+
+static gboolean __is_enabled_save_as_flip(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ unsigned int capacity;
+ GetCamDevFuncCaps(&capacity, (void*)ad);
+
+ if(!(capacity & CAM_CP_FUNC_SAVE_AS_FLIP))
+ return FALSE;
+
+ return TRUE;
+
+}
+
+
+static gboolean __is_enalbed_storage(void* data)
+{
+ int noti_message;
+ int ret = -1;
+
+ ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &noti_message);
+
+ if ( ret != 0 ) // falied
+ {
+ cam_debug(LOG_CAM, "Get %s is failed", VCONFKEY_SYSMAN_MMC_STATUS);
+ return FALSE;
+ }
+
+ if(noti_message==VCONFKEY_SYSMAN_MMC_MOUNTED)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
diff --git a/src/cam_mm.c b/src/cam_mm.c
new file mode 100755
index 0000000..7db795f
--- /dev/null
+++ b/src/cam_mm.c
@@ -0,0 +1,2431 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <string.h>
+#include "cam_mm.h"
+#include "cam_debug.h"
+#include "cam_ta.h"
+#include "cam_property.h"
+#include "cam_typeconverter.h"
+
+typedef struct _CamMMHandle {
+ camera_h hcam;
+ recorder_h hrec;
+ camera_device_e hdev;
+} CamMMHandle;
+
+static unsigned int g_caps = 0;
+static int g_caps_cb_cnt = 0;
+
+
+static void __get_iso_cb(camera_attr_iso_e iso, void *user_data);
+static void __get_effect_cb(camera_attr_effect_mode_e effect, void *user_data);
+static void __get_fps_cb(camera_attr_fps_e fps, void *user_data);
+static void __get_wb_cb(camera_attr_whitebalance_e wb, void *user_data);
+static void __get_focus_cb(camera_attr_af_mode_e focus, void *user_data);
+static void __get_metering_cb(camera_attr_exposure_mode_e metering, void *user_data);
+static void __get_scene_cb(camera_attr_scene_mode_e scene, void *user_data);
+static void __get_flash_cb(camera_attr_flash_mode_e flash, void *user_data);
+static void __get_capture_res_cb(int width, int height, void *user_data);
+static void __get_recording_res_cb(int width, int height, void *user_data);
+
+
+
+void rec_detail_error_get(int err_no)
+{
+ switch(err_no) {
+ case RECORDER_ERROR_INVALID_PARAMETER:
+ DEBUG_TRACE("RECORDER_ERROR_INVALID_PARAMETER");
+ break;
+ case RECORDER_ERROR_INVALID_STATE:
+ DEBUG_TRACE("RECORDER_ERROR_INVALID_STATE");
+ break;
+ case RECORDER_ERROR_OUT_OF_MEMORY:
+ DEBUG_TRACE("RECORDER_ERROR_OUT_OF_MEMORY");
+ break;
+ case RECORDER_ERROR_DEVICE:
+ DEBUG_TRACE("RECORDER_ERROR_DEVICE");
+ break;
+ case RECORDER_ERROR_INVALID_OPERATION:
+ DEBUG_TRACE("RECORDER_ERROR_INVALID_OPERATION");
+ break;
+ case RECORDER_ERROR_SOUND_POLICY:
+ DEBUG_TRACE("RECORDER_ERROR_SOUND_POLICY");
+ break;
+ case RECORDER_ERROR_NONE:
+ DEBUG_TRACE("NO ERROR");
+ break;
+ default:
+ DEBUG_TRACE("unknown error,err_no = %d", err_no);
+
+ }
+
+}
+void cam_detail_error_get(int err_no)
+{
+ switch(err_no) {
+ case CAMERA_ERROR_INVALID_PARAMETER:
+ DEBUG_TRACE("CAMERA_ERROR_INVALID_PARAMETER");
+ break;
+ case CAMERA_ERROR_INVALID_STATE:
+ DEBUG_TRACE("CAMERA_ERROR_INVALID_STATE");
+ break;
+ case CAMERA_ERROR_OUT_OF_MEMORY:
+ DEBUG_TRACE("CAMERA_ERROR_OUT_OF_MEMORY");
+ break;
+ case CAMERA_ERROR_DEVICE:
+ DEBUG_TRACE("CAMERA_ERROR_DEVICE");
+ break;
+ case CAMERA_ERROR_INVALID_OPERATION:
+ DEBUG_TRACE("CAMERA_ERROR_INVALID_OPERATION");
+ break;
+ case CAMERA_ERROR_SOUND_POLICY:
+ DEBUG_TRACE("CAMERA_ERROR_SOUND_POLICY");
+ break;
+ case CAMERA_ERROR_NONE:
+ DEBUG_TRACE("NO ERROR");
+ break;
+ default:
+ DEBUG_TRACE("unknown error,err_no = %d", err_no);
+
+ }
+}
+
+
+static CamMMHandle *g_mm_handle = NULL;
+
+int cam_mm_get_cam_state(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ int ret = 0;
+ camera_state_e state = 0;
+ ret = camera_get_state(g_mm_handle->hcam, &state);
+ if (ret == CAMERA_ERROR_NONE)
+ return (int)state;
+ else
+ return -1;
+}
+
+int cam_mm_get_state(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ int ret = 0;
+ camera_state_e state = 0;
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ g_return_val_if_fail(ad, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ g_return_val_if_fail(camapp, FALSE);
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ ret = camera_get_state(g_mm_handle->hcam, (camera_state_e *)&state);
+ if (ret == CAMERA_ERROR_NONE)
+ return (int)state;
+ else
+ return -1;
+ }
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ ret = recorder_get_state(g_mm_handle->hrec, (recorder_state_e *)&state);
+ if (ret == RECORDER_ERROR_NONE)
+ return (int)state;
+ else
+ return -1;
+ }
+ return -1;
+}
+
+int cam_mm_get_rec_state(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ int ret = 0;
+ recorder_state_e state = 0;
+ ret = recorder_get_state(g_mm_handle->hrec, (recorder_state_e *)&state);
+ if (ret == RECORDER_ERROR_NONE)
+ return (int)state;
+ else
+ return -1;
+}
+
+gboolean cam_mm_get_video_device(int *device)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+
+ if (g_mm_handle->hdev > CAMERA_DEVICE_CAMERA1)
+ return FALSE;
+
+ *device = g_mm_handle->hdev;
+ DEBUG_TRACE("%d,%d",g_mm_handle->hdev,*device);
+ return TRUE;
+}
+
+gboolean cam_mm_get_video_size(int *width, int *height)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ ret = camera_get_preview_resolution(g_mm_handle->hcam, width, height);
+
+ if (ret != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("camera_get_preview_resolution error code = %d" , ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_set_video_size(int width, int height)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_set_preview_resolution(g_mm_handle->hcam, width, height);
+
+ if (ret != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_zoom(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ ret = camera_attr_get_zoom(g_mm_handle->hcam, value);
+ if (ret) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_zoom(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_zoom(g_mm_handle->hcam, value);
+ if (ret) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_wdr(int *value)
+{
+/*TODO:we do not need set this attribute now*/
+#ifdef TODO_SURRPORT
+ return TRUE;
+#endif
+}
+
+gboolean cam_mm_set_wdr(int value)
+{
+/*TODO:we do not need set this attribute now*/
+#ifdef TODO_SURRPORT
+ return TRUE;
+#endif
+}
+
+gboolean cam_mm_is_support_anti_hand_shake()
+{
+ bool ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_is_supported_anti_shake(g_mm_handle->hcam);
+
+ return ret;
+
+}
+
+gboolean cam_mm_get_anti_hand_shake(gboolean *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_is_enabled_anti_shake(g_mm_handle->hcam, (bool *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_anti_hand_shake(gboolean value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_enable_anti_shake(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_auto_exposure(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_exposure_mode(g_mm_handle->hcam, (camera_attr_exposure_mode_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_auto_exposure(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_exposure_mode(g_mm_handle->hcam, (camera_attr_exposure_mode_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_fps(camera_attr_fps_e value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_preview_fps(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+ cam_detail_error_get(ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_iso(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_iso(g_mm_handle->hcam, (camera_attr_iso_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_iso(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_iso(g_mm_handle->hcam, (camera_attr_iso_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_focus_mode(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_af_mode(g_mm_handle->hcam, (camera_attr_af_mode_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_focus_mode(int value)
+{
+ int ret = 0;
+ ret = camera_attr_set_af_mode(g_mm_handle->hcam, (camera_attr_af_mode_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_zoom_valid_intrange(int *min, int *max)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_zoom_range(g_mm_handle->hcam, min, max);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_brightless_valid_intrange(int *min, int *max)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_brightness_range(g_mm_handle->hcam, min, max);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_exposure_valid_intrange(int *min, int *max)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_exposure_range(g_mm_handle->hcam, min, max);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_af_area(int x, int y, int w, int h)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ DEBUG_TRACE("\n Touch AF area ![ x,y,width,height: %d,%d,%d,%d ]\n", x, y, w, h);
+
+ ret = camera_attr_set_af_area(g_mm_handle->hcam, x, y);
+ if (ret != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("camera_attr_set_af_area failed [%d]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_detect_mode(int *value)
+{
+#ifndef TODO_SURRPORT
+/*TODO:framework not surrport it*/
+#endif
+ return TRUE;
+}
+
+gboolean cam_mm_set_detect_mode(int value)
+{
+/*TODO:libmm-camcorder not surrport it*/
+#ifdef TODO_SURRPORT
+ return TRUE;
+#endif
+}
+
+gboolean cam_mm_get_image_enc_quality(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_image_quality(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_image_enc_quality(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_image_quality(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_flash(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_flash_mode(g_mm_handle->hcam, (camera_attr_flash_mode_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_flash(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_flash_mode(g_mm_handle->hcam, (camera_attr_flash_mode_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_enable_auto_contrast(gboolean enable)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_enable_auto_contrast(g_mm_handle->hcam, enable);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_is_enabled_auto_contrast(gboolean *enable)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_is_enabled_auto_contrast(g_mm_handle->hcam, (bool *)enable);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_brightness(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_brightness(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_brightness(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_brightness(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_white_balance(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_whitebalance(g_mm_handle->hcam, (camera_attr_whitebalance_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_white_balance(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_whitebalance(g_mm_handle->hcam, (camera_attr_whitebalance_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_effect(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_effect(g_mm_handle->hcam, (camera_attr_effect_mode_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_effect(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_effect(g_mm_handle->hcam, (camera_attr_effect_mode_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_program_mode(int *value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_get_scene_mode(g_mm_handle->hcam, (camera_attr_scene_mode_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_program_mode(int value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_set_scene_mode(g_mm_handle->hcam, value);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_outdoor_visibility(gboolean on)
+{
+ int scenario = -1;
+
+ if (cam_mm_get_mdnie_mode(&scenario) == FALSE || scenario != SCENARIO_CAMERA) {
+ if (cam_mm_set_mdnie_mode(TRUE) == FALSE) {
+ cam_critical(LOG_MM, "device_set_image_enhance_scenario() fail");
+ return FALSE;
+ }
+ }
+
+ if (on) {
+ if (device_set_image_enhance_outdoor(OUTDOOR_ON) < 0) {
+ cam_critical(LOG_MM, "device_set_image_enhance_outdoor(on) fail");
+ return FALSE;
+ }
+ } else {
+ if (device_set_image_enhance_outdoor(OUTDOOR_OFF) < 0) {
+ cam_critical(LOG_MM, "device_set_image_enhance_outdoor(off) fail");
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_get_outdoor_visibility(gboolean *on)
+{
+ int val = -1;
+ if ((val = device_get_image_enhance_outdoor()) < 0)
+ return FALSE;
+ if (val == OUTDOOR_OFF)
+ *on = FALSE;
+ else
+ *on = TRUE;
+ return TRUE;
+}
+
+
+gboolean cam_mm_is_supported_outdoor_visibility(void)
+{
+ if (device_get_image_enhance_info() < 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+gboolean cam_mm_set_mdnie_mode(gboolean on)
+{
+ DEBUG_TRACE("mode :%d", on);
+ if (cam_mm_is_supported_outdoor_visibility()) {
+
+ if (on) {
+ if (device_set_image_enhance_scenario(SCENARIO_CAMERA) < 0) {
+ cam_critical(LOG_MM, "device_set_image_enhance_scenario(SCENARIO_CAMERA) fail");
+ return FALSE;
+ }
+ } else {
+ if (device_set_image_enhance_scenario(SCENARIO_UI) < 0) {
+ cam_critical(LOG_MM, "device_set_image_enhance_scenario(SCENARIO_UI) fail");
+ return FALSE;
+ }
+ }
+ } else {
+ cam_critical(LOG_MM, "cam_mm_is_supported_outdoor_visibility() false");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_get_mdnie_mode(int *val)
+{
+ int ret = -1;
+ if ((ret = device_get_image_enhance_scenario()) < 0) {
+ cam_critical(LOG_MM, "device_get_image_enhance_scenario() fail");
+ return FALSE;
+ }
+
+ *val = ret;
+ return TRUE;
+}
+
+
+
+gboolean cam_mm_set_audio_recording(gboolean b_on)
+{
+ int ret = 0;
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ if (b_on)
+ ret = recorder_attr_set_mute(g_mm_handle->hrec, FALSE);
+ else
+ ret = recorder_attr_set_mute(g_mm_handle->hrec, TRUE);
+
+ if (ret != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_image_count(int value)
+{
+ return TRUE;
+}
+
+gboolean cam_mm_get_recommanded_preview_size(int *width, int *height)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_get_recommended_preview_resolution(g_mm_handle->hcam, width, height);
+
+ if (ret != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("camera_get_recommended_preview_resolution failed - code[%x] name[%s]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+gboolean cam_mm_get_image_size(int *width, int *height)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_get_capture_resolution(g_mm_handle->hcam, width, height);
+
+ if (ret != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x] name[%s]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_image_size(int width, int height)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_set_capture_resolution(g_mm_handle->hcam, width, height);
+
+ if (ret != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("cam_mm_set_image_size failed");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_video_encoder_bitrate(int bitrate)
+{
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_attr_set_video_encoder_bitrate(g_mm_handle->hrec, bitrate);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_audio_encoder_bitrate(int bitrate)
+{
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_attr_set_audio_encoder_bitrate(g_mm_handle->hrec, bitrate);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_display_device(int display_device, void *xid)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_set_display(g_mm_handle->hcam, display_device, xid);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_display_rotate(int rotate)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_set_x11_display_rotation(g_mm_handle->hcam, rotate);
+ if (ret != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_camera_rotate(int camera_rotate)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ #ifdef CAMERA_MACHINE_I686
+ ret = camera_attr_set_stream_rotation(g_mm_handle->hcam, 0);
+ #else
+ ret = camera_attr_set_stream_rotation(g_mm_handle->hcam, camera_rotate);
+ #endif
+ if (ret != CAMERA_ERROR_NONE) {
+ cam_detail_error_get(ret);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_display_geometry_method(int *value)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_get_x11_display_mode(g_mm_handle->hcam, (camera_display_mode_e *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_display_geometry_method(int value)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_set_x11_display_mode(g_mm_handle->hcam, (camera_display_mode_e)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_display_visible(gboolean visible)
+{
+ int ret = 0;
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_set_x11_display_visible(g_mm_handle->hcam, visible);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_filename(const gchar *filename)
+{
+ int ret = 0;
+ /*char *err_name = NULL;*/
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ if (filename) {
+ ret = recorder_set_filename(g_mm_handle->hrec, filename);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+
+ } else {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_filename(char **filename, gint *size)
+{
+ int ret = 0;
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_get_filename(g_mm_handle->hrec, filename);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_max_size(int *value)
+{
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ ret = recorder_attr_get_time_limit(g_mm_handle->hrec, value);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_max_time(int *value)
+{
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_attr_get_time_limit(g_mm_handle->hrec, value);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_max_size(int max_val)
+{
+
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_attr_set_size_limit(g_mm_handle->hrec, max_val);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_max_time(int max_val)
+{
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ ret = recorder_attr_set_time_limit(g_mm_handle->hrec, max_val);
+ if (ret != RECORDER_ERROR_NONE) {
+ return FALSE;
+
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_tag_enable(int *value)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_is_enabled_tag(g_mm_handle->hcam, (bool *)value);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_tag_enable(gboolean bvalue)
+{
+ int ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ ret = camera_attr_enable_tag(g_mm_handle->hcam, (bool)bvalue);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_set_tag_img_orient(int orient)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ camera_error_e ret;
+ ret = camera_attr_set_tag_orientation(g_mm_handle->hcam, (camera_attr_tag_orientation_e)orient);
+ if (ret != CAMERA_ERROR_NONE) {
+ cam_detail_error_get(ret);
+ return FALSE;
+
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_file_format(int format)
+{
+ recorder_error_e ret;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ ret = recorder_set_file_format(g_mm_handle->hrec, format);
+ if (ret != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("recorder_set_file_format failed - [%d]", ret);
+ return FALSE;
+
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_video_profile(void)
+{
+ recorder_error_e e;
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_attr_set_audio_device(g_mm_handle->hrec, RECORDER_AUDIO_DEVICE_MIC);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_set_codec(int audio_codec, int video_codec)
+{
+ int ret = 0;
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_set_audio_encoder(g_mm_handle->hrec, audio_codec);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", ret);
+ rec_detail_error_get(ret);
+ return FALSE;
+ }
+ e = recorder_set_video_encoder(g_mm_handle->hrec, video_codec);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_audio_source(int sample_rate, int channel)
+{
+ int ret = 0;
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ e = recorder_attr_set_audio_samplerate(g_mm_handle->hrec, sample_rate);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", ret);
+ return FALSE;
+ }
+ e = recorder_attr_set_audio_channel(g_mm_handle->hrec, channel);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("set attr failed - code[%x]\n", ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_video_source_format(int format)
+{
+ if (format <= CAMERA_PIXEL_FORMAT_INVALID || format > CAMERA_PIXEL_FORMAT_JPEG)
+ return FALSE;
+
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ err = camera_set_preview_format(g_mm_handle->hcam, format);
+
+ DEBUG_TRACE("!!!!!!!!!!!!!!!! format:%d !!!!!!!!!!!!!!!!!!!", format);
+ if (err != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_video_source_format(const char *attribute_name, int *format)
+{
+ DEBUG_TRACE("attribute_name = %s", attribute_name);
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ err = camera_get_preview_format(g_mm_handle->hcam, format);
+ if (err != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_front_cam_display_rotate_value(int *value, int *rotate)
+{
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ err = camera_attr_get_lens_orientation(g_mm_handle->hcam, value);
+ switch (*value) {
+ case 0:
+ *rotate = CAMERA_ROTATION_NONE;
+ break;
+ case 90:
+ *rotate = CAMERA_ROTATION_90;
+ break;
+ case 180:
+ *rotate = CAMERA_ROTATION_180;
+ break;
+ case 270:
+ *rotate = CAMERA_ROTATION_270;
+ break;
+ default:
+ *rotate = CAMERA_ROTATION_NONE;
+
+ }
+ if (err != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_mm_get_scene_mode(camera_attr_scene_mode_e *mode)
+{
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ err = camera_attr_get_scene_mode(g_mm_handle->hcam, mode);
+ if (err != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_set_scene_mode(camera_attr_scene_mode_e mode)
+{
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ err = camera_attr_set_scene_mode(g_mm_handle->hcam, mode);
+ if (err != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_conti_shot_break(gboolean bvalue)
+{
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ if (bvalue) {
+ err = camera_stop_continuous_capture(g_mm_handle->hcam);
+ if (err != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_capture_format(int value)
+{
+ int err;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ err = camera_set_capture_format(g_mm_handle->hcam, value);
+ if (err != CAMERA_ERROR_NONE) {
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_get_shutter_sound(int *value)
+{
+/*todo:for lawer policy, capi could not surport it*/
+#ifndef TODO_SURRPORT
+ return cam_mm_get_attr_int(MMCAM_SHUTTER_SOUND, value);
+#else
+ return TRUE;
+#endif
+
+}
+gboolean cam_mm_set_shutter_sound(int value)
+{
+/*todo:for lawer policy, capi could not surport it*/
+#ifndef TODO_SURRPORT
+ return cam_mm_set_attr_int(MMCAM_SHUTTER_SOUND, value);
+#else
+ return TRUE;
+#endif
+
+}
+
+gboolean cam_mm_remove_geo_tag(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+#ifdef TODO_SURRPORT
+ int ret = 0;
+ ret = camera_attr_remove_geotag(g_mm_handle->hcam);
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+#endif /*TODO:capi has issue.if it fix, I will open it*/
+ return TRUE;
+}
+
+gboolean cam_mm_enable_geo_tag(gboolean value)
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ if (value) {
+ ret = camera_attr_set_geotag(g_mm_handle->hcam, -1.0, -1.0, -1.0);
+ } else {
+ ret = camera_attr_remove_geotag(g_mm_handle->hcam);
+ }
+ if (ret != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_reset_recording_motion_fps()
+{
+ int ret = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_attr_set_recording_motion_rate(g_mm_handle->hrec, DEFAULT_REC_FPS);
+ if (ret != RECORDER_ERROR_NONE) {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_gps_data(double lat, double lon, double alt)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ e = camera_attr_set_geotag(g_mm_handle->hcam, lat, lon, alt);
+ if (e != CAMERA_ERROR_NONE) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_is_preview_started(int mode)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ int mm_state = 0;
+ mm_state = cam_mm_get_state();
+
+ if ((CAM_CAMERA_MODE == mode && mm_state < CAMERA_STATE_PREVIEW)
+ || (mode == CAM_CAMCORDER_MODE && mm_state < RECORDER_STATE_READY) ) {
+ cam_critical(LOG_MM, "cur_state:%d", mm_state);
+ return FALSE;
+ } else
+ return TRUE;
+}
+
+gboolean cam_mm_preview_start(int mode)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ g_return_val_if_fail(ad, FALSE);
+
+ int ret = (mode == CAM_CAMERA_MODE) ? CAMERA_ERROR_NONE : RECORDER_ERROR_NONE;
+ if (CAM_CAMERA_MODE == mode) {
+
+ ret = camera_start_preview(g_mm_handle->hcam);
+ if (ret != CAMERA_ERROR_NONE) {
+ if (ret == CAMERA_ERROR_SOUND_POLICY) {
+ ad->fw_error_type = CAMERA_ERROR_SOUND_POLICY;
+ } else if (ret == CAMERA_ERROR_SECURITY_RESTRICTED) {
+ cam_app_mdm_syspopup(ad);
+ return FALSE;
+ } else {
+ cam_critical(LOG_MM, "camera_start_preview failed");
+ return FALSE;
+ }
+ }
+ cam_debug(LOG_MM, " ret : %d", ret);
+
+ }else if (CAM_CAMCORDER_MODE == mode) {
+
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ ret = recorder_prepare(g_mm_handle->hrec);
+ if (ret != RECORDER_ERROR_NONE) {
+ if (ret == RECORDER_ERROR_SOUND_POLICY) {
+ ad->fw_error_type = RECORDER_ERROR_SOUND_POLICY;
+ } else if (ret == RECORDER_ERROR_SECURITY_RESTRICTED) {
+ cam_app_mdm_syspopup(ad);
+ return FALSE;
+ } else {
+ cam_critical(LOG_MM, "camera_start_preview failed");
+ return FALSE;
+ }
+ }
+ cam_debug(LOG_MM, " ret : %d", ret);
+ }
+
+ return TRUE;
+
+}
+
+gboolean cam_mm_preview_stop(int mode)
+{
+ int state = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ if (CAM_CAMERA_MODE == mode) {
+ state = cam_mm_get_cam_state();
+ cam_critical(LOG_MM, " camera state : %d", state);
+ /*todo:please consider recorder and camera*/
+ if (state < 0)
+ return FALSE;
+
+ switch (state) {
+ case CAMERA_STATE_NONE:
+ case CAMERA_STATE_CAPTURING:
+ case CAMERA_STATE_CREATED:
+ return FALSE;
+ case CAMERA_STATE_PREVIEW:
+ CHECK_MM_ERROR(camera_stop_preview(g_mm_handle->hcam));
+ break;
+ case CAMERA_STATE_CAPTURED:
+ break;
+ }
+ return TRUE;
+ }else if (CAM_CAMCORDER_MODE == mode) {
+
+ state = cam_mm_get_rec_state();
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+ cam_debug(LOG_MM, " camera state : %d", state);
+ /*todo:please consider recorder and camera*/
+ if (state < 0)
+ return FALSE;
+
+ switch (state) {
+ case RECORDER_STATE_NONE:
+ case RECORDER_STATE_RECORDING:
+ case RECORDER_STATE_PAUSED:
+ return FALSE;
+
+ case RECORDER_STATE_READY:
+ CHECK_MM_ERROR(recorder_unprepare(g_mm_handle->hrec));
+ break;
+
+ case RECORDER_STATE_CREATED:
+ break;
+
+ }
+ return TRUE;
+
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_is_created(void)
+{
+ debug_fenter(LOG_MM);
+ if (g_mm_handle) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean cam_mm_create(int camera_type, int mode)
+{
+ CAM_TA_ACUM_ITEM_BEGIN("----cam_mm_create", 0);
+ DEBUG_TRACE
+ ("--------------------------------START----------------------------");
+ DEBUG_TRACE("camera_type = %d" ,camera_type);
+ if (g_mm_handle) {
+ cam_critical(LOG_MM, "The mm handle is already created");
+ return FALSE;
+ }
+ g_return_val_if_fail(g_mm_handle == NULL, FALSE);
+ camera_h hcam;
+ camera_error_e e;
+ e = camera_create(camera_type, &hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_create - error(%d)", e);
+ return FALSE;
+ }
+ g_return_val_if_fail(hcam, FALSE);
+ recorder_h hrec = NULL;
+ recorder_error_e re;
+ re = recorder_create_videorecorder(hcam, &hrec);
+ if (re != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_create - error(%d)", e);
+ recorder_destroy(hrec);
+ CHECK_MM_ERROR(camera_destroy(hcam));
+ return FALSE;
+ }
+ g_return_val_if_fail(hrec, FALSE);
+ g_mm_handle = g_new0(CamMMHandle, 1);
+ if (g_mm_handle) {
+ g_mm_handle->hcam = hcam;
+ g_mm_handle->hdev = camera_type;
+ g_mm_handle->hrec = hrec;
+ } else {
+ DEBUG_TRACE("[ERROR] memory allocation failed", e);
+ recorder_destroy(hrec);
+ CHECK_MM_ERROR(camera_destroy(hcam));
+ return FALSE;
+ }
+
+ DEBUG_TRACE("camera_type = %d" , g_mm_handle->hdev);
+
+ DEBUG_TRACE("--------------END---------------");
+ CAM_TA_ACUM_ITEM_BEGIN("----cam_mm_create", 0);
+
+ return TRUE;
+}
+
+gboolean cam_mm_destory(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+
+ if( g_mm_handle->hrec != 0){
+ recorder_destroy(g_mm_handle->hrec);
+ g_mm_handle->hrec = 0;
+ }
+
+ if(g_mm_handle->hcam != 0){
+ camera_destroy(g_mm_handle->hcam);
+ g_mm_handle->hcam = 0;
+ }
+
+ g_mm_handle->hdev = -1;
+
+ g_free(g_mm_handle);
+ g_mm_handle = NULL;
+
+ return TRUE;
+}
+
+gboolean cam_mm_continuous_capture_start(int count, int interval, camera_capturing_cb capturing_cb, camera_capture_completed_cb completed_cb , void *user_data)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ cam_debug(LOG_MM, "");
+ CAM_TA_ACUM_ITEM_END(" camera key to capture start", 0);
+
+ if (cam_mm_get_state() == CAMERA_STATE_PREVIEW) {
+ CAM_TA_ACUM_ITEM_BEGIN("camera_start_continuous_capture", 0);
+ CHECK_MM_ERROR(camera_start_continuous_capture(g_mm_handle->hcam, count, interval, capturing_cb, completed_cb, user_data));
+ CAM_TA_ACUM_ITEM_END("camera_start_continuous_capture", 0);
+ } else {
+ printf("[%s:%d] operation failed - state:%d \n", __func__, __LINE__, cam_mm_get_state());
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+gboolean cam_mm_capture_start(camera_capturing_cb capturing_cb , camera_capture_completed_cb completed_cb , void *user_data)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ struct appdata *ad = (struct appdata *)user_data;
+ g_return_val_if_fail(ad, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ g_return_val_if_fail(camapp, FALSE);
+
+ cam_debug(LOG_MM, "");
+ CAM_TA_ACUM_ITEM_END(" camera key to capture start", 0);
+
+ gboolean do_capture = FALSE;
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (cam_mm_get_state() == CAMERA_STATE_PREVIEW)
+ do_capture = TRUE;
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (cam_mm_get_state() == RECORDER_STATE_RECORDING
+ || cam_mm_get_state() == RECORDER_STATE_PAUSED)
+ do_capture = TRUE;
+ }
+
+ if (do_capture){
+ CAM_TA_ACUM_ITEM_BEGIN("camera_start_capture", 0);
+ CHECK_MM_ERROR(camera_start_capture(g_mm_handle->hcam, capturing_cb, completed_cb, user_data));
+ CAM_TA_ACUM_ITEM_END("camera_start_capture", 0);
+ } else {
+ printf("[%s:%d] operation failed - state:%d \n", __func__,
+ __LINE__, cam_mm_get_state());
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_capture_stop(gboolean skip_preview, CamMode mode)
+{
+ int state = CAMERA_STATE_NONE;/*TODO:now the value is same to record*/
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ cam_debug(LOG_MM, " start");
+
+ state = cam_mm_get_state();
+ if (state == RECORDER_STATE_READY && skip_preview == FALSE && mode == CAM_CAMCORDER_MODE) {
+ CHECK_MM_ERROR(recorder_prepare(g_mm_handle->hrec));
+ } else {
+ printf("[%s:%d] operation failed - state:%d \n", __func__,
+ __LINE__, cam_mm_get_state());
+ return FALSE;
+ }
+
+ cam_debug(LOG_MM, " done");
+
+ return TRUE;
+}
+
+gboolean cam_mm_rec_start()
+{
+ int state = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ state = cam_mm_get_state();
+ if ((state == RECORDER_STATE_READY)
+ || (state == RECORDER_STATE_PAUSED)) {
+ CHECK_MM_ERROR(recorder_start(g_mm_handle->hrec));
+ } else {
+ DEBUG_TRACE("operation failed - state:%d \n", state);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_rec_stop(gboolean to_stop)
+{
+ int state = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ state = cam_mm_get_state();
+ if ((state == RECORDER_STATE_RECORDING)
+ || (state == RECORDER_STATE_PAUSED)) {
+ if (!to_stop) {
+ CHECK_MM_ERROR(recorder_commit(g_mm_handle->hrec));
+ } else {
+ CHECK_MM_ERROR(recorder_commit(g_mm_handle->hrec));
+ CHECK_MM_ERROR(recorder_unprepare(g_mm_handle->hrec));
+ }
+ } else {
+ printf("[%s:%d] operation failed - state:%d \n", __func__,
+ __LINE__, state);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_rec_pause()
+{
+ int state = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ state = cam_mm_get_state();
+ if ((state == RECORDER_STATE_RECORDING)) {
+ CHECK_MM_ERROR(recorder_pause(g_mm_handle->hrec));
+ } else {
+ printf("[%s:%d] operation failed - state:%d \n", __func__,
+ __LINE__, state);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_rec_cancel()
+{
+ int state = 0;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ state = cam_mm_get_state();
+ if ((state == RECORDER_STATE_RECORDING)
+ || (state == RECORDER_STATE_PAUSED)) {
+ CHECK_MM_ERROR(recorder_cancel(g_mm_handle->hrec));
+ } else {
+ printf("[%s:%d] operation failed - state:%d \n", __func__,
+ __LINE__, state);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_session_init(sound_session_type_e session_type)
+{
+ int ret = SOUND_MANAGER_ERROR_NONE;
+ if (ret != sound_manager_set_session_type(session_type)) {
+ DEBUG_TRACE("[%s:%d] operation failed - session_type:%d \n",
+ __func__, __LINE__, session_type);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+gboolean cam_mm_start_focusing(gint af_mode)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ g_return_val_if_fail(ad, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ g_return_val_if_fail(camapp, FALSE);
+
+ cam_debug(LOG_UI, "");
+
+ int state = 0;
+ state = cam_mm_get_state();
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (state == CAMERA_STATE_PREVIEW
+ || state == CAMERA_STATE_CREATED
+ || state == CAMERA_STATE_CAPTURED) {
+ if ((CamAppFocusMode)af_mode == CAM_FOCUS_MODE_CONTINUOUS) {
+ cam_debug(LOG_UI, "continuous");
+ CHECK_MM_ERROR(camera_start_focusing(g_mm_handle->hcam, TRUE));
+ } else {
+ cam_debug(LOG_UI, "touchAF");
+ CHECK_MM_ERROR(camera_start_focusing(g_mm_handle->hcam, FALSE));
+ }
+ } else {
+ DEBUG_TRACE("Start focus operation failed in camera mode - invalid state:%d \n", state);
+ return FALSE;
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (state == RECORDER_STATE_CREATED
+ || state == RECORDER_STATE_READY
+ || state == RECORDER_STATE_RECORDING
+ || state == RECORDER_STATE_PAUSED) {
+ if ((CamAppFocusMode)af_mode == CAM_FOCUS_MODE_CONTINUOUS) {
+ CHECK_MM_ERROR(camera_start_focusing(g_mm_handle->hcam, TRUE));
+ } else {
+ CHECK_MM_ERROR(camera_start_focusing(g_mm_handle->hcam, FALSE));
+ }
+ } else {
+ DEBUG_TRACE("Start focus operation failed in camcorder mode- invalid state:%d \n", state);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_stop_focusing()
+{
+ int state = 0;
+
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ cam_debug(LOG_UI, "");
+
+ state = cam_mm_get_state();
+ if (state == CAMERA_STATE_PREVIEW
+ || state == CAMERA_STATE_CREATED
+ || state == RECORDER_STATE_RECORDING) {
+ /*TODO:please think rec mod, but now the rec and cam mode state value is same*/
+ CHECK_MM_ERROR(camera_cancel_focusing(g_mm_handle->hcam));
+ } else {
+ printf
+ ("[%s:%d] Stop focus operation failed - invalid state:%d \n",
+ __func__, __LINE__, state);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_set_error_cb(camera_error_cb error_cb, void *data)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ e = camera_set_error_cb(g_mm_handle->hcam, error_cb, data);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_set_error_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_unset_error_cb(void)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+ e = camera_unset_error_cb(g_mm_handle->hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_unset_error_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_state_changed_cb(camera_state_changed_cb state_cb, void *data)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_set_state_changed_cb(g_mm_handle->hcam, state_cb, data);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_set_state_changed_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_unset_state_changed_cb(void)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_unset_state_changed_cb(g_mm_handle->hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_unset_state_changed_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+gboolean cam_mm_set_focus_changed_cb(camera_focus_changed_cb focus_cb, void *data)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_set_focus_changed_cb(g_mm_handle->hcam, focus_cb, data);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_set_focus_changed_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_unset_focus_changed_cb(void)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_unset_focus_changed_cb(g_mm_handle->hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_unset_focus_changed_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_set_preview_cb(camera_preview_cb preview_cb, void *data)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_set_preview_cb(g_mm_handle->hcam, preview_cb, data);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_set_preview_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_unset_preview_cb(void)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_unset_preview_cb(g_mm_handle->hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_unset_preview_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_camera_interrupted_cb(camera_interrupted_cb callback, void *data){
+
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_set_interrupted_cb(g_mm_handle->hcam, callback, data);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_set_state_changed_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+gboolean cam_mm_set_recorder_interrupted_cb(recorder_interrupted_cb callback, void *data){
+
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_set_interrupted_cb(g_mm_handle->hrec, callback, data);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_set_state_changed_cb - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_recorder_set_state_changed_cb(recorder_state_changed_cb callback, void* user_data)
+{
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_set_state_changed_cb(g_mm_handle->hrec, callback, user_data);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_set_state_changed_cb - error(%d)", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_recorder_unset_state_changed_cb(void)
+{
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_unset_state_changed_cb(g_mm_handle->hrec);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_set_state_changed_cb - error(%d)", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_recorder_set_recording_status_cb(recorder_recording_status_cb callback, void* user_data)
+{
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_set_recording_status_cb(g_mm_handle->hrec, callback, user_data);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_set_recording_status_cb - error(%d)", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_recorder_unset_recording_status_cb(void)
+{
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_unset_recording_status_cb(g_mm_handle->hrec);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_unset_recording_status_cb - error(%d)", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_recorder_set_recording_limit_reached_cb(recorder_recording_limit_reached_cb callback, void* user_data)
+{
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_set_recording_limit_reached_cb(g_mm_handle->hrec, callback, user_data);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_set_recording_status_cb - error(%d)", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_recorder_unset_recording_limit_reached_cb(void)
+{
+ recorder_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ e = recorder_unset_recording_limit_reached_cb(g_mm_handle->hrec);
+ if (e != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] recorder_unset_recording_status_cb - error(%d)", e);
+ rec_detail_error_get(e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_recording_motion(double rate)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hrec, FALSE);
+
+ int err;
+ err = recorder_attr_set_recording_motion_rate(g_mm_handle->hrec, rate);
+ if (err != RECORDER_ERROR_NONE) {
+ DEBUG_TRACE("recorder_attr_set_recording_motion_rate failed");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_mm_start_camera_face_detection(camera_face_detected_cb callback, void *data)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_start_face_detection(g_mm_handle->hcam, callback, data);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_start_face_detection - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_stop_camera_face_detection(void)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_stop_face_detection(g_mm_handle->hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_stop_face_detection - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_is_supported_face_detection(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ return camera_is_supported_face_detection(g_mm_handle->hcam);
+
+}
+
+gboolean cam_mm_set_camera_face_zoom(int face_id)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_face_zoom(g_mm_handle->hcam, face_id);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_face_zoom - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_camera_cancel_face_zoom(void)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ e = camera_cancel_face_zoom(g_mm_handle->hcam);
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("[ERROR] camera_cancel_face_zoom - error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+
+}
+
+gboolean cam_mm_set_image_flip(gboolean value)
+{
+ camera_error_e e;
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ if (value) {
+ e = camera_attr_set_stream_flip(g_mm_handle->hcam, CAMERA_FLIP_HORIZONTAL);
+
+ if (g_mm_handle->hdev == 0) {
+ e = camera_set_x11_display_flip(g_mm_handle->hcam, CAMERA_FLIP_VERTICAL);
+ } else {
+ e = camera_set_x11_display_flip(g_mm_handle->hcam, CAMERA_FLIP_NONE);
+ }
+ } else {
+ e = camera_attr_set_stream_flip(g_mm_handle->hcam, CAMERA_FLIP_NONE);
+
+ if (g_mm_handle->hdev == 0) {
+ e = camera_set_x11_display_flip(g_mm_handle->hcam, CAMERA_FLIP_NONE);
+ } else {
+ e = camera_set_x11_display_flip(g_mm_handle->hcam, CAMERA_FLIP_VERTICAL);
+ }
+ }
+
+ if (e != CAMERA_ERROR_NONE) {
+ DEBUG_TRACE("recorder_attr_set_recording_flip() error(%d)", e);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean cam_mm_get_caps_minmax(unsigned int type, int *min, int *max)
+{
+ if (!cam_mm_is_created()) {
+ cam_debug(LOG_CAM, "cam_mm_is_created() false");
+ return FALSE;
+ }
+
+ gboolean ret = TRUE;
+ int tempmin, tempmax = 0;
+
+ switch(type) {
+ case CAM_CP_FUNC_EXPOSURE:
+ {
+ if (camera_attr_get_exposure_range(g_mm_handle->hcam, &tempmin, &tempmax) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_attr_get_exposure_range() is false");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_BRIGHTNESS:
+ {
+ if (camera_attr_get_brightness_range(g_mm_handle->hcam, &tempmin, &tempmax) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_attr_get_brightness_range() is false");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_ZOOM:
+ {
+ if (camera_attr_get_zoom_range(g_mm_handle->hcam, &tempmin, &tempmax) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_attr_get_zoom_range() is false");
+ ret = FALSE;
+ }
+
+ if (tempmin == tempmax) {
+ cam_debug(LOG_CAM, "zoom is not supported");
+ ret = FALSE;
+ }
+ }
+ break;
+ default:
+ {
+ cam_debug(LOG_CAM, "not support get_minmax() about this type[%d]", type);
+ ret = FALSE;
+ }
+ break;
+ }
+
+ if (!ret) {
+ tempmin = 0;
+ tempmax = 0;
+ }
+
+ *min = tempmin;
+ *max = tempmax;
+
+ return ret;
+}
+
+gboolean cam_mm_get_caps_range(unsigned int type, unsigned int *caps, void *user_data)
+{
+ if (!cam_mm_is_created()) {
+ cam_debug(LOG_CAM, "cam_mm_is_created() false");
+ return FALSE;
+ }
+
+ g_caps = 0;
+ g_caps_cb_cnt = 0;
+ gboolean ret = TRUE;
+
+ switch(type) {
+ case CAM_CP_FUNC_FLASH_MODE:
+ {
+ if (camera_attr_foreach_supported_flash_mode(g_mm_handle->hcam,
+ (camera_attr_supported_flash_mode_cb)__get_flash_cb, user_data) != CAMERA_ERROR_NONE ) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_flash_mode() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_ISO:
+ {
+ if (camera_attr_foreach_supported_iso(g_mm_handle->hcam,
+ (camera_attr_supported_iso_cb)__get_iso_cb, user_data) != CAMERA_ERROR_NONE ) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_iso() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_SCENE_MODE:
+ {
+ if (camera_attr_foreach_supported_scene_mode(g_mm_handle->hcam,
+ (camera_attr_supported_scene_mode_cb)__get_scene_cb, user_data) != CAMERA_ERROR_NONE ) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_scene_mode() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_METERING:
+ {
+ if (camera_attr_foreach_supported_exposure_mode(g_mm_handle->hcam,
+ (camera_attr_supported_exposure_mode_cb)__get_metering_cb, user_data) != CAMERA_ERROR_NONE ) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_exposure_mode() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_EFFECT_MODE:
+ {
+ if (camera_attr_foreach_supported_effect(g_mm_handle->hcam,
+ (camera_attr_supported_effect_cb)__get_effect_cb, user_data) != CAMERA_ERROR_NONE ) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_effect() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_WHITE_BALANCE:
+ {
+ if (camera_attr_foreach_supported_whitebalance(g_mm_handle->hcam,
+ (camera_attr_supported_whitebalance_cb)__get_wb_cb, user_data) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_whitebalance() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_FOCUS_MODE:
+ {
+ if (camera_attr_foreach_supported_af_mode(g_mm_handle->hcam,
+ (camera_attr_supported_af_mode_cb)__get_focus_cb, user_data) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_exposure_mode() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_FPS:
+ {
+ if (camera_attr_foreach_supported_fps(g_mm_handle->hcam,
+ (camera_attr_supported_fps_cb)__get_fps_cb, user_data) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_attr_foreach_supported_fps() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_CAM_RESOLUTION:
+ {
+ if(camera_foreach_supported_capture_resolution(g_mm_handle->hcam,
+ (camera_supported_capture_resolution_cb)__get_capture_res_cb, user_data) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_foreach_supported_capture_resolution() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ case CAM_CP_FUNC_REC_RESOLUTION:
+ {
+ if(camera_foreach_supported_preview_resolution(g_mm_handle->hcam,
+ (camera_supported_preview_resolution_cb)__get_recording_res_cb, user_data) != CAMERA_ERROR_NONE) {
+ cam_debug(LOG_CAM, "camera_foreach_supported_capture_resolution() is fail");
+ ret = FALSE;
+ }
+ }
+ break;
+ default:
+ {
+ cam_debug(LOG_CAM, "not support get_range() about this type[%d]", type);
+ ret = FALSE;
+ }
+ break;
+ }
+
+ *caps = g_caps;
+ return ret;
+}
+
+const int cam_mm_get_caps_cb_cnt()
+{
+ return g_caps_cb_cnt;
+}
+
+static void __get_iso_cb(camera_attr_iso_e iso, void *user_data)
+{
+ cam_retm_if(iso > CAMERA_ATTR_ISO_3200, "input is invalid");
+
+ unsigned int uRet = cam_iso_dev_convert_caps(iso);
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_effect_cb(camera_attr_effect_mode_e effect, void *user_data)
+{
+ cam_retm_if(effect > CAMERA_ATTR_EFFECT_SKETCH, "input is invalid");
+
+ unsigned int uRet = cam_effect_dev_convert_caps(effect);
+ if (uRet != 0 ) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_fps_cb(camera_attr_fps_e fps, void *user_data)
+{
+ cam_retm_if(fps > CAMERA_ATTR_FPS_120, "input is invalid");
+
+ unsigned int uRet = cam_fps_dev_convert_caps(fps);
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_wb_cb(camera_attr_whitebalance_e wb, void *user_data)
+{
+ cam_retm_if(wb > CAMERA_ATTR_WHITE_BALANCE_CUSTOM, "input is invalid");
+
+ unsigned int uRet = cam_wb_dev_convert_caps(wb);
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_focus_cb(camera_attr_af_mode_e focus, void *user_data)
+{
+ cam_retm_if(focus > CAMERA_ATTR_AF_FULL, "input is invalid");
+
+ unsigned int uRet = cam_focus_dev_convert_caps(focus);
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_metering_cb(camera_attr_exposure_mode_e metering, void *user_data)
+{
+ cam_retm_if(metering > CAMERA_ATTR_EXPOSURE_MODE_CUSTOM, "input is invalid");
+
+ unsigned int uRet = cam_metering_dev_convert_caps(metering);
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_scene_cb(camera_attr_scene_mode_e scene, void *user_data)
+{
+ cam_retm_if(scene > CAMERA_ATTR_SCENE_MODE_BACKLIGHT, "input is invalid");
+
+ unsigned int uRet = cam_scene_dev_convert_caps(scene);
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_flash_cb(camera_attr_flash_mode_e flash, void *user_data)
+{
+ cam_retm_if(flash > CAMERA_ATTR_FLASH_MODE_PERMANENT, "input is invalid");
+
+ unsigned int uRet = cam_flash_dev_convert_caps(flash);
+ if (uRet != 0 ) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_capture_res_cb(int width, int height, void *user_data)
+{
+ unsigned int uRet = cam_resolution_cam_convert_caps((unsigned int)CAM_RESOLUTION(width, height));
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+static void __get_recording_res_cb(int width, int height, void *user_data)
+{
+ unsigned int uRet = cam_resolution_cam_convert_caps((unsigned int)CAM_RESOLUTION(width, height));
+ if (uRet != 0) {
+ g_caps |= uRet;
+ g_caps_cb_cnt++;
+ }
+}
+
+gboolean cam_mm_is_support_front_camera(void)
+{
+ g_return_val_if_fail(g_mm_handle, FALSE);
+ g_return_val_if_fail(g_mm_handle->hcam, FALSE);
+
+ bool ret = 0;
+ int device_count = 0;
+
+ camera_get_device_count(g_mm_handle->hcam, &device_count);
+ cam_debug(LOG_MM, "device count is [%d]", device_count);
+
+ if (device_count == 2) {
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+
+ return ret;
+}
+//end of file
diff --git a/src/cam_popup.c b/src/cam_popup.c
new file mode 100755
index 0000000..2b07973
--- /dev/null
+++ b/src/cam_popup.c
@@ -0,0 +1,392 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_popup.h"
+#include "cam_debug.h"
+#include "cam.h"
+
+static GList *g_pop_list = NULL;
+
+static double bar_percent = 0;
+static char *bar_text = NULL;
+static gboolean add_progress_bar = FALSE;
+
+
+/* remove popup which is add by cam_app_*_popup() functions */
+void cam_popup_remove(Evas_Object *popup)
+{
+ if (popup == NULL)
+ return;
+ GList *popup_list = NULL;
+ popup_list = g_pop_list;
+ g_pop_list = g_list_remove(popup_list, popup);
+ evas_object_del(popup);
+ popup = NULL;
+}
+
+void cam_popup_remove_all(void)
+{
+ GList *popup_list = NULL;
+ popup_list = g_pop_list;
+
+ if (popup_list) {
+ while (popup_list) {
+ GList *next = popup_list->next;
+ evas_object_del(popup_list->data);
+ popup_list->data = NULL;
+ popup_list = next;
+ }
+ g_list_free(popup_list);
+ g_pop_list = NULL;
+ }
+ return;
+}
+
+#ifdef USE_ELM_POPUP /*it is not use*/
+
+/* popup with one button, ELM_POPUP_RESPONSE_OK is sent along with response signal. */
+void cam_popup_confirm_add(Evas_Object *window, const char *message,
+ const char *btn_name, cam_popup_respons_cb callback,
+ void *user_data)
+{
+
+ Evas_Object *popup = NULL;
+
+ if (callback == NULL) { /* response_cb should be set */
+ cam_critical(LOG_UI,
+ "add info popup [%s] failed, callback is NULL ",
+ message);
+ return;
+ }
+
+ popup = elm_popup_add_with_buttons(window, NULL, message,
+ 1, btn_name, ELM_POPUP_RESPONSE_OK,
+ NULL);
+
+ if (popup == NULL) {
+ cam_critical(LOG_UI, "add confirm popup [%s] failed ",
+ message);
+ return;
+ }
+ evas_object_smart_callback_add(popup, "response", callback, user_data);
+ evas_object_show(popup);
+
+ g_pop_list = g_list_append(g_pop_list, popup);
+
+ return;
+}
+
+/* popup with two button, ELM_POPUP_RESPONSE_OK/ELM_POPUP_RESPONSE_CANCEL is sent along with response signal. */
+void cam_popup_question_add(Evas_Object *window, const char *message,
+ const char *btn_n_1, const char *btn_n_2,
+ cam_popup_respons_cb callback, void *user_data)
+{
+ Evas_Object *popup = NULL;
+
+ if (callback == NULL) { /* response_cb should be set */
+ cam_critical(LOG_UI,
+ "add info popup [%s] failed, callback is NULL ",
+ message);
+ return;
+ }
+
+ popup = elm_popup_add_with_buttons(window, NULL, message, 2,
+ btn_n_1, btn_n_2,
+ ELM_POPUP_RESPONSE_OK,
+ ELM_POPUP_RESPONSE_CANCEL, NULL);
+
+ if (popup == NULL) {
+ cam_critical(LOG_UI, "add question popup [%s] failed ",
+ message);
+ return;
+ }
+ evas_object_smart_callback_add(popup, "response", callback, user_data);
+ evas_object_show(popup);
+
+ g_pop_list = g_list_append(g_pop_list, popup);
+
+ return;
+}
+#else /* #ifdef USE_ELM_POPUP */
+void
+cam_popup_question_add(Evas_Object *window, const char *message,
+ const char *lbtn_name, void (*left_btn_cb) (void *data,
+ Evas_Object
+ *obj,
+ void
+ *event_info),
+ const char *rbtn_name, void (*right_btn_cb) (void *data,
+ Evas_Object
+ *obj,
+ void
+ *event_info))
+{
+ Evas_Object *notify = NULL;
+ Evas_Object *layout = NULL;
+ Evas_Object *label = NULL;
+ Evas_Object *button = NULL;
+ int width = 0;
+ char buf[50] = { '\0', };
+
+ notify = elm_notify_add(window);
+ evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_notify_align_set(notify, 0.5, 0.5);
+ elm_notify_allow_events_set(notify, EINA_FALSE);
+ evas_object_show(notify);
+
+ layout = elm_layout_add(window);
+ elm_layout_theme_set(layout, "standard", "notify", "style3");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_object_content_set(notify, layout);
+ evas_object_show(layout);
+
+ label = elm_label_add(window);
+
+ elm_object_style_set(label, "popup/description");
+ edje_object_part_geometry_get((Evas_Object *)
+ elm_layout_edje_get(layout),
+ "elm.swallow.content", NULL, NULL, &width,
+ NULL);
+ elm_label_line_wrap_set(label, EINA_TRUE);
+ elm_label_wrap_width_set(label, width);
+
+ snprintf(buf, sizeof(buf), "<align=middle>%s", message);
+
+ elm_object_text_set(label, buf);
+ elm_object_part_content_set(layout, "elm.swallow.content", label);
+ evas_object_show(label);
+
+ if (lbtn_name && left_btn_cb) {
+ button = elm_button_add(window);
+ elm_object_text_set(button, lbtn_name);
+ elm_object_part_content_set(layout, "elm.swallow.left", button);
+ evas_object_smart_callback_add(button, "focused", left_btn_cb,
+ notify);
+ evas_object_show(button);
+ }
+
+ if (rbtn_name && right_btn_cb) {
+ button = elm_button_add(window);
+ elm_object_text_set(button, rbtn_name);
+ elm_object_part_content_set(layout, "elm.swallow.right", button);
+ evas_object_smart_callback_add(button, "focused", right_btn_cb,
+ notify);
+ evas_object_show(button);
+ }
+
+ g_pop_list = g_list_append(g_pop_list, notify);
+
+ return;
+}
+#endif /* #ifdef USE_ELM_POPUP */
+
+Evas_Object *cam_popup_guide_screen_add(Evas_Object *window, const char *message)
+{
+ cam_debug(LOG_UI, "");
+
+ Evas_Object *ctxpopup = NULL;
+ ctxpopup = elm_ctxpopup_add(window);
+
+ if (!ctxpopup) {
+ cam_critical(LOG_UI, "critical : can't make ctx popup");
+ return NULL;
+ } else {
+ elm_object_style_set(ctxpopup, "beat_winset_test/imageeditor");
+ elm_ctxpopup_item_append(ctxpopup, _("Flickr"), NULL, NULL,
+ ctxpopup);
+ evas_object_move(ctxpopup, 200, 200);
+ evas_object_show(ctxpopup);
+ }
+
+ return ctxpopup;
+}
+
+
+gboolean cam_popup_create(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progress_popup != NULL)
+ cam_popup_delete(ad);
+
+ elm_object_part_content_unset(ad->ug_base, "progress_popup_layout");
+
+ // create popup
+ ad->progress_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "progress_popup");
+
+ cam_retvm_if(ad->progress_popup == NULL, FALSE, "progress_popup is NULL");
+ elm_object_part_content_set(ad->ug_base, "progress_popup_layout", ad->progress_popup);
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ edje_object_signal_emit(_EDJ(ad->progress_popup), "progress_popup,default", "prog");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ edje_object_signal_emit(_EDJ(ad->progress_popup), "progress_popup,vertical", "prog");
+ break;
+ default:
+ DEBUG_TRACE("wow, reached un-able reached codes");
+ }
+
+ evas_object_show(ad->progress_popup);
+
+ return TRUE;
+}
+
+// create popup with progress bar burst_progress_popup
+gboolean cam_popup_for_burst_create(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progress_popup != NULL)
+ cam_popup_delete(ad);
+
+ elm_object_part_content_unset(ad->ug_base, "progress_popup_layout");
+
+ // create popup
+ ad->progress_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "burst_progress_popup");
+
+ cam_retvm_if(ad->progress_popup == NULL, FALSE, "progress_popup is NULL");
+ elm_object_part_content_set(ad->ug_base, "progress_popup_layout", ad->progress_popup);
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ edje_object_signal_emit(_EDJ(ad->progress_popup), "progress_popup,default", "prog");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ edje_object_signal_emit(_EDJ(ad->progress_popup), "progress_popup,vertical", "prog");
+ break;
+ default:
+ DEBUG_TRACE("wow, reached un-able reached codes");
+ }
+
+ evas_object_show(ad->progress_popup);
+
+ return TRUE;
+}
+
+
+gboolean cam_popup_add_progress_bar(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progress_popup_bar != NULL) {
+ evas_object_del(ad->progress_popup_bar);
+ ad->progress_popup_bar = NULL;
+ }
+
+ ad->progress_popup_bar = elm_progressbar_add(ad->ug_base);
+ cam_retvm_if(ad->progress_popup_bar == NULL, FALSE, "Cannot add progressbar object\n");
+
+ Evas_Object *pb = ad->progress_popup_bar;
+ edje_object_part_swallow(_EDJ(ad->progress_popup), "progress_popup_bar", pb);
+ elm_object_style_set(pb, "list_progress");
+ evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ add_progress_bar = TRUE;
+
+ return TRUE;
+}
+
+gboolean cam_popup_set_text(void *data, char *text)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progress_popup == NULL )
+ return FALSE;
+
+ if (text != NULL) {
+ bar_text = text;
+ edje_object_part_text_set(_EDJ(ad->progress_popup), "progress_popup_text", text);
+ }
+ return TRUE;
+}
+
+gboolean cam_popup_set_bar_value(void *data, double value)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progress_popup_bar) {
+ bar_percent = value;
+ elm_progressbar_value_set(ad->progress_popup_bar, value);
+ evas_object_raise(ad->progress_popup_bar);
+ }
+
+ return TRUE;
+}
+
+gboolean cam_popup_delete(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->progress_popup != NULL) {
+ evas_object_del(ad->progress_popup);
+ ad->progress_popup = NULL;
+ }
+
+ if (ad->progress_popup_bar != NULL) {
+ evas_object_del(ad->progress_popup_bar);
+ ad->progress_popup_bar = NULL;
+ }
+
+ bar_percent = 0;
+ bar_text = NULL;
+ add_progress_bar = FALSE;
+
+ return TRUE;
+}
+
+
+void cam_popup_rotate(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ unsigned int tmp_percent = bar_percent;
+ char *tmp_text = bar_text;
+ gboolean using_bar = TRUE;
+
+ cam_popup_delete(ad);
+
+ if (!cam_popup_create(ad)) {
+ cam_critical(LOG_UI, "cam_popup_create() failed");
+ return;
+ }
+
+ if (add_progress_bar) {
+ if (!cam_popup_add_progress_bar(ad))
+ cam_debug(LOG_UI, "cam_popup_add_progress_bar() failed");
+
+ if (!cam_popup_set_bar_value(ad, tmp_percent))
+ cam_debug(LOG_UI, "cam_popup_set_bar_value() failed");
+ }
+
+ if (!cam_popup_set_text(ad, tmp_text))
+ cam_debug(LOG_UI, "cam_popup_set_text() failed");
+}
+
diff --git a/src/cam_rec.c b/src/cam_rec.c
new file mode 100755
index 0000000..55d21fb
--- /dev/null
+++ b/src/cam_rec.c
@@ -0,0 +1,495 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <X11/Xlib.h>
+#include <X11/keysymdef.h>
+#include <sys/wait.h>
+#include <pthread.h>
+#include <power.h>
+
+#include "cam.h"
+#include "cam_app.h"
+#include "cam_sound.h"
+#include "cam_file.h"
+#include "cam_ta.h"
+#include "cam_error.h"
+#include "cam_mm.h"
+#include "cam_rec.h"
+#include "cam_indicator_edc_callback.h"
+#include "cam_recording_edc_callback.h"
+#include "camera_utils.h"
+#include "cam_popup.h"
+#include "cam_lbs.h"
+#include "cam_common_edc_callback.h"
+#include "cam_toolbar_edc_callback.h"
+
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+static gint __cam_rec_sound_index_get(gint setting_index, gboolean start)
+{
+ gint index = -1;
+
+ if (start) { /* start sound */
+ switch (setting_index) {
+ case CAM_SETTINGS_SOUND_1:
+ index = CAM_SOUND_EFFECT_REC_START3;
+ break;
+ case CAM_SETTINGS_SOUND_2:
+ index = CAM_SOUND_EFFECT_REC_START2;
+ break;
+ case CAM_SETTINGS_SOUND_3:
+ index = CAM_SOUND_EFFECT_REC_START3;
+ break;
+ default:
+ break;
+
+ }
+ } else { /* commit sound */
+ switch (setting_index) {
+
+ case CAM_SETTINGS_SOUND_1:
+ index = CAM_SOUND_EFFECT_REC_COMMIT3;
+ break;
+ case CAM_SETTINGS_SOUND_2:
+ index = CAM_SOUND_EFFECT_REC_COMMIT2;
+ break;
+ case CAM_SETTINGS_SOUND_3:
+ index = CAM_SOUND_EFFECT_REC_COMMIT3;
+ break;
+ default:
+ break;
+ }
+ }
+ return index;
+}
+#endif
+static gchar *__get_tmpfile_name()
+{
+ char tmpfile_name[256] = { 0 };
+ gchar *file_path = NULL;
+ file_path = (gchar *)cam_app_get_target_path();
+
+ snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", file_path,
+ TMPFILE_PREFIX);
+ DEBUG_TRACE("#####################tmpfile_name=%s", tmpfile_name);
+
+ if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
+ DEBUG_TRACE("Error : tmp file exist on the %s", file_path);
+ cam_remove_tmp_file();
+ }
+
+ return g_strdup(tmpfile_name);
+}
+
+gboolean cam_video_record_start(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ gchar *filename = NULL;
+
+ gint64 remain = 0;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if (ad->is_recording == TRUE) {
+ DEBUG_TRACE("Camera app is recording");
+ return TRUE;
+ } else {
+ cam_critical(LOG_UI, "start reocrd");
+ }
+
+ if (ad->is_rotating == TRUE) {
+ DEBUG_TRACE("now in rotating target, do not start recording");
+ return TRUE;
+ }
+
+ DEBUG_TRACE("start recording !!");
+
+ if (ad->timer_activated) {
+ CAM_UI_LOG("timer activated!");
+ return true;
+ }
+ gchar* target_path = (gchar*)cam_app_get_target_path();
+ if (target_path != NULL) {
+ remain = cam_get_free_space(target_path);
+ }
+
+ if (remain <= REC_MMS_MIN_SPACE) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"),
+ cam_app_popup_response_cb);
+ return TRUE;
+ }
+
+ if (camapp->gps) {
+ int gps_level = CAM_LBS_STATE_DISABLE;
+ gps_level = cam_lbs_get_state();
+ if (gps_level >=CAM_LBS_STATE_SERVICE_ENABLE) {
+ double longitude = -1.0;
+ double latitude = -1.0;
+ double altitude = -1.0;
+ time_t time_stamp = -1.0;
+ if (cam_lbs_get_current_position(&longitude, &latitude, &altitude, &time_stamp)) {
+ DEBUG_TRACE("GEO TAG [longitude = %d, latitude = %d, altitude = %d]", longitude, latitude, altitude);
+ if ( !cam_mm_set_gps_data(latitude, longitude, (double)altitude))
+ DEBUG_TRACE("cam_mm_set_gps_data failed");
+ }
+ }
+ }
+
+ filename = __get_tmpfile_name();
+
+ if (filename) {
+ cam_debug(LOG_UI, "FILE NAME : %s", filename);
+ if (!cam_mm_set_filename(filename)) {
+ cam_critical(LOG_MM, "cannot set filename");
+ return FALSE;
+ }
+ free(filename);
+ filename = NULL;
+ } else {
+ cam_critical(LOG_MM, "cannot get filename");
+ return FALSE;
+ }
+
+ /* flash on */
+ if (camapp->flash == CAM_FLASH_ON) {
+ if (!cam_mm_set_flash(CAM_FLASH_MOVIE_ON)) {
+ cam_critical(LOG_MM, "cam_mm_set_flash failed");
+ }
+ } else {
+ if (!cam_mm_set_flash(CAM_FLASH_OFF)) {
+ cam_critical(LOG_MM, "cam_mm_set_flash failed");
+ }
+ }
+
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+/* play start effect sound */
+ cam_sound_play(__cam_rec_sound_index_get(camapp->shutter_sound, TRUE),
+ ad);
+#endif
+/* set sound path for recording MIC */
+ cam_sound_set_mic();
+
+/* set orient tag */
+ cam_set_orient_value(ad);
+
+/* mm rec */
+ if (!cam_mm_rec_start(NULL)) {
+ cam_critical(LOG_MM, "cam_mm_rec_start failed");
+ cam_app_notice_popup(data,
+ dgettext(PACKAGE, "IDS_CAM_POP_ERROR_RECORDING_FAIL"),
+ cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+ /* set recording state */
+ ad->is_recording = TRUE;
+
+/* change recording view */
+
+ if (load_recording_edje(ad)) {
+ cam_critical(LOG_UI, "load_recording_edje failed");
+ cam_video_record_cancel(ad);
+ return FALSE;
+ }
+
+ if (ad->indicator_edje)
+ cam_indicator_update(ad);
+ else
+ cam_indicator_create(ad);
+
+ settings_guideline_refresh(ad);
+ return TRUE;
+}
+
+gboolean cam_video_record_resume(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (!cam_mm_rec_start(NULL)) {
+ cam_critical(LOG_MM, "cam_mm_rec_start failed");
+ cam_app_notice_popup(data,
+ dgettext(PACKAGE, "IDS_CAM_POP_ERROR_RECORDING_FAIL"),
+ cam_app_timeout_notice_response_cb);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_video_record_pause(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (!cam_mm_rec_pause(NULL)) {
+ cam_critical(LOG_MM, "cam_mm_rec_start failed");
+ return FALSE;
+ }
+ return TRUE;
+}
+Eina_Bool cam_video_idler_record_stop(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_video_record_stop(ad);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+gboolean cam_video_record_stop(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ gboolean to_stop = FALSE;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if (ad->recording_commit) {
+ ecore_idler_del(ad->recording_commit);
+ ad->recording_commit = NULL;
+ }
+/* check to_stop val */
+
+ if (!cam_mm_stop_focusing()){
+ cam_critical(LOG_MM, "cam_mm_stop_focusing error ");
+ }
+/* mm stop rec */
+ if (!cam_mm_rec_stop(to_stop)) {
+ cam_critical(LOG_MM, "cam_mm_rec_stop failed");
+ if (!cam_mm_rec_cancel())
+ cam_critical(LOG_MM, "cam_mm_rec_cancel failed");
+
+ cam_app_notice_popup(data,
+ dgettext(PACKAGE, "IDS_CAM_POP_ERROR_RECORDING_FAIL"),
+ cam_app_timeout_notice_response_cb);
+ }
+
+/* flash off */
+ if (!cam_mm_set_flash(camapp->flash)) {
+ cam_critical(LOG_MM, "cam_mm_set_flash failed");
+ }
+
+/* set sound path for effect sound */
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+/* play end effect sound */
+ cam_sound_play(__cam_rec_sound_index_get(camapp->shutter_sound, FALSE), ad);
+#endif
+/* cam_sound_play(CAM_SOUND_EFFECT_REC_COMMIT); */
+
+ return TRUE;
+}
+
+gboolean cam_video_record_cancel(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ debug_fenter(LOG_UI);
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+/*mm stop rec */
+ if (!cam_mm_rec_cancel(NULL)) {
+ cam_critical(LOG_MM, "cam_mm_rec_cancel failed");
+ }
+
+ /* change to camera mode*/
+ /*
+ * TODO: if for any reason, not run here, there will be caused now now recording, but in record mode
+ * So: I suggest while click capture button: judge now state and whether recording.
+ */
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ if (ad->ug_state != CAM_UG_PAUSE_STATE) {/*if now is pause state, so do not set mode, just set while resume*/
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_INT(value, CAM_CAMERA_MODE);
+ if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
+ return FALSE;
+ }
+
+ cam_app_update_quickview_icon(ad);
+ }
+ }
+
+ unload_recording_edje(ad);
+ camapp->rec_elapsed = 0;
+ cam_toolbar_update(ad);
+
+ if (ad->indicator_edje)
+ cam_indicator_update(ad);
+ else
+ cam_indicator_create(ad);
+
+ settings_guideline_refresh(ad);
+ cam_remove_tmp_file();
+ return TRUE;
+}
+
+/* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
+Eina_Bool cam_video_capture_handle_idler(void *itm)
+{
+ CamIdlerItem *item = (CamIdlerItem *) itm;
+ struct appdata *ad = NULL;
+ cam_retvm_if(!item, ECORE_CALLBACK_CANCEL, "CamIdlerItem is NULL");
+
+ ad = (struct appdata *)item->data;
+ cam_retvm_if(!ad, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ ad->capture_cb_list = g_list_remove(ad->capture_cb_list, item->idler);
+ free(item);
+ item = NULL;
+
+ return cam_video_capture_handle(ad);
+}
+
+gboolean cam_rec_save_and_register_video_file(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+ cam_retv_if(camapp->filename == NULL, FALSE);
+
+ GError *error = NULL;
+ cam_debug(LOG_FILE, "tmp file : %s", camapp->filename);
+
+ gchar *filename = NULL;
+ filename = cam_app_get_next_filename(CAM_FILE_EXTENTION_VIDEO);
+
+ if (filename) {
+ cam_debug(LOG_UI, "FILE NAME : %s", filename);
+
+ int ret = 0;
+
+ ret = rename(camapp->filename, filename);
+
+ if( ret != 0)
+ cam_critical(LOG_FILE, "rename is error %d", ret );
+
+ sync();
+ free(camapp->filename);
+ camapp->filename = strdup(filename);
+
+ free(filename);
+ filename = NULL;
+
+ if (!g_file_test(camapp->filename, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
+ cam_critical(LOG_FILE, "The File is not existed %s",camapp->filename );
+ return ECORE_CALLBACK_CANCEL;
+ }
+ } else {
+ cam_critical(LOG_MM, "cannot get filename");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ if (!cam_file_register(camapp->filename, &error)) {
+ cam_critical(LOG_FILE, "cam_file_register fail");
+ if (error != NULL) {
+ cam_critical(LOG_FILE,
+ "cam_file_register error [%s]",
+ error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ }
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL)
+ cam_app_update_thumbnail();
+
+ /*TODO: use pipe*/
+ if (camapp->review) {
+ DEBUG_TRACE(" review on in recording mode");
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_RUN_IMAGE_VIEWER);
+ }
+ return TRUE;
+}
+
+Eina_Bool cam_video_capture_handle(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ /* set recording state */
+ ad->is_recording = FALSE;
+
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL,
+ "camapp_handle is NULL");
+
+ cam_debug(LOG_FILE, "");
+
+ camapp->rec_elapsed = 0;
+ SHOW_EVAS_OBJECT(ad->indicator_edje);
+ unload_recording_edje(ad);
+ camapp->rec_elapsed = 0;
+ cam_toolbar_update(ad);
+ if (ad->indicator_edje)
+ cam_indicator_update(ad);
+ else
+ cam_indicator_create(ad);
+ settings_guideline_refresh(ad);
+
+ if (camapp->filename) {
+ ad->remained_count--;
+ indicator_update_remain_count(ad);
+ }
+ g_queue_push_tail(ad->file_reg_queue, strdup(REC_FILE_SAVE_REG));
+ pthread_cond_signal(&ad->file_reg_cond);
+
+ switch (camapp->rec_stop_type) {
+ case CAM_REC_STOP_UNEXPECTED:
+ break;
+ case CAM_REC_STOP_NORMAL:
+ break;
+ case CAM_REC_STOP_LOW_BATTERY:
+ cam_app_exit(ad);
+ return ECORE_CALLBACK_CANCEL;
+ break;
+ case CAM_REC_STOP_ASM:
+ break;
+ case CAM_REC_STOP_MAX_SIZE:
+ break;
+ case CAM_REC_STOP_TIME_LIMIT:
+ break;
+ case CAM_REC_STOP_NO_SPACE:
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_VIDEOMEMORYFULL"),
+ cam_app_popup_response_cb);
+ break;
+ case CAM_REC_STOP_USB_CONN:
+ break;
+ case CAM_REC_STOP_POWER_KEY:
+ power_unlock_state(POWER_STATE_NORMAL);
+ break;
+ default:
+ break;
+ }
+ camapp->rec_stop_type = CAM_REC_STOP_UNEXPECTED;
+
+ return ECORE_CALLBACK_CANCEL;
+}
diff --git a/src/cam_sound.c b/src/cam_sound.c
new file mode 100755
index 0000000..26d4cfa
--- /dev/null
+++ b/src/cam_sound.c
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <sound_manager.h>
+#include <wav_player.h>
+#include <pthread.h>
+#include <vconf.h>
+#include <errno.h>
+#include <sys/time.h>
+#include "cam.h"
+#include "cam_sound.h"
+/*
+#include "cam_sound_private.h"
+*/
+#include "cam_debug.h"
+#include "cam_ta.h"
+#include "cam_mm.h"
+
+#define SOUND_TIMEOUT_SEC 2
+
+static gchar **sound_files = NULL;
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+pthread_mutex_t sound_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t sound_cond = PTHREAD_COND_INITIALIZER;
+#endif
+
+static void cam_sound_callback(int id, void *data);
+
+gboolean cam_sound_init(GError **error)
+{
+ debug_fenter(LOG_UI);
+
+ if (!sound_files) {
+ sound_files = g_new0(gchar *, CAM_SOUND_EFFECT_NUM);
+ g_return_val_if_fail(sound_files, FALSE);
+
+ int i;
+ for (i = 0; i < CAM_SOUND_EFFECT_NUM; i++)
+ sound_files[i] = NULL;
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ cam_sound_set(CAM_SOUND_EFFECT_SHUTTER1, SOUND_PATH "/Shutter_01.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_SHUTTER2, SOUND_PATH "/Shutter_02.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_SHUTTER3, SOUND_PATH "/Shutter_03.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_REC_START1, SOUND_PATH "/cam_start_01.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_REC_START2, SOUND_PATH "/cam_start_02.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_REC_START3, SOUND_PATH "/cam_start_03.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_REC_COMMIT1, SOUND_PATH "/cam_stop_01.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_REC_COMMIT2, SOUND_PATH "/cam_stop_02.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_REC_COMMIT3, SOUND_PATH "/cam_stop_03.wav");
+#endif
+ cam_sound_set(CAM_SOUND_EFFECT_TICK, SOUND_PATH "/count.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_AF_OK, SOUND_PATH "/af_ok.wav");
+ cam_sound_set(CAM_SOUND_EFFECT_AF_FAIL, SOUND_PATH "/af_fail.wav");
+
+ }
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ pthread_mutex_init(&sound_lock, NULL);
+ pthread_cond_init(&sound_cond, NULL);
+#endif
+ return TRUE;
+}
+
+void cam_sound_finalize(void)
+{
+ debug_fenter(LOG_UI);
+
+ if (sound_files) {
+ int i;
+ for (i = 0; i < CAM_SOUND_EFFECT_NUM; i++) {
+ if (sound_files[i]) {
+ g_free(sound_files[i]);
+ sound_files[i] = NULL;
+ }
+ }
+ g_free(sound_files);
+ sound_files = NULL;
+ }
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ pthread_mutex_destroy(&sound_lock);
+ pthread_cond_destroy(&sound_cond);
+#endif
+}
+
+void cam_sound_set(int index, const gchar *file)
+{
+ debug_msg(LOG_UI, "%d:%s", index, file ? file : "NULL");
+ g_return_if_fail(sound_files);
+ if (sound_files[index]) {
+ g_free(sound_files[index]);
+ sound_files[index] = NULL;
+ }
+ if (file)
+ sound_files[index] = g_strdup(file);
+}
+
+const gchar *cam_sound_get(int index)
+{
+ debug_fenter(LOG_UI);
+ g_return_val_if_fail(sound_files, NULL);
+ return sound_files[index];
+}
+
+gboolean cam_sound_is_silent_mode(void)
+{
+ int sound_on = -1;
+ if (!vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_on)) {
+ if (sound_on == FALSE) {
+ cam_debug(LOG_SND, "sound off mode ");
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+gboolean cam_sound_set_mic()
+{
+ int ret = SOUND_MANAGER_ERROR_NONE;
+ bool is_available = FALSE;
+ sound_route_e route_to_active = SOUND_ROUTE_IN_MIC;
+
+ /* Check if earphone mic is available */
+ is_available = sound_manager_is_route_available(SOUND_ROUTE_IN_WIRED_ACCESSORY);
+
+ /* If earphone mic is available, use earphone mic, otherwise use phone mic */
+ route_to_active = (is_available)? SOUND_ROUTE_IN_WIRED_ACCESSORY : SOUND_ROUTE_IN_MIC;
+ cam_debug(LOG_SND, "sound route is [%d]", route_to_active);
+
+ ret = sound_manager_set_active_route(route_to_active);
+ if (ret != SOUND_MANAGER_ERROR_NONE) {
+ cam_critical(LOG_SND, "sound_manager_set_active_route [%d]) failed", route_to_active);
+ }
+
+ return ret;
+}
+
+static void cam_sound_callback(int id, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ cam_debug(LOG_MM, "release cond");
+
+ /*We can not set value to sond_cond.
+ Bacause it can be assigned PTHREAD_COND_INITIALIZER only.
+ PTHREAD_COND_INITIALIZER is the MECRO of pthread.
+ So We use the sound_files, When the sound_cond is destroied, this value set to NULL.
+ */
+ if (sound_files)
+ pthread_cond_broadcast(&sound_cond);
+
+ ad->play_rec_sound--;
+ DEBUG_TRACE("ad->play_rec_sound=%d", ad->play_rec_sound);
+#endif
+ return;
+}
+
+gboolean cam_sound_play(int index, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+#ifdef CAMERA_MACHINE_I686
+ return TRUE;
+#endif
+ int step = 0, handle = 0;
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ gboolean sync = FALSE;
+ struct timespec timeout;
+ struct timeval tv;
+#endif
+
+ g_return_val_if_fail(sound_files, FALSE);
+ g_return_val_if_fail(index >= 0 && index < CAM_SOUND_EFFECT_NUM, FALSE);
+
+ debug_msg(LOG_UI, "%s", sound_files[index]);
+
+ if (!sound_files[index]) {
+ return FALSE;
+ }
+
+ if (cam_sound_is_silent_mode()) {
+ warn_msg(LOG_SND, "Silent mode now");
+ return FALSE;
+ }
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ if (index == CAM_SOUND_EFFECT_REC_START1
+ || index == CAM_SOUND_EFFECT_REC_START2
+ || index == CAM_SOUND_EFFECT_REC_START3 || FALSE) {
+ sync = TRUE;
+ }
+#endif
+
+ cam_debug(LOG_MM, " Volume step : %d", step);
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+
+ if (EBUSY == pthread_mutex_trylock(&sound_lock)) {
+ cam_critical(LOG_SND,
+ "another effect sound is playing, try later");
+ return FALSE;
+ }
+#endif
+
+ if (WAV_PLAYER_ERROR_NONE ==
+ wav_player_start(sound_files[index], SOUND_TYPE_MEDIA, cam_sound_callback, ad, &handle)) {
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ ad->play_rec_sound++;
+ DEBUG_TRACE("ad->play_rec_sound=%d", ad->play_rec_sound);
+ if (sync) {
+ gettimeofday(&tv, NULL);
+ timeout.tv_sec = tv.tv_sec + SOUND_TIMEOUT_SEC;
+ timeout.tv_nsec = tv.tv_usec;
+ if (ETIMEDOUT ==
+ pthread_cond_timedwait(&sound_cond, &sound_lock,
+ &timeout)) {
+ if (handle > 0) {
+ if (WAV_PLAYER_ERROR_NONE != wav_player_stop(handle) {
+ cam_critical(LOG_SND, "sound play failed");
+ }
+ }
+ }
+ }
+#endif
+ } else {
+ cam_critical(LOG_SND, "effect sound play failed");
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ pthread_mutex_unlock(&sound_lock);
+#endif
+ return FALSE;
+ }
+#ifdef USE_CAMERA_APP_SHUTTER_SOUND
+ pthread_mutex_unlock(&sound_lock);
+#endif
+ return TRUE;
+}
diff --git a/src/cam_ta.c b/src/cam_ta.c
new file mode 100755
index 0000000..9f89f11
--- /dev/null
+++ b/src/cam_ta.c
@@ -0,0 +1,620 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef _CAM_TA_C_
+#define _CAM_TA_C_
+
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h> /* time, ctime */
+#include <sys/time.h> /* gettimeofday */
+#include <sys/utsname.h>
+#include <sys/resource.h>
+#include <unistd.h>
+#include <stdarg.h>
+
+#include "cam_ta.h"
+
+/* internal func. */
+static void __free_cps(void);
+static int __get_cp_index(char *name);
+
+static void __free_accums(void);
+static int __get_accum_index(char *name);
+
+/* global var. */
+cam_ta_checkpoint **cam_g_cps = NULL;
+static int cam_g_cp_index = 0;
+
+cam_ta_accum_item **cam_g_accums = NULL;
+static int cam_g_accum_index = 0;
+static int cam_g_accum_longest_name = 0;
+static unsigned long cam_g_accum_first_time = 0xFFFFFFFF; /* jmlee */
+static int cam_g_enable = 0;
+
+int cam_ta_init(void)
+{
+ if (cam_g_accums)
+ return 0;
+
+ cam_g_cps =
+ (cam_ta_checkpoint **) malloc(CAM_TA_MAX_CHECKPOINT *
+ sizeof(cam_ta_checkpoint *));
+ if (!cam_g_cps)
+ return -1;
+
+ cam_g_accums =
+ (cam_ta_accum_item **) malloc(CAM_TA_MAX_CHECKPOINT *
+ sizeof(cam_ta_accum_item *));
+ if (!cam_g_accums)
+ return -1;
+
+ cam_g_accum_first_time = 0xFFFFFFFF;
+
+ return 0;
+}
+
+int cam_ta_release(void)
+{
+ if (!cam_g_accums)
+ return 0;
+
+ __free_cps();
+ __free_accums();
+
+ cam_g_accum_first_time = 0xFFFFFFFF;
+
+ return 0;
+}
+
+void cam_ta_set_enable(int enable)
+{
+ printf("CAM_TA : setting enable to %d\n", enable);
+ cam_g_enable = enable;
+}
+
+int cam_ta_get_numof_checkpoints()
+{
+ return cam_g_cp_index;
+}
+
+char *cam_ta_fmt(const char *fmt, ...)
+{
+ static char ta_buf[512];
+ va_list args;
+
+ memset(ta_buf, '\0', 512);
+
+ va_start(args, fmt);
+ vsnprintf(ta_buf, 512, fmt, args);
+ va_end(args);
+
+ return ta_buf;
+}
+
+int cam_ta_add_checkpoint(char *name, int show, char *filename, int line)
+{
+ cam_ta_checkpoint *cp = NULL;
+ struct timeval t;
+
+ if (!cam_g_enable)
+ return -1;
+
+ if (!cam_g_accums)
+ return 0;
+
+ if (cam_g_cp_index == CAM_TA_MAX_CHECKPOINT)
+ return -1;
+
+ if (!name)
+ return -1;
+
+ if (strlen(name) == 0)
+ return -1;
+
+ cp = (cam_ta_checkpoint *) malloc(sizeof(cam_ta_checkpoint));
+ if (!cp)
+ return -1;
+
+ cp->name = (char *)malloc(strlen(name) + 1);
+ if (!cp->name) {
+ free(cp);
+ return -1;
+ }
+ strncpy(cp->name, name, strlen(name));
+
+ if (show)
+ printf("[CHECK-POINT] %s...(%s:%d)\n", name, filename, line);
+
+ gettimeofday(&t, NULL);
+ cp->timestamp = t.tv_sec * 1000000L + t.tv_usec;
+#ifdef CAM_TA_UNIT_MSEC
+ cp->timestamp = (cp->timestamp >= 1000) ? cp->timestamp / 1000 : 0;
+#endif
+
+ cam_g_cps[cam_g_cp_index] = cp;
+
+ cam_g_cp_index++;
+
+ return 0;
+}
+
+void cam_ta_show_checkpoints(void)
+{
+ int i = 0;
+
+ if (!cam_g_accums)
+ return;
+
+ printf("BEGIN RESULT ============================\n");
+ for (i = 0; i < cam_g_cp_index; i++) {
+ printf("[%d] %s : %ld us.\n", i, cam_g_cps[i]->name,
+ cam_g_cps[i]->timestamp);
+ }
+ printf("END RESULT ============================\n");
+}
+
+void cam_ta_show_diff(char *name1, char *name2)
+{
+ if (!cam_g_accums)
+ return;
+
+ printf("Time takes from [%s] to [%s] : %ld us.\n", name1, name2,
+ cam_ta_get_diff(name1, name2));
+}
+
+unsigned long cam_ta_get_diff(char *name1, char *name2)
+{
+ int cp1, cp2;
+
+ if (!cam_g_accums)
+ return 0;
+
+ /* fail if bad param. */
+ if (!name1 || !name2)
+ return -1;
+
+ /* fail if same. */
+ if (strcmp(name1, name2) == 0)
+ return -1;
+
+ /* get index */
+ if ((cp1 = __get_cp_index(name1)) == -1)
+ return -1;
+
+ if ((cp2 = __get_cp_index(name2)) == -1)
+ return -1;
+
+ /* NOTE :
+ return value must be positive value.
+ bcz the value of higher index of cam_g_cps always higher than lower one.
+ */
+ return cam_g_cps[cp2]->timestamp - cam_g_cps[cp1]->timestamp;
+
+}
+
+static int __get_cp_index(char *name)
+{
+ int i;
+
+ assert(name);
+
+ /* find index */
+ for (i = 0; i < cam_g_cp_index; i++) {
+ if (strcmp(name, cam_g_cps[i]->name) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+static int __get_accum_index(char *name)
+{
+ int i;
+
+ assert(name);
+
+ /* find index */
+ for (i = 0; i < cam_g_accum_index; i++) {
+ if (strcmp(name, cam_g_accums[i]->name) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+static void __free_cps(void)
+{
+ int i = 0;
+
+ if (!cam_g_cps)
+ return;
+
+ for (i = 0; i < cam_g_cp_index; i++) {
+ if (cam_g_cps[i]) {
+ if (cam_g_cps[i]->name)
+ free(cam_g_cps[i]->name);
+
+ free(cam_g_cps[i]);
+
+ cam_g_cps[i] = NULL;
+ }
+ }
+
+ free(cam_g_cps);
+ cam_g_cps = NULL;
+
+ cam_g_cp_index = 0;
+}
+
+static void __free_accums(void)
+{
+ int i = 0;
+
+ if (!cam_g_accums)
+ return;
+
+ for (i = 0; i < cam_g_accum_index; i++) {
+ if (cam_g_accums[i]) {
+ if (cam_g_accums[i]->name)
+ free(cam_g_accums[i]->name);
+
+ free(cam_g_accums[i]);
+
+ cam_g_accums[i] = NULL;
+ }
+ }
+
+ cam_g_accum_index = 0;
+ cam_g_accum_longest_name = 0;
+
+ free(cam_g_accums);
+ cam_g_accums = NULL;
+}
+
+int cam_ta_accum_item_begin(char *name, int show, char *filename, int line)
+{
+ cam_ta_accum_item *accum = NULL;
+ int index = 0;
+ int name_len = 0;
+ struct timeval t;
+
+ if (!cam_g_enable)
+ return -1;
+
+ if (!cam_g_accums)
+ return 0;
+
+ if (cam_g_accum_index == CAM_TA_MAX_ACCUM)
+ return -1;
+
+ if (!name)
+ return -1;
+
+ name_len = strlen(name);
+ if (name_len == 0)
+ return -1;
+
+ /* if 'name' is new one. create new item. */
+ if ((index = __get_accum_index(name)) == -1) {
+ accum = (cam_ta_accum_item *) malloc(sizeof(cam_ta_accum_item));
+ if (!accum)
+ return -1;
+
+ /* clear first. */
+ memset(accum, 0, sizeof(cam_ta_accum_item));
+ accum->elapsed_min = 0xFFFFFFFF;
+
+ accum->name = (char *)malloc(name_len + 1);
+ if (!accum->name) {
+ free(accum);
+ accum = NULL;
+ return -1;
+ }
+ memset(accum->name, 0, name_len+1);
+ strncpy(accum->name, name, name_len);
+
+ /* add it to list. */
+ cam_g_accums[cam_g_accum_index] = accum;
+ cam_g_accum_index++;
+
+ if (cam_g_accum_longest_name < name_len)
+ cam_g_accum_longest_name = name_len;
+
+ } else {
+ accum = cam_g_accums[index];
+ }
+
+ /* verify pairs of begin, end. */
+ if (accum->on_estimate) {
+ printf("[%s] is not 'end'ed!\n", accum->name);
+ accum->num_unpair++;
+ return -1;
+ }
+ /* get timestamp */
+ gettimeofday(&t, NULL);
+ accum->timestamp = t.tv_sec * 1000000L + t.tv_usec;
+#ifdef CAM_TA_UNIT_MSEC
+ accum->timestamp =
+ (accum->timestamp >= 1000) ? accum->timestamp / 1000 : 0;
+#endif
+ accum->on_estimate = 1;
+
+ if (accum->first_start == 0) { /* assum that timestamp never could be zero. */
+ accum->first_start = accum->timestamp;
+
+ if (cam_g_accum_first_time > accum->first_start)
+ cam_g_accum_first_time = accum->first_start;
+ }
+
+ if (show)
+ printf("[ACCUM BEGIN] %s : %ld ---(%s:%d)\n", name,
+ accum->timestamp, filename, line);
+
+ accum->num_calls++;
+
+ return 0;
+}
+
+int cam_ta_accum_item_end(char *name, int show, char *filename, int line)
+{
+ cam_ta_accum_item *accum = NULL;
+ long int tval = 0;
+ int index = 0;
+ struct timeval t;
+
+ if (!cam_g_enable)
+ return -1;
+
+ if (!cam_g_accums)
+ return 0;
+
+ /* get time first for more accuracy. */
+ gettimeofday(&t, NULL);
+
+ if (cam_g_accum_index == CAM_TA_MAX_ACCUM)
+ return -1;
+
+ if (!name)
+ return -1;
+
+ if (strlen(name) == 0)
+ return -1;
+
+ /* varify the 'name' is already exist. */
+ if ((index = __get_accum_index(name)) == -1) {
+ /* printf("[%s] is not added before!\n", name); */
+ return -1;
+ }
+
+ accum = cam_g_accums[index];
+
+ /* verify pairs of begin, end. */
+ if (!accum->on_estimate) {
+ printf("[%s] is not 'begin' yet!\n", accum->name);
+ accum->num_unpair++;
+ return -1;
+ }
+ /* get current timestamp. */
+ tval = t.tv_sec * 1000000L + t.tv_usec;
+#ifdef CAM_TA_UNIT_MSEC
+ tval = (tval >= 1000) ? tval / 1000 : 0;
+#endif
+
+ /* update last_end */
+ accum->last_end = tval;
+
+ /* make get elapsed time. */
+ tval = tval - accum->timestamp;
+
+ /* update min/max */
+ accum->elapsed_max =
+ tval > accum->elapsed_max ? tval : accum->elapsed_max;
+ accum->elapsed_min =
+ tval < accum->elapsed_min ? tval : accum->elapsed_min;
+
+ if (show)
+ printf("[ACCUM END] %s : %ld + %ld ---(%s:%d)\n", name,
+ accum->elapsed_accum, tval, filename, line);
+
+ /* add elapsed time */
+ accum->elapsed_accum += tval;
+ accum->on_estimate = 0;
+
+ return 0;
+}
+
+void __print_some_info(FILE *fp)
+{
+ if (!fp)
+ return;
+
+ /* comment */
+ {
+ fprintf(fp, "\nb~ b~ b~\n\n");
+ }
+
+ /* General infomation */
+ {
+ time_t t_val;
+ char hostname[256] = { '\0', };
+ struct utsname uts;
+ struct rusage r_usage;
+
+ fprintf(fp, "\n[[ General info ]]\n");
+
+ /* time and date */
+ time(&t_val);
+ fprintf(fp, "Date : %s", ctime(&t_val));
+
+ /* system */
+ if (gethostname(hostname, 255) == 0 && uname(&uts) >= 0) {
+ fprintf(fp, "Hostname : %s\n", hostname);
+ fprintf(fp, "System : %s\n", uts.sysname);
+ fprintf(fp, "Machine : %s\n", uts.machine);
+ fprintf(fp, "Nodename : %s\n", uts.nodename);
+ fprintf(fp, "Release : %s \n", uts.release);
+ fprintf(fp, "Version : %s \n", uts.version);
+ }
+ /* process info. */
+ fprintf(fp, "Process priority : %d\n",
+ getpriority(PRIO_PROCESS, getpid()));
+ getrusage(RUSAGE_SELF, &r_usage);
+ fprintf(fp,
+ "CPU usage : User = %ld.%06ld, System = %ld.%06ld\n",
+ r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec,
+ r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec);
+
+ }
+
+ /* host environment variables */
+ {
+ extern char **environ;
+ char **env = environ;
+
+ fprintf(fp, "\n[[ Host environment variables ]]\n");
+ while (*env) {
+ fprintf(fp, "%s\n", *env);
+ env++;
+ }
+ }
+
+ /* applied samsung feature */
+ {
+#if 0
+ fprintf(fp, "\n[[ Applied samsung feature ]]\n");
+#ifdef GST_EXT_TIME_ANALYSIS
+ fprintf(fp, "GST_EXT_TIME_ANALYSIS\n");
+#endif
+#ifdef GST_EXT_SKIP_RESCAN_REGISTRY
+ fprintf(fp, "GST_EXT_SKIP_RESCAN_REGISTRY\n");
+#endif
+#ifdef GST_EXT_USE_TINY_REGISTRY
+
+ fprintf(fp, "GST_EXT_USE_TINY_REGISTRY\n");
+#endif
+#ifdef GST_EXT_PAD_LINK_UNCHECKED
+ fprintf(fp, "GST_EXT_PAD_LINK_UNCHECKED\n");
+#endif
+#ifdef GST_EXT_DFBVIDEOSINK_IPP
+ fprintf(fp, "GST_EXT_DFBVIDEOSINK_IPP\n");
+#endif
+#ifdef GST_EXT_REDUCE_PLUGIN_NUM
+ fprintf(fp, "GST_EXT_REDUCE_PLUGIN_NUM\n");
+#endif
+#ifdef GST_EXT_USE_PDP_NETWORK
+ fprintf(fp, "GST_EXT_USE_PDP_NETWORK\n");
+#endif
+#ifdef GST_EXT_VOLUME_WITHOUT_LIBOIL
+ fprintf(fp, "GST_EXT_VOLUME_WITHOUT_LIBOIL\n");
+#endif
+#ifdef GST_EXT_DECODEBIN_QUEUE_ENLARGE
+ fprintf(fp, "GST_EXT_DECODEBIN_QUEUE_ENLARGE\n");
+#endif
+
+ /* Camcorder releated feature */
+
+#ifdef GST_EXT_NONBLOCKDQUE
+ fprintf(fp, "GST_EXT_NONBLOCKDQUE\n");
+#endif
+#ifdef GST_EXT_RENEGOTIATION
+ fprintf(fp, "GST_EXT_RENEGOTIATION\n");
+#endif
+#ifdef GST_EXT_MOBILECAMERA
+ fprintf(fp, "GST_EXT_MOBILECAMERA\n");
+#endif
+#ifdef GST_EXT_VIDEOSCALE_IPP
+ fprintf(fp, "GST_EXT_VIDEOSCALE_IPP\n");
+#endif
+#ifdef GST_EXT_ASYNC_DEV
+ fprintf(fp, "GST_EXT_ASYNC_DEV\n");
+#endif
+#ifdef GST_EXT_AV_RECORDING
+ fprintf(fp, "GST_EXT_AV_RECORDING\n");
+#endif
+#ifdef GST_EXT_SWITCH_CAMERA
+ fprintf(fp, "GST_EXT_SWITCH_CAMERA\n");
+#endif
+
+ fprintf(fp, "\n\n");
+#endif
+ }
+
+}
+
+void cam_ta_accum_show_result(int direction)
+{
+ int i = 0;
+ char format[256];
+ FILE *fp = stderr;
+
+ if (!cam_g_accums)
+ return;
+
+ switch (direction) {
+ case CAM_TA_SHOW_STDOUT:
+ fp = stdout;
+ break;
+ case CAM_TA_SHOW_STDERR:
+ fp = stderr;
+ break;
+ case CAM_TA_SHOW_FILE:
+ {
+ fp = fopen(CAM_TA_RESULT_FILE, "wt");
+ if (!fp)
+ return;
+ }
+ }
+ __print_some_info(fp);
+
+#ifdef CAM_TA_UNIT_MSEC
+ snprintf(format, sizeof(format),
+ "[%%3d] %%-%ds | \ttotal : %%4ld\tcalls : %%3ld\tavg : %%4ld\tmin : %%4ld\tmax : %%4ld\tstart : %%4lu\tend : %%4lu\tunpair : %%3ld\n",
+ cam_g_accum_longest_name);
+ fprintf(fp,
+ "BEGIN RESULT ACCUM============================ : NumOfItems : %d, unit(msec)\n",
+ cam_g_accum_index);
+#else
+ snprintf(format, sizeof(format),
+ "[%%3d] %%-%ds | \ttotal : %%ld\tcalls : %%ld\tavg : %%ld\tmin : %%ld\tmax : %%ld\tstart : %%lu\tend : %%lu\tunpair : %%ld\n",
+ cam_g_accum_longest_name);
+ fprintf(fp,
+ "BEGIN RESULT ACCUM============================ : NumOfItems : %d, unit(usec)\n",
+ cam_g_accum_index);
+#endif
+
+ for (i = 0; i < cam_g_accum_index; i++) {
+ /* prevent 'devide by zero' error */
+ if (cam_g_accums[i]->num_calls == 0)
+ cam_g_accums[i]->num_calls = 1;
+
+ fprintf(fp, format, i, cam_g_accums[i]->name, cam_g_accums[i]->elapsed_accum, cam_g_accums[i]->num_calls, (cam_g_accums[i]->elapsed_accum == 0) ? 0 : (int)(cam_g_accums[i]->elapsed_accum / cam_g_accums[i]->num_calls), /* Fix it! : devide by zero. */
+ cam_g_accums[i]->elapsed_min,
+ cam_g_accums[i]->elapsed_max,
+ cam_g_accums[i]->first_start - cam_g_accum_first_time,
+ cam_g_accums[i]->last_end - cam_g_accum_first_time,
+ cam_g_accums[i]->num_unpair);
+ }
+ fprintf(fp, "END RESULT ACCUM ============================\n");
+
+ if (direction == CAM_TA_SHOW_FILE)
+ fclose(fp);
+}
+
+#endif /* _CAM_TA_C_ */
diff --git a/src/cam_typeconverter.cpp b/src/cam_typeconverter.cpp
new file mode 100644
index 0000000..87db0c7
--- /dev/null
+++ b/src/cam_typeconverter.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+extern "C" {
+
+#include "cam_property.h"
+#include "CamTypeConverter.h"
+#include "cam_typeconverter.h"
+
+
+unsigned int cam_iso_dev_convert_caps(camera_attr_iso_e iso)
+{
+ return CCamTypeConverter::CamIsoDevConvertCaps(iso);
+}
+
+ unsigned int cam_iso_cam_convert_caps(CamIso iso)
+{
+ return CCamTypeConverter::CamIsoCamConvertCaps(iso);
+}
+
+unsigned int cam_effect_dev_convert_caps(camera_attr_effect_mode_e effect)
+{
+ return CCamTypeConverter::CamEffectDevConvertCaps(effect);
+}
+
+unsigned int cam_effect_cam_convert_caps(CamSettingsEffects effect)
+{
+ return CCamTypeConverter::CamEffectCamConvertCaps(effect);
+}
+
+
+unsigned int cam_fps_dev_convert_caps(camera_attr_fps_e fps)
+{
+ return CCamTypeConverter::CamFpsDevConvertCaps(fps);
+}
+
+unsigned int cam_wb_dev_convert_caps(camera_attr_whitebalance_e wb)
+{
+ return CCamTypeConverter::CamWbDevConvertCaps(wb);
+}
+
+unsigned int cam_wb_cam_convert_caps(CamSettingsWB wb)
+{
+ return CCamTypeConverter::CamWbCamConvertCaps(wb);
+}
+
+
+unsigned int cam_focus_dev_convert_caps(camera_attr_af_mode_e focus)
+{
+ return CCamTypeConverter::CamFocusDevConvertCaps(focus);
+}
+
+unsigned int cam_focus_cam_convert_caps(CamFocusMode focus)
+{
+ return CCamTypeConverter::CamFocusCamConvertCaps(focus);
+}
+
+unsigned int cam_metering_dev_convert_caps(camera_attr_exposure_mode_e metering)
+{
+ return CCamTypeConverter::CamMeteringDevConvertCaps(metering);
+}
+
+unsigned int cam_metering_cam_convert_caps(CamMetering type)
+{
+ return CCamTypeConverter::CamMeteringCamConvertCaps(type);
+}
+
+unsigned int cam_scene_dev_convert_caps(camera_attr_scene_mode_e scene)
+{
+ return CCamTypeConverter::CamSceneDevConvertCaps(scene);
+}
+
+unsigned int cam_scene_cam_convert_caps(CamSceneMode scene)
+{
+ return CCamTypeConverter::CamSceneCamConvertCaps(scene);
+}
+
+unsigned int cam_flash_dev_convert_caps(camera_attr_flash_mode_e flash)
+{
+ return CCamTypeConverter::CamFlashDevConvertCaps(flash);
+}
+
+unsigned int cam_flash_cam_convert_caps(CamFlashMode flash)
+{
+ return CCamTypeConverter::CamFlashCamConvertCaps(flash);
+}
+
+unsigned int cam_resolution_cam_convert_caps(unsigned int res)
+{
+ return CCamTypeConverter::CamResolutionCamConvertCaps(res);
+}
+
+}
+
+
diff --git a/src/cam_ui_effect_utils.c b/src/cam_ui_effect_utils.c
new file mode 100755
index 0000000..1136511
--- /dev/null
+++ b/src/cam_ui_effect_utils.c
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_ui_effect_utils.h"
+static gboolean __focus_zoom_origin_state = TRUE;
+static Elm_Transit *zoom_transit_effect = NULL;
+
+gboolean cam_ui_effect_utils_get_zoom_state()
+{
+ return __focus_zoom_origin_state;
+}
+
+static void __zoom_effect_transit_del_cb(void *data, Elm_Transit *transit)
+{
+ DEBUG_TRACE("TODO: set default transit callback process");
+ zoom_transit_effect = NULL;
+}
+
+/*
+* note: it is for cam_ui_effect_utils_set_zoom_effect
+* and now: there will be always one zoom effect running for
+* cam_ui_effect_utils_set_zoom_effect at same time.
+*/
+
+Elm_Transit * cam_ui_effect_utils_get_zoom_effect()
+{
+ return zoom_transit_effect;
+}
+
+void cam_ui_effect_utils_stop_zoom_effect()
+{
+ if (zoom_transit_effect) {
+ elm_transit_del(zoom_transit_effect);
+ zoom_transit_effect = NULL;
+ }
+}
+
+void cam_ui_effect_utils_set_zoom_effect(Evas_Object *obj, float from_rate, float to_rate, double duration)
+{
+ Evas_Object *layout = obj;
+
+ if (layout == NULL)
+ return;
+ /*Zoom in/out to scale to_rate/from_rate.*/
+ if (zoom_transit_effect) {
+ elm_transit_del(zoom_transit_effect);
+ zoom_transit_effect = NULL;
+ }
+ zoom_transit_effect = elm_transit_add();
+ if (zoom_transit_effect == NULL)
+ return;
+ if (to_rate < from_rate)
+ __focus_zoom_origin_state = TRUE;
+ else
+ __focus_zoom_origin_state = FALSE;
+ elm_transit_object_add(zoom_transit_effect, layout);
+ elm_transit_effect_zoom_add(zoom_transit_effect, from_rate, to_rate);
+ elm_transit_duration_set(zoom_transit_effect, duration);
+ elm_transit_objects_final_state_keep_set(zoom_transit_effect, EINA_TRUE);
+ elm_transit_del_cb_set(zoom_transit_effect, __zoom_effect_transit_del_cb, NULL);
+ elm_transit_go(zoom_transit_effect);
+
+}
+
+void cam_ui_effect_utils_set_zoom_inout_effect(Evas_Object *obj, float from_rate, float to_rate, double duration)
+{
+ Evas_Object *layout = obj;
+
+ if (layout == NULL)
+ return;
+ /*Zoom out to scale */
+ Elm_Transit *transit = elm_transit_add();
+ elm_transit_object_add(transit, layout);
+ elm_transit_effect_zoom_add(transit, from_rate, to_rate);
+ elm_transit_duration_set(transit, duration);
+
+ /*Zoom in to be original size.*/
+ Elm_Transit *transit2 = elm_transit_add();
+ elm_transit_object_add(transit2, layout);
+ elm_transit_effect_zoom_add(transit2, to_rate, from_rate);
+ elm_transit_duration_set(transit2, duration);
+
+ elm_transit_chain_transit_add(transit, transit2);
+ elm_transit_go(transit);
+
+}
+
+
+/*for thumnail animation start*/
+/*note: init custom effect memory*/
+static Elm_Transit_Effect * __cam_ui_effect_custom_context_new(Evas_Coord from_w,
+ Evas_Coord from_h,
+ Evas_Coord to_w,
+ Evas_Coord to_h
+ )
+{
+ struct cam_ui_effect_custom_effect *custom_effect = calloc( 1, sizeof( struct cam_ui_effect_custom_effect ) );
+ if (!custom_effect) return NULL;
+
+ custom_effect->from.w = from_w;
+ custom_effect->from.h = from_h;
+ custom_effect->to.w = to_w - from_w;
+ custom_effect->to.h = to_h - from_h;
+ return custom_effect;
+}
+
+/*note: free custom effect memory*/
+static void __cam_ui_effect_custom_context_free(Elm_Transit_Effect *effect, Elm_Transit *transit)
+{
+ struct cam_ui_effect_custom_effect *custom_effect = effect;
+ free(custom_effect);
+ custom_effect = NULL;
+}
+
+/*note: implement the effect solution, you could write new effect, by change these function*/
+static void __cam_ui_effect_custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
+{
+ if (!effect) return;
+
+ Evas_Coord w, h;
+ Evas_Object *obj;
+ const Eina_List *elist;
+
+ struct cam_ui_effect_custom_effect *custom_effect = (struct cam_ui_effect_custom_effect *) effect;
+ const Eina_List *objs = elm_transit_objects_get(transit);
+
+ if (progress < 0.5) {
+ h = custom_effect->from.h + (custom_effect->to.h * progress * 2);
+ w = custom_effect->from.w;
+ } else {
+ h = custom_effect->from.h + custom_effect->to.h;
+ w = custom_effect->from.w + (custom_effect->to.w * (progress - 0.5) * 2);
+ }
+ EINA_LIST_FOREACH(objs, elist, obj) {
+ if (obj) {
+ evas_object_resize(obj, w, h);
+ }
+ }
+
+}
+
+/*note: when transit effect end, before transit del, this fuction will be called*/
+static void __cam_ui_effect_utils_transit_del_cb(void *data, Elm_Transit *transit)
+{
+ Evas_Object *obj = (Evas_Object *)data;
+ DEBUG_TRACE("");
+ if (obj) {
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ if (!ad)
+ return;
+ if (!ad->toolbar.quickview_item.edje) {
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
+ DEL_EVAS_OBJECT(obj);
+ return;
+ }
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
+ ad->toolbar.quickview_item.thumbnail_image = obj;
+ elm_object_part_content_set(ad->toolbar.quickview_item.edje,
+ "thumbnail", ad->toolbar.quickview_item.thumbnail_image);
+ }
+}
+
+void cam_ui_effect_utils_set_thumbnail_effect(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y,
+ Evas_Coord w,
+ Evas_Coord h,
+ double duration)
+{
+ Evas_Object *layout = obj;
+ Elm_Transit_Effect *effect_context = __cam_ui_effect_custom_context_new(0, h, w, h);
+
+ Elm_Transit *transit = elm_transit_add();
+ elm_transit_object_add(transit, layout);
+ elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_LINEAR);
+ elm_transit_effect_add(transit, __cam_ui_effect_custom_op, effect_context, __cam_ui_effect_custom_context_free);
+
+ elm_transit_objects_final_state_keep_set(transit, TRUE);
+ elm_transit_duration_set(transit, duration);
+ elm_transit_del_cb_set(transit, __cam_ui_effect_utils_transit_del_cb, (void *)obj);
+ elm_transit_go(transit);
+}
+/*for thumbnail antimation end*/
+//end file
diff --git a/src/cam_ui_rotate_utils.c b/src/cam_ui_rotate_utils.c
new file mode 100755
index 0000000..7f11072
--- /dev/null
+++ b/src/cam_ui_rotate_utils.c
@@ -0,0 +1,589 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_ui_rotate_utils.h"
+#include "cam_toolbar_edc_callback.h"
+#include "cam_mm.h"
+static void __cam_ui_rotate_utils_rotation_del_cb(void *data, Elm_Transit *transit)
+{
+ DEBUG_TRACE("rotate transition will be deleted");
+}
+
+static Ecore_Idler *__cam_ui_rotate_utils_idler = NULL;
+static Eina_Bool __cam_ui_rotate_utils_obj_rotation_idler_cb(void *data)
+{
+ if (__cam_ui_rotate_utils_idler) {
+ ecore_idler_del(__cam_ui_rotate_utils_idler);
+ __cam_ui_rotate_utils_idler = NULL;
+ }
+
+ struct cam_ui_rotate_obj_params *rotate_obj_params = (struct cam_ui_rotate_obj_params *)data;
+ if (!rotate_obj_params)
+ return ECORE_CALLBACK_CANCEL;
+ if (!rotate_obj_params->obj)
+ return ECORE_CALLBACK_CANCEL;
+
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ Evas_Object *obj = rotate_obj_params->obj;
+
+ ////TODO:add a function, to unset popup
+ Evas_Coord x, y, w, h;
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ static int repeat_count = 0;
+ if (w == 0 || h == 0) {
+ if (repeat_count++ == 10) {
+ repeat_count = 0;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ DEBUG_TRACE("repeat_count = %d", repeat_count);
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ elm_object_part_content_unset(ad->toolbar_edje, "camera/setting/popup/area/toolbar");
+ DEBUG_TRACE("rotate_obj_params->x = %d", rotate_obj_params->x);
+ DEBUG_TRACE("rotate_obj_params->y = %d", rotate_obj_params->y);
+ cam_ui_rotate_utils_map_rotate(obj, rotate_obj_params->x, rotate_obj_params->y, rotate_obj_params->degree);
+ free(rotate_obj_params);
+ rotate_obj_params = NULL;
+
+ edje_object_signal_emit(_EDJ(obj), "set.popup.show", "prog");
+ evas_object_raise(obj);
+ evas_object_show(obj);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void cam_ui_rotate_utils_map_setting_popup_rotate(Evas_Object *obj,
+ Evas_Coord start_x,
+ Evas_Coord start_y,
+ double degree)
+{
+ DEBUG_TRACE("degree = %f", degree);
+ struct cam_ui_rotate_obj_params *rotate_obj_params = calloc( 1, sizeof( struct cam_ui_rotate_obj_params ) );
+ if (!rotate_obj_params) return;
+ rotate_obj_params->obj = obj;
+ rotate_obj_params->x = start_x;
+ rotate_obj_params->y = start_y;
+ rotate_obj_params->degree = degree;
+ DEBUG_TRACE("rotate_obj_params->x = %d", start_x);
+ DEBUG_TRACE("rotate_obj_params->y = %d", start_y);
+ DEBUG_TRACE("rotate_obj_params->x = %d", start_x);
+ DEBUG_TRACE("rotate_obj_params->degree = %f", degree);
+ if (__cam_ui_rotate_utils_idler) {
+ ecore_idler_del(__cam_ui_rotate_utils_idler);
+ __cam_ui_rotate_utils_idler = NULL;
+
+ }
+ __cam_ui_rotate_utils_idler = ecore_idler_add(__cam_ui_rotate_utils_obj_rotation_idler_cb, (void *)rotate_obj_params);
+}
+
+void cam_ui_rotate_utils_map_rotate(Evas_Object *obj,
+ Evas_Coord start_x,
+ Evas_Coord start_y,
+ double degree)
+{
+ if (!obj) return;
+ Evas_Map *map = NULL;
+ map = evas_map_new(4);
+ if (!map) return;
+
+ Evas_Coord x, y, w, h;
+ float half_w, half_h;
+
+ evas_map_util_points_populate_from_object_full(map, obj, 0);
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ DEBUG_TRACE("obj x, y, w, h:%d %d %d %d", x, y, w, h);
+ DEBUG_TRACE("start x, y, w, h: %d %d %d %d", start_x, start_y, w, h);
+ half_w = (float)w * 0.5;
+ half_h = (float)h * 0.5;
+ evas_map_point_coord_set(map, 0, start_x, start_y, 0);
+ evas_map_point_coord_set(map, 1, start_x + w , start_y, 0);
+ evas_map_point_coord_set(map, 2, start_x + w , start_y + h, 0);
+ evas_map_point_coord_set(map, 3, start_x, start_y + h, 0);
+ evas_map_util_rotate(map, degree, start_x + half_w, start_y + half_h);
+ /*note:foc 2000, just default*/
+ evas_map_util_3d_perspective(map, start_x + half_w, start_y + half_h, 0, 2000);
+ evas_object_map_enable_set(obj, EINA_TRUE);
+ evas_object_map_set(obj, map);
+
+ evas_map_free(map);
+ map = NULL;
+
+}
+
+void cam_ui_rotate_utils_map_self_rotate(Evas_Object *obj,
+ double degree)
+{
+ if (!obj) return;
+ Evas_Map *map = NULL;
+ map = evas_map_new(4);
+ if (!map) return;
+
+ Evas_Coord x, y, w, h;
+ float half_w, half_h;
+
+ evas_map_util_points_populate_from_object_full(map, obj, 0);
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ DEBUG_TRACE("obj x, y, w, h:%d %d %d %d", x, y, w, h);
+ half_w = (float)w * 0.5;
+ half_h = (float)h * 0.5;
+ evas_map_point_coord_set(map, 0, x, y, 0);
+ evas_map_point_coord_set(map, 1, x + w , y, 0);
+ evas_map_point_coord_set(map, 2, x + w , y + h, 0);
+ evas_map_point_coord_set(map, 3, x, y + h, 0);
+ evas_map_util_rotate(map, degree, x + half_w, y + half_h);
+ /*note:foc 2000, just default*/
+ evas_map_util_3d_perspective(map, x + half_w, y + half_h, 0, 2000);
+ evas_object_map_enable_set(obj, EINA_TRUE);
+ evas_object_map_set(obj, map);
+
+ evas_map_free(map);
+ map = NULL;
+
+}
+
+
+void cam_ui_rotate_utils_rotation_effect(Evas_Object *obj,
+ float from_degree,
+ float to_degree,
+ double duration,
+ void (*cb) (void *data, Elm_Transit *transit),
+ void *data)
+{
+ DEBUG_TRACE();
+ Evas_Object *nf = obj;
+ Elm_Transit *transit = elm_transit_add();
+ /*360 degree rotation effect with clock wise direction.*/
+ elm_transit_object_add(transit, nf);
+ elm_transit_effect_rotation_add(transit, from_degree, to_degree);
+ elm_transit_duration_set(transit, duration);
+ if (cb)
+ elm_transit_del_cb_set(transit, cb, data);
+ else
+ elm_transit_del_cb_set(transit, __cam_ui_rotate_utils_rotation_del_cb, data);
+ elm_transit_objects_final_state_keep_set(transit, TRUE);
+ elm_transit_go(transit);
+}
+
+/*note: below is for icon rotate*/
+
+static gboolean cam_ui_rotate_utils_get_clockwise_state(struct appdata *ad)
+{
+ gboolean IsClockwise = FALSE;
+
+ if (ad->rot_previous == APP_DEVICE_ORIENTATION_270) {
+ if (ad->rot_current > ad->rot_previous){
+ IsClockwise = TRUE;
+ } else {
+ IsClockwise = FALSE;
+ }
+ } else {
+ if(ad->rot_current > ad->rot_previous) {
+ IsClockwise = FALSE;
+ } else {
+ IsClockwise = TRUE;
+ }
+ }
+ return IsClockwise;
+
+}
+void cam_ui_rotate_utils_get_rotation_degree(void* data, int* from_degree, int* to_degree)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ int tmp_to_degree = 0;
+ int tmp_from_degree = 0;
+ gboolean IsClockwise = FALSE;
+
+ if (ad->rot_previous == APP_DEVICE_ORIENTATION_270) {
+ if (ad->rot_current > ad->rot_previous){
+ IsClockwise = TRUE;
+ } else {
+ IsClockwise = FALSE;
+ }
+ } else {
+ if(ad->rot_current > ad->rot_previous) {
+ IsClockwise = FALSE;
+ } else {
+ IsClockwise = TRUE;
+ }
+ }
+
+ switch(ad->rot_previous) {
+ case APP_DEVICE_ORIENTATION_270:
+ if(ad->rot_current == APP_DEVICE_ORIENTATION_0) {
+ tmp_from_degree = 360;
+ } else {
+ tmp_from_degree = 0;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_0:
+ tmp_from_degree = 270;
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ tmp_from_degree = 180;
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ tmp_from_degree = 90;
+ break;
+ default:
+ break;
+ }
+
+ switch(ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_270:
+ if( ad->rot_previous == APP_DEVICE_ORIENTATION_0) {
+ tmp_to_degree = 360;
+ } else {
+ tmp_to_degree = 0;
+ }
+ break;
+ case APP_DEVICE_ORIENTATION_0:
+ tmp_to_degree = 270;
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ tmp_to_degree = 180;
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ tmp_to_degree = 90;
+ break;
+ default:
+ break;
+ }
+
+ *from_degree = tmp_from_degree;
+ *to_degree = tmp_to_degree;
+
+ cam_debug(LOG_UI, "from_degree : %d, to_degree : %d ", *from_degree, *to_degree );
+}
+
+
+void cam_ui_rotate_utils_get_rotation_degree_map(void* data, int* degree)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ int tmp_degree = 0;
+
+ gboolean IsClockwise = FALSE;
+
+ if (ad->rot_previous == APP_DEVICE_ORIENTATION_270) {
+ if (ad->rot_current > ad->rot_previous) {
+ IsClockwise = TRUE;
+ } else {
+ IsClockwise = FALSE;
+ }
+ } else {
+ if (ad->rot_current > ad->rot_previous) {
+ IsClockwise = FALSE;
+ } else {
+ IsClockwise = TRUE;
+ }
+ }
+
+ switch(ad->rot_current) {
+ case APP_DEVICE_ORIENTATION_0:
+ tmp_degree = 270;
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ tmp_degree = 90;
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ tmp_degree = 180;
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ tmp_degree = 0;
+ break;
+ default:
+ break;
+ }
+
+ *degree = tmp_degree;
+
+ cam_debug(LOG_UI, "degree : %d", *degree );
+
+}
+
+static void __cam_ui_rotate_utils_focus_coordate_rotate(struct appdata *ad)
+{
+ /*TODO: for animator, we just rotate when popup create*/
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ int af_start_x, af_start_y;
+ af_start_x = af_start_y = 0;
+
+ int x_w, y_h;
+ x_w = y_h = 0;
+ if (ad->angle == 90
+ || ad->angle == 270) {
+ x_w = 1280 * elm_config_scale_get();
+ y_h = 720 * elm_config_scale_get();
+ } else if (ad->angle == 0
+ || ad->angle == 180) {
+ x_w = 720 * elm_config_scale_get();
+ y_h = 1280 * elm_config_scale_get();
+ } else {
+ DEBUG_TRACE("%d", ad->angle_pre);
+ x_w = 1280 * elm_config_scale_get();
+ y_h = 720 * elm_config_scale_get();
+ }
+
+ switch (ad->rotate_angle) {
+ case 0:
+ af_start_x = ad->af_start_x;
+ af_start_y = ad->af_start_y;
+ break;
+ case 90:/*un-clockwise*/
+ af_start_x = ad->af_start_y;
+ af_start_y = y_h - ad->af_start_x;
+ if (ad->angle == 0 || ad->angle == 180) {
+ af_start_y -= ad->camera_focus_w;
+ } else {
+ af_start_y -= ad->camera_focus_h;
+ }
+ break;
+ case -90:
+ af_start_x = x_w - ad->af_start_y;
+ af_start_y = ad->af_start_x;
+ if (ad->angle == 0 || ad->angle == 180) {
+ af_start_x -= ad->camera_focus_h;
+ } else {
+ af_start_x -= ad->camera_focus_w;
+ }
+ break;
+ case 180:
+ case -180:
+ af_start_x = x_w - ad->af_start_x;
+ af_start_y = y_h - ad->af_start_y;
+ if (ad->angle == 0 || ad->angle == 180) {
+ af_start_x -= ad->camera_focus_h;
+ af_start_y -= ad->camera_focus_w;
+ } else {
+ af_start_x -= ad->camera_focus_w;
+ af_start_y -= ad->camera_focus_h;
+ }
+ break;
+ default:
+ DEBUG_TRACE("%d", ad->rotate_angle);
+ }
+
+ ad->af_start_x = af_start_x;
+ ad->af_start_y = af_start_y;
+
+}
+
+static void __cam_ui_rotate_utils_after_rotate_cb(void *data, Elm_Transit *transit)
+{
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ __cam_ui_rotate_utils_focus_coordate_rotate(ad);
+ ad->angle_pre = ad->angle;/*must called after __cam_ui_roate_utils_focus_coordate_rotate*/
+ cam_app_screen_rotate(ad);
+ /*cam_screen_rotate(ad);*/
+}
+
+static void __cam_ui_rotate_utils_after_shortcuts_rotate_cb(void *data, Elm_Transit *transit)
+{
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->toolbar_edje == NULL, "appdata is NULL");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+
+}
+
+gboolean cam_ui_rotate_utils_rotate_start(void *data, double duration)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (ad->toolbar_setting_popup) {
+ ad->show_setting_popup_after_rotate = TRUE;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->setting_ctxpopup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup) {
+ ad->show_edit_shortcuts_popup_after_rotate = TRUE;
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ cam_debug(LOG_UI, "duration : %d", duration);
+
+ ad->is_rotating = TRUE;
+ Elm_Transit* transit= elm_transit_add();
+
+ int from_degree = 0;
+ int to_degree = 0;
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (icon == NULL) {
+ cam_debug(LOG_UI, "toolbar_0_icon is null" );
+ } else {
+ elm_transit_object_add(transit, icon);
+ }
+ }
+
+#if 0 /*TODO: block temporary, good solution should be consider*/
+ if (ad->indicator_edje) {
+ elm_transit_object_add(transit, ad->indicator_edje);
+ }
+
+#endif
+
+ if (ad->focus_edje) {
+ elm_transit_object_add(transit, ad->focus_edje);
+ }
+ if (ad->timer_icon_edje) {
+ elm_transit_object_add(transit, ad->timer_icon_edje);
+ }
+ if (ad->capturebtn_edje) {
+ elm_transit_object_add(transit, ad->capturebtn_edje);
+ }
+ if (ad->shutterbtn_camera_icon) {
+ elm_transit_object_add(transit, ad->shutterbtn_camera_icon);
+ }
+ if (ad->recordingbtn) {
+ elm_transit_object_add(transit, ad->recordingbtn);
+ }
+ if (ad->recording_stop_btn) {
+ elm_transit_object_add(transit, ad->recording_stop_btn);
+ }
+ if (ad->toolbar.quickview_item.edje) {
+ elm_transit_object_add(transit, ad->toolbar.quickview_item.edje);
+ }
+ if (ad->backbtn) {
+ elm_transit_object_add(transit, ad->backbtn);
+ }
+ if (ad->caf_button) {
+ elm_transit_object_add(transit, ad->caf_button);
+ }
+
+/*
+ if (ad->recording_edje
+ && cam_mm_get_state() == RECORDER_STATE_RECORDING)
+ elm_transit_object_add(transit, ad->recording_edje);*/
+ cam_ui_rotate_utils_get_rotation_degree(ad, &from_degree, &to_degree);
+ from_degree = ad->angle_pre;
+ to_degree = ad->angle;
+
+#if 0
+ if ((from_degree == 0 && to_degree == 90)
+ || (from_degree == 90 && to_degree == 180)
+ || (from_degree == 180 && to_degree == 270)
+ || (from_degree == 270 && to_degree == 0)) {
+ from_degree = 0;
+ to_degree = -90;
+ DEBUG_TRACE("CLOCKWISE");
+ } else if ((from_degree == 90 && to_degree == 0)
+ || (from_degree == 180 && to_degree == 90)
+ || (from_degree == 270 && to_degree == 180)
+ || (from_degree == 0 && to_degree == 270)) {
+ from_degree = 0;
+ to_degree = 90;
+ DEBUG_TRACE("UN-CLOCKWISE");
+ }
+#else
+ DEBUG_TRACE("from_degree->to_degree %d->%d", from_degree, to_degree);
+
+ if ((to_degree - from_degree) == 270) {
+ from_degree = 0;
+ to_degree = 90;
+ ad->rotate_angle = 90;
+ } else if ((to_degree - from_degree) == -270) {
+ from_degree = 0;
+ to_degree = -90;
+ ad->rotate_angle = -90;
+ } else {
+ to_degree = (to_degree - from_degree) *(-1);
+ from_degree = 0;
+ ad->rotate_angle = to_degree;
+ }
+ DEBUG_TRACE("from_degree->to_degree %d->%d", from_degree, to_degree);
+#endif
+ cam_debug(LOG_UI, "ad->angle : %d, ad->angle_pre : %d ", ad->angle, ad->angle_pre );
+ gboolean is_clockwise = cam_ui_rotate_utils_get_clockwise_state(ad);
+ cam_debug(LOG_UI, "is_clockwise : %d, ", is_clockwise );
+ elm_transit_effect_rotation_add(transit, from_degree, to_degree);
+ elm_transit_duration_set(transit, duration);
+ elm_transit_del_cb_set(transit, __cam_ui_rotate_utils_after_rotate_cb, data);
+ elm_transit_objects_final_state_keep_set(transit, TRUE);
+ elm_transit_go(transit);
+
+ cam_debug(LOG_UI, "real_from_degree : %d, real_to_degree : %d ", from_degree, to_degree );
+ /*ad->angle_pre = ad->angle;*/
+ return FALSE;
+
+}
+
+gboolean cam_ui_rotate_utils_rotate_toolbar_shortcuts(void *data, double duration)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_debug(LOG_UI, "duration : %d", duration);
+
+ Elm_Transit* transit= elm_transit_add();
+
+ int from_degree = 0;
+ int to_degree = 0;
+
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (icon == NULL) {
+ cam_debug(LOG_UI, "toolbar_0_icon is null" );
+ } else {
+ elm_transit_object_add(transit, icon);
+ }
+ }
+
+ cam_ui_rotate_utils_get_rotation_degree(ad, &from_degree, &to_degree);
+
+ elm_transit_effect_rotation_add(transit, from_degree, to_degree);
+ elm_transit_duration_set(transit, duration);
+ elm_transit_del_cb_set(transit, __cam_ui_rotate_utils_after_shortcuts_rotate_cb, data);
+ elm_transit_objects_final_state_keep_set(transit, TRUE);
+ elm_transit_go(transit);
+
+ cam_debug(LOG_UI, "real_from_degree : %d, real_to_degree : %d ", from_degree, to_degree );
+ return FALSE;
+
+}
+
+
+//end file
diff --git a/src/cam_voice_command.c b/src/cam_voice_command.c
new file mode 100644
index 0000000..2ba9887
--- /dev/null
+++ b/src/cam_voice_command.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam_voice_command.h"
+#include "cam_debug.h"
+
+// voice control module is not setup.
+#ifdef ENABLE_VOICE_CONTROL
+#include <vc_bargein.h>
+
+static vc_bargein_h voice_cmd_h = NULL;
+static cam_voice_cmd_cb g_cmd_cb;
+
+static void __init_cb(vc_bargein_h vc, void *user_data);
+static void __result_cb(vc_bargein_h vc, vc_bargein_result_event_e event, vc_bargein_app_type_e app_type, int action_type, void *user_data);
+static void __error_cb(vc_bargein_h vc, vc_bargein_error_e reason, void *user_data);
+static void __start_voice_cmd(void *user_data);
+
+static void __init_cb(vc_bargein_h vc, void *user_data)
+{
+
+ cam_retm_if(user_data == NULL, "user_data is NULL");
+
+ if (vc == NULL) {
+ cam_debug(LOG_CAM, "voice handle init fail");
+ g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);
+ }
+
+ __start_voice_cmd(user_data);
+
+ return;
+}
+
+static void __result_cb(vc_bargein_h vc, vc_bargein_result_event_e event, vc_bargein_app_type_e app_type, int action_type, void *user_data)
+{
+ if (voice_cmd_h == NULL) {
+ cam_debug(LOG_CAM, "voice_cmd_h is NULL");
+ g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);
+ }
+
+ if (app_type == VC_BARGEIN_APP_TYPE_CAMERA && action_type == VC_BARGEIN_CAMERA_ACTION_CAPTURE) {
+ switch(event) {
+ case VC_BARGEIN_RESULT_EVENT_SUCCESS:
+ {
+ g_cmd_cb(CAM_VOICE_CMD_READY, user_data);
+ }
+ break;
+ case VC_BARGEIN_RESULT_EVENT_REJECTED:
+ {
+ g_cmd_cb(CAM_VOICE_CMD_REJECT, user_data);
+ }
+ break;
+ case VC_BARGEIN_RESULT_EVENT_ERROR:
+ default:
+ g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);
+ return;
+ }
+ }
+ else
+ g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);
+
+ return;
+}
+
+static void __error_cb(vc_bargein_h vc, vc_bargein_error_e reason, void *user_data)
+{
+ cam_debug(LOG_CAM, "error is [%d]", reason);
+ g_cmd_cb(CAM_VOICE_CMD_READY, user_data);
+ return;
+}
+
+static void __start_voice_cmd(void *user_data)
+{
+ if (voice_cmd_h == NULL) {
+ cam_debug(LOG_CAM, "voice_cmd_h is NULL");
+ g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);
+ }
+
+ if (vc_bargein_start(voice_cmd_h, VC_BARGEIN_LANGUAGE_KO_KR, VC_BARGEIN_APP_TYPE_CAMERA) != VC_BARGEIN_ERROR_NONE) {
+ cam_debug(LOG_CAM, "vc_bargein_start() fail");
+ g_cmd_cb(CAM_VOICE_CMD_ERROR, user_data);
+ }
+ return;
+}
+
+#endif
+
+gboolean cam_voice_cmd_create(cam_voice_cmd_cb cmd_cb, void *user_data)
+{
+#ifdef ENABLE_VOICE_CONTROL
+
+ cam_retvm_if(user_data == NULL, FALSE, "user_data is NULL");
+ if (voice_cmd_h) {
+ vc_bargein_cancel(voice_cmd_h);
+ vc_bargein_destroy(voice_cmd_h);
+ voice_cmd_h = NULL;
+ }
+
+ g_cmd_cb = cmd_cb;
+
+ if (vc_bargein_create(&voice_cmd_h, (vc_bargein_initialized_cb)__init_cb,
+ (vc_bargein_result_cb)__result_cb, (vc_bargein_error_cb)__error_cb, user_data) != VC_BARGEIN_ERROR_NONE) {
+ cam_debug(LOG_CAM, "vc_bargein_create() fail");
+ return FALSE;
+ }
+#endif
+
+ return TRUE;
+}
+
+void cam_voice_cmd_destroy()
+{
+#ifdef ENABLE_VOICE_CONTROL
+ if (voice_cmd_h == NULL) {
+ cam_debug(LOG_CAM, "voice_cmd_h is already delete");
+ return;
+ }
+
+ vc_bargein_cancel(voice_cmd_h);
+ vc_bargein_destroy(voice_cmd_h);
+ voice_cmd_h = NULL;
+#endif
+ return;
+}
+
diff --git a/src/camera_utils.c b/src/camera_utils.c
new file mode 100755
index 0000000..903baec
--- /dev/null
+++ b/src/camera_utils.c
@@ -0,0 +1,1461 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <image_util.h>
+#include <malloc.h>
+#include <ctype.h>
+#include "camera_utils.h"
+#include "cam_debug.h"
+#include "cam_error.h"
+#include "cam_ta.h"
+#include "cam_mm.h"
+#include "cam_file.h"
+
+#define JPEG_8M_APPROXIMATELY_SIZE 2096000
+#define JPEG_W6M_APPROXIMATELY_SIZE 1699000
+#define JPEG_5M_APPROXIMATELY_SIZE 1436000
+#define JPEG_W4M_APPROXIMATELY_SIZE 1210000
+#define JPEG_3M_APPROXIMATELY_SIZE 849500
+#define JPEG_W2M_APPROXIMATELY_SIZE 693910
+#define JPEG_2M_APPROXIMATELY_SIZE 566000
+#define JPEG_1M_APPROXIMATELY_SIZE 283000
+#define JPEG_VGA_APPROXIMATELY_SIZE 135000
+
+#define CLIPING(data) ((data) < 0 ? 0 : ((data) > 255) ? 255 : (data))
+/*#define SUPPORT_WINK //use wink library */
+
+static void YuvToRgb(int Y, int U, int V, int *R, int *G, int *B)
+{
+ *B = CLIPING((76284 * (Y - 16) + 132252 * (U - 128)) >> 16);
+ *G = CLIPING((76284 * (Y - 16) - 53281 * (V - 128) -
+ 25625 * (U - 128)) >> 16);
+ *R = CLIPING((76284 * (Y - 16) + 104595 * (V - 128)) >> 16);
+}
+
+/* #define SUPPORT_WINK */
+#define CAPTUERD_IMAGE_SAVE_PATH "/tmp/captured_image.jpg"
+
+#ifndef YUV422_SIZE
+#define YUV422_SIZE(width, height) ((width) * (height) * 2)
+#endif /* YUV422_SIZE */
+
+#ifndef YUV420_SIZE
+#define YUV420_SIZE(width, height) ((width) * (height) * 3 / 2)
+#endif /* YUV420_SIZE */
+
+#ifdef MAX_PATH
+#define MAX_PATH 256
+#endif
+
+char *m_mmc_path = NULL;
+
+/*get the torchlight on/off value*/
+gboolean cam_utils_check_torchlight_status(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+ int ret = -1; /*error, success is 0*/
+ int key_value = -1;
+ ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT, &key_value); /*ret [-1: error, 0:succes], key_value[on:1 , off:0]*/
+ DEBUG_TRACE("VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT is changed to %d", key_value);
+ if (ret == -1) {
+ DEBUG_TRACE("vconf_get_int failed");
+ return FALSE;
+ }
+ if (key_value) {
+ /*torchlight is working*/
+ ad->torchlight_on = TRUE;
+ } else {
+ ad->torchlight_on = FALSE;
+ }
+ return TRUE;
+}
+
+/*get the battery warning low state*/
+gboolean cam_utils_check_battery_warning_low(void)
+{
+ int low_status = -1;
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &low_status)) {
+ cam_debug(LOG_UI, "battery status low = %d", low_status);
+ if (low_status <= VCONFKEY_SYSMAN_BAT_WARNING_LOW)
+ return TRUE;
+ } else {
+ cam_warning(LOG_UI, "get setting failed %s",
+ VCONFKEY_SYSMAN_BATTERY_STATUS_LOW);
+ }
+
+ return FALSE;
+}
+/*get the battery critical low state*/
+gboolean cam_utils_check_battery_critical_low(void)
+{
+ int low_status = -1;
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &low_status)) {
+ cam_debug(LOG_UI, "battery status low = %d", low_status);
+ if (low_status <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW)
+ return TRUE;
+ } else {
+ cam_warning(LOG_UI, "get setting failed %s",
+ VCONFKEY_SYSMAN_BAT_CRITICAL_LOW);
+ }
+
+ return FALSE;
+}
+
+
+gboolean cam_utils_check_call_running(void)
+{
+ int call_state = -1;
+
+ if (!vconf_get_int(VCONFKEY_CALL_STATE, &call_state)) {
+ cam_debug(LOG_UI, "call state = %d", call_state);
+ if (call_state == VCONFKEY_CALL_OFF)
+ return FALSE;
+ } else {
+ cam_warning(LOG_UI, "get setting failed %s",
+ VCONFKEY_CALL_STATE);
+ }
+
+ return TRUE;
+}
+
+int cam_utils_get_battery_level(void)
+{
+ debug_fenter(LOG_SYS);
+
+ gint battery_level = -1;
+
+ /* VCONF_BATTERY_LEVEL or VCONFKEY_INDICATOR_MODULE_BATTERY */
+ if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &battery_level)) {
+ cam_info(LOG_SYS, "battery_level = %d", battery_level);
+ return battery_level;
+ } else {
+ cam_info(LOG_SYS, "get setting failed %s",
+ VCONFKEY_SYSMAN_BATTERY_CAPACITY);
+ }
+
+ return battery_level;
+}
+
+gint cam_utils_get_charging_status(void)
+{
+ debug_fenter(LOG_SYS);
+
+ gint charging = -1;
+
+ /* VCONF_BATTERY_CHARGE_NOW or VCONFKEY_INDICATOR_MODULE_CHARGE */
+ if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &charging)) {
+ cam_info(LOG_SYS, "charging = %d", charging);
+ } else {
+ cam_info(LOG_SYS, "get setting failed %s",
+ VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW);
+ }
+
+ return charging;
+}
+
+guint64 cam_system_get_remain_rec_time(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if (ad == NULL) {
+ return 0;
+ }
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ return 0;
+ }
+ guint64 remain_time = 0;
+
+ {
+ gint64 free_space = 0;
+ guint a_bitrate = 0, v_bitrate = 0;
+ gchar* target_path = (gchar*)cam_app_get_target_path();
+ if (target_path == NULL) {
+ return 0;
+ }
+ free_space = cam_get_free_space(target_path);
+
+ a_bitrate = cam_app_get_aenc_bitrate(ad);
+ v_bitrate = cam_app_get_venc_bitrate(ad, camapp->video_quality);
+
+ remain_time =
+ (guint64)((free_space * 8) / (a_bitrate + v_bitrate));
+
+ }
+ return remain_time;
+}
+
+gint64 cam_system_get_still_count_by_resolution(void *data)
+{
+ debug_fenter(LOG_CAM);
+
+ struct appdata *ad = (struct appdata *)data;
+ if (ad == NULL) {
+ return 0;
+ }
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ return 0;
+ }
+
+ gint64 free_space = 0;
+ gint64 remained_count = 0;
+ gint64 avg_file_size = -1;
+ gchar* target_path = (gchar*)cam_app_get_target_path();
+ if (target_path == NULL) {
+ return 0;
+ }
+ free_space = cam_get_free_space(target_path);
+ DEBUG_TRACE("FREE SPACE =%d", free_space);
+ free_space = (free_space - STILL_MINIMAL_SPACE);
+
+ /* TODO: Quality factor should be calculated later!
+ */
+ switch (camapp->photo_resolution) {
+ case CAM_RESOLUTION_3264x2448:
+ case CAM_RESOLUTION_3264x2176:
+ avg_file_size = JPEG_8M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_3264x1960:
+ case CAM_RESOLUTION_3264x1836:
+ avg_file_size = JPEG_W6M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_2800x1920:
+ case CAM_RESOLUTION_2560x1920:
+ avg_file_size = JPEG_5M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_2560x1536:
+ avg_file_size = JPEG_W4M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_2560x1440:
+ case CAM_RESOLUTION_2048x1536:
+ avg_file_size = JPEG_3M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_2048x1152:
+ avg_file_size = JPEG_W2M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_1920x1080:
+ case CAM_RESOLUTION_1600x1200:
+ case CAM_RESOLUTION_1392x1392:
+ avg_file_size = JPEG_2M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_1280x720:
+ case CAM_RESOLUTION_1280x960:
+ avg_file_size = JPEG_1M_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_SVGA:
+ avg_file_size = 150 * 1024 * 2;
+ break;
+
+ case CAM_RESOLUTION_WVGA:
+ avg_file_size = 130 * 1024 * 2;
+ break;
+
+ case CAM_RESOLUTION_VGA:
+ avg_file_size = JPEG_VGA_APPROXIMATELY_SIZE;
+ break;
+
+ case CAM_RESOLUTION_WQVGA:
+ avg_file_size = 100 * 1024 * 2;
+ break;
+
+ case CAM_RESOLUTION_QVGA:
+ avg_file_size = 100 * 1024 * 1.5;
+ break;
+
+ case CAM_RESOLUTION_CIF:
+ avg_file_size = 25 * 1024 * 2;
+ break;
+
+ default:
+ cam_critical(LOG_CAM, "unhandled resolution:%dx%d", HIWORD(camapp->photo_resolution), LOWORD(camapp->photo_resolution));
+ return -1;
+ }
+
+ remained_count = free_space / avg_file_size;
+ DEBUG_TRACE("FREE SPACE =%d", free_space);
+ DEBUG_TRACE("avg_file_size =%d", avg_file_size);
+ DEBUG_TRACE("remained_count =%d", remained_count);
+
+ return (int)MAX(remained_count, 0);
+}
+
+gint64 cam_get_free_space(const gchar *path)
+{
+ struct statfs fs;
+ if (-1 == statfs(path, &fs))
+ return -1;
+ return (gint64) fs.f_bsize * fs.f_bavail;
+}
+
+
+gboolean cam_utils_set_guide_rect_color(void *data) {
+
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ cam_retv_if(ad == NULL, FALSE);
+ camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+
+ DEBUG_TRACE(" ");
+
+ int capture_video_format = CAMERA_PIXEL_FORMAT_INVALID;
+ cam_mm_get_video_source_format(NULL, &capture_video_format);
+ DEBUG_TRACE("capture_video_format =%d", capture_video_format);
+
+ switch (capture_video_format) {
+ case CAMERA_PIXEL_FORMAT_INVALID:
+ {
+ cam_debug(LOG_UI,"can not set preview format & shapshot format");
+ }
+ return FALSE;
+ case CAMERA_PIXEL_FORMAT_UYVY:
+ /*case MM_PIXEL_FORMAT_ITLV_JPEG_UYVY:*//*TODO:there is no this value in capi*/
+ {
+ camapp->guide_rect_green = UYVY_GUIDE_RECT_GREEN;
+ camapp->guide_rect_orange = UYVY_GUIDE_RECT_ORANGE;
+ camapp->guide_rect_red = UYVY_GUIDE_RECT_RED;
+ camapp->guide_rect_white = UYVY_GUIDE_RECT_WHITE;
+ }
+ break;
+ case CAMERA_PIXEL_FORMAT_YUYV:
+ {
+ camapp->guide_rect_green= YUYV_GUIDE_RECT_GREEN;
+ camapp->guide_rect_orange= YUYV_GUIDE_RECT_ORANGE;
+ camapp->guide_rect_red= YUYV_GUIDE_RECT_RED;
+ camapp->guide_rect_white = YUYV_GUIDE_RECT_WHITE;
+ }
+ break;
+ default:
+ cam_debug(LOG_UI,"can not set preview format & shapshot format");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+
+
+gint64 cam_get_capacity_space(const gchar *path)
+{
+ struct statfs fs;
+ if (-1 == statfs(path, &fs))
+ return -1;
+ return (gint64) fs.f_bsize * fs.f_blocks;
+}
+
+
+
+void
+cam_utils_draw_guide_rectangle(void *data, void *frame, int x_org, int y_org,
+ int width, int height)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "cam_handle is NULL");
+
+ int left, right, top, bottom, offset, y;
+ int xStart, xEnd, draw_width;
+
+ if (width == 0 && height == 0) {
+ cam_debug(LOG_UI, " width,height of rectangle are zero");
+ return;
+ }
+
+ left = 2 * (x_org / 2); /* to draw on YUV422 or YUV420, we must start at even x */
+ right = left + 2 * (width / 2);
+ top = y_org;
+ bottom = y_org + height;
+
+ int preview_w = 0; /* make sure this is even */
+ int preview_h = 0;
+ gboolean ret = FALSE;
+
+ ret = cam_mm_get_video_size( &preview_w, &preview_h);
+ cam_ret_if(ret == FALSE || preview_w == 0 || preview_h == 0);
+
+ xStart = MAX(left, 0);
+ xEnd = MIN(right, preview_w);
+
+ draw_width = xEnd - xStart; /* for top and bottom */
+ if (draw_width <= 0)
+ return;
+
+ int line_thickness = FIT_TO_RESOLUTION(2, 4); /* make sure this is even */
+
+#if 0
+ int frame_size = preview_w * preview_h;
+
+ guchar guide_rect_colorY =
+ (guchar) ((camapp->guide_rect_color >> 8) & 0xFF);
+ guchar guide_rect_colorU = (guchar) ((camapp->guide_rect_color) & 0xFF);
+ guchar guide_rect_colorV =
+ (guchar) ((camapp->guide_rect_color >> 16) & 0xFF);
+
+ top = 2 * (top / 2); /* to draw on YUV420, we must start at even y */
+ bottom = 2 * (bottom / 2);
+
+ /* top */
+ for (y = MAX(top, 0); y < top + line_thickness && y < preview_h; y += 2) { /* line_thickness, and preview_h must be even */
+ offset = y * preview_w + xStart;
+ memset(((guchar *) frame) + offset, guide_rect_colorY,
+ draw_width);
+ memset(((guchar *) frame) + offset + preview_w,
+ guide_rect_colorY, draw_width);
+ offset = y * preview_w / 4 + xStart / 2;
+ memset(((guchar *) frame) + frame_size + offset,
+ guide_rect_colorU, draw_width / 2);
+ memset(((guchar *) frame) + frame_size + frame_size / 4 +
+ offset, guide_rect_colorV, draw_width / 2);
+ }
+
+ /* bottom */
+ for (y = MAX(bottom - line_thickness, 0);
+ y < bottom && y < preview_h; y += 2) {
+ offset = y * preview_w + xStart;
+ memset(((guchar *) frame) + offset, guide_rect_colorY,
+ draw_width);
+ memset(((guchar *) frame) + offset + preview_w,
+ guide_rect_colorY, draw_width);
+ offset = y * preview_w / 4 + xStart / 2;
+ memset(((guchar *) frame) + frame_size + offset,
+ guide_rect_colorU, draw_width / 2);
+ memset(((guchar *) frame) + frame_size + frame_size / 4 +
+ offset, guide_rect_colorV, draw_width / 2);
+ }
+
+ /* left */
+ if (left + line_thickness > 0 && left < preview_w) {
+ draw_width = MIN(MIN(line_thickness, line_thickness + left), preview_w - left); /* now calculated for left */
+ for (y = MAX(top, 0); y < bottom && y < preview_h; y += 2) {
+ offset = y * preview_w + xStart;
+ memset(((guchar *) frame) + offset, guide_rect_colorY,
+ draw_width);
+ memset(((guchar *) frame) + offset + preview_w,
+ guide_rect_colorY, draw_width);
+ offset = y * preview_w / 4 + xStart / 2;
+ memset(((guchar *) frame) + frame_size + offset,
+ guide_rect_colorU, draw_width / 2);
+ memset(((guchar *) frame) + frame_size +
+ frame_size / 4 + offset, guide_rect_colorV,
+ draw_width / 2);
+ }
+ }
+ /* right */
+ if (right > 0 && right - line_thickness < preview_w) {
+ draw_width = MIN(MIN(line_thickness, right), preview_w - right + line_thickness); /* now calculated for right */
+ for (y = MAX(top, 0); y < bottom && y < preview_h; y += 2) {
+ offset = y * preview_w + MAX(right - line_thickness, 0);
+ memset(((guchar *) frame) + offset, guide_rect_colorY,
+ draw_width);
+ memset(((guchar *) frame) + offset + preview_w,
+ guide_rect_colorY, draw_width);
+ offset =
+ y * preview_w / 4 + MAX(right - line_thickness,
+ 0) / 2;
+ memset(((guchar *) frame) + frame_size + offset,
+ guide_rect_colorU, draw_width / 2);
+ memset(((guchar *) frame) + frame_size +
+ frame_size / 4 + offset, guide_rect_colorV,
+ draw_width / 2);
+ }
+ }
+#else
+
+ int x;
+
+ /* top */
+ for (y = top; y < top + line_thickness && y < preview_h; y++) {
+ if (y < 0)
+ continue;
+ offset = y * preview_w + xStart;
+ for (x = 0; x < draw_width; x += 2) {
+ ((gulong *) frame)[(offset + x) / 2] =
+ camapp->guide_rect_color;
+ }
+ }
+
+ /* bottom */
+ for (y = bottom - line_thickness; y < bottom && y < preview_h; y++) {
+ if (y < 0)
+ continue;
+ offset = y * preview_w + xStart;
+ for (x = 0; x < draw_width; x += 2) {
+ ((gulong *) frame)[(offset + x) / 2] =
+ camapp->guide_rect_color;
+ }
+ }
+
+ /* left */
+ if (left + line_thickness >= 0 && left < preview_w) {
+ draw_width = MIN(MIN(line_thickness, line_thickness + left), preview_w - left); /* now calculated for left */
+ for (y = MAX(top, 0); y < bottom && y < preview_h; y++) {
+ offset = y * preview_w + xStart;
+ for (x = 0; x < draw_width; x += 2) {
+ ((gulong *) frame)[(offset + x) / 2] =
+ camapp->guide_rect_color;
+ }
+ }
+ }
+ /* right */
+ if (right >= 0 && right - line_thickness < preview_w) {
+ draw_width = MIN(MIN(line_thickness, right), preview_w - right + line_thickness); /* now calculated for right */
+ for (y = MAX(top, 0); y < bottom && y < preview_h; y++) {
+ offset = y * preview_w + MAX(right - line_thickness, 0);
+ for (x = 0; x < draw_width; x += 2) {
+ ((gulong *) frame)[(offset + x) / 2] =
+ camapp->guide_rect_color;
+ }
+ }
+ }
+#endif
+
+}
+
+void
+cam_utils_convert_YUYV_to_UYVY(unsigned char *dst, unsigned char *src,
+ gint length)
+{
+ int i = 0;
+
+ memset(dst, 0x00, length);
+ memcpy(dst, src + 1, length - 1);
+
+ for (i = 0; i < length; i++) {
+ if (!(i % 2)) {
+ dst[i + 1] = src[i];
+ }
+ }
+
+}
+
+void cam_utils_convert_UYVY_to_YUYV(char *dst, char *src, gint length)
+{
+ int i = 0;
+
+ memset(dst, 0x00, length);
+ memcpy((char *)dst + 1, (char *)src, length - 1);
+
+ for (i = 0; i < length; i++) {
+ if ((i % 2)) { /* even */
+ dst[i - 1] = src[i];
+ }
+ }
+
+}
+
+#if 1
+
+void
+cam_utils_convert_YUYV_to_YUV420P(unsigned char *pInBuf, unsigned char *pOutBuf,
+ int width, int height)
+{
+ unsigned char *pInY, *pInU, *pInV;
+ unsigned char *pOutY, *pOutU, *pOutV;
+
+ int nRowIters = height / 2;
+ int nColIters = width / 2;
+
+ int rows, cols;
+
+ pInY = pInBuf;
+ pInU = pInBuf + 1;
+ pInV = pInBuf + 3;
+ pOutY = pOutBuf;
+ pOutU = pOutBuf + width * height;
+ pOutV = pOutBuf + width * height * 5 / 4;
+
+ /* Iterate over half the number of rows, because inside there are 2 loops on columns */
+ for (rows = 0; rows < nRowIters; rows++) {
+ /* Even rows
+ Iterate over half the number of columns, copy 2 pixels each time */
+ for (cols = 0; cols < nColIters; cols++) {
+ /* Copy Y of first pixel */
+ *pOutY = *pInY;
+ pOutY++;
+ pInY += 2;
+ /* Copy Y of second pixel */
+ *pOutY = *pInY;
+ pOutY++;
+ pInY += 2;
+ /* Copy U of all 4 pixels */
+ *pOutU = *pInU;
+ pOutU++;
+ pInU += 4;
+ /* Copy V of all 4 pixels */
+ *pOutV = *pInV;
+ pOutV++;
+ pInV += 4;
+ }
+ /* Odd rows
+ Iterate over half the number of columns, copy 2 pixels each time */
+ for (cols = 0; cols < nColIters; cols++) {
+ /* Copy Y of third pixel */
+ *pOutY = *pInY;
+ pOutY++;
+ pInY += 2;
+ /* Copy Y of fourth pixel */
+ *pOutY = *pInY;
+ pOutY++;
+ pInY += 2;
+ }
+ /* Skip U, V of third, fourth pixel */
+ pInU += width * 2;
+ pInV += width * 2;
+ }
+}
+
+#else
+
+void
+cam_utils_convert_YUYV_to_YUV420P(byte *src, byte *dst, gint width, gint height)
+{
+ int i = 0;
+ int YUYV_length = 0, YUV420P_length = 0;
+ int temp_length = 0, temp_length2 = 0;
+ int pos_u = 0, pos_v = 0;
+
+ /* cam_debug( LOG_UI, " start" ); */
+
+ temp_length = width * height;
+ temp_length2 = temp_length >> 2;
+ YUYV_length = temp_length << 1;
+ YUV420P_length = (temp_length * 3) >> 1;
+
+ /*
+ cam_debug( LOG_UI, " size[%dx%d], length YUYV[%d],YUV420P[%d]",
+ width, height, YUYV_length, YUV420P_length );
+ */
+
+ if (dst == NULL) {
+ cam_critical(LOG_SYS, " dst is NULL");
+ return;
+ }
+
+ for (i = 0; i < temp_length; i++) {
+ /* Y data */
+ dst[i] = src[i << 1];
+
+ if (i % (width << 1) < width) {
+ if (i % 2 == 0) {
+ /* U data */
+ dst[temp_length + pos_u] = src[(i << 1) + 1];
+ pos_u++;
+ } else {
+ /* V data */
+ dst[temp_length + temp_length2 + pos_v] =
+ src[(i << 1) + 1];
+ pos_v++;
+ }
+ }
+ }
+}
+
+#endif
+
+void *cam_utils_YUV422_to_ARGB(byte *frame, int width, int height)
+{
+ /* source yuv is FOURCC YUYV, sampling format YUV 422 .
+ yuv422 format
+ Byte Ordering (lowest byte) Y0, U0, Y1, V0 */
+ byte *frame_argb = malloc(width * height * 4); /* for ARGB */
+
+ if (frame_argb == NULL) {
+ return NULL;
+ }
+ memset(frame_argb,0,width * height * 4);
+
+ int i = 0, j = 0; /* row, column */
+ int y, u, v;
+ int r, g, b;
+ unsigned long pixel_idx = 0, rgb_index = 0;
+ short v_idx = 0;
+ short u_idx = 0;
+
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < width; j++) {
+
+ if (j % 2) { /* odd */
+ v_idx = -1;
+ u_idx = 1;
+ /* u_idx = -1; v_idx = 1; */
+ } else {
+ v_idx = 1;
+ u_idx = 3;
+ /* u_idx = 1; v_idx = 3; */
+ }
+
+ y = frame[pixel_idx];
+ v = frame[pixel_idx + v_idx];
+ u = frame[pixel_idx + u_idx];
+
+ YuvToRgb(y, u, v, &r, &g, &b);
+
+ /* ARGB */
+ frame_argb[rgb_index++] = (byte)CLIPING(r);
+ frame_argb[rgb_index++] = (byte)CLIPING(g);
+ frame_argb[rgb_index++] = (byte)CLIPING(b);
+ frame_argb[rgb_index++] = 0xff;
+
+ pixel_idx += 2; /* yuv422, 4byte is 2 pixel */
+ }
+ }
+
+ return (void *)frame_argb;
+}
+
+void *cam_utils_IYUV_to_ARGB(byte *frame, int width, int height)
+{
+ /* source yuv is FOURCC IYUV or I420, sampling format YUV 420. */
+ /* IYUV format is http://www.fourcc.org/yuv.php#IYUV */
+
+ byte *frame_argb = malloc(width * height * 4); /* for ARGB */
+ if (frame_argb == NULL) {
+ return NULL;
+ }
+ memset(frame_argb,0,width * height * 4);
+
+ int h = 0, w = 0; /* row, column */
+ int y, u, v;
+ int r, g, b;
+ unsigned long rgb_index = 0; /* ,pixel_idx=0; */
+ int idx = 0;
+
+ for (h = 0; h < height; h++) {
+ for (w = 0; w < width; w++) {
+
+ y = frame[h * height + w];
+ u = frame[(width * height) + idx];
+ v = frame[(width * height) + ((width * height) / 4) +
+ idx];
+
+ if (w % 2)
+ idx++;
+
+ YuvToRgb(y, u, v, &r, &g, &b);
+
+ /* ARGB */
+ frame_argb[rgb_index++] = (byte)CLIPING(r);
+ frame_argb[rgb_index++] = (byte)CLIPING(g);
+ frame_argb[rgb_index++] = (byte)CLIPING(b);
+ frame_argb[rgb_index++] = 0;
+
+ }
+
+ if ((w == width - 1) && (!(h % 2)))
+ idx -= width / 2;
+ }
+
+ return (void *)frame_argb;
+}
+
+gboolean
+cam_utils_save_to_jpg_file(int storage_id, gchar *filename, void *frame,
+ int width, int height, GError **error)
+{
+ cam_debug(LOG_MM, " [%dx%d] %s", width, height, filename);
+
+ int ret = CAMERA_ERROR_NONE;
+
+ CAM_TA_ACUM_ITEM_BEGIN("cam_utils_check_mmc_for_writing", 0);
+ if (storage_id == CAM_STORAGE_EXTERNAL) {
+ if (!cam_utils_check_mmc_for_writing(error)) {
+ return FALSE;
+ }
+ }
+ CAM_TA_ACUM_ITEM_END("cam_utils_check_mmc_for_writing", 0);
+
+ cam_debug(LOG_SYS, " \n\n\n\n\n START JPEG ENCODING \n\n\n\n\n");
+
+ CAM_TA_ACUM_ITEM_BEGIN("image_util_encode_jpeg", 0);
+ ret = image_util_encode_jpeg(frame, width, height,
+ IMAGE_UTIL_COLORSPACE_YUYV, 90, filename);
+ CAM_TA_ACUM_ITEM_END("image_util_encode_jpeg", 0);
+
+ cam_debug(LOG_SYS, " \n\n\n\n\n END JPEG ENCODING \n\n\n\n\n");
+
+ if (ret != 0) {
+ cam_critical(LOG_MM, " image_util_encode_jpeg Failed [%x]", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+cam_utils_save_to_jpg_memory(byte **memory, unsigned int *size, void *src_frame,
+ int width, int height)
+{
+ cam_debug(LOG_MM, " [%dx%d]", width, height);
+
+ int ret = CAMERA_ERROR_NONE;
+
+ cam_debug(LOG_SYS, " \n\n\n\n\n START JPEG ENCODING \n\n\n\n\n");
+
+ CAM_TA_ACUM_ITEM_BEGIN("image_util_encode_jpeg_to_memory", 0);
+ ret = image_util_encode_jpeg_to_memory(src_frame, width, height,
+ IMAGE_UTIL_COLORSPACE_YUYV, 90, (unsigned char **)memory, size);
+ CAM_TA_ACUM_ITEM_END("image_util_encode_jpeg_to_memory", 0);
+
+ cam_debug(LOG_SYS, " \n\n\n\n\n END JPEG ENCODING \n\n\n\n\n");
+
+ if (ret != 0) {
+ cam_critical(LOG_MM, "image_util_encode_jpeg_to_memory Failed [%x]", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void *cam_utils_load_temp_file(gchar *filepath, gint *pfilesize)
+{
+ struct stat fileinfo;
+ FILE *fp = NULL;
+ int ret;
+
+ ret = stat(filepath, &fileinfo);
+ if (ret == -1) {
+ cam_critical(LOG_CAM, "can't get file infomation - error[%d]", ret);
+ return NULL;
+ }
+
+ gint filesize = fileinfo.st_size;
+ if (filesize < 0) {
+ cam_critical(LOG_CAM, "can't get file infomation");
+ return NULL;
+ }
+
+ cam_debug(LOG_CAM, "temp file's file_path =%s, file_size =%d",
+ filepath, filesize);
+
+ void *data = (void *)malloc(filesize);
+
+ if (data == NULL) {
+ return NULL;
+ }
+ memset(data, 0, filesize);
+
+ cam_debug(LOG_CAM, "data = %p ", data);
+
+ if ((fp = fopen(filepath, "r")) == NULL) {
+ perror("fopen");
+ if (data)
+ free(data);
+
+ cam_critical(LOG_CAM, "can't open file infomation");
+ return NULL;
+ }
+ if (fread(data, filesize, 1, fp) != 1) {
+ perror("fread");
+ fclose(fp);
+ if (data)
+ free(data);
+
+ cam_critical(LOG_CAM, "can't read file infomation");
+ return NULL;
+ }
+
+ *pfilesize = filesize;
+
+ fclose(fp);
+
+ return data;
+}
+
+gboolean cam_utils_check_mmc_for_writing(GError **error)
+{
+ gint error_code = 0;
+ int mmc_state = -1;
+ const gchar *error_msg = NULL;
+
+ if (!m_mmc_path)
+ m_mmc_path = (char *)cam_file_get_external_image_path();
+
+ if (!g_file_test(m_mmc_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+ error_code = CAM_ERROR_STORAGE_UNAVAILABLE;
+ error_msg = dgettext(PACKAGE, "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY");
+ goto ERROR;
+ }
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
+ if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED) {
+ error_code = CAM_ERROR_STORAGE_UNAVAILABLE;
+ error_msg = dgettext(PACKAGE, "IDS_CAM_POP_MEMORY_CARD_REMOVED");
+ goto ERROR;
+ }
+ }
+
+ return TRUE;
+
+ ERROR:
+
+ /* cam_set_error */
+ if (error_msg) {
+ if (*error) {
+ *error = cam_error_new_literal(error_code, error_msg);/*note:fix warnning*/
+ }
+ }
+ return FALSE;
+
+}
+
+gboolean cam_utils_check_mmc_for_inserted_stats(void *data)
+{
+ int mmc_state = -1;
+ g_return_val_if_fail(data, FALSE);
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+
+ camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
+ if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED
+ && camapp->storage == CAM_STORAGE_EXTERNAL) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+int cam_utils_check_mmc_status(void)
+{
+ int status = -1;
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &status)) {
+ cam_warning(LOG_SYS, " Get MMC status failed");
+ }
+
+ return status;
+}
+
+int cam_utils_get_storage_id_from_filepath(const char *filepath)
+{
+ char *strtemp = NULL;
+
+ strtemp = (char *)cam_file_get_internal_image_path();
+
+ if (strtemp) {
+ if (!strncmp(filepath, strtemp, strlen(strtemp)))
+ return CAM_STORAGE_INTERNAL;
+ }
+
+ strtemp = (char *)cam_file_get_external_image_path();
+ if (strtemp) {
+ if (!strncmp(filepath, strtemp, strlen(strtemp)))
+ return CAM_STORAGE_EXTERNAL;
+ }
+
+ return CAM_STORAGE_DCF;
+
+}
+
+gboolean
+cam_utils_safety_file_copy(const char *dst, const char *src, GError **error)
+{
+
+ gint error_code = 0;
+ const gchar *error_msg = NULL;
+
+ FILE *fp_src = NULL;
+ FILE *fp_dst = NULL;
+ int ret;
+
+ cam_debug(LOG_FILE, " dst file name = %s", dst);
+ cam_debug(LOG_FILE, " dst file name = %s", src);
+
+ fp_src = fopen(src, "r");
+ if (fp_src == NULL) {
+ error_code = CAM_ERROR_FILE_NOT_EXISTS;
+ error_msg = dgettext(PACKAGE, "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY");
+ goto ERROR;
+ } else {
+
+ cam_debug(LOG_FILE, "start check mmc");
+ /* check mmc */
+ if (cam_utils_get_storage_id_from_filepath(dst) == CAM_STORAGE_EXTERNAL) {
+ if (!cam_utils_check_mmc_for_writing(error))
+ goto ERROR;
+ }
+
+ cam_debug(LOG_FILE, "end check mmc");
+
+ fp_dst = fopen(dst, "wb");
+ if (fp_dst == NULL) {
+ error_code = CAM_ERROR_FILE_REGISTER_FAILED;
+ error_msg = dgettext(PACKAGE, "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY");
+ goto ERROR;
+ } else {
+ cam_debug(LOG_FILE, "start copy");
+ /* copy */
+ unsigned long filesize = 0;
+ unsigned long filecopyblocksize = 1024 * 512;
+ unsigned long copysize = 0;
+ struct stat fileinfo;
+
+ void *buff = malloc(filecopyblocksize); /* 512k */
+ if (buff == NULL)
+ goto ERROR;
+
+ /* get source file size */
+ ret = stat(src, &fileinfo);
+ if (ret == -1) {
+ cam_critical(LOG_CAM, "can't get file infomation - error[%d]", ret);
+ if (buff) {
+ free(buff);
+ buff = NULL;
+ }
+ goto ERROR;
+ }
+
+ filesize = fileinfo.st_size;
+ cam_debug(LOG_FILE, "source file size %lu", filesize);
+
+ if (filesize > 0) {
+ do {
+ if (filesize >= filecopyblocksize) {
+ copysize = filecopyblocksize;
+ } else {
+ copysize = filesize;
+ }
+
+ cam_debug(LOG_FILE, "copy size %lu", copysize);
+ if (fread(buff, copysize, 1, fp_src) != 1) {
+ cam_debug(LOG_FILE, "read error!");
+ if (buff) {
+ free(buff);
+ buff = NULL;
+ }
+ goto ERROR;
+ }
+
+ if (buff && fwrite(buff, copysize, 1, fp_dst) != 1) {
+ cam_debug(LOG_FILE, "file read or write error");
+ error_code = CAM_ERROR_FILE;
+ error_msg = dgettext(PACKAGE, "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY");
+ if (buff) {
+ free(buff);
+ buff = NULL;
+ }
+ goto ERROR;
+ }
+
+ filesize -= copysize;
+ } while (filesize > 0);
+ } else {
+ error_code = CAM_ERROR_PANORAMA_LIB;
+ error_msg = dgettext(PACKAGE, "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER");
+ if (buff) {
+ free(buff);
+ buff = NULL;
+ }
+ goto ERROR;
+ }
+
+ /*
+
+ stat(filepath, &fileinfo);
+
+ gint filesize = fileinfo.st_size;
+
+ if (fwrite(g_result_panorama_image->bits, g_result_panorama_image->size, 1, fp) != 1)
+ {
+ free(camapp->filename);
+ camapp->filename = NULL;
+ }
+ */
+ if (buff) {
+ free(buff);
+ buff = NULL;
+ }
+ /*fsync(fp_dst->_fileno);*//*block for increasing formance of shot-to-shot */
+ fclose(fp_dst);
+ }
+
+ fclose(fp_src);
+
+ }
+
+ return TRUE;
+
+ ERROR:
+
+ cam_debug(LOG_FILE, "file copy error, error number=%x", error_code);
+
+ if (fp_dst)
+ fclose(fp_dst);
+
+ if (fp_src)
+ fclose(fp_src);
+
+ /* cam_set_error */
+ if (error_msg) {
+ if (*error) {
+ *error = cam_error_new_literal(error_code, error_msg);/*note:fix warnning*/
+ }
+ }
+ return FALSE;
+
+}
+
+static char *cam_utils_trim(char *str)
+{
+ char *i_buf = str;
+
+ for (; *i_buf && isspace(*i_buf); ++i_buf) ;
+
+ return i_buf;
+}
+
+gboolean cam_utils_parse_args(int argc, char *argv[], CamExeArgs *args)
+{
+ int index = 0;
+ const char *delimiters = ",";
+
+ if (args == NULL)
+ return FALSE;
+ for (index = 0; index < argc; index++) {
+ if (argv == NULL)
+ return FALSE;
+
+ if (argv[index][0] == '-' && argv[index][1] != '\0') {
+ char *r_argv = strdup(cam_utils_trim((argv[index] + 2)));
+ switch (argv[index][1]) {
+#if 0
+ case 'd': /* daemon launch */
+ {
+ args->launch_type =
+ CAM_LAUNCHING_MODE_DAEMON;
+ return TRUE;
+ }
+ break;
+ case 'h': /* help */
+ {
+ args->launch_type =
+ CAM_LAUNCHING_MODE_HELP;
+ return TRUE;
+ }
+ break;
+#endif
+ case 'v': /* review */
+ {
+ args->review = TRUE;
+ }
+ break;
+ case 'r': /* resolution */
+ {
+ if (r_argv) {
+ char *result = NULL;
+ char *save_string = NULL;
+ result = strtok_r(r_argv, delimiters,&save_string);
+ if (result != NULL)
+ args->width = atoi(result);
+ result = strtok_r(NULL, delimiters,&save_string);
+ if (result != NULL)
+ args->height = atoi(result);
+ } else {
+ return FALSE;
+ }
+ }
+ break;
+ case 'm': /* cam_mode */
+ {
+ if (r_argv) {
+ if (0 == strcmp(r_argv, "IMAGE")) {
+ args->cam_mode = CAM_CAMERA_MODE;
+ } else if (0 == strcmp(r_argv, "VIDEO")) {
+ args->cam_mode = CAM_CAMCORDER_MODE;
+ } else {
+ if (r_argv != NULL) {
+ free(r_argv);
+ r_argv = NULL;
+ }
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+ }
+ break;
+ case '-': /* launching appl.'s name */
+ {
+ if (r_argv) {
+ char *qualifier_to_find = "calling-app=";
+ char *qualifier_field_start = NULL;
+ char *name = NULL;
+
+ qualifier_field_start = strstr(r_argv, qualifier_to_find);
+ if (qualifier_field_start) {
+ qualifier_field_start += strlen(qualifier_to_find);
+ name = cam_utils_trim(qualifier_field_start);
+ args->caller = strdup(name);
+ } else {
+ cam_debug(LOG_SYS, "unknown arg : %s", argv[index]);
+ }
+ } else {
+ return FALSE;
+ }
+ }
+ break;
+ case 'l': /* size limit */
+ {
+ if (r_argv) {
+ args->size_limit = atoi(r_argv);
+ } else {
+ return FALSE;
+ }
+ }
+ break;
+ default: /* unknown option */
+ cam_debug(LOG_SYS, "Unknown Option : %c",
+ argv[index][1]);
+ break;
+ }
+ if (r_argv != NULL) {
+ free(r_argv);
+ r_argv = NULL;
+ }
+ } else {
+ cam_debug(LOG_SYS, "unknown arg : %s", argv[index]);
+ }
+ }
+
+ cam_debug(LOG_SYS, "cam_mode : %d", args->cam_mode);
+ cam_debug(LOG_SYS, "resolution : [%dx%d]", args->width, args->height);
+ cam_debug(LOG_SYS, "limit : %d", args->size_limit);
+ cam_debug(LOG_SYS, "caller : %s", args->caller);
+ return TRUE;
+}
+
+gboolean cam_utils_check_wide_resolution(int resol_w, int resol_h)
+{
+ if ((ABS((gfloat)((resol_w * 3.0) / (resol_h * 4.0)) - 1.0 ) < CAM_EPSINON )
+ || (ABS((gfloat)((resol_w * 25.0) / (resol_h * 36.0)) - 1.0) < CAM_EPSINON)) {
+ cam_debug(LOG_UI, "Not Wide Resolution : [%d]x[%d]", resol_w,
+ resol_h);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean cam_utils_check_fake_image_exist(const char *fake_image_path)
+{
+ if (!g_file_test(fake_image_path, G_FILE_TEST_EXISTS)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+cam_utils_image_rotate(char *src, int src_width, int src_height, char *dst,
+ int *dst_width, int *dst_height, int degree)
+{
+
+ cam_retv_if(src == NULL || dst == NULL || src_width == 0
+ || src_height == 0, FALSE);
+ cam_retv_if(degree != 0 && degree != 90 && degree != 180
+ && degree != 270, FALSE);
+
+ int i = 0;
+ int j = 0;
+
+ int *from = (int *)src;
+ int *to = (int *)dst;
+
+ if (degree == 0) {
+ *dst_width = src_width;
+ *dst_height = src_height;
+ memcpy(dst, src, src_width * src_height * 4);
+ return TRUE;
+ }
+
+ for (j = 0; j < src_height; j++) {
+ for (i = 0; i < src_width; i++) {
+
+ if (degree == 90) {
+ *dst_width = src_height;
+ *dst_height = src_width;
+
+ *(to + i * src_height + (src_height - j)) =
+ *(from + j * src_width + i);
+ } else if (degree == 180) {
+ *dst_width = src_width;
+ *dst_height = src_height;
+
+ *(to + (src_height - j) * src_width +
+ (src_width - i)) =
+*(from + j * src_width + i);
+ } else if (degree == 270) {
+ *dst_width = src_height;
+ *dst_height = src_width;
+
+ *(to + (src_width - i) * src_height + j) =
+ *(from + j * src_width + i);
+ }
+
+ }
+ }
+
+ return TRUE;
+
+}
+
+
+void cam_utils_set_windows_xy_to_videos_xy(CamVideoRectangle src,
+ CamVideoRectangle *result,
+ void *data)
+{
+ cam_retm_if(data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad || !result)
+ return;
+ switch (ad->camcorder_rotate) {
+ case CAMERA_ROTATION_NONE:
+ result->x = src.x - ad->preview_offset_x;
+ result->y = src.y - ad->preview_offset_y;
+ result->w = src.w;
+ result->h = src.h;
+ break;
+ case CAMERA_ROTATION_90:
+ result->x = ad->win_height - ad->preview_offset_y - src.x;
+ result->y = src.y - ad->preview_offset_y;
+ result->w = src.h;
+ result->h = src.w;
+ break;
+ case CAMERA_ROTATION_180:
+ result->x = ad->win_width - src.x - ad->preview_offset_x;
+ result->y = ad->win_height - src.y - ad->preview_offset_y;
+ result->w = src.w;
+ result->h = src.h;
+ break;
+ case CAMERA_ROTATION_270:
+ result->x = src.x - ad->preview_offset_y;
+ result->y = ad->win_width - src.y - ad->preview_offset_x;
+ result->w = src.h;
+ result->h = src.w;
+ break;
+ default:
+ DEBUG_TRACE("REACHE UN-REACHED CODES");
+ }
+ DEBUG_TRACE("songfeng result->x %d result->y %d",result->x, result->y);
+
+}
+
+
+void cam_utils_set_videos_xy_to_windows_xy(CamVideoRectangle src,
+ CamVideoRectangle *result,
+ void *data)
+{
+ cam_retm_if(data == NULL, "data is null");
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad || !result)
+ return;
+
+ switch (ad->camcorder_rotate) {
+ case CAMERA_ROTATION_NONE:
+ /*
+ * win: (x,y) -------->x video:(x,y) -------->x(width)
+ * - -
+ * - -
+ * - -
+ * -y y(height)
+ */
+ result->x = src.x + ad->preview_offset_x;
+ result->y = src.y + ad->preview_offset_y;
+ /*notes:here,result->w: horizontal;result->h:vertical*/
+ result->w = src.w;
+ result->h = src.h;
+ break;
+ case CAMERA_ROTATION_90:
+ /* win: (x,y) -------->x video:(x,y) (height)y<-----
+ * - -
+ * - -
+ * - -
+ * -y x(width)
+ */
+ result->x = ad->win_height - (src.y + ad->preview_offset_y + src.w);
+ result->y = src.x + ad->preview_offset_x;
+ /*notes:here,result->w: horizontal;result->h:vertical*/
+ result->w = src.h;
+ result->h = src.w;
+ break;
+ case CAMERA_ROTATION_180:
+ /* win: (x,y) -------->x video:(x,y) y(height)
+ * - -
+ * - -
+ * - -
+ * -y (width)x<------
+ */
+ result->x = ad->win_width - (src.x + ad->preview_offset_x + src.w);
+ result->y = ad->win_height - (src.y + ad->preview_offset_y + src.h);
+ /*notes:here,result->w: horizontal;result->h:vertical*/
+ result->w = src.w;
+ result->h = src.h;
+ break;
+ case CAMERA_ROTATION_270:
+ cam_critical(LOG_CAM, "CAMERA_ROTATION_270");
+ /* win: (x,y) -------->x video:(x,y) x(width)
+ * - -
+ * - -
+ * - -
+ * -y -------------y(height)
+ */
+ result->x = src.y + ad->preview_offset_y;
+ result->y = ad->win_width - (src.x + ad->preview_offset_x + src.w);
+ /*notes:here,result->w: horizontal;result->h:vertical*/
+ result->w = src.h;
+ result->h = src.w;
+ break;
+ default:
+ DEBUG_TRACE("REACHE UN-REACHED CODES");
+ }
+
+}
+
+gboolean cam_utils_request_main_pipe_handler(void *data, void *pipe_data, int cmd)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ Ecore_Pipe_Data_Info pipe_info = {0,};
+ pipe_info.data = pipe_data;
+ pipe_info.cmd = cmd;
+ return ecore_pipe_write(ad->main_pipe, (void *)&pipe_info, sizeof(Ecore_Pipe_Data_Info));
+
+}
+
+//end file
diff --git a/src/edc-callback/cam_common_edc_callback.c b/src/edc-callback/cam_common_edc_callback.c
new file mode 100755
index 0000000..6e2a33e
--- /dev/null
+++ b/src/edc-callback/cam_common_edc_callback.c
@@ -0,0 +1,949 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include "camera_utils.h"
+
+#include "edc_string.h"
+
+#include "cam_common_edc_callback.h"
+#include "cam_toolbar_edc_callback.h"
+#include "cam_indicator_edc_callback.h"
+#include "cam_zoom_edc_callback.h"
+#include "cam_ev_edc_callback.h"
+#include "cam_face_detection_focus.h"
+#include "cam_ui_effect_utils.h"
+#include "cam_menu_composer.h"
+#include "cam_capacity_type.h"
+#include "cam_device_capacity.h"
+#include "cam_mm.h"
+
+
+#define ZOOM_THRESHOLD 0.02
+
+static double prev_zoom = 0;
+
+static Evas_Event_Flags __pinch_start(void *data, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EVAS_EVENT_FLAG_NONE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, EVAS_EVENT_FLAG_NONE, "camapp_handle is NULL");
+
+ DEBUG_TRACE("__pinch_start");
+
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING) {
+ DEBUG_TRACE("touch_af_state is [%d], do not zoom", camapp->touch_af_state);
+ return EVAS_EVENT_FLAG_NONE;
+ }
+
+ DEL_EVAS_OBJECT(ad->focus_edje);
+ cam_mm_stop_focusing();
+
+ prev_zoom = 0;
+
+ if (ad->toolbar_setting_popup || ad->setting_ctxpopup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ cam_zoom_create_pinch_edje(ad);
+
+ return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags __pinch_end(void *data, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EVAS_EVENT_FLAG_NONE, "appdata is NULL");
+
+ DEBUG_TRACE("__pinch_end");
+
+ DEL_EVAS_OBJECT(ad->pinch_edje)
+ cam_reset_focus_mode(ad);
+
+ return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags __pinch_move(void *data, void *event_info)
+{
+ Elm_Gesture_Zoom_Info *ev = (Elm_Gesture_Zoom_Info *)event_info;
+ cam_retvm_if(ev == NULL, EVAS_EVENT_FLAG_NONE, "event_info is NULL");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, EVAS_EVENT_FLAG_NONE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, EVAS_EVENT_FLAG_NONE, "camapp_handle is NULL");
+
+ if (camapp->touch_af_state == CAM_TOUCH_AF_STATE_DOING) {
+ DEBUG_TRACE("touch_af_state is [%d], do not zoom", camapp->touch_af_state);
+ return EVAS_EVENT_FLAG_NONE;
+ }
+
+ if (ad->pinch_edje == NULL)
+ __pinch_start(ad, NULL);
+
+ double diff = prev_zoom - ev->zoom;
+ if (ABS(diff) < ZOOM_THRESHOLD) {
+ return EVAS_EVENT_FLAG_NONE;
+ }
+
+ prev_zoom = ev->zoom;
+
+ gboolean is_zoom_in = FALSE;
+ if (diff > 0)
+ is_zoom_in = FALSE;
+ else
+ is_zoom_in = TRUE;
+
+ int state = 0;
+ state = cam_mm_get_state();
+ cam_debug(LOG_UI, " state = %d", state);
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (state == CAMERA_STATE_PREVIEW
+ || state == CAMERA_STATE_CAPTURED) {
+ if (!camapp->zoom_lock) {
+ cam_pinch_zoom_in(ad, is_zoom_in, 1);
+ return EVAS_EVENT_FLAG_NONE;
+ }
+ }
+ } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (state == RECORDER_STATE_READY
+ || state == RECORDER_STATE_RECORDING
+ || state == RECORDER_STATE_PAUSED) {
+ if (!camapp->zoom_lock
+ && camapp->recording_mode != CAM_RECORD_SLOW) {
+ cam_pinch_zoom_in(ad, is_zoom_in, 1);
+ return EVAS_EVENT_FLAG_NONE;
+ }
+ }
+ }
+
+ return EVAS_EVENT_FLAG_NONE;
+}
+
+static void __mouse_click(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ } else if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ } else if (ad->edit_shortcuts_popup) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ return;
+}
+
+static void __mouse_up_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
+ cam_retm_if(ev == NULL, "event_info is NULL");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->is_rotating) {
+ cam_critical(LOG_MM, "rotating...");
+ return;
+ }
+
+ unsigned int focus_capacity = 0;
+ GetCamDevFocusCaps(&focus_capacity, ad);
+
+ if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) {
+ DEBUG_TRACE("double click");
+ return;
+ }
+
+ if (focus_capacity & CAM_CP_FOCUS_AUTO_FOCUS) {
+ CAM_UI_LOG("mouse up :[%d, %d]", ev->canvas.x, ev->canvas.y);
+ cam_mouse_button_up(ad, ev);
+ }
+
+ __mouse_click(ad);
+ cam_app_timeout_checker_update();
+
+ return;
+}
+
+static void __mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *) event_info;
+ cam_retm_if(ev == NULL, "event_info is NULL");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ unsigned int focus_capacity = 0;
+ GetCamDevFocusCaps(&focus_capacity, ad);
+
+ if (ad->is_rotating) {
+ cam_critical(LOG_MM, "rotating...");
+ return;
+ }
+
+ if (ad->is_processing) {
+ cam_critical(LOG_MM, "bust shot popup is displaying...");
+ return;
+ }
+
+ if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) {
+ DEBUG_TRACE("double click");
+
+ if(camapp->af_mode == CAM_FOCUS_FACE){
+ cam_common_set_mouse_double_click_xy(ev->canvas.x, ev->canvas.y);
+ }
+ return;
+ }
+
+ if (focus_capacity & CAM_CP_FOCUS_AUTO_FOCUS) {
+ CAM_UI_LOG("mouse down :[%d, %d]", ev->canvas.x, ev->canvas.y);
+ cam_mouse_button_down(ad, ev);
+ }
+
+ cam_app_timeout_checker_update();
+
+ return;
+}
+
+static void __mouse_move_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ cam_app_timeout_checker_update();
+ return;
+}
+
+void define_mouse_callback(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ unsigned int capacity = 0;
+ GetCamDevFuncCaps(&capacity, ad);
+
+ Evas_Object *eo = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ug_base), "mouse_event_layer");
+
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_DOWN, __mouse_down_cb, ad);
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_UP, __mouse_up_cb, ad);
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_MOVE, __mouse_move_cb, ad);
+
+ if (capacity & CAM_CP_FUNC_ZOOM) {
+ if(ad->gesture == NULL)
+ ad->gesture = elm_gesture_layer_add(eo);
+
+ elm_gesture_layer_cb_set(ad->gesture, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_START, __pinch_start, ad);
+ elm_gesture_layer_cb_set(ad->gesture, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_MOVE, __pinch_move, ad);
+ elm_gesture_layer_cb_set(ad->gesture, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_END, __pinch_end, ad);
+ elm_gesture_layer_cb_set(ad->gesture, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_ABORT, __pinch_end, ad);
+ elm_gesture_layer_attach(ad->gesture, eo);
+ } else {
+ DEL_EVAS_OBJECT(ad->gesture);
+ }
+}
+
+void cam_layout_del_all(void *data)
+{
+ CAM_UI_LOG();
+ struct appdata *ad = (struct appdata *)data;
+ cam_toolbar_destroy(ad);
+
+ if (ad->indicator_edje)
+ cam_indicator_destory(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+int cam_convert_shot_mode_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_SINGLE_MODE:
+ return CAM_MENU_SHOOTING_SINGLE;
+ case CAM_SELF_SINGLE_MODE:
+ return CAM_MENU_SHOOTING_SELF_SINGLE;
+ default:
+ return CAM_MENU_SHOOTING_SINGLE;
+ }
+}
+
+int cam_convert_flash_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_FLASH_OFF:
+ return CAM_MENU_FLASH_OFF;
+ case CAM_FLASH_ON:
+ return CAM_MENU_FLASH_ON;
+ case CAM_FLASH_AUTO:
+ return CAM_MENU_FLASH_AUTO;
+ default:
+ return CAM_MENU_FLASH_OFF;
+ }
+}
+
+int cam_convert_recording_mode_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_RECORD_NORMAL:
+ return CAM_MENU_RECORDING_MODE_NORMAL;
+ case CAM_RECORD_SELF:
+ return CAM_MENU_RECORDING_MODE_SELF_NORMAL;
+ case CAM_RECORD_MMS:
+ return CAM_MENU_RECORDING_MODE_LIMIT;
+ case CAM_RECORD_SELF_MMS:
+ return CAM_MENU_RECORDING_MODE_SELF_LIMIT;
+ case CAM_RECORD_SLOW:
+ return CAM_MENU_RECORDING_MODE_SLOW;
+ case CAM_RECORD_FAST:
+ return CAM_MENU_RECORDING_MODE_FAST;
+ default:
+ return CAM_MENU_RECORDING_MODE_NORMAL;
+ }
+}
+
+int cam_convert_video_resolution_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+
+ case CAM_RESOLUTION_FULLHD:
+ return CAM_MENU_VIDEO_RESOLUTION_FULLHD;
+ case CAM_RESOLUTION_HD:
+ return CAM_MENU_VIDEO_RESOLUTION_HD;
+ case CAM_RESOLUTION_WVGA2:
+ return CAM_MENU_VIDEO_RESOLUTION_WVGA;
+ case CAM_RESOLUTION_VGA:
+ return CAM_MENU_VIDEO_RESOLUTION_VGA;
+ case CAM_RESOLUTION_QVGA:
+ return CAM_MENU_VIDEO_RESOLUTION_QVGA;
+ case CAM_RESOLUTION_QCIF:
+ return CAM_MENU_VIDEO_RESOLUTION_QCIF;
+ default:
+ return CAM_MENU_VIDEO_RESOLUTION_QCIF;
+ }
+}
+
+int cam_convert_photo_resolution_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_RESOLUTION_3264x2448:
+ return CAM_MENU_PHOTO_RESOLUTION_3264x2448;
+ case CAM_RESOLUTION_3264x1960:
+ return CAM_MENU_PHOTO_RESOLUTION_3264x1960;
+ case CAM_RESOLUTION_3264x1836:
+ return CAM_MENU_PHOTO_RESOLUTION_3264x1836;
+ case CAM_RESOLUTION_2800x1920:
+ return CAM_MENU_PHOTO_RESOLUTION_2800x1920;
+ case CAM_RESOLUTION_2560x1536:
+ return CAM_MENU_PHOTO_RESOLUTION_2560x1536;
+ case CAM_RESOLUTION_2560x1440:
+ return CAM_MENU_PHOTO_RESOLUTION_2560x1440;
+ case CAM_RESOLUTION_2048x1536:
+ return CAM_MENU_PHOTO_RESOLUTION_2048x1536;
+ case CAM_RESOLUTION_2048x1152:
+ return CAM_MENU_PHOTO_RESOLUTION_2048x1152;
+ case CAM_RESOLUTION_1920x1080:
+ return CAM_MENU_PHOTO_RESOLUTION_1920x1080;
+ case CAM_RESOLUTION_1600x1200:
+ return CAM_MENU_PHOTO_RESOLUTION_1600x1200;
+ case CAM_RESOLUTION_1392x1392:
+ return CAM_MENU_PHOTO_RESOLUTION_1392x1392;
+ case CAM_RESOLUTION_1280x960:
+ return CAM_MENU_PHOTO_RESOLUTION_1280x960;
+ case CAM_RESOLUTION_1280x720:
+ return CAM_MENU_PHOTO_RESOLUTION_1280x720;
+ case CAM_RESOLUTION_VGA:
+ return CAM_MENU_PHOTO_RESOLUTION_640x480;
+ default:
+ return CAM_MENU_PHOTO_RESOLUTION_640x480;
+ }
+}
+
+int cam_convert_iso_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_ISO_AUTO:
+ return CAM_MENU_ISO_AUTO;
+ case CAM_ISO_50:
+ return CAM_MENU_ISO_50;
+ case CAM_ISO_100:
+ return CAM_MENU_ISO_100;
+ case CAM_ISO_200:
+ return CAM_MENU_ISO_200;
+ case CAM_ISO_400:
+ return CAM_MENU_ISO_400;
+ case CAM_ISO_800:
+ return CAM_MENU_ISO_80O;
+ case CAM_ISO_1600:
+ return CAM_MENU_ISO_1600;
+ case CAM_ISO_3200:
+ return CAM_MENU_ISO_320O;
+ default:
+ return CAM_MENU_ISO_AUTO;
+ }
+}
+
+int cam_convert_focus_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_FOCUS_AUTO:
+ return CAM_MENU_FOCUS_AUTO;
+ case CAM_FOCUS_MACRO:
+ return CAM_MENU_FOCUS_MACRO;
+ case CAM_FOCUS_FACE:
+ return CAM_MENU_FOCUS_FACE_DETECTION;
+ default:
+ return CAM_MENU_FOCUS_AUTO;
+ }
+}
+
+int cam_convert_timer_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_SETTINGS_TIMER_OFF:
+ return CAM_MENU_TIMER_OFF;
+ case CAM_SETTINGS_TIMER_2SEC:
+ return CAM_MENU_TIMER_2SEC;
+ case CAM_SETTINGS_TIMER_5SEC:
+ return CAM_MENU_TIMER_5SEC;
+ case CAM_SETTINGS_TIMER_10SEC:
+ return CAM_MENU_TIMER_10SEC;
+ default:
+ return CAM_MENU_TIMER_OFF;
+ }
+}
+
+int cam_convert_scene_mode_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_SCENE_NONE:
+ return CAM_MENU_SCENE_AUTO;
+ case CAM_SCENE_PORTRAIT:
+ return CAM_MENU_SCENE_PORTRAIT;
+ case CAM_SCENE_LANDSCAPE:
+ return CAM_MENU_SCENE_LANDSCAPE;
+ case CAM_SCENE_NIGHT:
+ return CAM_MENU_SCENE_NIGHT;
+ case CAM_SCENE_SPORTS:
+ return CAM_MENU_SCENE_SPORTS;
+ case CAM_SCENE_PARTY:
+ return CAM_MENU_SCENE_PARTY;
+ case CAM_SCENE_BEACHSNOW:
+ return CAM_MENU_SCENE_BEACHSNOW;
+ case CAM_SCENE_SUNSET:
+ return CAM_MENU_SCENE_SUNSET;
+ case CAM_SCENE_DUSKDAWN:
+ return CAM_MENU_SCENE_DUSKDAWN;
+ case CAM_SCENE_FALL:
+ return CAM_MENU_SCENE_FALL;
+ case CAM_SCENE_FIREWORK:
+ return CAM_MENU_SCENE_FIREWORK;
+ case CAM_SCENE_TEXT:
+ return CAM_MENU_SCENE_TEXT;
+ case CAM_SCENE_CANDLELIGHT:
+ return CAM_MENU_SCENE_CANDLELIGHT;
+ case CAM_SCENE_BACKLIGHT:
+ return CAM_MENU_SCENE_BACKLIGHT;
+ default:
+ return CAM_MENU_SCENE_AUTO;
+ }
+}
+
+int cam_convert_wb_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_SETTINGS_WB_AWB:
+ return CAM_MENU_WB_AWB;
+ case CAM_SETTINGS_WB_INCANDESCENT:
+ return CAM_MENU_WB_INCANDESCENT;
+ case CAM_SETTINGS_WB_FLUORESCENT:
+ return CAM_MENU_WB_FLUORESCENT;
+ case CAM_SETTINGS_WB_DAYLIGHT:
+ return CAM_MENU_WB_DAYLIGHT;
+ case CAM_SETTINGS_WB_CLOUDY:
+ return CAM_MENU_WB_CLOUDY;
+ case CAM_SETTINGS_WB_SHADE:
+ return CAM_MENU_WB_SHADE;
+ case CAM_SETTINGS_WB_HORIZON:
+ return CAM_MENU_WB_HORIZON;
+ case CAM_SETTINGS_WB_FLASH:
+ return CAM_MENU_WB_FLASH;
+ case CAM_SETTINGS_WB_CUSTOM:
+ return CAM_MENU_WB_CLOUDY;
+ default:
+ return CAM_MENU_WB_AWB;
+ }
+}
+
+int cam_convert_effect_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_SETTINGS_EFFECTS_NOR:
+ return CAM_MENU_EFFECT_NONE;
+ case CAM_SETTINGS_EFFECTS_NEGATIVE:
+ return CAM_MENU_EFFECT_NEGATIVE;
+ case CAM_SETTINGS_EFFECTS_MONO:
+ return CAM_MENU_EFFECT_BLACKANDWHITE;
+ case CAM_SETTINGS_EFFECTS_SEPIA:
+ return CAM_MENU_EFFECT_SEPIA;
+ default:
+ return CAM_MENU_EFFECT_NONE;
+ }
+}
+
+int cam_convert_metering_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_METERING_MATRIX:
+ return CAM_MENU_METERING_MATRIX;
+ case CAM_METERING_CENTER_WEIGHTED:
+ return CAM_MENU_METERING_CENTER_WEIGHTED;
+ case CAM_METERING_SPOT:
+ return CAM_MENU_METERING_SPOT;
+ default:
+ return CAM_MENU_METERING_MATRIX;
+ }
+}
+
+int cam_convert_storage_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_STORAGE_INTERNAL:
+ return CAM_MENU_STORAGE_PHONE;
+ case CAM_STORAGE_EXTERNAL:
+ return CAM_MENU_STORAGE_MMC;
+ default:
+ return CAM_MENU_STORAGE_PHONE;
+ }
+}
+
+int cam_convert_volume_key_to_menu_item(int mode)
+{
+ switch(mode)
+ {
+ case CAM_VOLUME_KEY_ZOOM:
+ return CAM_MENU_VOLUME_KEY_ZOOM;
+ case CAM_VOLUME_KEY_SHUTTER:
+ return CAM_MENU_VOLUME_KEY_SHUTTER;
+ default:
+ return CAM_MENU_VOLUME_KEY_ZOOM;
+ }
+}
+
+int cam_convert_menu_item_to_mmfw_value(int mode)
+{
+ switch(mode)
+ {
+ case CAM_MENU_SCENE_AUTO:
+ return CAM_SCENE_NONE;
+ case CAM_MENU_SCENE_PORTRAIT:
+ return CAM_SCENE_PORTRAIT;
+ case CAM_MENU_SCENE_LANDSCAPE:
+ return CAM_SCENE_LANDSCAPE;
+ case CAM_MENU_SCENE_NIGHT:
+ return CAM_SCENE_NIGHT;
+ case CAM_MENU_SCENE_SPORTS:
+ return CAM_SCENE_SPORTS;
+ case CAM_MENU_SCENE_PARTY:
+ return CAM_SCENE_PARTY;
+ case CAM_MENU_SCENE_BEACHSNOW:
+ return CAM_SCENE_BEACHSNOW;
+ case CAM_MENU_SCENE_SUNSET:
+ return CAM_SCENE_SUNSET;
+ case CAM_MENU_SCENE_DUSKDAWN:
+ return CAM_SCENE_DUSKDAWN;
+ case CAM_MENU_SCENE_FALL:
+ return CAM_SCENE_FALL;
+ case CAM_MENU_SCENE_FIREWORK:
+ return CAM_SCENE_FIREWORK;
+ case CAM_MENU_SCENE_TEXT:
+ return CAM_SCENE_TEXT;
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ return CAM_SCENE_CANDLELIGHT;
+ case CAM_MENU_SCENE_BACKLIGHT:
+ return CAM_SCENE_BACKLIGHT;
+ case CAM_MENU_SHOOTING_SINGLE:
+ return CAM_SINGLE_MODE;
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ return CAM_SELF_SINGLE_MODE;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
+ return CAM_RESOLUTION_3264x2448;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
+ return CAM_RESOLUTION_3264x1960;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
+ return CAM_RESOLUTION_3264x1836;
+ case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
+ return CAM_RESOLUTION_2800x1920;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
+ return CAM_RESOLUTION_2560x1920;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1536:
+ return CAM_RESOLUTION_2560x1536;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
+ return CAM_RESOLUTION_2560x1440;
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
+ return CAM_RESOLUTION_2048x1536;
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
+ return CAM_RESOLUTION_2048x1152;
+ case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
+ return CAM_RESOLUTION_1920x1080;
+ case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
+ return CAM_RESOLUTION_1600x1200;
+ case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
+ return CAM_RESOLUTION_1392x1392;
+ case CAM_MENU_PHOTO_RESOLUTION_1280x960:
+ return CAM_RESOLUTION_1280x960;
+ case CAM_MENU_PHOTO_RESOLUTION_1280x720:
+ return CAM_RESOLUTION_1280x720;
+ case CAM_MENU_PHOTO_RESOLUTION_640x480:
+ return CAM_RESOLUTION_VGA;
+ case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
+ return CAM_RESOLUTION_FULLHD;
+ case CAM_MENU_VIDEO_RESOLUTION_HD:
+ return CAM_RESOLUTION_HD;
+ case CAM_MENU_VIDEO_RESOLUTION_WVGA:
+ return CAM_RESOLUTION_WVGA2;
+ case CAM_MENU_VIDEO_RESOLUTION_VGA:
+ return CAM_RESOLUTION_VGA;
+ case CAM_MENU_VIDEO_RESOLUTION_QVGA:
+ return CAM_RESOLUTION_QVGA;
+ case CAM_MENU_VIDEO_RESOLUTION_QCIF:
+ return CAM_RESOLUTION_QCIF;
+ case CAM_MENU_WB_AWB:
+ return CAM_SETTINGS_WB_AWB;
+ case CAM_MENU_WB_INCANDESCENT:
+ return CAM_SETTINGS_WB_INCANDESCENT;
+ case CAM_MENU_WB_FLUORESCENT:
+ return CAM_SETTINGS_WB_FLUORESCENT;
+ case CAM_MENU_WB_DAYLIGHT:
+ return CAM_SETTINGS_WB_DAYLIGHT;
+ case CAM_MENU_WB_CLOUDY:
+ return CAM_SETTINGS_WB_CLOUDY;
+ case CAM_MENU_WB_SHADE:
+ return CAM_SETTINGS_WB_SHADE;
+ case CAM_MENU_WB_HORIZON:
+ return CAM_SETTINGS_WB_HORIZON;
+ case CAM_MENU_WB_FLASH:
+ return CAM_SETTINGS_WB_FLASH;
+ case CAM_MENU_WB_CUSTOM:
+ return CAM_SETTINGS_WB_CUSTOM;
+ case CAM_MENU_EFFECT_NONE:
+ return CAM_SETTINGS_EFFECTS_NOR;
+ case CAM_MENU_EFFECT_NEGATIVE:
+ return CAM_SETTINGS_EFFECTS_NEGATIVE;
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ return CAM_SETTINGS_EFFECTS_GRAY;
+ case CAM_MENU_EFFECT_SEPIA:
+ return CAM_SETTINGS_EFFECTS_SEPIA;
+ case CAM_MENU_FOCUS_AUTO:
+ return CAM_FOCUS_AUTO;
+ case CAM_MENU_FOCUS_MACRO:
+ return CAM_FOCUS_MACRO;
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ return CAM_FOCUS_FACE;
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ return CAM_RECORD_NORMAL;
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ return CAM_RECORD_MMS;
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ return CAM_RECORD_SLOW;
+ case CAM_MENU_RECORDING_MODE_FAST:
+ return CAM_RECORD_FAST;
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ return CAM_RECORD_SELF;
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ return CAM_RECORD_SELF_MMS;
+ case CAM_MENU_FLASH_OFF:
+ return CAM_FLASH_OFF;
+ case CAM_MENU_FLASH_ON:
+ return CAM_FLASH_ON;
+ case CAM_MENU_FLASH_AUTO:
+ return CAM_FLASH_AUTO;
+ case CAM_MENU_METERING_MATRIX:
+ return CAM_METERING_MATRIX;
+ case CAM_MENU_METERING_CENTER_WEIGHTED:
+ return CAM_METERING_CENTER_WEIGHTED;
+ case CAM_MENU_METERING_SPOT:
+ return CAM_METERING_SPOT;
+ case CAM_MENU_ISO_AUTO:
+ return CAM_ISO_AUTO;
+ case CAM_MENU_ISO_50:
+ return CAM_ISO_50;
+ case CAM_MENU_ISO_100:
+ return CAM_ISO_100;
+ case CAM_MENU_ISO_200:
+ return CAM_ISO_200;
+ case CAM_MENU_ISO_400:
+ return CAM_ISO_400;
+ case CAM_MENU_ISO_80O:
+ return CAM_ISO_800;
+ case CAM_MENU_ISO_1600:
+ return CAM_ISO_1600;
+ case CAM_MENU_ISO_320O:
+ return CAM_ISO_3200;
+
+ default:
+ return -1;
+
+ }
+}
+
+int cam_get_menu_item_to_index(void* data, int menu_type, int item)
+{
+ cam_menu_composer* menu_composer = NULL;
+ menu_composer = calloc(1, sizeof(cam_menu_composer));
+
+ switch((CAM_MENU_ITEM)menu_type)
+ {
+ case CAM_MENU_SHOOTING_MODE:
+ cam_compose_menu_shooting_mode(data, menu_composer);
+ break;
+
+ case CAM_MENU_FLASH:
+ cam_compose_menu_flash(data, menu_composer);
+ break;
+
+ case CAM_MENU_RECORDING_MODE:
+ cam_compose_menu_recording_mode(data, menu_composer);
+ break;
+
+ case CAM_MENU_PHOTO_RESOLUTION:
+ cam_compose_menu_photo_resolution(data, menu_composer);
+ break;
+
+ case CAM_MENU_VIDEO_RESOLUTION:
+ cam_compose_menu_video_resolution(data, menu_composer);
+ break;
+
+ case CAM_MENU_ISO:
+ cam_compose_menu_iso(data, menu_composer);
+ break;
+
+ case CAM_MENU_FOCUS_MODE:
+ cam_compose_menu_focus_mode(data, menu_composer);
+ break;
+
+ case CAM_MENU_SCENE_MODE:
+ cam_compose_menu_scene_mode(data, menu_composer);
+ break;
+
+ case CAM_MENU_WHITE_BALANCE:
+ cam_compose_menu_wb(data, menu_composer);
+ break;
+
+ case CAM_MENU_EFFECTS:
+ cam_compose_menu_effect(data, menu_composer);
+ break;
+
+ case CAM_MENU_METERING:
+ cam_compose_menu_metering(data, menu_composer);
+ break;
+
+ case CAM_MENU_STORAGE:
+ cam_compose_menu_storage(data, menu_composer);
+ break;
+
+ case CAM_MENU_VOLUME_KEY:
+ cam_compose_menu_volume_key(data, menu_composer);
+ break;
+
+ default:
+ break;
+ }
+
+ CAM_MENU_ITEM* menu_item = NULL;
+ int size = eina_array_count(menu_composer->array);
+
+
+ int index = 0;
+ for (index = 0; index < size; index++) {
+ menu_item = (CAM_MENU_ITEM*)eina_array_data_get(menu_composer->array, index);
+
+ if((CAM_MENU_ITEM)item == *menu_item) {
+ cam_compose_free(menu_composer);
+ return index;
+ }
+ }
+
+ cam_compose_free(menu_composer);
+ return INVALID_INDEX;
+}
+
+
+int cam_get_value_to_index(void* data, int menu_type, int value)
+{
+ cam_menu_composer* menu_composer = NULL;
+ menu_composer = calloc(1, sizeof(cam_menu_composer));
+
+ int item = 0;
+
+ switch(menu_type)
+ {
+ case CAM_MENU_SHOOTING_MODE:
+ cam_compose_menu_shooting_mode(data, menu_composer);
+ item = cam_convert_shot_mode_to_menu_item(value);
+ break;
+
+ case CAM_MENU_FLASH:
+ cam_compose_menu_flash(data, menu_composer);
+ item = cam_convert_flash_to_menu_item(value);
+ break;
+
+ case CAM_MENU_RECORDING_MODE:
+ cam_compose_menu_recording_mode(data, menu_composer);
+ item = cam_convert_recording_mode_to_menu_item(value);
+ break;
+
+ case CAM_MENU_PHOTO_RESOLUTION:
+ cam_compose_menu_photo_resolution(data, menu_composer);
+ item = cam_convert_photo_resolution_to_menu_item(value);
+ break;
+
+ case CAM_MENU_VIDEO_RESOLUTION:
+ cam_compose_menu_video_resolution(data, menu_composer);
+ item = cam_convert_video_resolution_to_menu_item(value);
+ break;
+
+ case CAM_MENU_ISO:
+ cam_compose_menu_iso(data, menu_composer);
+ item = cam_convert_iso_to_menu_item(value);
+ break;
+
+ case CAM_MENU_FOCUS_MODE:
+ cam_compose_menu_focus_mode(data, menu_composer);
+ item = cam_convert_focus_to_menu_item(value);
+ break;
+
+ case CAM_MENU_TIMER:
+ cam_compose_menu_timer_mode(data, menu_composer);
+ item = cam_convert_timer_to_menu_item(value);
+ break;
+
+ case CAM_MENU_SCENE_MODE:
+ cam_compose_menu_scene_mode(data, menu_composer);
+ item = cam_convert_scene_mode_to_menu_item(value);
+ break;
+
+ case CAM_MENU_WHITE_BALANCE:
+ cam_compose_menu_wb(data, menu_composer);
+ item = cam_convert_wb_to_menu_item(value);
+ break;
+
+ case CAM_MENU_EFFECTS:
+ cam_compose_menu_effect(data, menu_composer);
+ item = cam_convert_effect_to_menu_item(value);
+ break;
+
+ case CAM_MENU_METERING:
+ cam_compose_menu_metering(data, menu_composer);
+ item = cam_convert_metering_to_menu_item(value);
+ break;
+
+ case CAM_MENU_STORAGE:
+ cam_compose_menu_storage(data, menu_composer);
+ item = cam_convert_storage_to_menu_item(value);
+ break;
+
+ case CAM_MENU_VOLUME_KEY:
+ cam_compose_menu_volume_key(data, menu_composer);
+ item = cam_convert_volume_key_to_menu_item(value);
+ break;
+
+ default:
+ break;
+ }
+
+ CAM_MENU_ITEM* menu_item = NULL;
+ int size = eina_array_count(menu_composer->array);
+
+ int index = 0;
+ for (index = 0; index < size; index++) {
+ menu_item = (CAM_MENU_ITEM*)eina_array_data_get(menu_composer->array, index);
+
+ if((CAM_MENU_ITEM)item == *menu_item) {
+ cam_compose_free(menu_composer);
+ return index;
+ }
+ }
+
+ cam_compose_free(menu_composer);
+ return INVALID_INDEX;
+}
+
+int cam_get_sound_index(int sound)
+{
+ return sound + 1;
+}
+
+int shot_mode_set(void *data, int mode)
+{
+ CAM_UI_LOG("%d", mode);
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, -1, "camapp_handle is NULL");
+
+ GValue value = { 0 };
+ if (mode == CAM_SINGLE_MODE)
+ camapp->enable_touch_af = TRUE;
+ else
+ camapp->enable_touch_af = FALSE;
+
+ CAM_GVALUE_SET_INT(value, mode);
+ if (mode != camapp->shooting_mode) {
+ cam_handle_value_set(ad, PROP_SHOT_MODE, &value);
+ }
+ return 0;
+}
+
+
+
diff --git a/src/edc-callback/cam_ev_edc_callback.c b/src/edc-callback/cam_ev_edc_callback.c
new file mode 100755
index 0000000..1be8fff
--- /dev/null
+++ b/src/edc-callback/cam_ev_edc_callback.c
@@ -0,0 +1,277 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam.h"
+#include "cam_ev_edc_callback.h"
+
+
+#define EV_DESTROY_TIME 3
+#define EXPOSURE_VALUE_GAP 4
+
+
+static Evas_Object *slider = NULL;
+static Ecore_Timer *ev_destroy_timer = NULL;
+
+static Eina_Bool __ev_destroy_timer_cb(void *data);
+static void __set_ev_value(struct appdata *data, int ev_value);
+static void __ev_slider_stop_cb(void *data, Evas_Object *obj, void *event_info);
+static void __ev_slider_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __ev_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+
+static Eina_Bool __ev_destroy_timer_cb(void *data)
+{
+ CAM_UI_LOG();
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ unload_ev_edje(ad);
+
+ if (ev_destroy_timer)
+ ev_destroy_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __set_ev_value(struct appdata *data, int ev_value)
+{
+ CAM_UI_LOG();
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ GValue value = { 0 };
+ CAM_GVALUE_SET_INT(value, ev_value);
+
+ if (!cam_handle_value_set(ad, PROP_BRIGHTNESS, &value)) {
+ DEBUG_TRACE("cam_handle_value_set failed");
+ }
+}
+
+static void __ev_slider_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (obj) {
+ Evas_Object *slider = (Evas_Object *)obj;
+ int slider_value = (int)elm_slider_value_get(slider);
+ elm_slider_value_set(slider, slider_value);
+ } else {
+ cam_critical(LOG_UI, "Error : slider is NULL");
+ }
+
+ if(ev_destroy_timer)
+ ecore_timer_reset(ev_destroy_timer);
+}
+
+static void __ev_slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ if (obj) {
+ Evas_Object *slider = (Evas_Object *)obj;
+ int slider_value = (int)elm_slider_value_get(slider);
+
+ if (camapp->self_portrait == FALSE)
+ slider_value += EXPOSURE_VALUE_GAP;
+
+ __set_ev_value(ad, slider_value);
+ } else {
+ cam_critical(LOG_UI, "Error : slider is NULL");
+ }
+
+ if(ev_destroy_timer)
+ ecore_timer_reset(ev_destroy_timer);
+ cam_app_timeout_checker_update();
+}
+
+static void __ev_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ if (emission && source)
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ int slider_value = (int)elm_slider_value_get(slider);
+
+ if (camapp->self_portrait == FALSE)
+ slider_value += EXPOSURE_VALUE_GAP;
+
+ if (emission) {
+ if (strcmp(emission, "icon_minus,clicked") == 0) {
+ if (slider_value > camapp->brightness_min)
+ slider_value--;
+ } else if (strcmp(emission, "icon_plus,clicked") == 0) {
+ if (slider_value < camapp->brightness_max)
+ slider_value++;
+ }
+ } else {
+ cam_critical(LOG_UI, "emission is NULL");
+ }
+
+ __set_ev_value(ad, slider_value);
+ update_ev_edje(ad);
+
+ if(ev_destroy_timer)
+ ecore_timer_reset(ev_destroy_timer);
+ cam_app_timeout_checker_update();
+}
+
+gboolean load_ev_edje(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ if(ad->ev_edje)
+ unload_ev_edje(ad);
+
+ int slider_max = 0;
+ int slider_min = 0;
+
+ elm_object_part_content_unset(ad->ug_base, "ev_layout");
+
+ /* ev bg */
+ gboolean portrait = FALSE;
+ gboolean slider_inverse = FALSE;
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_NAME, GRP_MAIN);
+ portrait = FALSE;
+ slider_inverse = TRUE;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_INVERSE_NAME, GRP_MAIN);
+ portrait = FALSE;
+ slider_inverse = FALSE;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_VERTICAL_NAME, GRP_MAIN);
+ portrait = TRUE;
+ slider_inverse = FALSE;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_VERTICAL_INVERSE_NAME, GRP_MAIN);
+ slider_inverse = TRUE;
+ portrait = TRUE;
+ break;
+ default:
+ cam_critical(LOG_UI, "Invalid target direction!!!");
+ }
+
+ cam_retvm_if(ad->ev_edje == NULL, FALSE, "ev_edje is NULL");
+ elm_object_part_content_set(ad->ug_base, "ev_layout", ad->ev_edje);
+
+ /* ev icon */
+ if (!ad->ev_icon_minus_edje) {
+ ad->ev_icon_minus_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ev_edje), "icon_minus");
+ }
+ cam_retvm_if(ad->ev_icon_minus_edje == NULL, FALSE, "ev_icon_minus_edje is NULL");
+
+ if (!ad->ev_icon_plus_edje) {
+ ad->ev_icon_plus_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ev_edje), "icon_plus");
+ }
+ cam_retvm_if(ad->ev_icon_plus_edje == NULL, FALSE, "ev_icon_plus_edje is NULL");
+
+ /* ev slider */
+ slider = elm_slider_add(ad->ev_edje);
+ cam_retvm_if(slider == NULL, FALSE, "slider is NULL");
+
+ if (camapp->self_portrait == FALSE)
+ slider_max = camapp->brightness_max / 2;
+ else
+ slider_max = camapp->brightness_max;
+
+ slider_min = (-slider_max);
+
+ elm_object_style_set(slider, "camera");
+ if (portrait) {
+ elm_slider_horizontal_set(slider, EINA_TRUE);
+ } else {
+ elm_slider_horizontal_set(slider, EINA_FALSE);
+ }
+ if (slider_inverse) {
+ elm_slider_inverted_set(slider, EINA_TRUE);
+ } else {
+ elm_slider_inverted_set(slider, EINA_FALSE);
+ }
+
+ elm_slider_min_max_set(slider, slider_min, slider_max);
+
+ if (camapp->self_portrait == FALSE)
+ elm_slider_value_set(slider, camapp->brightness - EXPOSURE_VALUE_GAP);
+ else
+ elm_slider_value_set(slider, camapp->brightness);
+
+ evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_content_set(ad->ev_edje, "slider", slider);
+
+ evas_object_smart_callback_del(slider, "slider,drag,stop", __ev_slider_stop_cb);
+ evas_object_smart_callback_add(slider, "slider,drag,stop", __ev_slider_stop_cb, (void*)ad);
+ evas_object_smart_callback_del(slider, "changed", __ev_slider_changed_cb);
+ evas_object_smart_callback_add(slider, "changed", __ev_slider_changed_cb, (void*)ad);
+ edje_object_signal_callback_del(_EDJ(ad->ev_edje), "*", "ev_icon_signal", __ev_selected_cb);
+ edje_object_signal_callback_add(_EDJ(ad->ev_edje), "*", "ev_icon_signal", __ev_selected_cb, (void *)ad);
+
+ ev_destroy_timer = ecore_timer_add(EV_DESTROY_TIME, __ev_destroy_timer_cb, ad);
+
+ return TRUE;
+}
+
+gboolean update_ev_edje(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_retvm_if(ad->ev_edje == NULL, FALSE, "ev_edje is NULL");
+ cam_retvm_if(slider == NULL, FALSE, "ev slider is NULL");
+
+ if (camapp->self_portrait == FALSE)
+ elm_slider_value_set(slider, camapp->brightness - EXPOSURE_VALUE_GAP);
+ else
+ elm_slider_value_set(slider, camapp->brightness);
+
+ return TRUE;
+}
+
+gboolean unload_ev_edje(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->ev_icon_minus_edje);
+ DEL_EVAS_OBJECT(ad->ev_icon_plus_edje);
+ DEL_EVAS_OBJECT(ad->ev_edje);
+ REMOVE_TIMER(ev_destroy_timer);
+
+ return TRUE;
+}
+
+//endfile
diff --git a/src/edc-callback/cam_indicator_edc_callback.c b/src/edc-callback/cam_indicator_edc_callback.c
new file mode 100755
index 0000000..9525b36
--- /dev/null
+++ b/src/edc-callback/cam_indicator_edc_callback.c
@@ -0,0 +1,435 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include "camera_utils.h"
+
+#include "cam_indicator_edc_callback.h"
+#include "cam_common_edc_callback.h"
+#include "cam_lbs.h"
+#include "edc_string.h"
+#include "edc_image_name.h"
+
+#define CHARGING_INTERVAL (0.5)
+#define SECONDS_IN_HOUR (1*60*60)
+#define SECONDS_RECORDING_MAX ((99*60*60)+(99*60)+99)
+
+static char *storage_image[CAM_STORAGE_NUM] = {
+ INDICATOR_STORAGE_INTERNAL_ICON,
+ INDICATOR_STORAGE_CARD_ICON,
+ INDICATOR_STORAGE_INTERNAL_ICON,
+};
+
+#define CAM_BATTERY_LEVEL_MAX 8
+static char *battery_image[CAM_BATTERY_LEVEL_MAX] = {
+ INDICATOR_BATTERY_LEVEL_00_ICON,
+ INDICATOR_BATTERY_LEVEL_01_ICON,
+ INDICATOR_BATTERY_LEVEL_02_ICON,
+ INDICATOR_BATTERY_LEVEL_03_ICON,
+ INDICATOR_BATTERY_LEVEL_04_ICON,
+ INDICATOR_BATTERY_LEVEL_05_ICON,
+ INDICATOR_BATTERY_FULL_ICON,
+ INDICATOR_BATTERY_CHARGE_ICON,
+};
+
+static char *gps_level_image[CAM_LBS_STATE_NUM] = {
+ INDICATOR_GPS_STATE_OFF_ICON,
+ INDICATOR_GPS_STATE_ON_ICON,
+ INDICATOR_GPS_STATE_CONNECT_ANI01_ICON,
+ INDICATOR_GPS_STATE_CONNECT_ANI02_ICON,
+ INDICATOR_GPS_STATE_CONNECT_ANI03_ICON,
+};
+
+static char *mute_image = INDICATOR_MUTE_ICON;
+
+static Evas_Object *indicator_image_obj_battery = NULL;
+static Evas_Object *indicator_image_obj_storage = NULL;
+static Evas_Object *indicator_image_obj_gps_level = NULL;
+static Evas_Object *indicator_image_obj_mute = NULL;
+
+
+void indicator_update_storage(struct appdata *ad)
+{
+ int mmc_state = -1;
+ debug_fenter(LOG_UI);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "camapp_handle is NULL");
+ cam_retm_if(ad->indicator_edje == NULL, "indicator_edje is NULL");
+ const char *image_file = NULL;
+
+ vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, &(ad->camapp_handle->storage));
+
+ if (ad->camapp_handle->storage == CAM_STORAGE_EXTERNAL) {
+ if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
+ if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED) {
+ cam_info(LOG_UI, "MMC card is removed");
+ GValue value = { 0 };
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ }
+ }
+ }
+
+ switch (ad->camapp_handle->storage) {
+ case CAM_STORAGE_INTERNAL:
+ image_file = storage_image[CAM_STORAGE_INTERNAL];
+ break;
+ case CAM_STORAGE_EXTERNAL:
+ image_file = storage_image[CAM_STORAGE_EXTERNAL];
+ break;
+ default:
+ break;
+ }
+
+ if (!indicator_image_obj_storage) {
+ indicator_image_obj_storage = elm_image_add(ad->indicator_edje);
+ }
+
+ cam_retm_if(indicator_image_obj_storage == NULL,
+ "indicator_image_obj_storage is NULL");
+ elm_image_file_set(indicator_image_obj_storage, CAM_IMAGE_EDJ_NAME, image_file);
+
+ if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE
+ && ad->is_recording == TRUE)
+ edje_object_part_swallow(_EDJ(ad->indicator_edje), INDI_REC_STORAGE,
+ indicator_image_obj_storage);
+ else
+ edje_object_part_swallow(_EDJ(ad->indicator_edje), INDICATOR_STORAGE,
+ indicator_image_obj_storage);
+
+ ad->remained_count = cam_system_get_still_count_by_resolution(ad);
+ indicator_update_remain_count(ad);
+}
+
+void indicator_update_gps_level(struct appdata *ad)
+{
+ debug_fenter(LOG_UI);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ cam_ret_if(ad->toolbar_hided);
+ cam_retm_if(ad->indicator_edje == NULL, "indicator_edje is NULL");
+ const char *image_file = NULL;
+ /*DEBUG_TRACE("====level : %d", ad->gps_level);*/
+ switch (camapp->gps_level) {
+ case CAM_LBS_STATE_DISABLE:
+ image_file = gps_level_image[CAM_LBS_STATE_DISABLE];
+ break;
+ case CAM_LBS_STATE_SERVICE_START:
+ image_file = gps_level_image[CAM_LBS_STATE_SERVICE_START];
+ break;
+ case CAM_LBS_STATE_SERVICE_ENABLE:
+ image_file = gps_level_image[CAM_LBS_STATE_SERVICE_ENABLE];
+ break;
+ case CAM_LBS_STATE_ACCURANCY_ROUGH:
+ image_file = gps_level_image[CAM_LBS_STATE_ACCURANCY_ROUGH];
+ break;
+ case CAM_LBS_STATE_ACCURANCY_DETAILED:
+ image_file = gps_level_image[CAM_LBS_STATE_ACCURANCY_DETAILED];
+ break;
+ default:
+ image_file = gps_level_image[CAM_LBS_STATE_DISABLE];
+ }
+ if (!indicator_image_obj_gps_level) {
+ indicator_image_obj_gps_level =
+ elm_image_add(ad->indicator_edje);
+ }
+ cam_retm_if(indicator_image_obj_gps_level == NULL,
+ "indicator_image_obj_gps_level is NULL");
+ elm_image_file_set(indicator_image_obj_gps_level, CAM_IMAGE_EDJ_NAME, image_file);
+
+ cam_debug(LOG_CAM, "ad->camapp_handle->camera_mode %d", camapp->camera_mode);
+ cam_debug(LOG_CAM, "ad->mm_state %d", ad->mm_state);
+
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE
+ && ad->is_recording == TRUE) {
+ if (camapp->gps_level == CAM_LBS_STATE_DISABLE) {
+ HIDE_EVAS_OBJECT(indicator_image_obj_gps_level);
+ edje_object_part_unswallow(_EDJ(ad->indicator_edje), indicator_image_obj_gps_level);
+
+ } else {
+ SHOW_EVAS_OBJECT(indicator_image_obj_gps_level);
+ edje_object_part_swallow(_EDJ(ad->indicator_edje),
+ INDI_REC_GPS,
+ indicator_image_obj_gps_level);
+ }
+ } else {
+ if (camapp->gps_level == CAM_LBS_STATE_DISABLE) {
+ HIDE_EVAS_OBJECT(indicator_image_obj_gps_level);
+ edje_object_part_unswallow(_EDJ(ad->indicator_edje), indicator_image_obj_gps_level);
+ } else {
+ SHOW_EVAS_OBJECT(indicator_image_obj_gps_level);
+ edje_object_part_swallow(_EDJ(ad->indicator_edje),
+ INDICATOR_GPS,
+ indicator_image_obj_gps_level);
+ }
+ }
+}
+
+void indicator_update_gps(struct appdata *ad)
+{
+ debug_fenter(LOG_UI);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "camapp_handle is NULL");
+ cam_retm_if(ad->indicator_edje == NULL, "indicator_edje is NULL");
+ indicator_update_gps_level(ad);
+}
+
+void indicator_update_remain_count(struct appdata *ad)
+{
+ char remain[80] = "";
+ debug_fenter(LOG_UI);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "camapp_handle is NULL");
+ cam_retm_if(ad->indicator_edje == NULL, "indicator_edje is NULL");
+
+ gint64 remained_count = 0;
+ remained_count = ad->remained_count;
+
+ if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE && ad->is_recording == TRUE) {
+ snprintf(remain, sizeof(remain), "%s", " ");
+ } else {
+ if (remained_count >= 0 && remained_count < 301) {
+ snprintf(remain, sizeof(remain), "%d", (int)remained_count);
+ } else {
+ snprintf(remain, sizeof(remain), "%d", (int)remained_count);
+ snprintf(remain, sizeof(remain), "%s", " ");
+ }
+ }
+
+ DEBUG_TRACE("INDICATOR REMAIN = %s ", remain);
+
+ edje_object_part_text_set(_EDJ(ad->indicator_edje), INDICATOR_NUM, remain);
+}
+
+static Eina_Bool cam_indicator_battery_ani_cb(void *data)
+{
+ struct appdata *ad = data;
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, 0, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ ad->battery_animation_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+
+ }
+
+ if (indicator_image_obj_battery) {
+ if (evas_object_visible_get(indicator_image_obj_battery))
+ evas_object_hide(indicator_image_obj_battery);
+ else
+ evas_object_show(indicator_image_obj_battery);
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static void cam_indicator_draw_battery_ani(void *data)
+{
+ struct appdata *ad = data;
+ CamAppData *camapp = NULL;
+ debug_fenter(LOG_UI);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+ if (ad->battery_animation_timer) {
+ cam_debug(LOG_UI, "battery_ani timer already exists! ");
+ return;
+ }
+ ad->battery_animation_timer =
+ ecore_timer_add(CHARGING_INTERVAL, cam_indicator_battery_ani_cb, ad);
+}
+
+void indicator_update_battery(struct appdata *ad, int level)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "camapp_handle is NULL");
+ cam_retm_if(ad->indicator_edje == NULL, "indicator_edje is NULL");
+ const char *image_file = NULL;
+ int battery_level = 0;
+ gboolean show_icon = TRUE;
+
+ if (ad->battery_animation_timer) {
+ ecore_timer_del(ad->battery_animation_timer);
+ ad->battery_animation_timer = NULL;
+ }
+
+ if (ad->camapp_handle->battery_charging) {
+ battery_level = 7;
+ } else {
+ if (level > 15 && level <= 20) // step2
+ battery_level = 2;
+ else if (level > 5 && level <= 15) // step1
+ battery_level = 1;
+ else if (level < 5) {// blinking
+ battery_level = 0;
+ cam_indicator_draw_battery_ani((void *)ad);
+ }
+ else
+ show_icon = FALSE;
+ }
+
+ cam_debug(LOG_CAM, "level [%d] img_index[%d] show state [%d]", level, battery_level, show_icon);
+
+ if (show_icon) {
+ image_file = battery_image[battery_level];
+
+ if (!indicator_image_obj_battery) {
+ indicator_image_obj_battery = elm_image_add(ad->indicator_edje);
+ }
+ cam_retm_if(indicator_image_obj_battery == NULL, "indicator_image_obj_battery is NULL");
+ elm_image_file_set(indicator_image_obj_battery, CAM_IMAGE_EDJ_NAME, image_file);
+ if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE
+ && ad->is_recording == TRUE)
+ edje_object_part_swallow(_EDJ(ad->indicator_edje), INDI_REC_BATTERY, indicator_image_obj_battery);
+ else
+ edje_object_part_swallow(_EDJ(ad->indicator_edje), INDICATOR_BATTERY, indicator_image_obj_battery);
+ } else {
+ if (indicator_image_obj_battery)
+ evas_object_hide(indicator_image_obj_battery);
+ }
+}
+
+void indicator_update_mute_icon(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "camapp_handle is NULL");
+ cam_retm_if(ad->indicator_edje == NULL, "indicator_edje is NULL");
+ const char *image_file = NULL;
+
+ if ((ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE)
+ && (ad->camapp_handle->recording_mode == CAM_RECORD_SLOW
+ || ad->camapp_handle->recording_mode == CAM_RECORD_FAST)) {
+ if (ad->is_recording == TRUE) {
+ image_file = mute_image;
+
+ if (!indicator_image_obj_mute) {
+ indicator_image_obj_mute = elm_image_add(ad->indicator_edje);
+ }
+
+ cam_retm_if(indicator_image_obj_mute == NULL, "indicator_image_obj_mute is NULL");
+ elm_image_file_set(indicator_image_obj_mute, CAM_IMAGE_EDJ_NAME, image_file);
+ edje_object_part_swallow(_EDJ(ad->indicator_edje), INDI_REC_MUTE, indicator_image_obj_mute);
+ } else {
+ DEL_EVAS_OBJECT(indicator_image_obj_mute);
+ }
+ } else {
+ DEL_EVAS_OBJECT(indicator_image_obj_mute);
+ }
+}
+
+void cam_indicator_update(struct appdata *ad)
+{
+#ifndef CAMERA_MACHINE_I686
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "camapp_handle is NULL");
+ indicator_update_battery(ad, ad->camapp_handle->battery_level);
+ DEBUG_TRACE("charging = %d",ad->camapp_handle->battery_charging);
+ indicator_update_storage(ad);
+ indicator_update_gps(ad);
+ indicator_update_mute_icon(ad);
+#endif
+ return;
+}
+
+void cam_indicator_set_show_state(struct appdata *ad, bool show)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->indicator_edje) {
+ if (show)
+ evas_object_show(ad->indicator_edje);
+ else
+ evas_object_hide(ad->indicator_edje);
+ }
+}
+
+int cam_indicator_create(struct appdata *ad)
+{
+ debug_fenter(LOG_UI);
+ cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
+
+ if (ad->indicator_edje != NULL) {
+ cam_indicator_update(ad);
+ evas_object_show(ad->indicator_edje);
+ return EXIT_SUCCESS;
+ }
+
+ elm_object_part_content_unset(ad->ug_base, "indicator_layout");
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ ad->indicator_edje = cam_app_load_edj(ad->ug_base, CAM_INDICATOR_EDJ_NAME, "indicator_landscape");
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->indicator_edje = cam_app_load_edj(ad->ug_base, CAM_INDICATOR_EDJ_NAME, "indicator_landscape_inverse");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ ad->indicator_edje = cam_app_load_edj(ad->ug_base, CAM_INDICATOR_EDJ_NAME, "indicator_portrait");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->indicator_edje = cam_app_load_edj(ad->ug_base, CAM_INDICATOR_EDJ_NAME, "indicator_portrait_inverse");
+ break;
+ default:
+ DEBUG_TRACE("note:REACHED UN-ABLE REACHED CODES");
+ }
+
+ cam_retvm_if(ad->indicator_edje == NULL, EXIT_FAILURE, "indicator edje load fail !!!");
+ elm_object_part_content_set(ad->ug_base, "indicator_layout", ad->indicator_edje);
+ cam_indicator_update(ad);
+
+ return EXIT_SUCCESS;
+}
+
+int cam_indicator_destory(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+
+ DEL_EVAS_OBJECT(indicator_image_obj_battery);
+ DEL_EVAS_OBJECT(indicator_image_obj_storage);
+ DEL_EVAS_OBJECT(indicator_image_obj_gps_level);
+ DEL_EVAS_OBJECT(indicator_image_obj_mute);
+
+ DEL_EVAS_OBJECT(ad->indicator_edje);
+ return EXIT_SUCCESS;
+}
+
+int cam_indicator_rotate(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ if (ad->indicator_edje) {
+ /* delete indicator */
+ evas_object_hide(ad->indicator_edje);
+ cam_indicator_destory(ad);
+ cam_indicator_create(ad);
+ if (ad->indicator_edje) {
+ indicator_toggle(ad, FALSE);
+ evas_object_show(ad->indicator_edje);
+ }
+ } else {
+ return -1;
+ }
+ return 0;
+}
+
+void indicator_toggle(struct appdata *ad, gboolean hide)
+{
+ cam_ret_if(ad == NULL || ad->indicator_edje == NULL);
+
+ if (!hide)
+ indicator_update_gps(ad);
+}
diff --git a/src/edc-callback/cam_recording_edc_callback.c b/src/edc-callback/cam_recording_edc_callback.c
new file mode 100755
index 0000000..60a7b68
--- /dev/null
+++ b/src/edc-callback/cam_recording_edc_callback.c
@@ -0,0 +1,383 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include "cam.h"
+#include "cam_app.h"
+#include "cam_rec.h"
+#include "cam_mm.h"
+#include "cam_file.h"
+#include "edc_string.h"
+#include "camera_utils.h"
+#include "cam_property.h"
+#include "cam_toolbar_edc_callback.h"
+#include "cam_recording_edc_callback.h"
+
+#define REC_ICON_TIMER_INTERVAL (1)
+#define REC_TIMER_INTERVAL (0.5)
+#define PAUSE_TIMER_INTERVAL (0.5)
+#define PAUSE_TIMEOUT (120)
+#define SECONDS_IN_HOUR (1*60*60)
+
+enum _RecState {
+ CAM_REC_STATE_RECORDING,
+ CAM_REC_STATE_PAUSE,
+};
+#define TIME_FORMAT_MAX_LEN (128)
+/* static int rec_state = CAM_REC_STATE_RECORDING; */
+static double paused_time = 0.0;
+Eina_Bool recording_update_time_cb(void *data);
+Eina_Bool recording_update_icon_cb(void *data);
+Eina_Bool pause_timeout_cb(void *data);
+
+static void __recording_set_state(void *data, int new_state)
+{
+ CAM_UI_LOG();
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ if (new_state == CAM_REC_STATE_RECORDING) {
+ if (ad->rec_time_updater) {
+ ecore_timer_thaw(ad->rec_time_updater);
+ }
+ if (ad->rec_icon_updater) {
+ ecore_timer_thaw(ad->rec_icon_updater);
+ }
+ if (ad->rec_pause_timer) {
+ ecore_timer_del(ad->rec_pause_timer);
+ ad->rec_pause_timer = NULL;
+ }
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "state,rec", "program");
+ } else if (new_state == CAM_REC_STATE_PAUSE) {
+ if (ad->rec_time_updater) {
+ ecore_timer_freeze(ad->rec_time_updater);
+ }
+ if (ad->rec_icon_updater) {
+ ecore_timer_freeze(ad->rec_icon_updater);
+ }
+ if (ad->rec_pause_timer) {
+ ecore_timer_del(ad->rec_pause_timer);
+ ad->rec_pause_timer = NULL;
+ }
+ paused_time = 0.0;
+ ad->rec_pause_timer = ecore_timer_add(REC_TIMER_INTERVAL, pause_timeout_cb, ad);
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "state,pause", "program");
+ }
+ ad->recording_state = new_state;
+}
+
+/* you can use this function to set time text for recording */
+void recording_set_time(void *data, int hh, int mm, int ss)
+{
+ CAM_UI_LOG();
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->recording_edje) {
+ char time_text[100] = "";
+ snprintf(time_text, sizeof(time_text), "%" CAM_TIME_FORMAT "", hh, mm, ss);
+ edje_object_part_text_set(_EDJ(ad->recording_edje), RECORDING_TEXT, time_text);
+ }
+}
+
+Eina_Bool pause_timeout_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->rec_pause_timer)
+ ad->rec_pause_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ paused_time += PAUSE_TIMER_INTERVAL;
+ if (paused_time >= PAUSE_TIMEOUT) {
+ camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
+ ad->recording_commit = ecore_idler_add(cam_video_idler_record_stop, ad);
+
+ if (ad->rec_pause_timer)
+ ad->rec_pause_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ if (ad->recording_edje) {
+ const char *state = edje_object_part_state_get(_EDJ(ad->recording_edje), RECORDING_IMAGE, NULL);
+
+ if (strcmp(state, "pause") == 0) {
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "indicator,hide", "program");
+ } else if (strcmp(state, "invisible") == 0) {
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "indicator,show", "program");
+ }
+ }
+ return ECORE_CALLBACK_RENEW;
+}
+
+Eina_Bool recording_update_icon_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ static int count = 0;
+ if (ad == NULL) {
+ cam_critical(LOG_UI, "appdata is NULL");
+ /* ad->rec_icon_updater = NULL; */
+ return ECORE_CALLBACK_CANCEL;
+ }
+ if (count) {
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "state,rec", "program");
+ } else {
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "state,rec1", "program");
+ }
+ count = !count;
+ return ECORE_CALLBACK_RENEW;
+}
+
+Eina_Bool recording_update_time_cb(void *data)
+{
+ CAM_UI_LOG();
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ if (ad == NULL) {
+ cam_critical(LOG_UI, "appdata is NULL");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ cam_critical(LOG_UI, "cam_handle is NULL");
+ ad->rec_time_updater = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ char time_text[100] = "";
+ if (camapp->rec_elapsed < SECONDS_IN_HOUR)
+ snprintf(time_text, sizeof(time_text), "%" CAM_TIME_FORMAT "", CAM_TIME_ARGS(camapp->rec_elapsed));
+ else
+ snprintf(time_text, sizeof(time_text), "%" CAM_TIME_FORMAT2 "", CAM_TIME_ARGS2(camapp->rec_elapsed));
+ cam_debug(LOG_UI, "current time %s", time_text);
+ if (ad->recording_edje) {
+ edje_object_part_text_set(_EDJ(ad->recording_edje), RECORDING_TEXT, _(time_text));
+ }
+
+ if (camapp->size_limit != CAM_REC_NORMAL_MAX_SIZE) {
+ char str[10] = "";
+ char str2[10] = "";
+ char *filename = NULL;
+ int fname_size = 0;/*unused*/
+ guint64 size_limit = 0;
+ gdouble pbar_position = 0.0;
+ gdouble size_limit_in_mega = 0.0;
+ gdouble rec_filesize_in_mega = 0.0;
+ cam_mm_get_filename(&filename, &fname_size);
+ if (camapp->rec_filesize) {
+ size_limit = (guint64)camapp->size_limit;
+ pbar_position = camapp->rec_filesize / (gdouble) size_limit;
+ cam_app_set_progressbar_value(ad, pbar_position);
+
+ if (camapp->size_limit < 1024) {
+ snprintf(str, sizeof(str), "%dK", camapp->size_limit);
+ } else {
+ size_limit_in_mega = (gdouble)camapp->size_limit/(gdouble)1024;
+ snprintf(str, sizeof(str), "%.1fM", size_limit_in_mega);
+ }
+
+ if (camapp->rec_filesize < 1024) {
+ snprintf(str2, sizeof(str2), "%dK", camapp->rec_filesize);
+ } else {
+ rec_filesize_in_mega = (gdouble)camapp->rec_filesize/(gdouble)1024;
+ snprintf(str2, sizeof(str2), "%.1fM", rec_filesize_in_mega);
+ }
+
+ edje_object_part_text_set(_EDJ(ad->recording_edje), "progressbar_text", str);
+ edje_object_part_text_set(_EDJ(ad->recording_edje), "file_size_text", str2);
+ }
+ }
+
+ gchar * target_path = NULL;
+ target_path = (gchar*)cam_app_get_target_path();
+ double ration = 0.0;
+ if (target_path != NULL) {
+ gint64 free_space = cam_get_free_space(target_path);
+ gint64 capacity_space = cam_get_capacity_space(target_path);
+ ration = (double)free_space/(double)capacity_space;
+ }
+ DEBUG_TRACE("ration : %f ", ration);
+ if (ration < 0.20) {
+ /*show left time*/
+ char time_left_text[TIME_FORMAT_MAX_LEN + 1] = { '\0', };
+ guint64 remain_rec_time = 0;
+ remain_rec_time = cam_system_get_remain_rec_time((void*)ad);
+ DEBUG_TRACE("%d",remain_rec_time);
+ if (remain_rec_time < SECONDS_IN_HOUR) {
+ snprintf(time_left_text, TIME_FORMAT_MAX_LEN, "%" CAM_TIME_FORMAT "", CAM_TIME_ARGS(remain_rec_time));
+ DEBUG_TRACE("%s",time_left_text);
+ } else {
+ snprintf(time_left_text, TIME_FORMAT_MAX_LEN, "%" CAM_TIME_FORMAT2 "", CAM_TIME_ARGS2(remain_rec_time));
+ DEBUG_TRACE("%s",time_left_text);
+ }
+ edje_object_part_text_set(_EDJ(ad->recording_edje), RECORDING_LEFT_TEXT, _(time_left_text));
+
+ } else {
+ edje_object_part_text_set(_EDJ(ad->recording_edje), RECORDING_LEFT_TEXT, _(""));
+ }
+ return ECORE_CALLBACK_RENEW;
+}
+
+int load_recording_edje(struct appdata *ad)
+{
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, EXIT_FAILURE, "cam_handle is NULL");
+
+ cam_toolbar_update(ad);
+ DEL_EVAS_OBJECT(ad->recording_edje);
+
+ elm_object_part_content_unset(ad->ug_base, "recording_layout");
+
+ DEBUG_TRACE("ad->target_direction %d", ad->target_direction);
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_EDJ_NAME, "recording_layout");
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_INVERSE_EDJ_NAME, "recording_layout");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_VERTICAL_EDJ_NAME, "recording_layout");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_VERTICAL_INVERSE_EDJ_NAME, "recording_layout");
+ break;
+ default:
+ DEBUG_TRACE("note:reach un-able reached codes");
+ }
+
+ cam_retv_if(ad->recording_edje == NULL, -1);
+ elm_object_part_content_set(ad->ug_base, "recording_layout", ad->recording_edje);
+
+ if (camapp->size_limit != CAM_REC_NORMAL_MAX_SIZE) {
+ char str[10] = "";
+ char str2[10] = "";
+ gdouble size_limit_in_mega = 0.0;
+ camapp->rec_filesize =0;
+
+ if (camapp->size_limit < 1024) {
+ snprintf(str, sizeof(str), "%dK", camapp->size_limit);
+ } else {
+ size_limit_in_mega = (gdouble)camapp->size_limit/(gdouble)1024;
+ snprintf(str, sizeof(str), "%.1fM", size_limit_in_mega);
+ }
+
+ snprintf(str2, sizeof(str), "%dK", 0);
+ cam_app_create_progressbar(ad);
+
+ /* cam_app_set_progressbar_value(ad, 0.0); */
+ elm_object_part_content_set(ad->recording_edje, "progressbar", ad->progressbar);
+ edje_object_part_text_set(_EDJ(ad->recording_edje), "progressbar_text", str);
+ edje_object_part_text_set(_EDJ(ad->recording_edje), "file_size_text", str2);
+ }
+ camapp->rec_elapsed = 0;
+ __recording_set_state(ad, CAM_REC_STATE_RECORDING);
+ recording_set_time(ad, 0, 0, 0);
+ if (ad->rec_time_updater != NULL)
+ ecore_timer_del(ad->rec_time_updater);
+ if (ad->rec_icon_updater != NULL)
+ ecore_timer_del(ad->rec_icon_updater);
+ ad->rec_time_updater = ecore_timer_add(REC_TIMER_INTERVAL, recording_update_time_cb, ad);
+ ad->rec_icon_updater = ecore_timer_add(REC_ICON_TIMER_INTERVAL, recording_update_icon_cb, ad);
+
+ return EXIT_SUCCESS;
+}
+
+int unload_recording_edje(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ cam_app_destroy_progressbar(ad);
+ DEL_EVAS_OBJECT(ad->recording_edje);
+ REMOVE_TIMER(ad->rec_time_updater);
+ REMOVE_TIMER(ad->rec_icon_updater);
+
+ cam_toolbar_update(ad);
+
+ return EXIT_SUCCESS;
+}
+
+int cam_recording_rotate(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, EXIT_FAILURE, "cam_handle is NULL");
+
+ evas_object_hide(ad->indicator_edje);
+ elm_object_part_content_unset(ad->recording_edje, "progressbar");
+ evas_object_hide(ad->progressbar);
+ DEL_EVAS_OBJECT(ad->recording_edje);
+
+ elm_object_part_content_unset(ad->ug_base, "recording_layout");
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_EDJ_NAME, "recording_layout");
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_INVERSE_EDJ_NAME, "recording_layout");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_VERTICAL_EDJ_NAME, "recording_layout");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->recording_edje = cam_app_load_edj(ad->ug_base, CAM_RECORDING_VERTICAL_INVERSE_EDJ_NAME, "recording_layout");
+ break;
+ default:
+ DEBUG_TRACE("note:reach un-able reached codes");
+ }
+
+ cam_retv_if(ad->recording_edje == NULL, -1);
+ elm_object_part_content_set(ad->ug_base, "recording_layout", ad->recording_edje);
+
+ if (ad->recording_state == CAM_REC_STATE_RECORDING) {
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "state,rec", "program");
+ } else if (ad->recording_state == CAM_REC_STATE_PAUSE) {
+ edje_object_signal_emit(_EDJ(ad->recording_edje), "state,pause", "program");
+ }
+ char time_text[100] = "";
+ if (camapp->rec_elapsed < 3600)
+ snprintf(time_text, sizeof(time_text), "%" CAM_TIME_FORMAT "",
+ CAM_TIME_ARGS(camapp->rec_elapsed));
+ else
+ snprintf(time_text, sizeof(time_text), "%" CAM_TIME_FORMAT2 "",
+ CAM_TIME_ARGS2(camapp->rec_elapsed));
+ cam_debug(LOG_UI, "current time %s", time_text);
+ if (ad->recording_edje) {
+ edje_object_part_text_set(_EDJ(ad->recording_edje), RECORDING_TEXT, _(time_text));
+ }
+ if (ad->progressbar) {
+ char str[10] = "";
+ char str2[10] = "";
+ char *filename = NULL;
+ int fname_size = 0;
+ guint64 size_limit = 0;
+ gdouble pbar_position = 0.0;
+ cam_mm_get_filename(&filename, &fname_size);
+ if (camapp->rec_filesize) {
+ size_limit = (guint64)camapp->size_limit;
+ pbar_position =camapp->rec_filesize/ (double)size_limit;
+ cam_app_set_progressbar_value(ad, pbar_position);
+ snprintf(str, sizeof(str), "%dK", camapp->size_limit);
+ snprintf(str2, sizeof(str2), "%dK", camapp->rec_filesize);
+ elm_object_part_content_set(ad->recording_edje, "progressbar", ad->progressbar);
+ edje_object_part_text_set(_EDJ(ad->recording_edje), "progressbar_text", str);
+ edje_object_part_text_set(_EDJ(ad->recording_edje), "progressbar_text", str2);
+ }
+ }
+ return EXIT_SUCCESS;
+}
diff --git a/src/edc-callback/cam_toolbar_edc_callback.c b/src/edc-callback/cam_toolbar_edc_callback.c
new file mode 100755
index 0000000..4e319e3
--- /dev/null
+++ b/src/edc-callback/cam_toolbar_edc_callback.c
@@ -0,0 +1,8301 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <pthread.h>
+/*
+#include "camera_utils.h"
+*/
+#include "cam.h"
+#include "edc_string.h"
+#include "edc_image_name.h"
+#include "cam_ta.h"
+#include "cam_config.h"
+
+#include "cam_toolbar_edc_callback.h"
+#include "cam_common_edc_callback.h"
+#include "cam_indicator_edc_callback.h"
+#include "cam_long_press.h"
+#include "cam_zoom_edc_callback.h"
+#include "cam_ev_edc_callback.h"
+#include "cam_ui_effect_utils.h"
+#include "cam_menu_composer.h"
+#include "cam_device_capacity.h"
+#include "cam_voice_command.h"
+#include "cam_face_detection_focus.h"
+#include "cam_rec.h"
+#include "cam_mm.h"
+
+
+#define SHUTTER_LONG_TAP_TIME 0.5 /*latency time of AF function*/
+#define CAM_SHOTCUTS_NUMS 22
+
+static int setting_gl_x = 0; /*mouse in setting popup coordinate: x*/
+static int setting_gl_y = 0; /*mouse in setting popup coordinate: y*/
+static Elm_Genlist_Item_Class itc;
+static Elm_Genlist_Item_Class sub_itc;
+
+static Evas_Coord shortcuts_canvas_prev_x;
+static Evas_Coord shortcuts_canvas_prev_y;
+static Eina_List *shortcuts_ele_list = NULL;
+static pthread_mutex_t edit_shortcuts_move_mutex = PTHREAD_MUTEX_INITIALIZER;
+static gboolean show_caf_button = FALSE;
+
+#define POPUP_WIDTH 350
+#define WB_POPUP_HEIGHT 478
+#define EFFECT_MODE_POPUP_NORMAL_HEIGHT 382
+#define FOCUS_POPUP_CAM_HEIGHT 309
+#define FLASH_POPUP_CAM_HEIGHT 338
+#define FLASH_POPUP_REC_HEIGHT 338
+#define REC_MODE_POPUP_HEIGHT 309
+#define SHOT_MODE_POPUP_NORMAL_HEIGHT 382
+#define SHOT_MODE_POPUP_EXTERNAL_HEIGHT 309
+#define MORE_POPUP_HEIGHT 500
+#define METERING_POPUP_HIGHT 309
+#define ISO_POPUP_HEIGHT 561
+#define POPUP_HEIGHT 561
+#define RESOLUTION_POPUP_CAM_HEIGHT (561)
+#define RESOLUTION_POPUP_REC_HEIGHT (561)
+#define TIMER_POPUP_CAM_HEIGHT 382
+
+#define SETTING_POPUP_X (114)
+#define SETTING_POPUP_Y (55)
+#define VER_SETTING_POPUP_X SETTING_POPUP_Y
+#define VER_SETTING_POPUP_Y SETTING_POPUP_X
+#define SHORTCUTS_PART_ARRAY_MAX_LEN (16)
+
+#define OPTION_POPUP_X 107
+#define OPTION_POPUP_Y 613
+#define SHOT_MODE_POPUP 203
+#define EV_POPUP 340
+#define TIMER_POPUP 472
+
+#define RESOLUTION_POPUP 610
+#define ISO_POPUP 763
+#define METERING_POPUP 743
+#define WB_POPUP 900
+#define MORE_POPUP 1067
+
+#define SETTING_HOR_CTX_POPUP_X 554
+#define SETTING_VER_CTX_POPUP_X 152
+#define SCENE_MODE_POPUP_WIDTH 400
+
+#define SUB_MENU_POPUP_WIDTH 502
+#define SUB_MENU_POPUP_HEIGHT 580
+
+#define SETTING_POPUP_WIDTH 550
+#define SETTING_POPUP_HEIGHT 661
+
+#define SHOT_GUIDE_POPUP_WIDTH 600
+#define SHOT_GUIDE_POPUP_HEIGHT 72
+
+static Shortcuts_List_Prop edit_shortcuts_prop_array[CAM_EDIT_SHORTCUTS_INDEX_MAX]
+= {
+ /*row 1*/
+ {CAM_EDIT_SHORTCUTS_INDEX_0, PROP_SHORTCUTS_PART_INDEX_0},
+ {CAM_EDIT_SHORTCUTS_INDEX_1, PROP_SHORTCUTS_PART_INDEX_1},
+ {CAM_EDIT_SHORTCUTS_INDEX_2, PROP_SHORTCUTS_PART_INDEX_2},
+ {CAM_EDIT_SHORTCUTS_INDEX_3, PROP_SHORTCUTS_PART_INDEX_3},
+ /*row 2*/
+ {CAM_EDIT_SHORTCUTS_INDEX_4, PROP_SHORTCUTS_PART_INDEX_4},
+ {CAM_EDIT_SHORTCUTS_INDEX_5, PROP_SHORTCUTS_PART_INDEX_5},
+ {CAM_EDIT_SHORTCUTS_INDEX_6, PROP_SHORTCUTS_PART_INDEX_6},
+ {CAM_EDIT_SHORTCUTS_INDEX_7, PROP_SHORTCUTS_PART_INDEX_7},
+ /*row 3*/
+ {CAM_EDIT_SHORTCUTS_INDEX_8, PROP_SHORTCUTS_PART_INDEX_8},
+ {CAM_EDIT_SHORTCUTS_INDEX_9, PROP_SHORTCUTS_PART_INDEX_9},
+ {CAM_EDIT_SHORTCUTS_INDEX_10, PROP_SHORTCUTS_PART_INDEX_10},
+ {CAM_EDIT_SHORTCUTS_INDEX_11, PROP_SHORTCUTS_PART_INDEX_11},
+ /*row 4*/
+ {CAM_EDIT_SHORTCUTS_INDEX_12, PROP_SHORTCUTS_PART_INDEX_12},
+ {CAM_EDIT_SHORTCUTS_INDEX_13, PROP_SHORTCUTS_PART_INDEX_13},
+ {CAM_EDIT_SHORTCUTS_INDEX_14, PROP_SHORTCUTS_PART_INDEX_14},
+ {CAM_EDIT_SHORTCUTS_INDEX_15, PROP_SHORTCUTS_PART_INDEX_15},
+ /*row 5*/
+ {CAM_EDIT_SHORTCUTS_INDEX_16, PROP_SHORTCUTS_PART_INDEX_16},
+ {CAM_EDIT_SHORTCUTS_INDEX_17, PROP_SHORTCUTS_PART_INDEX_17},
+ {CAM_EDIT_SHORTCUTS_INDEX_18, PROP_SHORTCUTS_PART_INDEX_18},
+ {CAM_EDIT_SHORTCUTS_INDEX_19, PROP_SHORTCUTS_PART_INDEX_19},
+};
+
+static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
+ char **file_path, char **text, Evas_Object_Event_Cb *func);
+static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon);
+
+void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
+void create_menubar_shortcuts_mouse_event(struct appdata *ad);
+void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar);
+gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no);
+int toolbar_create_shortcuts_popup(struct appdata *ad);
+
+static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow);
+static void setting_ctxpopup_destroy(struct appdata *ad);
+
+static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y);
+
+static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y);
+static int __get_menubar_no_by_index(struct appdata *ad, int index);
+
+static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj, void *event_info);
+static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info);
+static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj, void *event_info);
+static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info);
+static void __update_menubar_icon_by_index(struct appdata *ad, int index);
+static void __cam_toolbar_edit_shortcuts_data_clean();
+static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y);
+static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y);
+
+static void __toolbar_menu_type_update(Evas_Object *toolbar_icon, int type, void *data, ButtonState state, Evas_Object_Event_Cb *func);
+static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction, int mouse_point, int *x, int *y);
+
+/* Setting list callback*/
+static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting);
+static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info);
+static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info);
+static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* Toolbar functions */
+static void __toolbar_menu_icon_update(struct appdata *ad);
+static int __toolbar_menu_item_create(struct appdata *ad);
+static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state);
+static void __toolbar_menu_item_reset(struct appdata *ad);
+static int __toolbar_shutter_button_create(struct appdata *ad);
+static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state);
+static int __toolbar_recording_button_create(struct appdata *ad);
+static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state);
+static int __toolbar_quickview_item_create(struct appdata *ad);
+static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state);
+static int __toolbar_backbutton_create(struct appdata *ad);
+static void __toolbar_backbutton_destroy(struct appdata *ad);
+static int __toolbar_cafbutton_create(struct appdata *ad);
+static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state);
+static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state);;
+
+static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state);
+static const char* __get_text_name(CAM_MENU_ITEM item);
+
+static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info);
+static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect);
+static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
+ int swap_rel1_y,
+ int swap_w,
+ int swap_h,
+ int cur_rel1_x,
+ int cur_rel1_y,
+ int cur_w,
+ int cur_h,
+ int correction_w,
+ int correction_h);
+static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele);
+
+static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no);
+static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata);
+static void __cam_setting_sub_gl_style_set();
+static int __get_sub_menu_height(int count);
+int cam_toolbar_displaypopup_map_menu_value(int display_popup);
+int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item);
+static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2);
+static void __resort_edit_shortcuts_list_by_part_index(void);
+static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele);
+static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no);
+
+static void __update_setting_popup(void* data);
+static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele);
+static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
+ int setting_type,
+ int menubar_no);
+static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no);
+static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
+ ShortCutData *cur_ele,
+ ShortCutData *insert_ele);
+
+static void __set_show_state_preview_obj(void *data, gboolean show);
+static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part);
+
+static Eina_Bool __setting_popup_timeout_checker_cb(void *data);
+static gboolean __setting_popup_timeout_checker_start(struct appdata *ad);
+static void __cam_toolbar_display_shortcuts_editmode(void *data);
+
+static void __cam_toolbar_exit_shortcuts_editmode(void *data);
+static void __toolbar_dim_setting_shortcuts(struct appdata *ad);
+
+
+static void cam_popup_warning_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ if (obj)
+ evas_object_del(obj);
+ obj = NULL;
+}
+
+static void cam_storage_warning_popup()
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ Evas_Object *popup;
+ popup = elm_popup_add(ad->ug_base);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, dgettext(PACKAGE, "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA"));
+ elm_popup_timeout_set(popup, 3.0);
+ evas_object_smart_callback_add(popup, "timeout", cam_popup_warning_response_cb, NULL);
+ evas_object_show(popup);
+}
+
+static Eina_Bool __toolbar_check_af_timer(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, 0);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->check_af_timer)
+ ad->check_af_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if(camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
+ ad->emit_continuous_shutter = TRUE;
+ cam_mm_stop_focusing();
+ if (!cam_do_capture(ad)) {
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+ ad->emit_continuous_shutter = FALSE;
+ }
+
+ if (ad->check_af_timer)
+ ad->check_af_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+static Eina_Bool __toolbar_continuous_shot_timer(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, 0);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->continuous_shot_timer)
+ ad->continuous_shot_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ DEBUG_TRACE("camapp->burst_shot is %d", camapp->burst_shot);
+ if (camapp->burst_shot) {// burst shot mode 'on'
+ camapp->default_capture_mode = CAM_CAPTURE_BURST;
+ ad->emit_continuous_shutter = TRUE;
+ if (camapp->focus_state == CAMERA_FOCUS_STATE_FAILED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_FOCUSED
+ || camapp->focus_state == CAMERA_FOCUS_STATE_RELEASED){
+ REMOVE_TIMER(ad->continuous_af_timer);
+ cam_mm_stop_focusing();
+
+ if (!cam_do_capture(ad)) {
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+ }
+ } else {
+ cam_debug(LOG_UI, "Not focused");
+
+ REMOVE_TIMER(ad->check_af_timer);
+ ad->check_af_timer = ecore_timer_add(0.2, __toolbar_check_af_timer, ad);
+ }
+ }
+
+ if (ad->continuous_shot_timer)
+ ad->continuous_shot_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+/* start AF after SHUTTER_LONG_TAP_TIME */
+static Eina_Bool __toolbar_shutter_long_tap_af_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, 0);
+ CamAppData *camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->shutter_long_tap_timer)
+ ad->shutter_long_tap_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+ camapp->focus_mode = CAM_FOCUS_MODE_HALFSHUTTER;
+ camapp->touch_af_state = CAM_TOUCH_AF_STATE_NONE;
+ if (!cam_camera_key_half_press(ad)) {
+ cam_warning(LOG_UI, "cam_camera_key_half_press failed");
+ }
+ camapp->key_lock = FALSE;
+ }
+
+ if (ad->shutter_long_tap_timer)
+ ad->shutter_long_tap_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __shutter_button_focus_out_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ if (ad->is_processing) {
+ return;
+ }
+
+ cam_mm_stop_focusing();
+ cam_reset_focus_mode(ad);
+}
+
+void cam_toolbar_shutter_button_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ cam_debug(LOG_UI, "do not capture");
+ return;
+ }
+
+ if (strcmp(emission, "press_shutter_sig") == 0) {
+ if ((camapp->continuous_shot_data && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING )
+ ){
+ cam_critical(LOG_SYS, " capture is skipped because of CAM_CONTI_SHOT_STATUS_CAPTURING");
+ return;
+ }
+
+ ad->emit_continuous_shutter = FALSE;
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ evas_object_event_callback_add(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb, (void *)ad);
+
+ if (camapp->af_mode == CAM_FOCUS_FACE) { /*note: face focus mode, if start capture,stop draw rect*/
+ cam_app_stop_video_stream();
+ }
+ REMOVE_TIMER(ad->continuous_shot_timer);
+ camapp->default_capture_mode = CAM_CAPTURE_SINGLE;
+
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE) && (camapp->burst_shot == TRUE)) {
+ if (strcmp(source, "hard_key") == 0) {
+ if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
+ ad->continuous_shot_by_hard_key = TRUE;
+ __toolbar_continuous_shot_timer(ad);
+ } else {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ }
+ } else {
+ if (camapp->timer == CAM_SETTINGS_TIMER_OFF) {
+ ad->continuous_shot_by_hard_key = FALSE;
+ ad->continuous_shot_timer = ecore_timer_add(0.5, __toolbar_continuous_shot_timer, ad);
+ }
+ }
+
+ ad->stop_continuous_shot = FALSE;
+ } else {
+ if (strcmp(source, "hard_key") == 0) {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ } else {
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_FOCUS_MODE)){
+ REMOVE_TIMER(ad->continuous_af_timer);
+ ad->shutter_long_tap_timer = ecore_timer_add(SHUTTER_LONG_TAP_TIME, __toolbar_shutter_long_tap_af_timer, ad);
+ }
+ }
+ }
+ } else {
+ if (strcmp(source, "hard_key") == 0) {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ }
+ }
+
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
+ } else if (strcmp(emission, "release_shutter_sig") == 0) {
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ evas_object_event_callback_del(ad->shutterbtn, EVAS_CALLBACK_MOUSE_OUT, __shutter_button_focus_out_cb);
+ REMOVE_TIMER(ad->shutter_long_tap_timer);
+ REMOVE_TIMER(ad->continuous_shot_timer);
+ REMOVE_TIMER(ad->check_af_timer);
+
+ if (cam_is_enabled_menu((void*)ad, CAM_MENU_BURST_SHOT_MODE)
+ && camapp->burst_shot == TRUE
+ && camapp->default_capture_mode == CAM_CAPTURE_BURST) {
+ DEBUG_TRACE("burst capture mode");
+ if (((strcmp(source, "hard_key") == 0) && (ad->continuous_shot_by_hard_key == FALSE))
+ || ((strcmp(source, "toolbar_signal") == 0) && (ad->continuous_shot_by_hard_key == TRUE))) {
+ DEBUG_TRACE("ignore this event");
+ return;
+ }
+ ad->stop_continuous_shot = TRUE;
+ ad->emit_continuous_shutter = FALSE;
+ ad->continuous_shot_by_hard_key = FALSE;
+ }
+ }
+
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
+ } else if ( strcmp(emission, "click_shutter_sig") == 0){
+
+ if (ad->emit_continuous_shutter == TRUE ) {
+ ad->emit_continuous_shutter = FALSE;
+ return;
+ }
+
+ if (camapp->default_capture_mode == CAM_CAPTURE_SINGLE) {
+ if (!cam_do_capture(ad))
+ cam_warning(LOG_UI, "cam_do_capture failed");
+ }
+ }
+}
+
+void cam_toolbar_recording_button_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ int mm_state = cam_mm_get_state();
+
+ if ((camapp->camera_mode == CAM_CAMERA_MODE)
+ && (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)) {
+ cam_debug(LOG_UI, "do not record");
+ return;
+ }
+
+ if (strcmp(emission, "press_shutter_sig") == 0) {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,press", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,press", "prog");
+ } else if (strcmp(emission, "release_shutter_sig") == 0) {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING))
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
+ } else if (strcmp(emission, "click_shutter_sig") == 0) {
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ if (mm_state != CAMERA_STATE_PREVIEW) {
+ cam_critical(LOG_UI, "Cannot start recording in capturing state");
+ return;
+ }
+ }
+
+ if (!ad->is_recording) {
+ // change to camcorder mode
+ GValue value = {0, };
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ CAM_GVALUE_SET_INT(value, CAM_CAMCORDER_MODE);
+ if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
+ return;
+ }
+ }
+
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+
+ if (!cam_do_record(ad))
+ cam_warning(LOG_UI, "cam_do_record failed");
+
+ camapp->key_lock = FALSE;
+ }
+ } else {
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_RECORDING)) {
+ if (!cam_video_record_pause(ad))
+ cam_warning(LOG_UI, "cam_video_record_pause failed");
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ } else if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (mm_state == RECORDER_STATE_PAUSED)) {
+ if (!cam_video_record_resume(ad))
+ cam_warning(LOG_UI, "cam_video_record_resume failed");
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ }
+ }
+}
+
+void cam_toolbar_recording_stop_button_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ int state = 0;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+ HIDE_EVAS_OBJECT(ad->indicator_edje);
+ DEL_EVAS_OBJECT(ad->recording_edje);
+
+ if (strcmp(emission, "press_shutter_sig") == 0) {
+ edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,press", "prog");
+ } else if (strcmp(emission, "release_shutter_sig") == 0) {
+ edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
+ } else if (strcmp(emission, "click_shutter_sig") == 0) {
+ state = cam_mm_get_state();
+
+ if ((state == RECORDER_STATE_RECORDING)
+ || (state == RECORDER_STATE_PAUSED)) {
+ camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
+ if (!cam_video_record_stop(ad))
+ cam_warning(LOG_UI, "cam_video_record_stop failed");
+ } else {
+ cam_debug(LOG_UI, "error, not recording or pause state");
+ }
+ }
+}
+
+static void __toolbar_backbutton_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (!cam_mm_is_preview_started(camapp->camera_mode)) return;
+
+ if (ad->timer_activated) {
+ cam_app_cancel_timer(ad);
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (ad->ug_state != CAM_UG_PAUSE_STATE) {
+ GValue value = {0, };
+ CAM_GVALUE_SET_INT(value, CAM_CAMERA_MODE);
+ if (!cam_handle_value_set(ad, PROP_MODE, &value)) {
+ return;
+ }
+ }
+ }
+ }
+ return;
+ } else {
+ if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
+ if (ad->is_recording) {
+ if (!camapp->key_lock) {
+ camapp->key_lock = TRUE;
+
+ if (!cam_video_record_cancel(ad))
+ cam_warning(LOG_UI, "failed");
+
+ camapp->key_lock = FALSE;
+ return;
+ }
+ }
+ }
+
+ if (ad->tip_popup) {
+ cam_tip_popup_destroy(ad);
+ return;
+ } else if (ad->toolbar_setting_popup) {
+ if (ad->setting_ctxpopup) {
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ } else {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ return;
+ } else if (ad->setting_ctxpopup) {
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ return;
+ } else if (ad->edit_shortcuts_popup) {
+ toolbar_destroy_shortcuts_popup(ad);
+ return;
+ } else if (ad->ev_edje) {
+ unload_ev_edje(ad);
+ return;
+ } else if (ad->zoom_edje) {
+ unload_zoom_edje(ad);
+ return;
+ }
+ }
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL)
+ cam_app_exit(ad);
+ else
+ elm_win_lower(ug_get_window());
+
+
+ DEBUG_TRACE("END");
+}
+
+static void __toolbar_cafbutton_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ cam_retm_if(emission == NULL, "emission is NULL");
+ cam_retm_if(source == NULL, "source is NULL");
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (ad->is_rotating)
+ return;
+
+ cam_reset_focus_mode(ad);
+}
+
+static Ecore_Idler *run_image_view_idler = NULL;
+static Eina_Bool __cam_toolbar_run_image_viewer_idler(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
+
+ if (run_image_view_idler) {
+ ecore_idler_del(run_image_view_idler);
+ run_image_view_idler = NULL;
+ }
+
+ if (ad->ug_is_deleting_process == TRUE)
+ return ECORE_CALLBACK_CANCEL;
+
+ if (!cam_app_run_media_browser(ad, camapp->filename)) {
+ DEBUG_TRACE("cam_app_run_media_browser failed");
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __toolbar_quickview_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ cam_ret_if(data == NULL);
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_app_timeout_checker_update();
+ if (ad->is_rotating) return;/*note: now is rotating*/
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(emission == NULL);
+ cam_ret_if(source == NULL);
+ if (ad->ug_is_deleting_process == TRUE)
+ return;
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->setting_ctxpopup || ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup)
+ toolbar_destroy_shortcuts_popup(ad);
+
+ if (ad->imageviewer_ug) {
+ return;
+ }
+ if (emission && source)
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ if (strcmp(emission, "portrait,quickview,release") == 0
+ || strcmp(emission, "landscape,quickview,release") == 0) {
+ pthread_mutex_lock(&ad->file_reg_mutex);
+ cam_debug(LOG_SYS, " lock file_reg_mutex");
+ pthread_mutex_unlock(&ad->file_reg_mutex);
+ run_image_view_idler = ecore_idler_add(__cam_toolbar_run_image_viewer_idler, (void *)ad);
+ }
+}
+
+#if 0 /*block it temporary*/
+static void __shotcus_edit_shotcuts_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_edit_shortcut_popup_cb(data, obj, event_info);
+}
+#endif
+
+static void __shortcuts_burst_shot_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_burst_shot_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_volume_key_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_volume_key_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_self_portrait_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_self_portrait_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_flash_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_flash_popup(data, obj, event_info);
+}
+
+static void __shortcuts_shooting_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_shot_mode_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_record_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_record_mode_popup(data, obj, event_info);
+}
+
+static void __shortcuts_scene_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_scenemode_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_exposure_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_ev_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_focus_mode_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_focus_mode_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_timer_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_timer_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_effects_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_effects_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_photo_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_photo_resolution_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_video_resolution_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_video_resolution_popup_cb(data, obj, event_info);
+
+}
+
+static void __shortcuts_white_banlance_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_wb_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_iso_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_iso_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_setting_metering_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_metering_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_anti_shake_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_anti_shake_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_outdoor_visibility_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_outdoor_visibility_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_auto_contrast_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_autocontrast_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_guideline_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_guideline_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_capture_voice_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_capture_by_voice_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_gps_tag_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_gps_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_storage_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_storage_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_reset_popup_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_restore_defaults_popup_cb(data, obj, event_info);
+}
+
+static void __shortcuts_save_as_flip_cb(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ __setting_save_as_flip_popup_cb(data, obj, event_info);
+}
+
+
+static void __update_menu_bar_shortcuts_state_by_index(struct appdata *ad, int index, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+ int menubar_no = __get_menubar_no_by_index(ad, index);
+ switch(menubar_no) {
+ case CAM_MENU_BAR_LEFT_0:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_0_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_0_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_0_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_1:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_2:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_3:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,invisible", "prog");
+ break;
+ case CAM_MENU_BAR_LEFT_4:
+ if (TOOLBAR_ITEM_STATE_NORMAL == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+ else if (TOOLBAR_ITEM_STATE_DIM == state)
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,dim", "prog");
+ else
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,invisible", "prog");
+ break;
+ default:
+ DEBUG_TRACE("not in menubar");
+ }
+
+}
+
+static void __toolbar_menu_type_update(Evas_Object *toolbar_icon,
+ int type, void *data, ButtonState state, Evas_Object_Event_Cb *func)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ char *icon_name = NULL;
+ char *text = NULL;
+
+ ButtonState button_state = state;
+ ToolbarItemState item_state = TOOLBAR_ITEM_STATE_NORMAL;
+
+ if (!cam_is_enabled_menu(ad, type)) {
+ button_state = BUTTON_STATE_DIM;
+ item_state = TOOLBAR_ITEM_STATE_DIM;
+ }
+
+ __get_toolbar_shortcuts_file_func(ad, type, button_state, &icon_name, &text, func);
+
+ if (icon_name)
+ elm_image_file_set(toolbar_icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ else
+ cam_critical(LOG_UI, "icon_name is NULL");
+
+ __update_menu_bar_shortcuts_state_by_index(ad, type, item_state);
+
+ if (button_state == BUTTON_STATE_DIM)
+ evas_object_color_set(toolbar_icon, 255, 255, 255, 77); /*opacity 30% for dim menu */
+ else
+ evas_object_color_set(toolbar_icon, 255, 255, 255, 255);
+}
+
+static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state,
+ char **file_path, char **text, Evas_Object_Event_Cb *func)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ *file_path = NULL;
+ *text = NULL;
+ *func = NULL;
+
+ switch(type) {
+ case CAM_MENU_EMPTY:
+ case CAM_MENU_SHORTCUTS:
+ break;
+ case CAM_MENU_BURST_SHOT_MODE: {
+ if (camapp->burst_shot) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = BURST_SHOT_MODE_ON_PRESS_ICON;
+ else
+ *file_path = BURST_SHOT_MODE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = BURST_SHOT_MODE_OFF_PRESS_ICON;
+ else
+ *file_path = BURST_SHOT_MODE_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_burst_shot_popup_cb;
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY: {
+ *file_path = __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_volume_key_popup_cb;
+ }
+ break;
+ case CAM_MENU_SELF_PORTRAIT: {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = CAMERA_SELF_PORTRAIT_PRESS_ICON;
+ else
+ *file_path = CAMERA_SELF_PORTRAIT_NORMAL_ICON;
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_self_portrait_popup_cb;
+ }
+ break;
+ case CAM_MENU_FLASH: {
+ *file_path = __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_FLASH");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_flash_popup_cb;
+ }
+ break;
+ case CAM_MENU_SHOOTING_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_shooting_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_RECORDING_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_record_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_SCENE_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_scene_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE: {
+ *file_path = __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_exposure_popup_cb;
+ }
+ break;
+ case CAM_MENU_FOCUS_MODE: {
+ *file_path = __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_focus_mode_popup_cb;
+ }
+ break;
+ case CAM_MENU_TIMER: {
+ *file_path = __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_TIMER");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_timer_popup_cb;
+
+ }
+ break;
+ case CAM_MENU_EFFECTS: {
+ *file_path = __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_effects_popup_cb;
+ }
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION: {
+ *file_path = __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_PHOTO_RESOLUTION_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_photo_resolution_popup_cb;
+ }
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION: {
+ *file_path = __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_VIDEO_RESOLUTION_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_video_resolution_popup_cb;
+
+ }
+ break;
+ case CAM_MENU_WHITE_BALANCE: {
+ *file_path = __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_white_banlance_popup_cb;
+ }
+ break;
+ case CAM_MENU_ISO: {
+ *file_path = __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_ISO");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_iso_popup_cb;
+ }
+ break;
+ case CAM_MENU_METERING: {
+ *file_path = __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_METERING");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_setting_metering_popup_cb;
+ }
+ break;
+ case CAM_MENU_ANTI_SHAKE: {
+ if (ad->camapp_handle->anti_shake) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = ANTISHAKE_ON_PRESS_ICON;
+ else
+ *file_path = ANTISHAKE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = ANTISHAKE_OFF_PRESS_ICON;
+ else
+ *file_path = ANTISHAKE_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_anti_shake_popup_cb;
+ }
+ break;
+ case CAM_MENU_OUTDOOR_VISIBILITY: {
+ if (ad->camapp_handle->outdoor_visibility) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = OUTDOOR_VISIBILITY_ON_PRESS_ICON;
+ else
+ *file_path = OUTDOOR_VISIBILITY_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = OUTDOOR_VISIBILITY_OFF_PRESS_ICON;
+ else
+ *file_path = OUTDOOR_VISIBILITY_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_outdoor_visibility_popup_cb;
+ }
+ break;
+ case CAM_MENU_AUTO_CONTRAST: {
+ if (ad->camapp_handle->auto_contrast) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = AUTO_CONTRAST_ON_PRESS_ICON;
+ else
+ *file_path = AUTO_CONTRAST_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = AUTO_CONTRAST_OFF_PRESS_ICON;
+ else
+ *file_path = AUTO_CONTRAST_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_auto_contrast_popup_cb;
+ }
+ break;
+ case CAM_MENU_GUIDELINES: {
+ if (ad->camapp_handle->guideline) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GUIDELINE_ON_PRESS_ICON;
+ else
+ *file_path = GUIDELINE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GUIDELINE_OFF_PRESS_ICON;
+ else
+ *file_path = GUIDELINE_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_guideline_popup_cb;
+ }
+ break;
+ case CAM_MENU_CAPTURE_VOICE: {
+ if (ad->camapp_handle->capture_by_voice) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = CAPTURE_WITH_VOICE_ON_PRESS_ICON;
+ else
+ *file_path = CAPTURE_WITH_VOICE_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = CAPTURE_WITH_VOICE_OFF_PRESS_ICON;
+ else
+ *file_path = CAPTURE_WITH_VOICE_OFF_NORMAL_ICON;
+ }
+
+ *text = "Capture with voice";
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_capture_voice_popup_cb;
+ }
+ break;
+ case CAM_MENU_GPS_TAG: {
+ if (ad->camapp_handle->gps) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GPS_ON_PRESS_ICON;
+ else
+ *file_path = GPS_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = GPS_OFF_PRESS_ICON;
+ else
+ *file_path = GPS_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_gps_tag_popup_cb;
+ }
+ break;
+ case CAM_MENU_SAVE_AS_FLIP: {
+ if (ad->camapp_handle->save_as_flip) {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = SAVE_AS_FLIP_ON_PRESS_ICON;
+ else
+ *file_path = SAVE_AS_FLIP_ON_NORMAL_ICON;
+ }
+ else {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = SAVE_AS_FLIP_OFF_PRESS_ICON;
+ else
+ *file_path = SAVE_AS_FLIP_OFF_NORMAL_ICON;
+ }
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_save_as_flip_cb;
+ }
+ break;
+ case CAM_MENU_STORAGE: {
+ *file_path = __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), state);
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_storage_popup_cb;
+ }
+ break;
+ case CAM_MENU_RESET: {
+ if (state == BUTTON_STATE_PRESS)
+ *file_path = RESET_SETTING_PRESS_ICON;
+ else
+ *file_path = RESET_SETTING_NORMAL_ICON;
+
+ *text = dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET");
+
+ if (state != BUTTON_STATE_DIM)
+ *func = __shortcuts_reset_popup_cb;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void __toolbar_menu_icon_update(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
+ }
+}
+
+static void __toolbar_menu_item_unswallow(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ char buf[32 + 1] = {'\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", i);
+ elm_object_part_content_unset(ad->toolbar_edje, buf);
+ }
+}
+
+static void __toolbar_menu_item_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ __toolbar_menu_item_unswallow(ad);
+ Evas_Object *icon = NULL;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ icon = ad->toolbar_menu_arrays[i].icon;
+ DEL_EVAS_OBJECT(icon);
+ ad->toolbar_menu_arrays[i].icon = NULL;
+ }
+}
+
+static void __toolbar_menu_item_swallow(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ Evas_Object *icon = NULL;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ icon = ad->toolbar_menu_arrays[i].icon;
+ char buf[32 + 1] = {'\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", i);
+ elm_object_part_content_set(ad->toolbar_edje, buf, icon);
+ }
+
+}
+
+static int __toolbar_menu_item_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, -1);
+
+ Evas_Object *icon = NULL;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
+/* setting icon */
+ if (icon == NULL) {
+ icon = elm_image_add(ad->toolbar_edje);
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ }
+ elm_object_part_content_set(ad->toolbar_edje, "toolbar_0_icon", icon);
+ ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon = icon;
+
+/* shortcut icon */
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ icon = ad->toolbar_menu_arrays[i].icon;
+ if (icon == NULL) {
+ icon = elm_image_add(ad->toolbar_edje);
+ }
+ char buf[32 + 1] = {'\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", i);
+ elm_object_part_content_set(ad->toolbar_edje, buf, icon);
+ ad->toolbar_menu_arrays[i].icon = icon;
+ }
+ return 0;
+}
+
+static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_menu_arrays[i].menu_type, state);
+
+ if(state == TOOLBAR_ITEM_STATE_DIM) { //it don't make dimming in edje
+ Evas_Object *icon = NULL;
+ int menubar_no = __get_menubar_no_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
+ cam_retm_if(menubar_no == CAM_MENU_BAR_LEFT_INVALID, "invalid menubar no");
+
+ icon = ad->toolbar_menu_arrays[menubar_no].icon;
+
+ if (icon != NULL)
+ evas_object_color_set(icon, 255, 255, 255, 77); // set opacity 30%
+ }
+ }
+}
+
+static void __toolbar_menu_item_reset(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+
+ __toolbar_menu_item_destroy(ad);
+ __toolbar_menu_item_create(ad);
+
+ ad->toolbar_menu_arrays[1].menu_type = CAM_MENU_EMPTY;
+ ad->toolbar_menu_arrays[2].menu_type = CAM_MENU_EMPTY;
+
+ if (cam_mm_is_support_front_camera() == TRUE)
+ ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_SELF_PORTRAIT;
+ else
+ ad->toolbar_menu_arrays[3].menu_type = CAM_MENU_EMPTY;
+
+#ifdef CAMERA_MACHINE_I686
+ ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_EMPTY;
+#else
+ ad->toolbar_menu_arrays[4].menu_type = CAM_MENU_FLASH;
+#endif
+
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ cam_toolbar_menu_config_update(ad);
+}
+
+static void __toolbar_shutter_button_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "shutter_button");
+}
+
+static void __toolbar_shutter_button_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ if (ad->shutterbtn) {
+ __toolbar_shutter_button_unset(ad);
+ if (ad->shutterbtn_camera_icon) {
+ elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
+ DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
+ }
+ DEL_EVAS_OBJECT(ad->shutterbtn)
+ }
+}
+
+static void __toolbar_shutter_button_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->shutterbtn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "shutter_button", ad->shutterbtn);
+}
+
+static int __toolbar_shutter_button_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ if (ad->shutterbtn) {
+ if (ad->shutterbtn_camera_icon) {
+ elm_object_part_content_unset(ad->shutterbtn, "camera_icon");
+ DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon)
+ }
+ DEL_EVAS_OBJECT(ad->shutterbtn)
+ }
+ ad->shutterbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "shutter_button");
+ edje = ad->shutterbtn;
+ cam_retv_if(edje == NULL, -1);
+
+ ad->shutterbtn_camera_icon = elm_image_add(edje);
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
+ elm_object_part_content_set(edje, "camera_icon", ad->shutterbtn_camera_icon);
+
+ edje_object_signal_callback_del(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb);
+ edje_object_signal_callback_add(_EDJ(edje), "*", "toolbar_signal", cam_toolbar_shutter_button_cb, ad);
+
+ elm_object_part_content_set(ad->toolbar_edje, "shutter_button", edje);
+ evas_object_show(edje);
+ DEBUG_TRACE("END");
+
+ return EXIT_SUCCESS;
+}
+
+void cam_toolbar_update_shutter_button(struct appdata *ad, ToolbarItemState state)
+{
+ __toolbar_shutter_button_update(ad, state);
+}
+
+static void __toolbar_shutter_button_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
+ } else if (state == TOOLBAR_ITEM_STATE_PRESS) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,press", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog");
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON);
+ } else if (state == TOOLBAR_ITEM_STATE_DIM) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,dim", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,dim", "prog");
+ elm_image_file_set(ad->shutterbtn_camera_icon, CAM_IMAGE_EDJ_NAME, CAMERA_SHUTTER_ICON_DIM);
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,invisible", "prog");
+ edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,invisible", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for shutter button");
+ }
+}
+
+static void __toolbar_recording_button_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "recording_button");
+}
+
+static void __toolbar_recording_button_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_recording_button_unset(ad);
+ DEL_EVAS_OBJECT(ad->recordingbtn);
+}
+
+static void __toolbar_recording_button_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->recordingbtn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "recording_button", ad->recordingbtn);
+}
+
+static int __toolbar_recording_button_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ DEL_EVAS_OBJECT(ad->recordingbtn);
+ ad->recordingbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_button");
+ edje = ad->recordingbtn;
+ cam_retv_if(edje == NULL, -1);
+
+ edje_object_signal_callback_del(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb);
+ edje_object_signal_callback_add(_EDJ(ad->recordingbtn), "*", "toolbar_signal", cam_toolbar_recording_button_cb, ad);
+ elm_object_part_content_set(ad->toolbar_edje, "recording_button", edje);
+ evas_object_show(edje);
+ DEBUG_TRACE("END");
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_recording_button_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(ad->recordingbtn == NULL);
+
+ int recording_state = 0;
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ recording_state = cam_mm_get_state();
+
+ if ((camapp->camera_mode == CAM_CAMCORDER_MODE) && (recording_state == RECORDER_STATE_RECORDING)) {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,normal", "prog");
+ } else {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_pause_button,invisible", "prog");
+ }
+
+ } else if (state == TOOLBAR_ITEM_STATE_DIM) {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,dim", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(ad->recordingbtn), "recording_button,invisible", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for recording button");
+ }
+}
+
+static void __toolbar_recording_stop_button_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "recording_stop_button");
+}
+
+static void __toolbar_recording_stop_button_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_recording_stop_button_unset(ad);
+ DEL_EVAS_OBJECT(ad->recording_stop_btn);
+}
+
+static void __toolbar_recording_stop_button_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->recording_stop_btn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", ad->recording_stop_btn);
+}
+
+static int __toolbar_recording_stop_button_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ DEL_EVAS_OBJECT(ad->recording_stop_btn);
+ ad->recording_stop_btn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "recording_stop_button");
+ edje = ad->recording_stop_btn;
+ cam_retv_if(edje == NULL, -1);
+
+ edje_object_signal_callback_del(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb);
+ edje_object_signal_callback_add(_EDJ(ad->recording_stop_btn), "*", "toolbar_signal", cam_toolbar_recording_stop_button_cb, ad);
+ elm_object_part_content_set(ad->toolbar_edje, "recording_stop_button", edje);
+ edje_object_signal_emit(_EDJ(ad->recording_stop_btn), "recording_stop_button,normal", "prog");
+ evas_object_show(edje);
+ DEBUG_TRACE("END");
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_quickview_item_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "quickview_item");
+}
+
+static void __toolbar_quickview_item_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_quickview_item_unset(ad);
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.edje);
+}
+
+static void __toolbar_quickview_item_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->toolbar.quickview_item.edje == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "quickview_item", ad->toolbar.quickview_item.edje);
+}
+
+static int __toolbar_quickview_item_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+
+ if (ad->toolbar.quickview_item.edje == NULL) {
+ ad->toolbar.quickview_item.edje =
+ cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_quickview_item");
+ edje_object_signal_callback_del(_EDJ(ad->toolbar.quickview_item.edje),
+ "*", "toolbar_signal", __toolbar_quickview_cb);
+ edje_object_signal_callback_add(_EDJ(ad->toolbar.quickview_item.edje),
+ "*", "toolbar_signal", __toolbar_quickview_cb, ad);
+ }
+ edje = ad->toolbar.quickview_item.edje;
+
+ cam_retv_if(edje == NULL, -1);
+ elm_object_part_content_set(ad->toolbar_edje, "quickview_item", edje);
+ evas_object_show(edje);
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_quickview_item_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_ret_if(ad == NULL);
+
+ Evas_Object *edje = NULL;
+ edje = ad->toolbar.quickview_item.edje;
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ edje_object_signal_emit(_EDJ(edje), "SET_DEFAULT", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(edje), "SET_INVISIBLE", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for quickview button");
+ }
+}
+
+static int __toolbar_backbutton_create(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+ cam_retv_if(ad == NULL, -1);
+ Evas_Object *edje = NULL;
+ if (ad->backbtn == NULL) {
+ ad->backbtn = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_backbutton_item");
+ edje_object_signal_callback_del(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb);
+ edje_object_signal_callback_add(_EDJ(ad->backbtn), "*", "toolbar_signal", __toolbar_backbutton_cb, ad);
+ }
+ edje = ad->backbtn;
+
+ cam_retv_if(edje == NULL, -1);
+ elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", edje);
+ evas_object_show(edje);
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_backbutton_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "backbutton_item");
+}
+
+static void __toolbar_backbutton_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+
+ __toolbar_backbutton_unset(ad);
+ DEL_EVAS_OBJECT(ad->backbtn);
+}
+
+static void __toolbar_backbutton_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->backbtn == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "backbutton_item", ad->backbtn);
+}
+
+
+static void __toolbar_cafbutton_unset(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+
+ elm_object_part_content_unset(ad->toolbar_edje, "cafbutton_item");
+}
+
+static void __toolbar_cafbutton_destroy(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ __toolbar_cafbutton_unset(ad);
+ DEL_EVAS_OBJECT(ad->caf_button);
+}
+
+static void __toolbar_cafbutton_set(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(ad->toolbar_edje == NULL);
+ cam_ret_if(ad->caf_button == NULL);
+
+ elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
+}
+
+static int __toolbar_cafbutton_create(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+ cam_retvm_if(ad == NULL, -1, "appdata is null");
+ if (ad->caf_button == NULL) {
+ ad->caf_button = cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_cafbutton_item");
+ }
+ cam_retvm_if(ad->caf_button == NULL, -1, "ad->caf_button is null");
+
+ edje_object_signal_callback_del(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb);
+ edje_object_signal_callback_add(_EDJ(ad->caf_button), "*", "toolbar_signal", __toolbar_cafbutton_cb, ad);
+
+ elm_object_part_content_set(ad->toolbar_edje, "cafbutton_item", ad->caf_button);
+ evas_object_show(ad->caf_button);
+
+ return EXIT_SUCCESS;
+}
+
+static void __toolbar_cafbutton_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ show_caf_button = TRUE;
+ edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,normal", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ show_caf_button = FALSE;
+ edje_object_signal_emit(_EDJ(ad->caf_button), "caf_button,invisible", "prog");
+ } else {
+ show_caf_button = FALSE;
+ DEBUG_TRACE("Invalid state for caf_button");
+ }
+}
+
+static void __toolbar_bg_update(struct appdata *ad, ToolbarItemState state)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ cam_retm_if(ad->caf_button == NULL, "ad->caf_button is null");
+
+ if (state == TOOLBAR_ITEM_STATE_NORMAL) {
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,show", "prog");
+ } else if (state == TOOLBAR_ITEM_STATE_INVISIBLE) {
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,hide", "prog");
+ } else {
+ DEBUG_TRACE("Invalid state for caf_button");
+ }
+}
+
+#define SETTING_SHORTCUTS_HOLD_TIME (0.5)
+static Ecore_Timer *edit_shortcuts_timer = NULL;
+static Eina_Bool __toolbar_show_edit_shortcuts_timer_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
+ if (edit_shortcuts_timer) {
+ edit_shortcuts_timer = NULL;
+ }
+ toolbar_create_shortcuts_popup(ad);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __toolbar_create_show_edit_shortcuts_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ if (edit_shortcuts_timer) {
+ ecore_timer_del(edit_shortcuts_timer);
+ edit_shortcuts_timer = NULL;
+ }
+ edit_shortcuts_timer = ecore_timer_add(SETTING_SHORTCUTS_HOLD_TIME,
+ __toolbar_show_edit_shortcuts_timer_cb,
+ ad);
+}
+
+static void __toolbar_destroy_show_edit_shortcuts_timer(void)
+{
+ if (edit_shortcuts_timer) {
+ ecore_timer_del(edit_shortcuts_timer);
+ edit_shortcuts_timer = NULL;
+ }
+}
+
+static void __toolbar_edje_signal_cb(void *data, Evas_Object *o,
+ const char *emission, const char *source)
+{
+ DEBUG_TRACE("_________________################____________________\n");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ cam_app_timeout_checker_update();
+ DEBUG_TRACE("ad->is_rotating = %d", ad->is_rotating);
+ if (ad->is_rotating == TRUE) {
+ DEBUG_TRACE("now in rotating target, do not accept signal");
+ return;
+ }
+ CamAppData *camapp = ad->camapp_handle;
+ cam_ret_if(camapp == NULL);
+ cam_ret_if(emission == NULL);
+ cam_ret_if(source == NULL);
+
+ if (ad->zoom_edje)
+ unload_zoom_edje(ad);
+
+ if (ad->ev_edje)
+ unload_ev_edje(ad);
+
+ if (ad->tip_popup)
+ cam_tip_popup_destroy(ad);
+
+ if (ad->edit_shortcuts_popup) {
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ return;
+ }
+
+ if(ad->battery_status == LOW_BATTERY_CRITICAL_STATUS)
+ return;
+
+ if (emission && source)
+ cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
+
+ Evas_Object_Event_Cb func = NULL;
+
+ if (strcmp(emission, "toolbar_0_press_sig") == 0) {
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_PRESS_ICON);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_0_release_sig") == 0) {
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_0_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_create(ad);
+ elm_image_file_set(ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon, CAM_IMAGE_EDJ_NAME, SETTING_NORMAL_ICON);
+ } else if (strcmp(emission, "toolbar_1_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_1_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_1_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_1) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_1].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else if (strcmp(emission, "toolbar_2_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_2_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_2_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_2) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_2].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else if (strcmp(emission, "toolbar_3_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_3_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_3_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_3) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_3].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else if (strcmp(emission, "toolbar_4_press_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_PRESS, &func);
+ __toolbar_create_show_edit_shortcuts_timer(ad);
+ } else if (strcmp(emission, "toolbar_4_release_sig") == 0) {
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ __toolbar_destroy_show_edit_shortcuts_timer();
+ } else if (strcmp(emission, "toolbar_4_click_sig") == 0) {
+ if (ad->edit_shortcuts_popup) /*when edit mode, could not using shortcuts*/
+ return;
+ int menu_item = cam_toolbar_displaypopup_map_menu_value(ad->displayed_setting_popup);
+ int menu_bar_no = cam_toolbar_get_menubarno_by_menuitem(ad, menu_item);
+ if (menu_bar_no == CAM_MENU_BAR_LEFT_4) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ return;
+ }
+ if (ad->toolbar_setting_popup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ Evas_Object *icon = NULL;
+ int type = -1;
+ icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_4].menu_type;
+ __toolbar_menu_type_update(icon, type, ad, BUTTON_STATE_NORMAL, &func);
+ if (func) {
+ (*func)((void *)ad, NULL, o, NULL);
+ }
+ } else {
+ DEBUG_TRACE("invalid signal");
+ }
+}
+
+int cam_toolbar_create(struct appdata *ad)
+{
+
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ elm_object_part_content_unset(ad->ug_base, "toolbar_layout");
+
+/*note: create layout*/
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ if (ad->toolbar_edje_landscape == NULL) {
+ ad->toolbar_edje_landscape = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_landscape == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ if (ad->toolbar_edje_landscape_inverse == NULL) {
+ ad->toolbar_edje_landscape_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_landscape_inverse == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ if (ad->toolbar_edje_portrait == NULL) {
+ ad->toolbar_edje_portrait = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_portrait == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ if (ad->toolbar_edje_portrait_inverse == NULL) {
+ ad->toolbar_edje_portrait_inverse = cam_app_load_edj(ad->ug_base, ad->toolbar_edj_file, "toolbar");
+ cam_retv_if(ad->toolbar_edje_portrait_inverse == NULL, -1);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
+ break;
+ default:
+ DEBUG_TRACE("note: run into un-reached codes");
+ }
+ cam_retv_if(ad->toolbar_edje == NULL, -1);
+
+ elm_object_part_content_set(ad->ug_base, "toolbar_layout", ad->toolbar_edje);
+
+ __toolbar_menu_item_create(ad);
+
+ elm_object_signal_callback_del(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb);
+ elm_object_signal_callback_add(ad->toolbar_edje, "*", "toolbar_signal", __toolbar_edje_signal_cb, ad);
+
+ __toolbar_shutter_button_create(ad);
+ __toolbar_recording_button_create(ad);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL)
+ __toolbar_quickview_item_create(ad);
+
+ __toolbar_backbutton_create(ad);
+ __toolbar_cafbutton_create(ad);
+
+ cam_toolbar_update(ad);
+
+ return EXIT_SUCCESS;
+}
+
+void cam_toolbar_content_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ __toolbar_menu_item_destroy(ad);
+ __toolbar_shutter_button_destroy(ad);
+ __toolbar_recording_button_destroy(ad);
+ __toolbar_recording_stop_button_destroy(ad);
+ __toolbar_quickview_item_destroy(ad);
+ __toolbar_backbutton_destroy(ad);
+ __toolbar_cafbutton_destroy(ad);
+}
+
+void cam_toolbar_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_toolbar_content_destroy(ad);
+ /*NOTE: all sub obj of toolbar will be deleted auto while toolar is deleted*/
+ edje_object_signal_callback_del(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_landscape);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_landscape_inverse);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_portrait);
+ DEL_EVAS_OBJECT(ad->toolbar_edje_portrait_inverse);
+
+ ad->toolbar_edje = NULL;
+
+ REMOVE_TIMER(ad->setting_toolbar_hide_timer);
+
+ /*elm_all_flush();*/
+ cam_elm_cache_flush();
+}
+
+void cam_toolbar_update(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+ CamShotMode shotmode = camapp->shooting_mode;
+
+ __toolbar_menu_icon_update(ad);
+
+ if (ad->timer_activated) {
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ }
+ } else {
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ switch (shotmode) {
+ case CAM_SINGLE_MODE:
+ case CAM_SELF_SINGLE_MODE:
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ if (cam_is_enabled_menu(ad, CAM_MENU_BURST_SHOT_MODE)
+ && camapp->continuous_shot_data
+ && camapp->continuous_shot_data->capture_status == CAM_CONTI_SHOT_STATUS_CAPTURING) {
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_PRESS);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ }
+ __toolbar_recording_stop_button_destroy(ad);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+
+ break;
+ default:
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_stop_button_destroy(ad);
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ break;
+ }
+
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ } else {
+ if (ad->is_recording) {
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_stop_button_create(ad);
+
+ if (show_caf_button)
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ }
+ } else {
+ __toolbar_bg_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+
+ if(ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL){
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_DIM);
+ } else {
+ __toolbar_shutter_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+
+ __toolbar_recording_button_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ __toolbar_recording_stop_button_destroy(ad);
+
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
+ __toolbar_quickview_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ }
+ }
+ }
+}
+
+int cam_toolbar_rotate(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+ cam_toolbar_setting_popup_destroy(ad);
+ cam_toolbar_destroy(ad);
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ if (ad->toolbar_edje_landscape == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ if (ad->toolbar_edje_landscape_inverse == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_landscape_inverse;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ if (ad->toolbar_edje_portrait == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ if (ad->toolbar_edje_portrait_inverse == NULL) {
+ cam_toolbar_create(ad);
+ }
+ ad->toolbar_edje = ad->toolbar_edje_portrait_inverse;
+ break;
+ default:
+ DEBUG_TRACE("note: run into un-reached codes");
+ }
+
+ evas_object_show(ad->toolbar_edje);
+
+ return EXIT_SUCCESS;
+}
+
+int show_toolbar_edje(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ if (ad->toolbar_edje == NULL) {
+ return -1;
+ }
+ if (!ad->toolbar_hided) {
+ cam_toolbar_update(ad);
+ evas_object_show(ad->toolbar_edje);
+ } else {
+ hide_toolbar_edje(ad);
+ }
+
+ return EXIT_SUCCESS;
+}
+
+int hide_toolbar_edje(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ evas_object_hide(ad->toolbar_edje);
+ return EXIT_SUCCESS;
+}
+
+gboolean toolbar_update_quickview_thumbnail_no_animation(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+ DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
+ DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
+
+ if (camapp->thumbnail_name != NULL) {
+ ad->toolbar.quickview_item.thumbnail_image = elm_bg_add(ad->toolbar.quickview_item.edje);
+ cam_retv_if(ad->toolbar.quickview_item.thumbnail_image == NULL, FALSE);
+ elm_bg_file_set(ad->toolbar.quickview_item.thumbnail_image, camapp->thumbnail_name, NULL);
+
+ Evas_Object *layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
+ Evas_Object *thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout, "thumbnail_area");
+ cam_retv_if(thumbnail_area == NULL, FALSE);
+ Evas_Coord x = 0, y = 0, w = 0, h = 0;
+ evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
+ evas_object_resize(ad->toolbar.quickview_item.thumbnail_image, w, h);
+ DEBUG_TRACE("%d %d %d %d", x, y, w, h);
+
+ if (ad->toolbar.quickview_item.edje) {
+ elm_object_part_content_set(ad->toolbar.quickview_item.edje,
+ "thumbnail", ad->toolbar.quickview_item.thumbnail_image);
+ evas_object_show(ad->toolbar.quickview_item.edje);
+ }
+
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean toolbar_update_quickview_thumbnail(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, FALSE);
+ cam_retv_if(ad->evas == NULL, FALSE);
+
+ cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
+ DEBUG_TRACE("camapp->thumbnail_name: [%s]", camapp->thumbnail_name);
+
+ cam_utils_request_main_pipe_handler(ad, NULL, CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL);
+
+ return TRUE;
+}
+
+static void setting_ctxpopup_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->sub_menu_group);
+
+ if (ad->sub_genlist != NULL) {
+ elm_genlist_clear(ad->sub_genlist);
+ evas_object_del(ad->sub_genlist);
+ ad->sub_genlist = NULL;
+ }
+
+ DEL_EVAS_OBJECT(ad->setting_ctxpopup);
+ ad->ctxpopup_area = NULL;
+ ad->sub_menu_type = CAM_MENU_EMPTY;
+
+ if (ad->toolbar_setting_popup == NULL)
+ __set_show_state_preview_obj(ad, TRUE);
+}
+
+static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->toolbar_edje == NULL)
+ DEBUG_TRACE("error occur");
+
+ __set_show_state_preview_obj(ad, FALSE);
+
+ ad->ctxpopup_area = (Evas_Object *)
+ edje_object_part_object_get(elm_layout_edje_get
+ (ad->toolbar_edje), "popup_area");
+ ad->setting_ctxpopup = elm_ctxpopup_add(ad->ctxpopup_area);
+ elm_object_scroll_hold_push(ad->setting_ctxpopup);
+ if (!bNoArrow)
+ elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera");
+ else
+ elm_object_style_set(ad->setting_ctxpopup, "beat_winset_test/camera_no_arrow");
+ /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
+ return EXIT_SUCCESS;
+}
+
+static int setting_toolbar_popup_create(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->toolbar_edje == NULL)
+ DEBUG_TRACE("error occur");
+
+ ad->toolbar_setting_popup_area = (Evas_Object *)
+ edje_object_part_object_get(elm_layout_edje_get
+ (ad->toolbar_edje), "setting_popup");
+ ad->toolbar_setting_popup = elm_ctxpopup_add(ad->toolbar_setting_popup_area);
+ elm_object_scroll_hold_push(ad->toolbar_setting_popup);
+ elm_object_style_set(ad->toolbar_setting_popup, "beat_winset_test/camera");
+ /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/
+ return EXIT_SUCCESS;
+}
+
+static int setting_shortcuts_popup_create(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->toolbar_edje == NULL)
+ DEBUG_TRACE("error occur");
+
+ ad->edit_shortcuts_popup = (Evas_Object *)
+ edje_object_part_object_get(elm_layout_edje_get
+ (ad->toolbar_edje), "shortcuts_popup");
+
+ DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
+ ad->edit_shortcuts_popup_description =
+ cam_app_load_edj(ad->toolbar_edje, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME,
+ "camera/shortcuts/layout/description");
+
+ /*TODO: need id: IDS_CAM_POP_TAP_AND_HOLD_AN_ICON_AND_MOVE_TO_EDIT_SHORTCUTS*/
+ 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"));
+ elm_object_scroll_hold_push(ad->edit_shortcuts_popup);
+ return EXIT_SUCCESS;
+}
+
+int cam_guideline_create(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ cam_retv_if(ad->camapp_handle == NULL, -1);
+
+ DEL_EVAS_OBJECT(ad->guideline_edje);
+ elm_object_part_content_unset(ad->ug_base, "guideline_layout");
+
+ if (ad->guideline_edje == NULL) {
+ ad->guideline_edje = cam_app_load_edj(ad->ug_base, CAM_MAIN_LAYOUT_EDJ_NAME, "guideline");
+ }
+
+ cam_retv_if(ad->guideline_edje == NULL, -1);
+ elm_object_part_content_set(ad->ug_base, "guideline_layout", ad->guideline_edje);
+
+ gboolean wide_mode = FALSE;
+ gint ret = 0;
+
+ gint p_width = 0;
+ gint p_height =0;
+ ret = cam_mm_get_video_size(&p_width, &p_height);
+
+ if (!ret) {
+ DEBUG_TRACE("Middle Ware error occur!");
+ return -1;
+ }
+
+ DEBUG_TRACE("p_width == %d ,p_height = %d" ,p_width , p_height);
+ if (ad->camapp_handle->camera_mode == CAM_CAMERA_MODE) {
+ wide_mode = cam_utils_check_wide_resolution(p_width, p_height);
+ } else if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
+ if ( p_width > PREVIEW_W ) {
+ wide_mode = TRUE;
+ } else {
+ wide_mode = FALSE;
+ }
+ }
+
+ if (p_width == 1392 && p_height == 1392) {
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ DEBUG_TRACE("landscape");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,square", "prog_guideline");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ DEBUG_TRACE("portrait");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,vertical,square", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,vertical,normal", "prog_guideline");
+ break;
+ }
+ } else {
+ if (wide_mode) {
+ DEBUG_TRACE("hor,wide_mode");
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ DEBUG_TRACE("landscape");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,wide", "prog_guideline");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ DEBUG_TRACE("portrait");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,vertical,wide", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,vertical,normal", "prog_guideline");
+ break;
+ }
+
+ } else {
+ DEBUG_TRACE("hor,normal mode");
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ DEBUG_TRACE("landscape");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,normal", "prog_guideline");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ DEBUG_TRACE("portrait");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,1,2,vertical,normal", "prog_guideline");
+ edje_object_signal_emit(_EDJ(ad->guideline_edje),
+ "guide_line,3,4,vertical,normal", "prog_guideline");
+ break;
+ }
+
+ }
+ }
+ /*evas_object_lower(ad->guideline_edje);*/
+ evas_object_show(ad->guideline_edje);
+
+ DEBUG_TRACE("over");
+ return 0;
+}
+
+static void __volume_key_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+
+ switch((int)data) {
+ case CAM_MENU_VOLUME_KEY_ZOOM:
+ {
+ CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_ZOOM);
+ cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY_SHUTTER:
+ {
+ CAM_GVALUE_SET_INT(value, CAM_VOLUME_KEY_SHUTTER);
+ cam_handle_value_set(ad, PROP_VOLUME_KEY, &value);
+ }
+ break;
+ default:
+ break;
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_VOLUME_KEY);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __storage_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int mmc_state = -1;
+ GValue value = {0};
+
+ switch((int)data) {
+ case CAM_MENU_STORAGE_PHONE:
+ {
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ }
+ break;
+ case CAM_MENU_STORAGE_MMC:
+ {
+ if (!vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state)) {
+ if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED) {
+ GValue value = {
+ 0
+ };
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ cam_info(LOG_UI, "MMC card is removed");
+ cam_storage_warning_popup();
+ } else {
+ CAM_GVALUE_SET_INT(value, CAM_STORAGE_EXTERNAL);
+ cam_handle_value_set(ad, PROP_STORAGE, &value);
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_STORAGE);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int wb = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set wb value */
+ if (ad->camapp_handle->white_balance != wb) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, wb);
+ cam_handle_value_set(ad, PROP_WB, &value);
+ }
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_WHITE_BALANCE);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int iso = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set iso value */
+ if (ad->camapp_handle->iso != iso) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, iso);
+ cam_handle_value_set(ad, PROP_ISO, &value);
+ }
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_ISO);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+static void __metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int metering = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set metering value */
+ if (ad->camapp_handle->auto_exposure != metering) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, metering);
+ cam_handle_value_set(ad, PROP_METERING, &value);
+ }
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_METERING);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int index = (int)data - CAM_MENU_TIMER_OFF;
+ DEBUG_TRACE("index : [%d]", index);
+ cam_ret_if(index < 0 || index >= CAM_SETTINGS_TIMER_NUMS);
+
+ /* set timer value */
+ if (ad->camapp_handle->timer != index) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, index);
+ cam_handle_value_set(ad, PROP_TIMER, &value);/*set ad->camapp_handle->timer*/
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_TIMER);
+ }
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __reset_settings_launch(void)
+{
+ GValue i_value = { 0, };
+ GValue b_value = { 0, };
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ CamAppData *camapp = NULL;
+
+ cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
+
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, " cam_handle is NULL");
+
+ g_value_init(&i_value, G_TYPE_INT);
+ g_value_init(&b_value, G_TYPE_BOOLEAN);
+
+ camapp->device_type = CAM_DEVICE_MEGA;
+
+ /* Shot mode */
+ g_value_set_int(&i_value, SHOTMODE_DEFAULT);
+ cam_handle_value_set(ad, PROP_SHOT_MODE, &i_value);
+
+ /* Rec mode */
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && ad->exe_args->size_limit > 0) {
+ g_value_set_int(&i_value, CAM_RECORD_MMS);
+ } else {
+ g_value_set_int(&i_value, RECMODE_DEFAULT);
+ }
+ cam_handle_value_set(ad, PROP_REC_MODE, &i_value);
+
+ /* Scene */
+ g_value_set_int(&i_value, PG_MODE_DEFAULT);
+ cam_handle_value_set(ad, PROP_SCENE_MODE, &i_value);
+
+ /* auto focus */
+ g_value_set_int(&i_value, AF_DEFAULT);
+ cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
+
+ /* Timer */
+ g_value_set_int(&i_value, TIMER_DEFAULT);
+ cam_handle_value_set(ad, PROP_TIMER, &i_value);
+
+ /* white balance */
+ g_value_set_int(&i_value, WB_DEFAULT);
+ cam_handle_value_set(ad, PROP_WB, &i_value);
+
+ /* Effect */
+ g_value_set_int(&i_value, EFFECT_DEFAULT);
+ cam_handle_value_set(ad, PROP_EFFECT, &i_value);
+
+ /* ISO */
+ g_value_set_int(&i_value, ISO_DEFAULT);
+ cam_handle_value_set(ad, PROP_ISO, &i_value);
+
+ /* Metering */
+ g_value_set_int(&i_value, AE_DEFAULT);
+ cam_handle_value_set(ad, PROP_METERING, &i_value);
+
+ /* Anti-shake */
+ g_value_set_int(&i_value, AHS_DEFAULT);
+ cam_handle_value_set(ad, PROP_AHS, &i_value);
+
+ /* wild dynamic range */
+ g_value_set_int(&i_value, WDR_DEFAULT);
+ cam_handle_value_set(ad, PROP_WDR, &i_value);
+
+ /* Image quality */
+ g_value_set_int(&i_value, QUALITY_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
+
+ /* Video quality */
+ g_value_set_int(&i_value, QUALITY_DEFAULT);
+ cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
+
+ /* Auto Contrast */
+ g_value_set_int(&i_value, FALSE);
+ cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &i_value);
+
+ /* Guide Line */
+ g_value_set_boolean(&b_value, GUIDE_LINE_DEFAULT);
+ cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
+ settings_guideline_refresh(ad);
+
+ /* Review */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_REVIEW, &b_value);
+
+ /* GPS Connect */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_GPS, &b_value);
+
+ /* shutter sound */
+ g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
+ cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
+
+ /* sound */
+ cam_mm_set_shutter_sound(SOUND_DEFAULT);
+ ad->camapp_handle->shutter_sound = SHUTTER_SOUND_DEFAULT;
+
+ /* audio recording */
+ g_value_set_boolean(&b_value, TRUE);
+ cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
+
+ /* storage */
+ g_value_set_int(&i_value, STORAGE_DEFAULT);
+ cam_handle_value_set(ad, PROP_STORAGE, &i_value);
+
+ /* brightness */
+ g_value_set_int(&i_value, BRIGHTNESS_DEFAULT);
+ cam_handle_value_set(ad, PROP_BRIGHTNESS, &i_value);
+
+ /* Resolution */
+ g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
+ cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &i_value);
+
+ g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
+ cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &i_value);
+
+ if (ad->indicator_edje) {
+ /* delete indicator */
+ evas_object_hide(ad->indicator_edje);
+ cam_indicator_destory(ad);
+ }
+ cam_indicator_create(ad);
+
+ /* Flash */
+ if (camapp->camera_mode == CAM_CAMERA_MODE) {
+ g_value_set_int(&i_value, FLASH_DEFAULT);
+ } else {
+ g_value_set_int(&i_value, REC_FLASH_DEFAULT);
+ }
+ cam_handle_value_set(ad, PROP_FLASH, &i_value);
+
+ /* Outdoor visibility */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &b_value);
+
+ /* save as flip */
+ g_value_set_boolean(&b_value, FALSE);
+ cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &b_value);
+
+
+ /* Zoom */
+ g_value_set_int(&i_value, ZOOM_DEFAULT);
+ cam_handle_value_set(ad, PROP_ZOOM, &i_value);
+
+ /* Size limit type */
+ g_value_set_int(&i_value, CAM_MM_SIZE_LIMIT_TYPE_BYTE);
+ cam_handle_value_set(ad, PROP_SIZE_LIMIT_TYPE, &i_value);
+
+ /* Size limit */
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && ad->exe_args->size_limit > 0) {
+ g_value_set_int(&i_value, CAM_REC_MMS_MAX_SIZE);
+ } else {
+ g_value_set_int(&i_value, REC_SIZE_LIMIT_DEFAULT);
+ }
+ cam_handle_value_set(ad, PROP_SIZE_LIMIT, &i_value);
+
+ /* Timer */
+ g_value_set_int(&i_value, TIMER_DEFAULT);
+ cam_handle_value_set(ad, PROP_TIMER, &i_value);
+
+ /* Image count */
+ g_value_set_int(&i_value, IMAGE_COUNT_DEFAULT);
+ cam_handle_value_set(ad, PROP_IMAGE_COUNT, &i_value);
+
+ CAM_GVALUE_SET_INT(i_value, CAM_VOLUME_KEY_ZOOM);
+ cam_handle_value_set(ad, PROP_VOLUME_KEY, &i_value);
+
+ camapp->continuous_shot_data = NULL;
+ camapp->enable_touch_af = TRUE;
+ camapp->burst_shot = TRUE;
+
+ /*Edit shortcuts*/
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHOW_POP_TIP,
+ TRUE);/*note: set show pop tip flag*/
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHORTCUTS_INIT_PART_INDEX,
+ FALSE);/*note: set shorcuts init flag*/
+}
+
+static void __restore_defaults_popup_cb_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
+
+ DEL_EVAS_OBJECT(ad->confirm_popup);
+
+ hide_toolbar_edje(ad);
+ cam_app_preview_stop();
+
+ __reset_settings_launch();
+ __toolbar_menu_item_reset(ad);
+
+ ResetCaps();
+
+ show_toolbar_edje(ad);
+
+ if (!cam_app_preview_start(ad)) {
+ cam_app_notice_popup(ad, dgettext(PACKAGE, "IDS_CAM_POP_UNABLE_TO_START_CAMERA"), cam_app_timeout_notice_response_cb);
+ }
+
+}
+
+static void __restore_defaults_popup_cb_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, " camapp_handle is NULL");
+
+ DEL_EVAS_OBJECT(ad->confirm_popup);
+}
+
+static void __effects_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+ int effect = CAM_SCENE_NONE;
+ switch ((int)data) {
+ case CAM_MENU_EFFECT_NONE:
+ effect = CAMERA_ATTR_EFFECT_NONE;
+ break;
+ case CAM_MENU_EFFECT_NEGATIVE:
+ effect = CAMERA_ATTR_EFFECT_NEGATIVE;
+ break;
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ effect = CAMERA_ATTR_EFFECT_MONO;
+ break;
+ case CAM_MENU_EFFECT_SEPIA:
+ effect = CAMERA_ATTR_EFFECT_SEPIA;
+ break;
+ default:
+ break;
+ }
+
+ if (ad->camapp_handle->effect != effect) {
+ CAM_GVALUE_SET_INT(value, effect);
+ cam_handle_value_set(ad, PROP_EFFECT, &value);
+ }
+
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_EFFECTS);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __shot_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ switch ((int)data) {
+ case CAM_MENU_SHOOTING_SINGLE:
+ shot_mode_set(ad, CAM_SINGLE_MODE);
+ break;
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ shot_mode_set(ad, CAM_SELF_SINGLE_MODE);
+ break;
+ default:
+ break;
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item) {
+ elm_genlist_item_update(ad->setting_select_item);
+ }
+
+ __toolbar_menu_icon_update(ad);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __scene_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+
+ int scene = CAM_MENU_SCENE_AUTO;
+ switch ((int)data) {
+ case CAM_MENU_SCENE_AUTO:
+ scene = CAM_SCENE_NONE;
+ break;
+ case CAM_MENU_SCENE_PORTRAIT:
+ scene = CAM_SCENE_PORTRAIT;
+ break;
+ case CAM_MENU_SCENE_LANDSCAPE:
+ scene = CAM_SCENE_LANDSCAPE;
+ break;
+ case CAM_MENU_SCENE_NIGHT:
+ scene = CAM_SCENE_NIGHT;
+ break;
+ case CAM_MENU_SCENE_SPORTS:
+ scene = CAM_SCENE_SPORTS;
+ break;
+ case CAM_MENU_SCENE_PARTY:
+ scene = CAM_SCENE_PARTY;
+ break;
+ case CAM_MENU_SCENE_BEACHSNOW:
+ scene = CAM_SCENE_BEACHSNOW;
+ break;
+ case CAM_MENU_SCENE_SUNSET:
+ scene = CAM_SCENE_SUNSET;
+ break;
+ case CAM_MENU_SCENE_DUSKDAWN:
+ scene = CAM_SCENE_DUSKDAWN;
+ break;
+ case CAM_MENU_SCENE_FALL:
+ scene = CAM_SCENE_FALL;
+ break;
+ case CAM_MENU_SCENE_FIREWORK:
+ scene = CAM_SCENE_FIREWORK;
+ break;
+ case CAM_MENU_SCENE_TEXT:
+ scene = CAM_SCENE_TEXT;
+ break;
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ scene = CAM_SCENE_CANDLELIGHT;
+ break;
+ case CAM_MENU_SCENE_BACKLIGHT:
+ scene = CAM_SCENE_BACKLIGHT;
+ break;
+ case CAM_MENU_SCENE_SHOW_WINDOW:
+ scene = CAM_SCENE_SHOW_WINDOW;
+ break;
+ default:
+ break;
+ }
+
+ if (ad->camapp_handle->scene_mode != scene) {
+ CAM_GVALUE_SET_INT(value, scene);
+ cam_handle_value_set(ad, PROP_SCENE_MODE, &value);
+ }
+
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ __toolbar_menu_icon_update(ad);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ __update_setting_popup(ad);
+}
+
+static void __focus_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+ int focus_mode = CAM_FOCUS_AUTO;
+ switch ((int)data) {
+ case CAM_MENU_FOCUS_AUTO:
+ focus_mode = CAM_FOCUS_AUTO;
+ break;
+ case CAM_MENU_FOCUS_MACRO:
+ focus_mode = CAM_FOCUS_MACRO;
+ break;
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ focus_mode = CAM_FOCUS_FACE;
+ break;
+ default:
+ break;
+ }
+
+ CAM_GVALUE_SET_INT(value, focus_mode);
+ cam_handle_value_set(ad, PROP_AF_MODE, &value);
+
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+ __update_menubar_icon_by_index(ad, CAM_MENU_FOCUS_MODE);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ __update_setting_popup(ad);
+}
+
+static void __record_mode_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ GValue value = {0};
+ int record_mode = CAM_RECORD_NORMAL;
+ switch ((int)data) {
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ record_mode = CAM_RECORD_NORMAL;
+ break;
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ record_mode = CAM_RECORD_MMS;
+ break;
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ record_mode = CAM_RECORD_SLOW;
+ break;
+ case CAM_MENU_RECORDING_MODE_FAST:
+ record_mode = CAM_RECORD_FAST;
+ break;
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ record_mode = CAM_RECORD_SELF;
+ break;
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ record_mode = CAM_RECORD_SELF_MMS;
+ break;
+ default:
+ break;
+ }
+
+ if (ad->camapp_handle->recording_mode != record_mode) {
+ CAM_GVALUE_SET_INT(value, record_mode);
+ cam_handle_value_set(ad, PROP_REC_MODE, &value);
+ }
+
+ evas_object_show(ad->toolbar_setting_popup);
+ if (ad->setting_select_item) {
+ elm_genlist_item_update(ad->setting_select_item);
+ }
+
+ __toolbar_menu_icon_update(ad);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __update_menubar_icon_by_index(struct appdata *ad, int index)
+{
+ Evas_Object_Event_Cb func = NULL;
+ int menubar_no = -1;
+ menubar_no = __get_menubar_no_by_index(ad, index);
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
+ Evas_Object *icon = NULL;
+ icon = ad->toolbar_menu_arrays[menubar_no].icon;
+ if (icon)
+ __toolbar_menu_type_update(icon, index, ad, BUTTON_STATE_NORMAL, &func);
+}
+
+static void __flash_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("");
+
+ int flash_value = 0;
+ GValue value = {0};
+ switch ((int)data) {
+ case CAM_MENU_FLASH_OFF:
+ flash_value = CAM_FLASH_OFF;
+ break;
+ case CAM_MENU_FLASH_ON:
+ flash_value = CAM_FLASH_ON;
+ break;
+ case CAM_MENU_FLASH_AUTO:
+ flash_value = CAM_FLASH_AUTO;
+ break;
+ default:
+ flash_value = CAM_FLASH_OFF;
+ break;
+ }
+ CAM_GVALUE_SET_INT(value, flash_value);
+ cam_handle_value_set(ad, PROP_FLASH, &value);
+ __update_menubar_icon_by_index(ad, CAM_MENU_FLASH);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void toolbar_move_with_scale(Evas_Object *eo, double x, double y)
+{
+ DEBUG_TRACE("x = %f, y = %f" , x, y);
+ DEBUG_TRACE("elm_config_scale_get() = %f" , elm_config_scale_get());
+ evas_object_move(eo, x * elm_config_scale_get(), y * elm_config_scale_get());
+}
+
+/*note: @mouse_point is the coordinate of mouse click, output is scaled*/
+static void __cam_get_ctxpopup_coord_in_setting_toolbar(int target_direction,
+ int mouse_point,
+ int *x,
+ int *y)
+{
+ int ver_x, ver_y, h_x, h_y;
+ ver_x = ver_y = h_x = h_y = 0;
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ *x = (int)(SETTING_HOR_CTX_POPUP_X * elm_config_scale_get());
+ *y = mouse_point;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *x = (int)((1280 - SETTING_HOR_CTX_POPUP_X) * elm_config_scale_get());
+ *y = mouse_point;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ *x = (int)(SETTING_VER_CTX_POPUP_X * elm_config_scale_get());;
+ *y = mouse_point;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *x = (int)((720 - SETTING_VER_CTX_POPUP_X) * elm_config_scale_get());
+ *y = mouse_point;
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+
+ }
+}
+
+static void __cam_get_shotguide_popup_coord(int target_direction, int *out_x, int *out_y)
+{
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *out_x = (int)((MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
+ *out_y = (int)(0.9*MAIN_H);
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *out_x = (int)((VER_MAIN_W - SHOT_GUIDE_POPUP_WIDTH) / 2);
+ *out_y = (int)(0.8*VER_MAIN_H);
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+ }
+}
+
+/*note: in this func, all coordinate is not scale*/
+static void __get_option_coord_by_menubar_no(int menubar_no, int target_direction, int *x, int *y)
+{
+ int menu_bar_no = menubar_no;
+ int ver_x, ver_y, hor_x, hor_y;
+ ver_x = ver_y = hor_x = hor_y = 0;
+
+ switch (menu_bar_no) {
+ case CAM_MENU_BAR_LEFT_0:
+ ver_x = 83;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 648;
+ break;
+ case CAM_MENU_BAR_LEFT_1:
+ ver_x = 223;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 508;
+ break;
+ case CAM_MENU_BAR_LEFT_2:
+ ver_x = 364;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 364;
+ break;
+ case CAM_MENU_BAR_LEFT_3:
+ ver_x = 508;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 223;
+ break;
+ case CAM_MENU_BAR_LEFT_4:
+ ver_x = 648;
+ ver_y = 161;
+ hor_x = 161;
+ hor_y = 83;
+ break;
+ default:
+ DEBUG_TRACE("input para,error!");
+ break;
+ }
+
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ *x = hor_x;
+ *y = hor_y;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *x = 1280 - hor_x;
+ *y = ver_x;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ *x = ver_x;
+ *y = ver_y;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *x = hor_y;
+ *y = 1280 - ver_y;
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+ break;
+ }
+}
+
+static int __get_menubar_no_by_index(struct appdata *ad, int index)
+{
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ if (index == ad->toolbar_menu_arrays[i].menu_type) {
+ return i;
+ }
+ }
+ return CAM_MENU_BAR_LEFT_INVALID;
+}
+
+static void __cam_toolbar_move_ctxpopup(Evas_Object *obj, int target_direction, int x, int y)
+{
+ if (!obj) return;
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN);
+
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP);
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT);
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT);
+ break;
+ default:
+ DEBUG_TRACE("wow, check it, reached un-able reached codes");
+ }
+
+ toolbar_move_with_scale(obj, x, y);
+}
+
+static void __cam_toolbar_move_sub_menu(Evas_Object *obj, int target_direction, int x, int y)
+{
+ if (!obj) return;
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN);
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ elm_ctxpopup_direction_priority_set(obj,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_RIGHT,
+ ELM_CTXPOPUP_DIRECTION_UP);
+ break;
+ default:
+ DEBUG_TRACE("wow, check it, reached un-able reached codes");
+ }
+
+ evas_object_move(obj, x, y);
+}
+
+static void __tip_popup_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ gboolean pop_tip = FALSE;
+ pop_tip = elm_check_state_get(obj);
+ DEBUG_TRACE("do_not_ask_again = %d", pop_tip);
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, !pop_tip);
+ cam_config_save();
+}
+
+static void __tip_popup_button_selected_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE();
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ cam_tip_popup_destroy(ad);
+}
+
+/*note: input x,y should be landscape mode coordinate*/
+static void __get_tip_popup_coord(int target_direction, int *out_x, int *out_y)
+{
+ switch (target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_LANDSCAPE_Y;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ *out_x = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_X;
+ *out_y = EDIT_SHORTCUTS_TIPS_COORDINATE_PORTRAIT_Y;
+ break;
+ default:
+ DEBUG_TRACE("REACHED UN-ABLE REACHED CODES");
+ }
+}
+
+void cam_tip_popup_create(struct appdata *ad, const CamTipPopupType type)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ if (ad->tip_popup) {
+ cam_tip_popup_destroy(ad);
+ }
+
+ /*hide focus guide*/
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+
+ elm_object_part_content_unset(ad->ug_base, "tip_popup_layout");
+
+ ad->tip_popup = cam_app_load_edj(ad->ug_base, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/help");
+
+ cam_retm_if(ad->tip_popup == NULL, "tip_popup is NULL");
+ elm_object_part_content_set(ad->ug_base, "tip_popup_layout", ad->tip_popup);
+
+ Evas_Object *check = elm_check_add(ad->tip_popup);
+ evas_object_smart_callback_add(check, "changed", __tip_popup_check_cb, (void*)ad);
+ evas_object_show(check);
+ elm_object_part_content_set(ad->tip_popup, "content.help.check.swallow", check);
+
+ gboolean show_popup_tip = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS, PROP_SHOW_POP_TIP, POP_TIP_DEFAULT);
+ if (show_popup_tip)
+ elm_check_state_set(check, EINA_FALSE);
+ else
+ elm_check_state_set(check, EINA_TRUE);
+
+ Evas_Object *btn = elm_button_add(ad->tip_popup);
+ elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_SK_OK"));
+ evas_object_smart_callback_add(btn, "unpressed", __tip_popup_button_selected_cb, (void *)ad);
+ evas_object_show(btn);
+ elm_object_part_content_set(ad->tip_popup, "button.swallow", btn);
+
+ Evas_Object *image = elm_image_add(ad->tip_popup);
+ elm_object_part_content_set(ad->tip_popup, "content.help.image", image);
+
+ if (ad->tip_popup) {
+ evas_object_show(ad->tip_popup);
+ evas_object_size_hint_min_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
+ evas_object_size_hint_max_set(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
+ evas_object_resize(ad->tip_popup, EDIT_SHORTCUTS_TIP_WIDTH, EDIT_SHORTCUTS_TIP_HEIGHT);
+
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.check.txt", dgettext(PACKAGE, "IDS_CAM_POP_DO_NOT_SHOW_AGAIN"));
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "tips.txt", dgettext(PACKAGE, "IDS_CAM_HEADER_TIPS"));
+
+ switch (type) {
+ case CAM_TIP_POPUP_BURSTSHOT_HELP:
+ ad->tip_popup_type = CAM_TIP_POPUP_BURSTSHOT_HELP;
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
+ dgettext(PACKAGE, "IDS_CAM_BODY_TAP_AND_HOLD_THE_CAMERA_BUTTON_TO_TAKE_A_BURST_SHOT"));
+ elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_BURSTSHOT_HELP_IMAGE);
+ break;
+ case CAM_TIP_POPUP_VOLUMEKEY_HELP:
+ ad->tip_popup_type = CAM_TIP_POPUP_VOLUMEKEY_HELP;
+ edje_object_part_text_set(_EDJ(ad->tip_popup), "content.help.txtblock",
+ dgettext(PACKAGE, "IDS_CAM_POP_PRESS_THE_VOLUME_UP_KEY_TO_TAKE_A_PICTURE_PRESS_THE_VOLUME_DOWN_KEY_TO_START_RECORDING"));
+ elm_image_file_set(image, CAM_IMAGE_EDJ_NAME, TIP_POPUP_VOLUMEKEY_HELP_IMAGE);
+ break;
+ default:
+ DEBUG_TRACE("invalid tip-popup type");
+ break;
+ }
+
+ evas_object_show(ad->tip_popup);
+
+ int output_x, output_y;
+ output_x = output_y = 0;
+ __get_tip_popup_coord(ad->target_direction, &output_x, &output_y);
+ evas_object_move(ad->tip_popup, output_x, output_y);/*landscape*/
+ }
+}
+
+void cam_tip_popup_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->tip_popup);
+ ad->tip_popup_type = CAM_TIP_POPUP_NONE;
+}
+
+void cam_tip_popup_rotate(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ DEL_EVAS_OBJECT(ad->tip_popup);
+ cam_tip_popup_create(ad, ad->tip_popup_type);
+}
+
+static char *__sub_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ int index = (int)data;
+
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ CAM_MENU_ITEM* menu_item = NULL;
+ menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
+ return strdup(dgettext(PACKAGE, __get_text_name(*menu_item)));
+}
+
+static Evas_Object *__sub_menu_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, NULL, "camapp_handle is NULL");
+
+ int index = (int)data;
+ int value_index = 0;
+
+ if (strcmp(part, "elm.radio") == 0) {
+ Evas_Object* radio = elm_radio_add(obj);
+
+ elm_object_style_set(radio, "beat_winset_test/camera");
+ elm_radio_state_value_set(radio, index);
+ elm_radio_group_add(radio, ad->sub_menu_group);
+
+ switch (ad->sub_menu_type) {
+ case CAM_MENU_FLASH:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FLASH, camapp->flash);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SHOOTING_MODE, camapp->shooting_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_RECORDING_MODE, camapp->recording_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_SCENE_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_SCENE_MODE, camapp->scene_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_FOCUS_MODE, camapp->af_mode);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_TIMER:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_TIMER, camapp->timer);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_EFFECTS:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_EFFECTS, camapp->effect);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_PHOTO_RESOLUTION, camapp->photo_resolution);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VIDEO_RESOLUTION, camapp->video_resolution);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_WHITE_BALANCE, camapp->white_balance);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_ISO:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_ISO, camapp->iso);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_METERING:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_METERING, camapp->auto_exposure);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_STORAGE:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_STORAGE, camapp->storage);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY:
+ value_index = cam_get_value_to_index((void*)ad, CAM_MENU_VOLUME_KEY, camapp->volume_key);
+ if (index == value_index) {
+ elm_radio_value_set(radio, value_index);
+ }
+ break;
+ default:
+ break;
+ }
+ evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ return radio;
+ } else if (strcmp(part, "elm.icon") == 0) {
+ Evas_Object *icon = NULL;
+ char icon_name[1024+1] = { '\0', };
+ CAM_MENU_ITEM* menu_item = NULL;
+
+ menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->sub_menu_composer->array, index);
+ strncpy(icon_name, __get_icon_image_name(*menu_item, BUTTON_STATE_NORMAL), sizeof(icon_name));
+ icon = elm_image_add(obj);
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ return icon;
+ }
+
+ return NULL;
+}
+
+void __cam_setting_sub_gl_style_set()
+{
+
+ sub_itc.item_style = "camera/1text.2icon";
+ sub_itc.func.text_get = __sub_menu_gl_text_get;
+ sub_itc.func.content_get = __sub_menu_gl_icon_get;
+ sub_itc.func.state_get = NULL;
+ sub_itc.func.del = NULL;
+}
+
+static void* __get_sub_menu_genlist_cb(const CAM_MENU_ITEM item)
+{
+ switch(item){
+ case CAM_MENU_FLASH:
+ return __flash_selected_cb;
+ case CAM_MENU_SHOOTING_MODE:
+ return __shot_mode_selected_cb;
+ case CAM_MENU_RECORDING_MODE:
+ return __record_mode_selected_cb;
+ case CAM_MENU_SCENE_MODE:
+ return __scene_mode_selected_cb;
+ case CAM_MENU_FOCUS_MODE:
+ return __focus_mode_selected_cb;
+ case CAM_MENU_TIMER:
+ return __timer_popup_cb;
+ case CAM_MENU_EFFECTS:
+ return __effects_selected_cb;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return __photo_resolution_popup_cb;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return __video_resolution_popup_cb;
+ case CAM_MENU_WHITE_BALANCE:
+ return __wb_popup_cb;
+ case CAM_MENU_ISO:
+ return __iso_popup_cb;
+ case CAM_MENU_METERING:
+ return __metering_popup_cb;
+ case CAM_MENU_STORAGE:
+ return __storage_popup_cb;
+ case CAM_MENU_VOLUME_KEY:
+ return __volume_key_popup_cb;
+ default:
+ return NULL;
+ }
+}
+
+static Eina_Bool __sub_menu_genlist_each_cb(const void *container, void *data, void *fdata)
+{
+ struct appdata *ad = (struct appdata *)fdata;
+ cam_retv_if(ad == NULL, EINA_FALSE);
+
+ CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
+ DEBUG_TRACE("item = %d", *item);
+
+ elm_genlist_item_append(ad->sub_genlist, &sub_itc, (void*)(ad->sub_menu_index),
+ NULL, ELM_GENLIST_ITEM_NONE, __get_sub_menu_genlist_cb(ad->sub_menu_type), (void *)*item);
+
+ ad->sub_menu_index++;
+ return EINA_TRUE;
+}
+
+static void __create_setting_listmenu(void *data, int menu_item, gboolean from_setting)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ Evas_Object *layout = NULL;
+ int menu_bar_no = -1;
+ int x, y;
+
+ setting_ctxpopup_create(ad, from_setting);
+ layout = elm_layout_add(ad->setting_ctxpopup);
+ elm_layout_file_set(layout, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout");
+
+ /* set text */
+ edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text", _setting_gl_text_get((void*)menu_item, NULL, NULL));
+
+ if (ad->sub_menu_composer) {
+ cam_compose_free(ad->sub_menu_composer);
+ ad->sub_menu_composer = NULL;
+ }
+
+ if (ad->sub_menu_composer == NULL) {
+ ad->sub_menu_composer = calloc(1, sizeof(cam_menu_composer));
+ cam_compose_list_menu((void*)ad, menu_item, ad->sub_menu_composer);
+ }
+
+ int size = eina_array_count(ad->sub_menu_composer->array);
+ int sub_menu_height = __get_sub_menu_height(size);
+ evas_object_size_hint_min_set(layout,
+ SUB_MENU_POPUP_WIDTH * elm_config_scale_get(),
+ sub_menu_height * elm_config_scale_get());
+
+ ad->sub_menu_type = menu_item;
+ ad->sub_menu_index = 0;
+ ad->sub_genlist = elm_genlist_add(layout);
+ ad->sub_menu_group = elm_radio_add(ad->sub_genlist);
+
+ __cam_setting_sub_gl_style_set();
+ eina_array_foreach(ad->sub_menu_composer->array, __sub_menu_genlist_each_cb, ad);
+
+ evas_object_show(ad->sub_genlist);
+ elm_object_part_content_set(layout, "elm.swallow.box", ad->sub_genlist);
+ elm_object_content_set(ad->setting_ctxpopup, layout);
+
+ if (from_setting) {
+ __cam_get_ctxpopup_coord_in_setting_toolbar(ad->target_direction, setting_gl_y, &x, &y);
+ __cam_toolbar_move_sub_menu(ad->setting_ctxpopup, ad->target_direction, x, y);
+ } else {
+ menu_bar_no = __get_menubar_no_by_index(ad, menu_item);
+ __get_option_coord_by_menubar_no(menu_bar_no, ad->target_direction, &x, &y);
+ __cam_toolbar_move_ctxpopup(ad->setting_ctxpopup, ad->target_direction, x, y);
+ }
+
+ evas_object_show(ad->setting_ctxpopup);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_edit_shortcut_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ gboolean from_setting = FALSE;
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ }
+ if (event_info) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ }
+
+ ad->displayed_setting_popup = FALSE;
+ toolbar_create_shortcuts_popup(ad);
+}
+
+static void __setting_volume_key_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_VOLUME_KEY_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_VOLUME_KEY, from_setting);
+}
+
+static void __setting_self_portrait_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ if (!ad->enable_mode_change) {
+ DEBUG_TRACE("Can not change mode");
+ return;
+ }
+
+ ad->enable_mode_change = FALSE;
+
+ cam_toolbar_setting_popup_destroy(ad);
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+
+ if (camapp->self_portrait == TRUE)
+ camapp->self_portrait = FALSE;
+ else
+ camapp->self_portrait = TRUE;
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->self_portrait);
+ cam_handle_value_set(ad, PROP_SELF_PORTRAIT, &value);
+
+ cam_toolbar_update(ad);
+}
+
+static void __setting_flash_popup(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_FLASH_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_FLASH, from_setting);
+}
+
+static void __setting_shot_mode_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_SHOOTING_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_SHOOTING_MODE, from_setting);
+}
+
+static void __setting_record_mode_popup(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_RECORDING_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_RECORDING_MODE, from_setting);
+}
+
+static void __setting_scenemode_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_SCENE_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_SCENE_MODE, from_setting);
+}
+
+static void __setting_ev_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ cam_retm_if(ad->camapp_handle == NULL, "ad->camapp_handle is NULL");
+
+ load_ev_edje(ad);
+
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __setting_burst_shot_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->burst_shot = %d", camapp->burst_shot);
+
+ if (obj != ad->burst_shot_mode_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->burst_shot == TRUE) {
+ camapp->burst_shot = FALSE;
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
+ } else {
+ camapp->burst_shot = TRUE;
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->burst_shot == TRUE)
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->burst_shot_mode_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->burst_shot);
+ cam_handle_value_set(ad, PROP_BURST_SHOT, &value);
+
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_BURST_SHOT_MODE);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_focus_mode_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_FOCUS_MODE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_FOCUS_MODE, from_setting);
+}
+
+static void __setting_timer_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_TIMER_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_TIMER, from_setting);
+}
+
+static void __setting_effects_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_EFFECTS_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_EFFECTS, from_setting);
+}
+
+static void __setting_wb_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_WHITE_BALANCE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_WHITE_BALANCE, from_setting);
+}
+
+static void __setting_iso_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_ISO_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_ISO, from_setting);
+}
+
+static void __setting_metering_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_METERING_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_METERING, from_setting);
+}
+
+static void __setting_anti_shake_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->anti_shake = %d", camapp->anti_shake);
+
+ if (obj != ad->antishake_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->anti_shake == TRUE) {
+ camapp->anti_shake = FALSE;
+ elm_check_state_set(ad->antishake_radio, EINA_FALSE);
+ } else {
+ camapp->anti_shake = TRUE;
+ elm_check_state_set(ad->antishake_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->anti_shake == TRUE)
+ elm_check_state_set(ad->antishake_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->antishake_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->anti_shake);
+ cam_handle_value_set(ad, PROP_AHS, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_ANTI_SHAKE);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_outdoor_visibility_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->outdoor_visibility = %d", camapp->outdoor_visibility);
+
+ if (obj != ad->outdoor_visibility_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->outdoor_visibility == TRUE) {
+ camapp->outdoor_visibility = FALSE;
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
+ } else {
+ camapp->outdoor_visibility = TRUE;
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->outdoor_visibility == TRUE)
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->outdoor_visibility_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->outdoor_visibility);
+ cam_handle_value_set(ad, PROP_OUTDOOR_VISIBILITY, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_OUTDOOR_VISIBILITY);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_autocontrast_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->auto_contrast = %d", camapp->auto_contrast);
+
+ if (obj != ad->autocontrast_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->auto_contrast == TRUE) {
+ camapp->auto_contrast = FALSE;
+ elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
+ } else {
+ camapp->auto_contrast = TRUE;
+ elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->auto_contrast == TRUE)
+ elm_check_state_set(ad->autocontrast_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->autocontrast_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->auto_contrast);
+ cam_handle_value_set(ad, PROP_AUTO_CONTRAST, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_AUTO_CONTRAST);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+
+void __setting_guideline_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->guideline = %d", camapp->guideline);
+
+ if (obj != ad->guideline_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->guideline == TRUE) {
+ camapp->guideline = FALSE;
+ elm_check_state_set(ad->guideline_radio, EINA_FALSE);
+ } else {
+ camapp->guideline = TRUE;
+ elm_check_state_set(ad->guideline_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->guideline == TRUE)
+ elm_check_state_set(ad->guideline_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->guideline_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->guideline);
+ cam_handle_value_set(ad, PROP_GUIDELINE, &value);
+
+ settings_guideline_refresh(ad);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_GUIDELINES);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+
+static void __setting_save_as_flip_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->save_as_flip = %d", camapp->save_as_flip);
+
+ if (obj != ad->save_as_flip_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->save_as_flip == TRUE) {
+ camapp->save_as_flip = FALSE;
+ elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
+ } else {
+ camapp->save_as_flip = TRUE;
+ elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->save_as_flip == TRUE)
+ elm_check_state_set(ad->save_as_flip_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->save_as_flip_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->save_as_flip);
+ cam_handle_value_set(ad, PROP_SAVE_AS_FLIP, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_SAVE_AS_FLIP);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+
+static void __voice_cmd_cb(CamVoiceCmdState state, void* data)
+{
+ switch(state) {
+ case CAM_VOICE_CMD_READY:
+ // do capture
+ {
+ char *emission = "release_shutter_sig";
+ char *source = "temp";
+ cam_toolbar_shutter_button_cb(data, NULL,
+ emission, source);
+ }
+ break;
+ case CAM_VOICE_CMD_REJECT:
+ // do action - after discuss with UX
+ break;
+ case CAM_VOICE_CMD_ERROR:
+ //do action - after discuss with UX
+ break;
+ default:
+ break;
+ }
+}
+
+static void __setting_capture_by_voice_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->capture_by_voice = %d", camapp->capture_by_voice);
+
+ if (obj != ad->capture_by_voice_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->capture_by_voice == TRUE) {
+ camapp->capture_by_voice = FALSE;
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
+ } else {
+ camapp->capture_by_voice = TRUE;
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->capture_by_voice == TRUE)
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
+ return;
+ }
+
+ if (camapp->capture_by_voice) {
+ if ( !cam_voice_cmd_create((cam_voice_cmd_cb)__voice_cmd_cb,ad)) {
+ cam_voice_cmd_destroy();
+ camapp->capture_by_voice = FALSE;
+ elm_check_state_set(ad->capture_by_voice_radio, EINA_FALSE);
+ }
+
+ } else cam_voice_cmd_destroy();
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_CAPTURE_VOICE);
+ __setting_popup_timeout_checker_start(ad);
+}
+
+static void __setting_gps_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(obj == NULL);
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = NULL;
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->gps = %d", camapp->gps);
+
+ if (obj != ad->gps_radio) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (camapp->gps == TRUE) {
+ camapp->gps = FALSE;
+ elm_check_state_set(ad->gps_radio, EINA_FALSE);
+ } else {
+ camapp->gps = TRUE;
+ elm_check_state_set(ad->gps_radio, EINA_TRUE);
+ }
+ } else {
+ /* to reset check button */
+ if (camapp->gps == TRUE)
+ elm_check_state_set(ad->gps_radio, EINA_TRUE);
+ else
+ elm_check_state_set(ad->gps_radio, EINA_FALSE);
+ return;
+ }
+
+ GValue value = {0, };
+ CAM_GVALUE_SET_BOOLEAN(value, camapp->gps);
+ cam_handle_value_set(ad, PROP_GPS, &value);
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_GPS_TAG);
+ __setting_popup_timeout_checker_start(ad);
+
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+static void __setting_storage_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_STORAGE_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_STORAGE, from_setting);
+}
+
+static void __setting_photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_PHOTO_RESOLUTION_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_PHOTO_RESOLUTION, from_setting);
+}
+
+static void __setting_video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DEBUG_TRACE("START");
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ gboolean from_setting = FALSE;
+
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_VIDEO_RESOLUTION_POPUP;
+ }
+
+ __create_setting_listmenu(ad, CAM_MENU_VIDEO_RESOLUTION, from_setting);
+}
+
+static void __setting_restore_defaults_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_ret_if(data == NULL);
+ struct appdata *ad = (struct appdata *)(data);
+ cam_retm_if(ad == NULL, " appdata is NULL");
+ gboolean from_setting = FALSE;
+ if (event_info) { /*call by setting*/
+ from_setting = TRUE;
+ } else { /*call by click icon*/
+ from_setting = FALSE;
+ ad->displayed_setting_popup = DISPLAY_RESET_POPUP;
+ }
+ if (event_info) {
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+ ad->setting_select_item = (Elm_Object_Item *)event_info;
+ }
+
+ DEL_EVAS_OBJECT(ad->confirm_popup);
+
+ ad->confirm_popup = elm_popup_add(ad->ug_base);
+ evas_object_size_hint_weight_set(ad->confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_popup_timeout_set(ad->confirm_popup, 9.0);
+
+
+ char popup_str[1024 + 1] = { '\0',};
+ snprintf(popup_str, 1024, "%s%s%s", _("<font=SLP:style=Roman><color=#000000><align=center>"),
+ dgettext(PACKAGE, "IDS_CAM_POP_RESET_SETTINGS_Q"), _("</align></color></font>"));
+
+ elm_object_text_set(ad->confirm_popup, popup_str);
+ Evas_Object *btn1 = elm_button_add(ad->confirm_popup);
+ elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
+ elm_object_part_content_set(ad->confirm_popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __restore_defaults_popup_cb_ok_cb, (void*)ad);
+ Evas_Object *btn2 = elm_button_add(ad->confirm_popup);
+ elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+ elm_object_part_content_set(ad->confirm_popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", __restore_defaults_popup_cb_cancel_cb, (void*)ad);
+
+ evas_object_show(ad->confirm_popup);
+
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+}
+
+void settings_guideline_refresh(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL,"camapp is NULL");
+ DEBUG_TRACE("ad->camapp_handle->guideline = %d" ,ad->camapp_handle->guideline);
+
+ if( ad->camapp_handle->guideline == TRUE) {
+ cam_guideline_create(ad);
+
+ if (ad->guideline_edje && ad->toolbar_setting_popup) {
+ evas_object_hide(ad->guideline_edje);
+ } else {
+ if (ad->toolbar_edje)
+ evas_object_raise(ad->toolbar_edje);
+ }
+ } else {
+ DEL_EVAS_OBJECT(ad->guideline_edje);
+ }
+}
+
+static Eina_Bool __setting_popup_timeout_checker_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ if (camapp == NULL) {
+ if (ad->setting_toolbar_hide_timer)
+ ad->setting_toolbar_hide_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+
+ }
+ if (ad->setting_toolbar_hide_timer)
+ ad->setting_toolbar_hide_timer = NULL;
+ gdouble diff_time = 0.0;
+ diff_time = _get_current_time() - camapp->start_time;
+ if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
+ && (diff_time >= CAM_SETTING_POPUP_TIMEOUT)) {
+ DEBUG_TRACE("destroy setting pupup");
+ if (ad->setting_toolbar_hide_timer) {
+ if (ad->setting_ctxpopup) {
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+ cam_toolbar_setting_popup_destroy(ad);
+ if (ad->shot_mode_guide_popup)
+ toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
+ } else if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+ }
+ }
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static gboolean __setting_popup_timeout_checker_start(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
+ if (ad->setting_toolbar_hide_timer) {
+ ecore_timer_del(ad->setting_toolbar_hide_timer);
+ ad->setting_toolbar_hide_timer = NULL;
+ }
+ ad->setting_toolbar_hide_timer =
+ ecore_timer_add(CAM_SETTING_POPUP_TIMEOUT, __setting_popup_timeout_checker_cb, ad);
+ camapp->start_time = _get_current_time();
+ DEBUG_TRACE("END");
+ return TRUE;
+}
+
+int cam_toolbar_get_menubarno_by_menuitem(struct appdata *ad, int menu_item)
+{
+ int menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
+ Evas_Object *icon = NULL;
+ __get_menubar_shortcuts_info(ad, menu_item, &menu_bar_no, &icon);
+ return menu_bar_no;
+}
+
+/*note: output menu index, input display popup value*/
+int cam_toolbar_displaypopup_map_menu_value(int display_popup)
+{
+ switch (display_popup) {
+ case DISPLAY_NONE_POPUP:
+ return CAM_MENU_EMPTY;
+ break;
+ case DISPLAY_EDIT_SHOTCUTS_POPUP:
+ return CAM_MENU_SHORTCUTS;
+ break;
+ case DISPLAY_BURST_SHOT_MODE_POPUP:
+ return CAM_MENU_BURST_SHOT_MODE;
+ break;
+ case DISPLAY_VOLUME_KEY_POPUP:
+ return CAM_MENU_VOLUME_KEY;
+ break;
+ case DISPLAY_SELF_PORTRAIT_POPUP:
+ return CAM_MENU_SELF_PORTRAIT;
+ break;
+ case DISPLAY_SCENE_MODE_POPUP:
+ return CAM_MENU_SCENE_MODE;
+ break;
+ case DISPLAY_FOCUS_MODE_POPUP:
+ return CAM_MENU_FOCUS_MODE;
+ break;
+ case DISPLAY_EFFECTS_POPUP:
+ return CAM_MENU_EFFECTS;
+ break;
+ case DISPLAY_ANTI_SHAKE_POPUP:
+ return CAM_MENU_ANTI_SHAKE;
+ break;
+ case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
+ return CAM_MENU_OUTDOOR_VISIBILITY;
+ break;
+ case DISPLAY_AUTO_CONTRAST_POPUP:
+ return CAM_MENU_AUTO_CONTRAST;
+ break;
+ case DISPLAY_GUIDELINES_POPUP:
+ return CAM_MENU_GUIDELINES;
+ break;
+ case DISPLAY_CAPTURE_VOICE_POPUP:
+ return CAM_MENU_CAPTURE_VOICE;
+ break;
+ case DISPLAY_GPS_TAG_POPUP:
+ return CAM_MENU_GPS_TAG;
+ break;
+ case DISPLAY_STORAGE_POPUP:
+ return CAM_MENU_STORAGE;
+ break;
+ case DISPLAY_RESET_POPUP:
+ return CAM_MENU_RESET;
+ break;
+ case DISPLAY_SHOOTING_MODE_POPUP:
+ return CAM_MENU_SHOOTING_MODE;
+ break;
+ case DISPLAY_RECORDING_MODE_POPUP:
+ return CAM_MENU_RECORDING_MODE;
+ break;
+ case DISPLAY_VIDEO_RESOLUTION_POPUP:
+ return CAM_MENU_VIDEO_RESOLUTION;
+ break;
+ case DISPLAY_PHOTO_RESOLUTION_POPUP:
+ return CAM_MENU_PHOTO_RESOLUTION;
+ break;
+ case DISPLAY_ISO_POPUP:
+ return CAM_MENU_ISO;
+ break;
+ case DISPLAY_METERING_POPUP:
+ return CAM_MENU_METERING;
+ break;
+ case DISPLAY_WHITE_BALANCE_POPUP:
+ return CAM_MENU_WHITE_BALANCE;
+ break;
+ case DISPLAY_FLASH_POPUP:
+ return CAM_MENU_FLASH;
+ break;
+ case DISPLAY_TIMER_POPUP:
+ return CAM_MENU_TIMER;
+ break;
+ case DISPLAY_SAVE_AS_FLIP:
+ return CAM_MENU_SAVE_AS_FLIP;
+ default:
+ return CAM_MENU_EMPTY;
+ break;
+ }
+}
+
+Eina_Bool cam_show_setting_menu_option_popup(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ switch (ad->displayed_setting_popup) {
+ case DISPLAY_NONE_POPUP:
+ break;
+ case DISPLAY_EDIT_SHOTCUTS_POPUP:
+ __setting_edit_shortcut_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_VOLUME_KEY_POPUP:
+ __setting_volume_key_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_SELF_PORTRAIT_POPUP:
+ __setting_self_portrait_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_SCENE_MODE_POPUP:
+ __setting_scenemode_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_FOCUS_MODE_POPUP:
+ __setting_focus_mode_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_EFFECTS_POPUP:
+ __setting_effects_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_ANTI_SHAKE_POPUP:
+ __setting_anti_shake_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_OUTDOOR_VISIBILITY_POPUP:
+ __setting_outdoor_visibility_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_AUTO_CONTRAST_POPUP:
+ __setting_autocontrast_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_GUIDELINES_POPUP:
+ __setting_guideline_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_CAPTURE_VOICE_POPUP:
+ __setting_capture_by_voice_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_GPS_TAG_POPUP:
+ __setting_gps_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_STORAGE_POPUP:
+ __setting_storage_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_RESET_POPUP:
+ __setting_restore_defaults_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_SHOOTING_MODE_POPUP:
+ __setting_shot_mode_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_RECORDING_MODE_POPUP:
+ __setting_record_mode_popup(ad, NULL, NULL);
+ break;
+ case DISPLAY_VIDEO_RESOLUTION_POPUP:
+ __setting_video_resolution_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_PHOTO_RESOLUTION_POPUP:
+ __setting_photo_resolution_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_ISO_POPUP:
+ __setting_iso_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_METERING_POPUP:
+ __setting_metering_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_WHITE_BALANCE_POPUP:
+ __setting_wb_popup_cb(ad, NULL, NULL);
+ break;
+ case DISPLAY_FLASH_POPUP:
+ __setting_flash_popup(ad, NULL, NULL);
+ break;
+ case DISPLAY_TIMER_POPUP:
+ __setting_timer_popup_cb(ad,NULL,NULL);
+ break;
+ case DISPLAY_SAVE_AS_FLIP:
+ __setting_save_as_flip_popup_cb(ad, NULL, NULL);
+ break;
+ default:
+ break;
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool cam_show_setting_menu(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ if (ad->show_setting_popup_after_rotate == TRUE) {
+ cam_toolbar_setting_popup_create(ad);
+ } else if (ad->show_edit_shortcuts_popup_after_rotate == TRUE) {
+ toolbar_create_shortcuts_popup(ad);
+ }
+
+ if (ad->displayed_setting_popup != DISPLAY_NONE_POPUP) {
+ ecore_idler_add(cam_show_setting_menu_option_popup, ad);
+ }
+
+ ad->is_rotating = FALSE;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void toolbar_destroy_shortcuts_popup(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ cam_retm_if(ad->toolbar_edje == NULL, "appdata is null");
+ elm_object_part_content_unset(ad->toolbar_edje, "shortcuts_popup");
+
+ DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_scroll);
+ DEL_EVAS_OBJECT(ad->edit_shortcuts_popup_description);
+ ad->edit_shortcuts_popup_scroll = NULL;
+ ad->edit_shortcuts_popup_ctx = NULL;
+ ad->edit_shortcuts_popup = NULL;
+
+ /*clear eina_list*/
+ __cam_toolbar_edit_shortcuts_data_clean();
+
+ destroy_menubar_shortcuts_mouse_event(ad, 0, TRUE);
+ /*exit edit mode*/
+ /*show edit mode*/
+ /*TODO: here should be rotate icon*/
+
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+
+ __set_show_state_preview_obj(ad, TRUE);
+
+ int i = 0;
+ for (i = CAM_MENU_EMPTY + 1; i < CAM_MENU_MAX_NUMS; i++) {
+ __update_menubar_icon_by_index(ad, i);
+ }
+}
+
+void cam_toolbar_setting_popup_destroy(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+ DEBUG_TRACE("");
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ if (ad->genlist) {
+ elm_genlist_clear(ad->genlist);
+ evas_object_del(ad->genlist);
+ ad->genlist = NULL;
+ }
+
+ DEL_EVAS_OBJECT(ad->toolbar_setting_popup);
+ ad->toolbar_setting_popup_area = NULL;
+ ad->setting_select_item = NULL; /*select item*/
+
+ /*elm_all_flush();*/
+ cam_elm_cache_flush();
+
+ __set_show_state_preview_obj(ad, TRUE);
+}
+
+void cam_toolbar_setting_popup_update(struct appdata *ad)
+{
+ cam_retm_if(ad == NULL, "appdata is null");
+
+ if (!ad->toolbar_setting_popup)
+ return;
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_destroy(ad);
+
+ __update_setting_popup(ad);
+}
+
+static Evas_Object *_setting_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is null");
+
+ int index = (int)data;
+
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, NULL);
+ Evas_Object *icon = NULL;
+
+ switch(index) {
+ case CAM_MENU_SHORTCUTS:
+ icon = NULL;
+ break;
+ case CAM_MENU_BURST_SHOT_MODE:
+ {
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->burst_shot) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_burst_shot_popup_cb, (void*)ad);
+ ad->burst_shot_mode_radio = icon;
+ }
+ break;
+ case CAM_MENU_VOLUME_KEY:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_volume_key_to_menu_item(camapp->volume_key), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_SELF_PORTRAIT:
+ icon = elm_check_add(obj);
+
+ if (camapp->self_portrait == FALSE) {
+ elm_check_state_set(icon, EINA_FALSE);
+ } else {
+ elm_check_state_set(icon, EINA_TRUE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ break;
+ case CAM_MENU_FLASH:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_flash_to_menu_item(camapp->flash), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_shot_mode_to_menu_item(camapp->shooting_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_recording_mode_to_menu_item(camapp->recording_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_SCENE_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_scene_mode_to_menu_item(camapp->scene_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(CAM_MENU_EXPLOSURE_VALUE, BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_focus_to_menu_item(camapp->af_mode), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_TIMER:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_timer_to_menu_item(camapp->timer), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_EFFECTS:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_effect_to_menu_item(camapp->effect), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_photo_resolution_to_menu_item(camapp->photo_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_video_resolution_to_menu_item(camapp->video_resolution), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_wb_to_menu_item(camapp->white_balance), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_ISO:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_iso_to_menu_item(camapp->iso), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_METERING:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_metering_to_menu_item(camapp->auto_exposure), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_ANTI_SHAKE:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->anti_shake) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_anti_shake_popup_cb, (void*)ad);
+ ad->antishake_radio = icon;
+ break;
+ case CAM_MENU_OUTDOOR_VISIBILITY:/*TODO:is finding solution*/
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->outdoor_visibility) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_outdoor_visibility_popup_cb, (void*)ad);
+ ad->outdoor_visibility_radio = icon;
+ break;
+ case CAM_MENU_AUTO_CONTRAST:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->auto_contrast) {
+ elm_check_state_set(icon, EINA_TRUE);
+ }
+ else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_autocontrast_popup_cb, (void*)ad);
+ ad->autocontrast_radio = icon;
+ break;
+
+ case CAM_MENU_GUIDELINES:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->guideline) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_guideline_popup_cb, (void*)ad);
+ ad->guideline_radio = icon;
+ break;
+ case CAM_MENU_CAPTURE_VOICE:/*TODO:now no relase solution to support it*/
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->capture_by_voice) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_capture_by_voice_popup_cb, (void*)ad);
+ ad->capture_by_voice_radio = icon;
+ break;
+ case CAM_MENU_GPS_TAG:
+ icon = elm_check_add(obj);
+
+ if (camapp->gps) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_gps_popup_cb, (void*)ad);
+ ad->gps_radio = icon;
+ break;
+ case CAM_MENU_SAVE_AS_FLIP:
+ icon = elm_check_add(obj);
+
+ if (ad->camapp_handle->save_as_flip) {
+ elm_check_state_set(icon, EINA_TRUE);
+ } else {
+ elm_check_state_set(icon, EINA_FALSE);
+ }
+
+ elm_object_style_set(icon, "genlist/on&off");
+ evas_object_smart_callback_add(icon, "changed", __setting_save_as_flip_popup_cb, (void*)ad);
+ ad->save_as_flip_radio = icon;
+ break;
+ case CAM_MENU_STORAGE:
+ {
+ char icon_name[CAM_FILE_PATH_MAX] = { 0 };
+ icon = elm_image_add(obj);
+ strncpy(icon_name, __get_icon_image_name(cam_convert_storage_to_menu_item(camapp->storage), BUTTON_STATE_NORMAL), sizeof(icon_name));
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ }
+ break;
+ case CAM_MENU_RESET:
+ break;
+ case CAM_MENU_MAX_NUMS:
+ DEBUG_TRACE("your array out, please check!");
+ break;
+ default:
+ DEBUG_TRACE("Error occur!");
+ }
+ if (icon) {
+ /*evas_object_resize(icon, 86 , 84);
+ evas_object_size_hint_min_set(icon, 86, 84);
+ evas_object_size_hint_max_set(icon, 86, 84);*/
+ evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ }
+ return icon;
+}
+
+static char *_setting_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ int index = (int)data;
+
+ switch(index) {
+ case CAM_MENU_SHORTCUTS:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EDIT_SHORTCUTS"));
+ break;
+ case CAM_MENU_BURST_SHOT_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_BURST_SHOT_ABB"));
+ break;
+ case CAM_MENU_VOLUME_KEY:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_MBODY_USE_THE_VOLUME_KEY_AS"));
+ break;
+ case CAM_MENU_SELF_PORTRAIT:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SELF_SHOT"));
+ break;
+ case CAM_MENU_FLASH:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FLASH"));
+ break;
+ case CAM_MENU_SHOOTING_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_SHOOTING_MODE"));
+ break;
+ case CAM_MENU_RECORDING_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_RECORDING_MODE"));
+ break;
+ case CAM_MENU_SCENE_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SCENE_MODE"));
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_EXPOSURE_VALUE"));
+ break;
+ case CAM_MENU_FOCUS_MODE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_FOCUS_MODE"));
+ break;
+ case CAM_MENU_TIMER:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_TIMER"));
+ break;
+ case CAM_MENU_EFFECTS:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_EFFECTS"));
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_PHOTO_RESOLUTION_ABB"));
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return strdup(dgettext(PACKAGE,"IDS_CAM_OPT_VIDEO_RESOLUTION_ABB"));
+ break;
+ case CAM_MENU_WHITE_BALANCE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_OPT_WHITE_BALANCE_ABB"));
+ break;
+ case CAM_MENU_ISO:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ISO"));
+ break;
+ case CAM_MENU_METERING:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_METERING"));
+ break;
+ case CAM_MENU_ANTI_SHAKE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_ANTI_SHAKE"));
+ break;
+ case CAM_MENU_OUTDOOR_VISIBILITY:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_OUTDOOR_VISIBILITY"));
+ break;
+ case CAM_MENU_AUTO_CONTRAST:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_AUTO_CONTRAST"));
+ break;
+ case CAM_MENU_GUIDELINES:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GUIDELINE"));
+ break;
+ case CAM_MENU_CAPTURE_VOICE:
+ return strdup("Capture with voice");
+ break;
+ case CAM_MENU_GPS_TAG:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_GPS_TAG"));
+ break;
+ case CAM_MENU_SAVE_AS_FLIP:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_SAVE_AS_FLIPPED"));
+ break;
+ case CAM_MENU_STORAGE:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_STORAGE"));
+ break;
+ case CAM_MENU_RESET:
+ return strdup(dgettext(PACKAGE, "IDS_CAM_BODY_RESET_SETTINGS_RESET"));
+ break;
+ case CAM_MENU_MAX_NUMS:
+ DEBUG_TRACE("your array out, please check!");
+ break;
+ default:
+ DEBUG_TRACE("Error occur!");
+ }
+ return strdup("test");
+}
+
+static void __setting_gl_mouse_down(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info){
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ if (ad->setting_ctxpopup) {
+ /*setting_ctxpopup_destroy(ad);*/
+ evas_object_hide(ad->setting_ctxpopup);
+ }
+ Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
+ setting_gl_x = mu->canvas.x;
+ setting_gl_y = mu->canvas.y;
+ setting_gl_x = mu->output.x;
+ setting_gl_y = mu->output.y;
+ DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
+ DEBUG_TRACE("mu->output.x = %d, mu->output.y = %d", mu->output.x, mu->output.y);
+
+ __setting_popup_timeout_checker_start(ad);
+ cam_app_timeout_checker_update();
+}
+
+/*mouse move func for setting popup*/
+static void __setting_gl_mouse_move(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info){
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ if (ad->setting_ctxpopup) {
+ /*setting_ctxpopup_destroy(ad);*/
+ evas_object_hide(ad->setting_ctxpopup);
+ }
+ Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
+ setting_gl_x = mu->cur.canvas.x;
+ setting_gl_y = mu->cur.canvas.y;
+ setting_gl_x = mu->cur.output.x;
+ setting_gl_y = mu->cur.output.y;
+ DEBUG_TRACE("x = %d, y = %d", setting_gl_x, setting_gl_y);
+ DEBUG_TRACE("mu->cur->canvas.x = %d, mu->cur->canvas.y = %d", mu->cur.canvas.x, mu->cur.canvas.y);
+
+ __setting_popup_timeout_checker_start(ad);
+ cam_app_timeout_checker_update();
+}
+
+static void __setting_shortcuts_mouse_down(void *data, Evas * evas, Evas_Object *obj,
+ void *event_info){
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ cam_app_timeout_checker_update();
+ __setting_popup_timeout_checker_start(ad);
+ if (!event_info) return;
+ Evas_Coord x, y, w, h;
+
+ Evas_Event_Mouse_Down *mu = (Evas_Event_Mouse_Down *)event_info;
+ shortcuts_canvas_prev_x = mu->canvas.x;
+ shortcuts_canvas_prev_y = mu->canvas.y;
+ DEBUG_TRACE("x = %d, y = %d", shortcuts_canvas_prev_x, shortcuts_canvas_prev_y);
+
+ cam_long_press_trigger(LONG_PRESS_ID_EDIT, mu->canvas.x, mu->canvas.y);
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ evas_object_geometry_get(shortcuts_ele->icon, &x, &y, &w, &h);
+ shortcuts_ele->x = x;
+ shortcuts_ele->y = y;
+ shortcuts_ele->w = w;
+ shortcuts_ele->h = h;
+ DEBUG_TRACE("x,%d y,%d w,%d h,%d index %d",x, y, w, h, shortcuts_ele->part_index);
+
+ if (obj == shortcuts_ele->icon) {
+ ad->shortcut_data = shortcuts_ele;
+ }
+ }
+ if (!ad->shortcut_data) { /*not find shortcut data, so it will come from menubar*/
+ int menubar_no = -1;
+ if (check_if_shortcuts_from_menubar(ad, obj, &menubar_no)) {
+ /*get shortcuts data:*/
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->menu_bar_no == menubar_no) {
+ ad->shortcut_data = shortcuts_ele;
+ }
+ }
+ } else {
+ DEBUG_TRACE("error occur!");
+ }
+ } else {
+ DEBUG_TRACE("find in the shortcuts panel");
+ }
+
+ evas_object_raise(obj);
+ evas_object_lower(evas_object_above_get(obj));
+
+}
+
+static void __setting_shortcuts_mouse_up(void *data, Evas * evas, Evas_Object *obj,void *event_info)
+{
+
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ pthread_mutex_lock(&edit_shortcuts_move_mutex);
+ ShortCutData *moving_ele = ad->shortcut_data;
+ ShortCutData *swap_ele = ad->swap_data;
+
+ /*NOTE: reset opacity*/
+ if (ad->swap_data) {
+ if (ad->swap_data->is_on_menu_bar) {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
+ evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
+ }
+ } else {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->swap_data->icon) {
+ evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
+ }
+ }
+ }
+
+ /*TODO: SWAP:*/
+ if (swap_ele && swap_ele->setting_type >= 0) {
+ if ((swap_ele->is_on_menu_bar & moving_ele->is_on_menu_bar) == TRUE) {/*note: both in menubar*/
+ __swap_menubar_shortcuts(ad, moving_ele, swap_ele);
+ cam_toolbar_menu_config_update((void *)ad);
+ } else if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
+ DEBUG_TRACE("do nothing in mouse up");
+ } else {/*note: one is in menubar, one is not*/
+ if (swap_ele->is_on_menu_bar == TRUE) {/*note: swap_ele is on menubar*/
+ evas_object_event_callback_del(obj,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
+ } else {/*note: swap_ele is not on menubar*/
+ moving_ele->is_on_menu_bar = FALSE;
+ int tmp_menub_bar_no = moving_ele->menu_bar_no;
+ moving_ele->menu_bar_no = -1;
+ DEL_EVAS_OBJECT(obj);
+ __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
+ update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+ cam_toolbar_menu_config_update((void *)ad);
+ destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+
+ /*TODO: update part_index*/
+ __edit_shortcuts_layout_shortcuts_insert(ad, swap_ele, moving_ele);
+ }
+ }
+ }
+ if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar)) {
+ /*note: menu bar shortcuts move to the empty item in toolbar*/
+ if (moving_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
+ }
+ moving_ele->is_on_menu_bar = TRUE;
+ moving_ele->menu_bar_no = swap_ele->menu_bar_no;
+ moving_ele->part_index = -1;
+ ad->toolbar_menu_arrays[moving_ele->menu_bar_no].menu_type = moving_ele->setting_type;
+ cam_toolbar_menu_config_update((void *)ad);
+ update_menubar_shortcuts_mouse_event(ad, moving_ele->menu_bar_no, FALSE);
+ evas_object_hide(moving_ele->icon);
+ free(swap_ele);
+ swap_ele = NULL;
+ ad->swap_data = NULL;
+ } else if (swap_ele && (swap_ele->setting_type == -1) && (swap_ele->is_on_menu_bar == FALSE)) {
+ /*note: case: menubar shortcuts move to the empty item in edit short panel: flash|empty(move to here)|empty*/
+ if (moving_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, moving_ele->menu_bar_no);
+ }
+ moving_ele->is_on_menu_bar = FALSE;
+ moving_ele->menu_bar_no = -1;
+ moving_ele->part_index = swap_ele->part_index;
+ moving_ele->list_index = swap_ele->list_index;
+ cam_toolbar_menu_config_update((void *)ad);
+ evas_object_show(moving_ele->icon);
+ HIDE_EVAS_OBJECT(obj);
+ free(swap_ele);
+ swap_ele = NULL;
+ ad->swap_data = NULL;
+ __resort_edit_shortcuts_list_by_part_index();
+ }
+ ad->swap_data = NULL;
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ pthread_mutex_unlock(&edit_shortcuts_move_mutex);
+
+}
+
+bool shortcuts_rect_check_intersect(Evas_Coord a_left, Evas_Coord a_top, Evas_Coord a_right, Evas_Coord a_bottom,
+ Evas_Coord b_left, Evas_Coord b_top, Evas_Coord b_right, Evas_Coord b_bottom)
+{
+ if( (MIN(a_right, b_right) - MAX(a_left, b_left) > 60)
+ && (MIN(a_bottom, b_bottom) - MAX(a_top, b_top)> 30)) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+}
+
+/*note: parent_shortcuts is swap_ele, sub_shortcuts is cur_ele, if cur_ele is in swap_ele, not swap them*/
+gboolean __cam_toolbar_shortcuts_rect_contain_check(CAM_Edit_ShortCuts_Rect sub_shortcuts,
+ CAM_Edit_ShortCuts_Rect parent_shortcuts,
+ int correction_w,
+ int correction_h)
+{
+ int swap_rel1_x, swap_rel1_y, swap_w, swap_h;
+ int cur_rel1_x, cur_rel1_y, cur_w, cur_h;
+ cur_rel1_x = sub_shortcuts.x;
+ cur_rel1_y = sub_shortcuts.y;
+ cur_w = sub_shortcuts.w;
+ cur_h = sub_shortcuts.h;
+
+ swap_rel1_x = parent_shortcuts.x;
+ swap_rel1_y = parent_shortcuts.y;
+ swap_w = parent_shortcuts.w;
+ swap_h = parent_shortcuts.h;
+
+ return __shortcuts_rect_contain_check(swap_rel1_x, swap_rel1_y, swap_w, swap_h,
+ cur_rel1_x, cur_rel1_y, cur_w, cur_h,
+ correction_w, correction_h);
+}
+
+static gboolean __shortcuts_rect_contain_check(int swap_rel1_x,
+ int swap_rel1_y,
+ int swap_w,
+ int swap_h,
+ int cur_rel1_x,
+ int cur_rel1_y,
+ int cur_w,
+ int cur_h,
+ int correction_w,
+ int correction_h)
+{
+ int a_rel1_x = swap_rel1_x - correction_w;
+ int a_rel1_y = swap_rel1_y - correction_h;
+ int a_rel2_x;
+ if (swap_w < cur_w)
+ a_rel2_x = swap_rel1_x + cur_w + correction_w;
+ else
+ a_rel2_x = swap_rel1_x + swap_w + correction_w;
+ int a_rel2_y;
+ if (swap_h < cur_h)
+ a_rel2_y = swap_rel1_y + cur_h + correction_h;
+ else
+ a_rel2_y = swap_rel1_y + swap_h + correction_h;
+
+ int b_rel1_x = cur_rel1_x;
+ int b_rel1_y = cur_rel1_y;
+ int b_rel2_x = cur_rel1_x + cur_w;
+ int b_rel2_y = cur_rel1_y + cur_h;
+
+ if ((a_rel1_x < b_rel1_x)
+ &&(a_rel1_y < b_rel1_y)
+ &&(a_rel2_x > b_rel2_x)
+ &&(a_rel2_y > b_rel2_y)
+ ) {
+ return TRUE;
+ } else {
+
+ return FALSE;
+ }
+}
+
+
+/*
+@item_1:pre
+@item_2:behind item_1
+*/
+void shortcuts_swap(Eina_List **head, Eina_List * item_1, Eina_List * item_2)
+{
+
+ Eina_List *tmp_item_1_next = item_1->next;
+ Eina_List *tmp_item_2_prev = item_2->prev;
+ if(item_1->prev!=NULL)
+ item_1->prev->next = item_2;
+ else
+ *head = item_2;
+
+ item_2->prev = item_1->prev;
+
+ item_1->next = item_2->next;
+
+ if(item_2->next!=NULL)
+ item_2->next->prev = item_1;
+
+ if (tmp_item_1_next == item_2) { /*item_1->item_2*/
+ item_2->next = item_1;
+ item_1->prev = item_2;
+ } else {/*item_1->....->item_2*/
+ tmp_item_1_next->prev = item_2;
+ item_2->next = tmp_item_1_next;
+ tmp_item_2_prev->next = item_1;
+ item_1->prev = tmp_item_2_prev;
+ }
+}
+
+static void __swap_menubar_shortcuts_ctx(struct appdata *ad, ShortCutData *menu_ele, ShortCutData *cur_ele)
+{
+ if (!cur_ele || !ad || !menu_ele)
+ return;
+ cur_ele->is_on_menu_bar = TRUE;
+ cur_ele->menu_bar_no = menu_ele->menu_bar_no;
+ DEBUG_TRACE("cur_ele->menu_bar_no = %d", cur_ele->menu_bar_no);
+ if (cur_ele->menu_bar_no > CAM_MENU_BAR_LEFT_4 || cur_ele->menu_bar_no < CAM_MENU_BAR_LEFT_0) {
+ cam_critical(LOG_UI, "menubar no error, check it ASAP");
+ return;
+ }
+
+ /*do:ele_layout*/
+ ad->toolbar_menu_arrays[cur_ele->menu_bar_no].menu_type = cur_ele->setting_type;
+ update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
+
+ menu_ele->is_on_menu_bar = FALSE;
+ menu_ele->menu_bar_no = -1;
+ char buf[16] = { 0 };
+ snprintf(buf, sizeof(buf),"row.%d", menu_ele->part_index);
+ DEBUG_TRACE("PART:%s", buf);
+ evas_object_show(menu_ele->icon);
+ evas_object_hide(cur_ele->icon);
+ snprintf(buf, sizeof(buf),"row.%d", cur_ele->part_index);
+ DEBUG_TRACE("PART:%s", buf);
+ cam_toolbar_menu_config_update((void *)ad);
+
+}
+
+static void __get_shortcuts_rect(Evas_Object *shortcuts_icon, CAM_Edit_ShortCuts_Rect *rect)
+{
+ if (!rect) return;
+ Evas_Coord x=0, y=0, w=0, h=0;
+ if (shortcuts_icon)
+ evas_object_geometry_get(shortcuts_icon, &x, &y, &w, &h);
+ rect->x = x;
+ rect->y = y;
+ rect->w = w;
+ rect->h = h;
+}
+
+static void __remove_menubar_shortcut(struct appdata *ad, int menubar_no)
+{
+ if (!ad) return;
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0)
+ return;
+
+ ad->toolbar_menu_arrays[menubar_no].menu_type = -1;
+ Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
+ edje_object_part_unswallow(_EDJ(ad->toolbar_edje), icon);
+ DEL_EVAS_OBJECT(icon);
+ icon = elm_image_add(ad->toolbar_edje);
+ elm_image_file_set(icon, NULL, NULL);
+ char buf[32+1] = {'\0',};
+ snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
+ edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
+ ad->toolbar_menu_arrays[menubar_no].icon = icon;
+}
+
+/*
+ * note: check moving shortcuts with possible empty shortcuts in menubar,
+ * if find, and moving shortcuts is in the empty shortcuts area, push this moving
+ * shortcuts in this empty shortcuts. and return true, else return false
+ */
+gboolean check_with_menubar_empty_shortcuts(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ if (!ad || !moving_ele ||!moving_obj)
+ return FALSE;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ ShortCutData *cur_ele = moving_ele;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (type < 0) {
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(icon, &parent_rect);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ if (cur_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
+ }
+ cur_ele->is_on_menu_bar = TRUE;
+ cur_ele->menu_bar_no = i;
+ cur_ele->part_index = -1;
+ ad->toolbar_menu_arrays[i].menu_type = cur_ele->setting_type;
+ cam_toolbar_menu_config_update((void *)ad);
+
+ update_menubar_shortcuts_mouse_event(ad, i, FALSE);
+
+ evas_object_hide(cur_ele->icon);
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+gboolean check_if_shortcuts_from_menubar(struct appdata *ad, Evas_Object *obj, int *menubar_no)
+{
+ if (!obj || !ad || !menubar_no)
+ return FALSE;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (icon == obj) {
+ *menubar_no = i;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void __shortcuts_data_swap(ShortCutData *cur_ele, ShortCutData *swap_ele)
+{
+ Evas_Object *icon;
+ Evas_Object_Event_Cb func;
+ CAM_MENU_ITEM setting_type;
+ char *icon_filepath;
+ char *name;
+ int menu_bar_no;
+ gboolean is_on_menu_bar;
+ Evas_Coord x, y, w, h;
+ int part_index;
+ int list_index;
+ int row;
+ int col;
+
+ icon = cur_ele->icon;
+ func = cur_ele->func;
+ setting_type = cur_ele->setting_type;
+ icon_filepath = cur_ele->icon_filepath;
+ name = cur_ele->name;
+ menu_bar_no = cur_ele->menu_bar_no;
+ is_on_menu_bar = cur_ele->is_on_menu_bar;
+ x = cur_ele->x;
+ y = cur_ele->y;
+ w = cur_ele->w;
+ h = cur_ele->h;
+ part_index = cur_ele->part_index;
+ list_index = cur_ele->list_index;
+ row = cur_ele->row;
+ col = cur_ele->col;
+
+ cur_ele->icon = swap_ele->icon;
+ cur_ele->func = swap_ele->func;
+ cur_ele->setting_type = swap_ele->setting_type;
+ cur_ele->icon_filepath = swap_ele->icon_filepath;
+ cur_ele->name = swap_ele->name;
+ /*cur_ele->menu_bar_no = swap_ele->menu_bar_no;*/
+ cur_ele->is_on_menu_bar = swap_ele->is_on_menu_bar;
+ cur_ele->x = swap_ele->x;
+ cur_ele->y = swap_ele->y;
+ cur_ele->w = swap_ele->w;
+ cur_ele->h = swap_ele->h;
+ cur_ele->part_index = swap_ele->part_index;
+ /*cur_ele->list_index = swap_ele->list_index;*/
+ cur_ele->row = swap_ele->row;
+ cur_ele->col = swap_ele->col;
+
+ swap_ele->icon = icon;
+ swap_ele->func = func;
+ swap_ele->setting_type = setting_type;
+ swap_ele->icon_filepath = icon_filepath;
+ swap_ele->name = name;
+ /*swap_ele->menu_bar_no = menu_bar_no;*/
+ swap_ele->is_on_menu_bar = is_on_menu_bar;
+ swap_ele->x = x;
+ swap_ele->y = y;
+ swap_ele->w = w;
+ swap_ele->h = h;
+ swap_ele->part_index = part_index;
+ /*swap_ele->list_index = swap_ele->list_index;*/
+ swap_ele->row = row;
+ swap_ele->col = col;
+
+}
+
+static void __update_menubar_shortcuts_by_menubar_no(struct appdata *ad,
+ int setting_type,
+ int menubar_no)
+{
+ if (!ad) return;
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return;
+
+ ad->toolbar_menu_arrays[menubar_no].menu_type = setting_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[menubar_no].icon;
+ DEL_EVAS_OBJECT(icon);
+ icon = elm_image_add(ad->toolbar_edje);
+ char buf[32 + 1] = { '\0', };
+ snprintf(buf, 32, "toolbar_%d_icon", menubar_no);
+ edje_object_part_swallow(_EDJ(ad->toolbar_edje), buf, icon);
+ ad->toolbar_menu_arrays[menubar_no].icon = icon;
+ __update_menubar_icon_by_index(ad, setting_type);
+}
+
+static void __swap_menubar_shortcuts(struct appdata *ad, ShortCutData *cur_ele, ShortCutData *swap_ele)
+{
+ __shortcuts_data_swap(cur_ele, swap_ele);
+ __update_menubar_shortcuts_by_menubar_no(ad, cur_ele->setting_type, cur_ele->menu_bar_no);
+ __update_menubar_shortcuts_by_menubar_no(ad, swap_ele->setting_type, swap_ele->menu_bar_no);
+ update_menubar_shortcuts_mouse_event(ad, cur_ele->menu_bar_no, FALSE);
+ update_menubar_shortcuts_mouse_event(ad, swap_ele->menu_bar_no, FALSE);
+}
+
+/*NOTE: moving shortcuts, is from menubar*/
+static gboolean __check_menubar_moving_shortcuts_swap(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ cam_retv_if(ad == NULL, FALSE);
+ cam_retv_if(moving_ele == NULL, FALSE);
+ cam_retv_if(moving_obj == NULL, FALSE);
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ ShortCutData *cur_ele = moving_ele;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ ShortCutData *swap_ele = NULL;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->icon == cur_ele->icon) {
+ DEBUG_TRACE("find self");
+ continue;
+ }
+ Evas_Object *parent_icon = NULL;
+ if (shortcuts_ele->is_on_menu_bar) {
+ parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
+
+ } else {
+ parent_icon = shortcuts_ele->icon;
+ }
+
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(parent_icon, &parent_rect);
+
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ DEBUG_TRACE("find swap ele");
+ swap_ele = shortcuts_ele;
+ break;
+ }
+ }
+ if (!swap_ele) {
+ DEBUG_TRACE("not find, continue");
+ return FALSE;
+ /*evas_object_move(moving_obj, x , y);*/
+ }
+
+ if (swap_ele->is_on_menu_bar) {/*TODO: support menubar shortcuts swap*/
+ __swap_menubar_shortcuts(ad, cur_ele, swap_ele);
+ cam_toolbar_menu_config_update((void *)ad);
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ return TRUE;
+ } else {
+ cur_ele->is_on_menu_bar = FALSE;
+ int tmp_menub_bar_no = cur_ele->menu_bar_no;
+ cur_ele->menu_bar_no = -1;
+ DEL_EVAS_OBJECT(moving_obj);
+
+ __update_menubar_shortcuts_by_menubar_no(ad, -1, tmp_menub_bar_no);
+ update_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+
+ cam_toolbar_menu_config_update((void *)ad);
+
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ destroy_menubar_shortcuts_mouse_event(ad, tmp_menub_bar_no, FALSE);
+ return TRUE;
+ }
+
+
+}
+
+static void __edit_shortcuts_layout_shortcuts_move_prev(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(swap_ele == NULL);
+ cam_ret_if(cur_ele == NULL);
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ Eina_List *cur_item = NULL;
+ Eina_List *swap_item = NULL;
+ cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
+ swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+
+ /*
+ *
+ * note: cur_item ->...->swap_item, should insert cur_item after swap_item, and
+ * move between cur_item ...swap_item items.
+ *
+ */
+
+
+
+ int temp_swap_ele_list_index = swap_ele->list_index;
+ int temp_swap_ele_part_index = swap_ele->part_index;
+ EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele == cur_ele) {
+ cur_ele->list_index = temp_swap_ele_list_index;
+ cur_ele->part_index = temp_swap_ele_part_index;
+ continue;
+ }
+
+ if (!shortcuts_ele->is_on_menu_bar) {
+ /* TODO: for animator effect*/
+ char buf[32+1] = { '\0',};
+ snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_PREV, buf);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
+ shortcuts_ele->part_index -= 1;
+ }
+ shortcuts_ele->list_index -= 1;
+ if (shortcuts_ele == swap_ele) {
+ break;
+ }
+ }
+ Eina_List *left = NULL;
+ Eina_List *right = NULL;
+ shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
+
+ left = eina_list_split_list(shortcuts_ele_list, swap_item, &right);
+ left = eina_list_append(left, cur_ele);
+ shortcuts_ele_list = eina_list_merge(left, right);
+
+
+}
+
+/*note: insert insert_ele before cur_ele*/
+static void __edit_shortcuts_layout_shortcuts_insert(struct appdata *ad,
+ ShortCutData *cur_ele,
+ ShortCutData *insert_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(cur_ele == NULL);
+ cam_ret_if(insert_ele == NULL);
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *cur_item = NULL;
+
+ insert_ele->part_index = cur_ele->part_index;
+ cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
+ EINA_LIST_FOREACH(cur_item, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (!shortcuts_ele->is_on_menu_bar) {
+ char buf[32+1] = { '\0',};
+ snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
+ shortcuts_ele->part_index += 1;
+ }
+ }
+ __resort_edit_shortcuts_list_by_part_index();
+
+}
+
+
+static void __edit_shortcuts_layout_shortcuts_move_next(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(swap_ele == NULL);
+ cam_ret_if(cur_ele == NULL);
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ Eina_List *swap_item = NULL;
+
+ swap_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+
+ /*
+ *
+ * note: swap_item ->...->cur_item, should insert cur_item before swap_item, and
+ * move between swap_item ...cur_item items.
+ *
+ */
+
+ int temp_swap_ele_list_index = swap_ele->list_index;
+ int temp_swap_ele_part_index = swap_ele->part_index;
+ EINA_LIST_FOREACH(swap_item, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele == cur_ele) {
+ cur_ele->list_index = temp_swap_ele_list_index;
+ cur_ele->part_index = temp_swap_ele_part_index;
+ break;
+ }
+ if (!shortcuts_ele->is_on_menu_bar) {
+ /* TODO: for animator effect*/
+ char buf[32+1] = { '\0',};
+ snprintf(buf, 32, "row.%d", shortcuts_ele->part_index);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_MOVE_NEXT, buf);
+ edje_object_signal_emit(_EDJ(shortcuts_ele->icon), STR_ANI_RETURN, buf);
+ shortcuts_ele->part_index += 1;
+ }
+ shortcuts_ele->list_index += 1;
+ }
+ Eina_List *left = NULL;
+ Eina_List *right = NULL;
+ shortcuts_ele_list = eina_list_remove(shortcuts_ele_list, cur_ele);
+ if (swap_item->prev) {
+ left = eina_list_split_list(shortcuts_ele_list, swap_item->prev, &right);
+ left = eina_list_append(left, cur_ele);
+ shortcuts_ele_list = eina_list_merge(left, right);
+ } else {
+ shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, cur_ele);
+ }
+}
+
+static void __resort_edit_shortcuts(struct appdata *ad, Evas_Object *moving_obj)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(moving_obj == NULL);
+ __resort_edit_shortcuts_list_by_part_index();
+ Eina_List *l;
+ ShortCutData *shortcuts_ele;
+ char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
+ }
+
+
+ int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
+
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
+ if (shortcuts_ele->part_index >=0
+ && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
+
+ shortcuts_part_to_menu[shortcuts_ele->part_index] = shortcuts_ele->setting_type;
+ }
+ if (moving_obj == shortcuts_ele->icon) {
+ ad->shortcut_data = shortcuts_ele;
+ DEBUG_TRACE("PART:%s", buf);
+ continue;
+ }
+ DEBUG_TRACE("PART:%s", buf);
+ edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
+ }
+
+ int index = 0;
+ for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[index].prop_name,
+ shortcuts_part_to_menu[index]);
+ }
+
+}
+
+static void __shortcuts_in_layout_swap_with_shortcut(struct appdata *ad,
+ ShortCutData *swap_ele,
+ ShortCutData *cur_ele)
+{
+ cam_ret_if(ad == NULL);
+ cam_ret_if(swap_ele == NULL);
+ cam_ret_if(cur_ele == NULL);
+ Eina_List *cur_item = NULL;
+ Eina_List *prev_item = NULL;
+ Eina_List *next_item = NULL;
+ Evas_Coord prev_x=0, prev_y=0, prev_w=0, prev_h=0;
+ Evas_Coord next_x=0, next_y=0, next_w=0, next_h=0;
+
+ cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele);
+ if (!cur_item)
+ return;
+ if (swap_ele->list_index > cur_ele->list_index) {
+ next_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+ if (NULL != next_item) {
+ evas_object_geometry_get(swap_ele->icon, &next_x, &next_y, &next_w, &next_h);
+ evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
+ cur_ele->x = next_x;
+ cur_ele->y = next_y;
+ cur_ele->w = next_w;
+ cur_ele->h = next_h;
+ int idx = swap_ele->part_index;
+ swap_ele->part_index = cur_ele->part_index;
+ cur_ele->part_index = idx;
+
+ idx = swap_ele->list_index;
+ swap_ele->list_index = cur_ele->list_index;
+ cur_ele->list_index = idx;
+ if (swap_ele->is_on_menu_bar)
+ __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
+ shortcuts_swap(&shortcuts_ele_list, cur_item, next_item);
+ }
+ } else {
+ prev_item = eina_list_data_find_list (shortcuts_ele_list, swap_ele);
+ if(NULL != prev_item) {
+ evas_object_geometry_get(swap_ele->icon, &prev_x, &prev_y, &prev_w, &prev_h);
+ evas_object_move(swap_ele->icon, cur_ele->x, cur_ele->y);
+ cur_ele->x = prev_x;
+ cur_ele->y = prev_y;
+ cur_ele->w = prev_w;
+ cur_ele->h = prev_h;
+ int idx = swap_ele->part_index;
+ swap_ele->part_index = cur_ele->part_index;
+ cur_ele->part_index = idx;
+
+ idx = swap_ele->list_index;
+ swap_ele->list_index = cur_ele->list_index;
+ cur_ele->list_index = idx;
+ if (swap_ele->is_on_menu_bar)
+ __swap_menubar_shortcuts_ctx(ad, swap_ele, cur_ele);
+ shortcuts_swap(&shortcuts_ele_list, prev_item, cur_item);
+ }
+ }
+}
+
+static Evas_Object *__get_toolbar_shortcuts_evas_object(struct appdata *ad, int menubar_no)
+{
+ if (!ad) return NULL;
+ if (menubar_no > CAM_MENU_BAR_LEFT_4 || menubar_no < CAM_MENU_BAR_LEFT_0) return NULL;
+ return ad->toolbar_menu_arrays[menubar_no].icon;
+}
+
+/*note: check with menu_no menubar shortcut*/
+static gboolean __check_with_menubar_shortcuts(struct appdata *ad, int menu_no, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ if (!ad || !moving_ele ||!moving_obj)
+ return FALSE;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ ShortCutData *cur_ele = moving_ele;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ Evas_Object *toolbar_icon = __get_toolbar_shortcuts_evas_object(ad, menu_no);
+
+ /*check space menu*/
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(toolbar_icon, &parent_rect);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ if (cur_ele->is_on_menu_bar) {
+ __remove_menubar_shortcut(ad, cur_ele->menu_bar_no);
+ }
+ cur_ele->is_on_menu_bar = TRUE;
+ cur_ele->menu_bar_no = menu_no;
+ cur_ele->part_index = -1;
+ ad->toolbar_menu_arrays[menu_no].menu_type = cur_ele->setting_type;
+ cam_toolbar_menu_config_update((void *)ad);
+ update_menubar_shortcuts_mouse_event(ad, menu_no, FALSE);
+ evas_object_hide(cur_ele->icon);
+ cam_long_press_cancel(LONG_PRESS_ID_EDIT);
+ return TRUE;
+
+ }
+ return FALSE;
+
+}
+
+/*note: get menubar_no now is covering*/
+static int __get_edit_shortcuts_swap_menubar_no(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj)
+{
+ if (!ad || !moving_ele ||!moving_obj)
+ return FALSE;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (type < 0) {
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(icon, &parent_rect);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ return i;
+ }
+ }
+ }
+
+ return CAM_MENU_BAR_LEFT_INVALID;
+
+}
+
+/*NOTE: TODO*/
+static gboolean __get_edit_shortcuts_swap_element(struct appdata *ad, ShortCutData *moving_ele, Evas_Object *moving_obj, ShortCutData **swap_ele)
+{
+ if (swap_ele == NULL) return FALSE;
+
+ ShortCutData *cur_ele = moving_ele;
+ CAM_Edit_ShortCuts_Rect sub_rect;
+ __get_shortcuts_rect(moving_obj, &sub_rect);
+
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+ int edit_shortcuts_item_count = -1;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->icon == cur_ele->icon) {
+ continue;
+ }
+ Evas_Object *parent_icon = NULL;
+ if (shortcuts_ele->is_on_menu_bar) {
+ parent_icon = __get_toolbar_shortcuts_evas_object(ad, shortcuts_ele->menu_bar_no);
+
+ } else {
+ parent_icon = shortcuts_ele->icon;
+ edit_shortcuts_item_count++;
+ }
+
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(parent_icon, &parent_rect);
+
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ sub_rect.w/4,
+ sub_rect.w/4);
+ if (sub_in_parent) {
+ DEBUG_TRACE("find swap ele");
+ *swap_ele = shortcuts_ele;
+ return TRUE;
+ }
+ }
+
+ /*NOTE: case: moving shortcut is from menubar, and it is moving into the edit shortcuts the first empty panel*/
+ char buf[16] = { 0 };
+ snprintf(buf, sizeof(buf),"row.%d", (edit_shortcuts_item_count+1));
+ Evas_Object *part_object = (Evas_Object *)
+ edje_object_part_object_get(_EDJ
+ (ad->edit_shortcuts_popup_ctx), buf);
+ if (cur_ele->is_on_menu_bar) {
+ CAM_Edit_ShortCuts_Rect parent_rect;
+ __get_shortcuts_rect(part_object, &parent_rect);
+
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ 0,
+ 0);
+ if (sub_in_parent) {
+ ShortCutData *virtual_ele = NULL;
+ if (ad->swap_data) {
+ if (ad->swap_data->is_virtual) {
+ free(ad->swap_data);
+ ad->swap_data = NULL;
+ }
+ }
+ virtual_ele = calloc(1, sizeof(ShortCutData));
+ if (virtual_ele) {
+ virtual_ele->is_virtual = TRUE;
+ virtual_ele->setting_type = -1;
+ virtual_ele->is_on_menu_bar = FALSE;
+ virtual_ele->part_index= edit_shortcuts_item_count+1;
+ }
+ *swap_ele = virtual_ele;
+ return TRUE;
+ }
+ }
+ *swap_ele = NULL;
+ return FALSE;
+}
+
+/*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
+static void __resort_edit_shortcuts_list_by_part_index(void)
+{
+ if (shortcuts_ele_list == NULL) return;
+ shortcuts_ele_list = eina_list_sort(shortcuts_ele_list,
+ eina_list_count(shortcuts_ele_list),
+ __edit_shortcuts_list_sort_cb);
+ Eina_List *l = NULL;
+ ShortCutData *shortcuts_ele = NULL;
+ int list_index = 0;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ shortcuts_ele->list_index = list_index;
+ DEBUG_TRACE("part_index %d, list_index %d", shortcuts_ele->part_index, shortcuts_ele->list_index);
+ list_index++;
+ }
+
+}
+
+/*NOTE: swap integer, we do not judge a, b wether null*/
+static void __swap_int_type_value(int *a, int *b)
+{
+ int tmp = 0;
+ tmp = *a;
+ *a = *b;
+ *b = tmp;
+}
+
+static void __setting_shortcuts_mouse_move(void *data, Evas * evas, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) return;
+ if (!event_info) return;
+ cam_app_timeout_checker_update();/*note: update check_timer*/
+ __setting_popup_timeout_checker_start(ad);
+
+/*note: check wether is long press*/
+ Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info;
+ cam_long_press_validate(LONG_PRESS_ID_EDIT, mu->cur.canvas.x, mu->cur.canvas.y);
+ if (!cam_get_long_press_running_state(LONG_PRESS_ID_EDIT)) {
+ return;
+ }
+
+/*note: update coordinate*/
+ Evas_Coord cur_x=0, cur_y=0, cur_w=0, cur_h=0;
+ Evas_Coord x=0, y=0;
+ Evas_Coord dx, dy;
+ evas_object_geometry_get(obj, &cur_x, &cur_y, &cur_w, &cur_h);
+ x = cur_x + (mu->cur.canvas.x - shortcuts_canvas_prev_x);
+ y = cur_y + (mu->cur.canvas.y - shortcuts_canvas_prev_y);
+ dx = mu->cur.canvas.x - shortcuts_canvas_prev_x;
+ dy = mu->cur.canvas.y - shortcuts_canvas_prev_y;
+ shortcuts_canvas_prev_x = mu->cur.canvas.x;
+ shortcuts_canvas_prev_y = mu->cur.canvas.y;
+
+
+/*note: check swap elements*/
+ pthread_mutex_lock(&edit_shortcuts_move_mutex);
+ ShortCutData *moving_ele = ad->shortcut_data;
+ ShortCutData *swap_ele = NULL;
+ gboolean swap_condition = __get_edit_shortcuts_swap_element(ad, moving_ele, obj, &swap_ele);
+ DEBUG_TRACE("%d", swap_condition);
+
+ if (swap_condition) {
+ ad->swap_data = swap_ele;
+ if ((swap_ele->is_on_menu_bar | moving_ele->is_on_menu_bar) == FALSE) {/*note: both is not in menubar*/
+ if (ABS(moving_ele->part_index - swap_ele->part_index) == 1) {
+ __shortcuts_in_layout_swap_with_shortcut(ad, swap_ele, moving_ele);
+ } else if (moving_ele->list_index > swap_ele->list_index) {
+ __edit_shortcuts_layout_shortcuts_move_next(ad, swap_ele, moving_ele);
+ } else {
+ __edit_shortcuts_layout_shortcuts_move_prev(ad, swap_ele, moving_ele);
+ }
+ __resort_edit_shortcuts(ad, obj);
+ evas_object_move(obj, x , y);
+ goto EXIT_MOVE;
+ } else {
+ if (swap_ele->is_on_menu_bar) {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon) {
+ evas_object_color_get(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->toolbar_menu_arrays[swap_ele->menu_bar_no].icon, r, g, b, 30);
+ }
+ } else {
+ /*todo: */
+ if (swap_ele->setting_type == -1) {/*note: swap_ele is empty part in edit shortcuts panel*/
+ DEBUG_TRACE("swap_ele is empty part in edit shortcuts panel");
+ }
+
+
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (swap_ele->icon) {
+ evas_object_color_get(swap_ele->icon, &r, &g, &b, &a);
+ evas_object_color_set(swap_ele->icon, r, g, b, 30);
+ }
+ }
+ }
+ evas_object_move(obj, x , y);
+ goto EXIT_MOVE;
+ } else {
+ if (ad->swap_data) {
+ if (ad->swap_data->is_on_menu_bar) {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon) {
+ evas_object_color_get(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->toolbar_menu_arrays[ad->swap_data->menu_bar_no].icon, 255, 255, 255, 255);
+ }
+ } else {
+ int r, g, b, a;
+ r = g = b = a = 0;
+ if (ad->swap_data->icon) {
+ evas_object_color_get(ad->swap_data->icon, &r, &g, &b, &a);
+ evas_object_color_set(ad->swap_data->icon, 255, 255, 255, 255);
+ }
+ }
+ }
+ ad->swap_data = NULL;
+ }
+
+ int menu_no = __get_edit_shortcuts_swap_menubar_no(ad, moving_ele, obj);
+ /*TODO: for mouse up swap, we could to record a virtual shortcut element*/
+ if (menu_no != CAM_MENU_BAR_LEFT_INVALID) {
+ ShortCutData *virtual_ele = NULL;
+ virtual_ele = calloc(1, sizeof(ShortCutData));
+ if (virtual_ele) {
+ virtual_ele->is_virtual = TRUE;
+ virtual_ele->setting_type = -1;
+ virtual_ele->menu_bar_no = menu_no;
+ virtual_ele->is_on_menu_bar = TRUE;
+ }
+ ad->swap_data = virtual_ele;
+
+ /*TODO: set swap_ele style*/
+ }
+
+ evas_object_move(obj, x , y);
+EXIT_MOVE:
+ pthread_mutex_unlock(&edit_shortcuts_move_mutex);
+
+}
+
+void cam_setting_gl_style_set(void)
+{
+ itc.item_style = "camera/1text.1icon";
+ itc.func.text_get = _setting_gl_text_get;
+ itc.func.content_get = _setting_gl_icon_get;
+ itc.func.state_get = NULL;
+ itc.func.del = NULL;
+}
+
+static void __cam_toolbar_display_shortcuts_editmode(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,edit", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,edit", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,edit", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,edit", "prog");
+}
+
+static void __cam_toolbar_exit_shortcuts_editmode(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_1_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_2_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_3_icon,normal", "prog");
+ edje_object_signal_emit(_EDJ(ad->toolbar_edje),
+ "toolbar_4_icon,normal", "prog");
+}
+
+/*init shortcuts*/
+static int __cam_long_press_editmode_cb(void *data, int x, int y)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, -1);
+ DEBUG_TRACE();
+
+ int err = 0;
+ err = pthread_mutex_init(&edit_shortcuts_move_mutex, NULL);
+ if (err != 0) {
+ cam_critical(LOG_CAM, "Create px inst mutex failed");
+ return FALSE;
+ }
+
+ if (ad->shortcut_data) {
+ edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), ad->shortcut_data->icon);
+ evas_object_event_callback_add(ad->shortcut_data->icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move,
+ (void *)ad);
+ }
+ evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, TRUE);
+
+ return 0;
+}
+
+static int __cam_long_press_exit_editmode_cb(void *data, int x, int y)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retv_if(ad == NULL, -1);
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retv_if(camapp == NULL, -1);
+ DEBUG_TRACE();
+
+ /*re-sort sortcuts element list*/
+ int shortcuts_part_to_menu[CAM_EDIT_SHORTCUTS_INDEX_MAX] = { -1,};
+
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *l = NULL;
+ int temp_index = 0;
+ int temp_list_index = 0;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ shortcuts_ele->list_index = temp_list_index;
+ temp_list_index++;
+ if (shortcuts_ele->is_on_menu_bar) {
+ shortcuts_ele->part_index = -1;
+ continue;
+ }
+ shortcuts_ele->part_index = temp_index;
+ shortcuts_part_to_menu[temp_index] = shortcuts_ele->setting_type;
+ temp_index++;
+ DEBUG_TRACE("shortcuts_ele->index %d" , shortcuts_ele->part_index);
+ }
+
+ /*re-set menubar shortcuts*/
+ int i = 0;
+ for (i = CAM_MENU_SHORTCUTS; i < CAM_MENU_MAX_NUMS; i++) {
+ __update_menubar_icon_by_index(ad, i);
+ }
+
+ /*menu bar shortcut update*/
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ __update_menubar_icon_by_index(ad, ad->toolbar_menu_arrays[i].menu_type);
+ }
+
+ /* shortcut panel update*/
+ char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { '\0', };
+
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), shortcuts_ele->icon);
+
+ }
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele == NULL)
+ continue;
+ if (shortcuts_ele->part_index < 0 ||
+ shortcuts_ele->part_index >19) {
+ continue;
+ }
+ snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index);
+ DEBUG_TRACE("PART:%s", buf);
+ edje_object_part_swallow(_EDJ(ad->edit_shortcuts_popup_ctx), buf, shortcuts_ele->icon);
+ }
+
+ int index = 0;
+ for (index = CAM_EDIT_SHORTCUTS_INDEX_1; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[index].prop_name,
+ shortcuts_part_to_menu[index]);
+ }
+
+ __cam_toolbar_display_shortcuts_editmode(ad);
+ __toolbar_dim_setting_shortcuts(ad);
+ if (ad->shortcut_data) {
+ if (ad->shortcut_data->icon) {
+ evas_object_event_callback_del(ad->shortcut_data->icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ }
+ }
+
+ ad->shortcut_data = NULL;
+ ad->swap_data = NULL;
+ evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, FALSE);
+ pthread_mutex_destroy(&edit_shortcuts_move_mutex);
+ return 0;
+}
+
+static void __get_menubar_shortcuts_info(struct appdata *ad, int index, int *menu_bar_no, Evas_Object **icon)
+{
+ if (!ad) {
+ *icon = NULL;
+ *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
+ return;
+ }
+
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ if (index == ad->toolbar_menu_arrays[i].menu_type) {
+ *menu_bar_no = i;
+ *icon = ad->toolbar_menu_arrays[i].icon;
+ return;
+ }
+ }
+
+ *icon = NULL;
+ *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID;
+
+ return;
+}
+
+void create_menubar_shortcuts_mouse_event(struct appdata *ad)
+{
+ if (!ad)
+ return;
+ int i = 0;
+ /*note: CAM_MENU_BAR_LEFT_0: do not need register*/
+ for (i = CAM_MENU_BAR_LEFT_1; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (type >= 0) {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up,
+ (void *)ad);
+ }
+ }
+
+}
+
+void update_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
+{
+ if (!ad)
+ return;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ int type = ad->toolbar_menu_arrays[i].menu_type;
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (i == menubar_no || all_menubar) {
+ if (type < 0) {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ } else {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move,
+ (void *)ad);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ evas_object_event_callback_add(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up,
+ (void *)ad);
+ }
+ }
+
+ }
+}
+
+
+void destroy_menubar_shortcuts_mouse_event(struct appdata *ad, int menubar_no, bool all_menubar)
+{
+ if (!ad)
+ return;
+ int i = 0;
+ for (i = CAM_MENU_BAR_LEFT_0; i < CAM_MENU_BAR_LEFT_MAX_NUM; i++) {
+ Evas_Object *icon = ad->toolbar_menu_arrays[i].icon;
+ if (i == menubar_no || all_menubar) {
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __setting_shortcuts_mouse_down);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __setting_shortcuts_mouse_move);
+ evas_object_event_callback_del(icon,
+ EVAS_CALLBACK_MOUSE_UP,
+ __setting_shortcuts_mouse_up);
+ }
+
+ }
+
+}
+
+/*free all memory for shortcuts*/
+static void __cam_toolbar_edit_shortcuts_data_clean()
+{
+ /*clear eina_list*/
+ if (NULL != shortcuts_ele_list) {
+ eina_list_free(shortcuts_ele_list);
+ shortcuts_ele_list = NULL;
+ }
+}
+
+static void __toolbar_edit_shortcuts_mouse_down_cb (void *data,
+ Evas *e,
+ Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ /*struct appdata *ad = (struct appdata *)data;
+ cam_long_press_register(LONG_PRESS_ID_EDIT,
+ LONG_PRESS_TIME,
+ __cam_long_press_editmode_cb,
+ __cam_long_press_exit_editmode_cb,
+ (void*)ad);*/
+}
+
+
+static void __toolbar_edit_shortcuts_mouse_move_cb (void *data,
+ Evas *e,
+ Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+ /*struct appdata *ad = (struct appdata *)data;*/
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *l = NULL;
+/** TODO: find solution to distinguish the scroll move
+ cam_long_press_unregister(LONG_PRESS_ID_EDIT);
+ */
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele) {
+ if (shortcuts_ele->icon) {
+ evas_object_freeze_events_set(shortcuts_ele->icon, TRUE);
+ }
+ }
+ }
+
+}
+
+static void __toolbar_edit_shortcuts_mouse_up_cb (void *data,
+ Evas *e,
+ Evas_Object *obj,
+ void *event_info)
+{
+ DEBUG_TRACE();
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_ret_if(ad == NULL);
+ ShortCutData *shortcuts_ele = NULL;
+ Eina_List *l = NULL;
+ EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) {
+ if (shortcuts_ele) {
+ if (shortcuts_ele->icon) {
+ evas_object_freeze_events_set(shortcuts_ele->icon, FALSE);
+ }
+ }
+ }
+}
+
+static int __edit_shortcuts_list_sort_cb(const void *data1, const void *data2)
+{
+ ShortCutData *ele_0 = (ShortCutData *)data1;
+ ShortCutData *ele_1 = (ShortCutData *)data2;
+ int part_index_0 = ele_0->part_index;
+ int part_index_1 = ele_1->part_index;
+ DEBUG_TRACE("part_index_0 %d", part_index_0);
+ DEBUG_TRACE("part_index_1 %d", part_index_1);
+ if (part_index_0 > part_index_1)
+ return 1;
+ else if (part_index_0 < part_index_1)
+ return -1;
+ else
+ return 0;
+}
+
+static void __edit_shortcuts_create_empty_menubar_shortcut(struct appdata *ad,
+ int menu_no,
+ ShortCutData **shortcuts_ele)
+{
+ if (menu_no > CAM_MENU_BAR_LEFT_4 || menu_no < CAM_MENU_BAR_LEFT_0) return;
+ ShortCutData *sd = (ShortCutData *)malloc(sizeof(ShortCutData));
+ if (sd) {
+ memset(sd, '\0', sizeof(ShortCutData));
+ sd->icon = ad->toolbar_menu_arrays[menu_no].icon;
+ sd->list_index = -1;
+ sd->part_index = -1;
+ sd->setting_type = -1;
+ sd->menu_bar_no = menu_no;
+ sd->is_on_menu_bar = TRUE;
+ }
+ *shortcuts_ele = sd;
+
+}
+
+static void __edit_shortcuts_add_empty_shortcuts_to_list(struct appdata *ad, int menu_no)
+{
+ if (!ad) return;
+ if (menu_no > CAM_MENU_BAR_LEFT_4 || CAM_MENU_BAR_LEFT_1) return; /*note: CAM_MENU_BAR_LEFT_0, do not update*/
+ ShortCutData *shortcuts_ele = NULL;
+ /*note: add empty menubar shortcuts to list*/
+ if (ad->toolbar_menu_arrays[menu_no].menu_type < 0) {
+ __edit_shortcuts_create_empty_menubar_shortcut(ad, CAM_MENU_BAR_LEFT_1, &shortcuts_ele);
+ shortcuts_ele_list = eina_list_prepend(shortcuts_ele_list, shortcuts_ele);
+ }
+}
+
+static void __toolbar_dim_setting_shortcuts(struct appdata *ad)
+{
+ cam_ret_if(ad == NULL);
+ Evas_Object *setting_icon = NULL;
+ Evas_Object_Event_Cb func = NULL;
+ int type = -1;
+ setting_icon = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].icon;
+ type = ad->toolbar_menu_arrays[CAM_MENU_BAR_LEFT_0].menu_type;
+ __toolbar_menu_type_update(setting_icon, type, ad, BUTTON_STATE_DIM, &func);
+}
+
+int toolbar_create_shortcuts_popup(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ gboolean init_state = FALSE;
+ init_state = cam_config_get_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHORTCUTS_INIT_PART_INDEX,
+ FALSE);
+ if (!init_state) {
+ cam_config_set_boolean_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ PROP_SHORTCUTS_INIT_PART_INDEX,
+ TRUE);
+ }
+
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+ ad->show_edit_shortcuts_popup_after_rotate = FALSE;
+
+ __toolbar_dim_setting_shortcuts(ad);
+
+ int index = 0;
+ Evas_Object *icon = NULL;
+ Evas_Object *setting_popup = NULL;
+ Evas_Object *ele_layout = NULL;
+
+ cam_long_press_register(LONG_PRESS_ID_EDIT,
+ LONG_PRESS_TIME,
+ __cam_long_press_editmode_cb,
+ __cam_long_press_exit_editmode_cb,
+ (void*)ad);
+
+ setting_shortcuts_popup_create(ad);
+
+ setting_popup = elm_layout_add(ad->edit_shortcuts_popup);
+ elm_layout_file_set(setting_popup, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/layout");
+
+ /* set text */
+ Evas_Object *scroller = elm_scroller_add(ad->edit_shortcuts_popup);
+ elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+ elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
+
+ char *icon_name = NULL;
+ char *text = NULL;
+ char part_name[16] = { '\0', };
+ ShortCutData *shortcuts_ele = NULL;
+ Evas_Object_Event_Cb callback = NULL;
+ int part_index = 0;
+ int list_index = 0;
+ gboolean is_on_toolbar = FALSE;
+ int menu_bar_no = -1;
+
+ /*create edit callback in the menubar*/
+ create_menubar_shortcuts_mouse_event(ad);
+
+ /*clear eina_list*/
+ __cam_toolbar_edit_shortcuts_data_clean();
+
+ if( ad->setting_menu_composer == NULL){
+ cam_critical(LOG_UI,"ad->setting_menu_composer is null");
+ return -1;
+ }
+
+ int shortcuts_menu_to_part[CAM_MENU_RESET + 1] = { -1,};
+ if (init_state) {
+ for (index = CAM_EDIT_SHORTCUTS_INDEX_0; index < CAM_EDIT_SHORTCUTS_INDEX_MAX; index++) {
+ int item = cam_config_get_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[index].prop_name,
+ -1);
+ shortcuts_menu_to_part[item] = index;
+ DEBUG_TRACE("item %d index %d", item, index);
+ }
+ }
+
+ CAM_MENU_ITEM* menu_item = NULL;
+ int size = eina_array_count(ad->setting_menu_composer->array);
+
+ for (index = 0; index < size; index++) {
+ menu_item = (CAM_MENU_ITEM *)eina_array_data_get(ad->setting_menu_composer->array, index);
+
+ if (*menu_item == CAM_MENU_EFFECTS
+ || *menu_item == CAM_MENU_ANTI_SHAKE
+ || *menu_item == CAM_MENU_CAPTURE_VOICE
+ || *menu_item == CAM_MENU_GPS_TAG
+ || *menu_item == CAM_MENU_STORAGE
+ || *menu_item == CAM_MENU_RESET) {
+ DEBUG_TRACE("Do not add menu in shortcut");
+ continue;
+ }
+
+ Evas_Object *menubar_obj = NULL;
+ __get_menubar_shortcuts_info(ad, *menu_item, &menu_bar_no, &menubar_obj);
+ is_on_toolbar = ((menu_bar_no == CAM_MENU_BAR_LEFT_INVALID) ? FALSE : TRUE);
+ __get_toolbar_shortcuts_file_func((void *)ad, *menu_item, BUTTON_STATE_NORMAL, &icon_name, &text, &callback);
+
+ if (icon_name) {
+ /*create layout for element*/
+ ele_layout = elm_layout_add(setting_popup);
+ elm_layout_file_set(ele_layout, CAM_SHOTCUTS_EDIT_CTXPOPUP_EDJ_NAME, "camera/shortcuts/ele");
+ icon = elm_image_add(ele_layout);
+ elm_image_file_set(icon, CAM_IMAGE_EDJ_NAME, icon_name);
+ } else {
+ DEBUG_TRACE("index = %d, no icon file path or file path error, please check!", index);
+
+ if (text)
+ free(text);
+ text = NULL;
+ continue;
+ }
+
+ if (text) {
+ edje_object_part_text_set(elm_layout_edje_get(ele_layout), "ele.txt", text);
+ DEBUG_TRACE("text %s", text);
+ }
+
+ edje_object_part_swallow(_EDJ(ele_layout), "ele.icon", icon);
+ evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_DOWN, __setting_shortcuts_mouse_down, (void *)ad);
+ evas_object_event_callback_add(ele_layout, EVAS_CALLBACK_MOUSE_UP, __setting_shortcuts_mouse_up, (void *)ad);
+
+ evas_object_show(ele_layout);
+
+ shortcuts_ele = (ShortCutData *)malloc(sizeof(ShortCutData));
+ shortcuts_ele->icon = ele_layout;
+ shortcuts_ele->list_index = list_index;
+ shortcuts_ele->setting_type = *menu_item;
+ shortcuts_ele->icon_filepath = icon_name;
+ shortcuts_ele->name = text;
+ shortcuts_ele->func = callback;
+ shortcuts_ele->menu_bar_no = menu_bar_no;
+ shortcuts_ele->is_on_menu_bar = is_on_toolbar;
+
+ if (is_on_toolbar) {
+ shortcuts_ele->part_index = -1;
+ evas_object_hide(ele_layout);
+ } else {
+ if (!init_state) { /*note: if there is no init value in config file, init now*/
+ shortcuts_ele->part_index = part_index;
+ cam_config_set_int_by_type(CAM_CONFIG_TYPE_SHORTCUTS,
+ edit_shortcuts_prop_array[part_index].prop_name,
+ *menu_item);
+ shortcuts_menu_to_part[*menu_item] = part_index;
+ } else { /*note: if there is init value in config file, read value from init*/
+ shortcuts_ele->part_index = shortcuts_menu_to_part[*menu_item];
+ }
+ }
+ if (shortcuts_ele->part_index > CAM_EDIT_SHORTCUTS_INDEX_INVALID
+ && shortcuts_ele->part_index < CAM_EDIT_SHORTCUTS_INDEX_MAX) {
+ snprintf(part_name, sizeof(part_name),"row.%d",(shortcuts_ele->part_index));
+ edje_object_part_swallow(_EDJ(setting_popup), part_name, ele_layout);
+ }
+
+ shortcuts_ele_list = eina_list_append(shortcuts_ele_list, shortcuts_ele);
+ if (shortcuts_ele_list == NULL) {
+ continue;
+ }
+ list_index++;
+ if (is_on_toolbar)
+ continue;
+ part_index++;
+ }
+
+ /*note: sort shortcuts list for in it, part_index, list_index both are sorted*/
+ __resort_edit_shortcuts_list_by_part_index();
+
+ elm_object_content_set(scroller, setting_popup);
+ /*elm_object_part_content_set(edit_shortcuts_layout, "swallow.items", setting_popup);*/
+ elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup", scroller);
+ elm_object_part_content_set(ad->toolbar_edje, "shortcuts_popup_description", ad->edit_shortcuts_popup_description);
+
+
+ __cam_toolbar_display_shortcuts_editmode(ad);
+#if 0 /*TODO: TODO: find solution to distinguish the scroll move*/
+ evas_object_event_callback_del(scroller,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __toolbar_edit_shortcuts_mouse_down_cb);
+
+ evas_object_event_callback_del(scroller,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __toolbar_edit_shortcuts_mouse_move_cb);
+ evas_object_event_callback_del(scroller,
+ EVAS_CALLBACK_MOUSE_UP,
+ __toolbar_edit_shortcuts_mouse_up_cb);
+ evas_object_event_callback_add(scroller,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __toolbar_edit_shortcuts_mouse_down_cb,
+ (void *)ad);
+ evas_object_event_callback_add(scroller,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __toolbar_edit_shortcuts_mouse_move_cb,
+ (void *)ad);
+ evas_object_event_callback_add(scroller,
+ EVAS_CALLBACK_MOUSE_UP,
+ __toolbar_edit_shortcuts_mouse_up_cb,
+ (void *)ad);
+
+#endif
+
+ ad->edit_shortcuts_popup_ctx = setting_popup;
+ ad->edit_shortcuts_popup_scroll = scroller;
+
+ evas_object_show(ad->toolbar_edje);
+ __setting_popup_timeout_checker_start(ad);
+ /*note: set destroy operation after display to avoid bs*/
+ if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+
+ __set_show_state_preview_obj(ad, FALSE);
+
+ return EXIT_SUCCESS;
+}
+
+void* __get_genlist_cb(const CAM_MENU_ITEM item)
+{
+ switch(item){
+ case CAM_MENU_SHORTCUTS:
+ return __setting_edit_shortcut_popup_cb;
+ case CAM_MENU_BURST_SHOT_MODE:
+ return __setting_burst_shot_popup_cb;
+ case CAM_MENU_VOLUME_KEY:
+ return __setting_volume_key_popup_cb;
+ case CAM_MENU_SELF_PORTRAIT:
+ return __setting_self_portrait_popup_cb;
+ case CAM_MENU_FLASH:
+ return __setting_flash_popup;
+ case CAM_MENU_SHOOTING_MODE:
+ return __setting_shot_mode_popup_cb;
+ case CAM_MENU_RECORDING_MODE:
+ return __setting_record_mode_popup;
+ case CAM_MENU_SCENE_MODE:
+ return __setting_scenemode_popup_cb;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ return __setting_ev_popup_cb;
+ case CAM_MENU_FOCUS_MODE:
+ return __setting_focus_mode_cb;
+ case CAM_MENU_TIMER:
+ return __setting_timer_popup_cb;
+ case CAM_MENU_EFFECTS:
+ return __setting_effects_popup_cb;
+ case CAM_MENU_PHOTO_RESOLUTION:
+ return __setting_photo_resolution_popup_cb;
+ case CAM_MENU_VIDEO_RESOLUTION:
+ return __setting_video_resolution_popup_cb;
+ case CAM_MENU_WHITE_BALANCE:
+ return __setting_wb_popup_cb;
+ case CAM_MENU_ISO:
+ return __setting_iso_popup_cb;
+ case CAM_MENU_METERING:
+ return __setting_metering_popup_cb;
+ case CAM_MENU_ANTI_SHAKE:
+ return __setting_anti_shake_popup_cb;
+ case CAM_MENU_OUTDOOR_VISIBILITY:
+ return __setting_outdoor_visibility_popup_cb;
+ case CAM_MENU_AUTO_CONTRAST:
+ return __setting_autocontrast_popup_cb;
+ case CAM_MENU_GUIDELINES:
+ return __setting_guideline_popup_cb;
+ case CAM_MENU_CAPTURE_VOICE:
+ return __setting_capture_by_voice_popup_cb;
+ case CAM_MENU_GPS_TAG:
+ return __setting_gps_popup_cb;
+ case CAM_MENU_SAVE_AS_FLIP:
+ return __setting_save_as_flip_popup_cb;
+ case CAM_MENU_STORAGE:
+ return __setting_storage_popup_cb;
+ case CAM_MENU_RESET:
+ return __setting_restore_defaults_popup_cb;
+ default:
+ return NULL;
+ }
+}
+
+static Eina_Bool __genlist_each_cb(const void *container, void *data, void *fdata)
+{
+ struct appdata *ad = (struct appdata *)fdata;
+ cam_retv_if(ad == NULL, EINA_FALSE);
+
+ CAM_MENU_ITEM* item = (CAM_MENU_ITEM*)data;
+ Elm_Object_Item *object_item = NULL;
+ object_item = elm_genlist_item_append(ad->genlist,
+ &itc,
+ (void*)*item,
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ __get_genlist_cb(*item),
+ (void*)ad);
+
+ if(!cam_is_enabled_menu(ad,*item))
+ elm_object_item_disabled_set(object_item, TRUE);
+
+ return EINA_TRUE;
+}
+
+int cam_toolbar_setting_popup_create(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL || ad->toolbar_edje == NULL, -1);
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ if (ad->toolbar_setting_popup) {
+ cam_toolbar_setting_popup_destroy(ad);
+ }
+ if (ad->edit_shortcuts_popup_scroll) {
+ toolbar_destroy_shortcuts_popup(ad);
+ }
+
+ ad->show_setting_popup_after_rotate = FALSE;
+
+ Evas_Object *setting_popup = NULL;
+
+ setting_toolbar_popup_create(ad);
+
+ setting_popup = elm_layout_add(ad->toolbar_setting_popup);
+ elm_layout_file_set(setting_popup, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, "camera/layout/setting");
+
+ /* set text */
+ edje_object_part_text_set(elm_layout_edje_get(setting_popup), "elm.text", dgettext(PACKAGE, "IDS_CAM_BODY_SETTINGS"));
+
+ evas_object_size_hint_min_set(setting_popup,
+ SETTING_POPUP_WIDTH * elm_config_scale_get(),
+ SETTING_POPUP_HEIGHT * elm_config_scale_get());
+
+ ad->genlist = elm_genlist_add(setting_popup);
+ evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_DOWN, __setting_gl_mouse_down, (void *)ad);
+ evas_object_event_callback_add(ad->genlist, EVAS_CALLBACK_MOUSE_MOVE, __setting_gl_mouse_move, (void *)ad);
+
+ cam_setting_gl_style_set();
+
+ if( ad->setting_menu_composer != NULL)
+ eina_array_foreach(ad->setting_menu_composer->array, __genlist_each_cb, ad);
+
+ evas_object_show(ad->genlist);
+ elm_object_part_content_set(setting_popup, "elm.swallow.box", ad->genlist);
+ elm_object_content_set(ad->toolbar_setting_popup, setting_popup);
+
+ int x, y ;
+ x = y = 0;
+ DEBUG_TRACE("ad->target_direction = %d", ad->target_direction);
+ __get_option_coord_by_menubar_no(CAM_MENU_BAR_LEFT_0, ad->target_direction, &x, &y);
+ DEBUG_TRACE("x = %d y = %d", x, y);
+ __cam_toolbar_move_ctxpopup(ad->toolbar_setting_popup, ad->target_direction, x, y);
+
+ evas_object_show(ad->toolbar_setting_popup);
+ __setting_popup_timeout_checker_start(ad);
+
+ __set_show_state_preview_obj(ad, FALSE);
+
+ return EXIT_SUCCESS;
+}
+
+int toolbar_shot_guide_popup_create(struct appdata *ad, int shot_mode)
+{
+ cam_retvm_if(ad == NULL, -1, "appdata is NULL");
+ CamAppData *cam_handle = ad->camapp_handle;
+ cam_retv_if(cam_handle == NULL, -1);
+
+ int str_num1 = 0;
+ int str_num2 = 0;
+ char *str = NULL;
+
+ if (ad->shot_mode_guide_popup) {
+ toolbar_shot_guide_popup_destory(ad);
+ }
+
+ elm_object_part_content_unset(ad->ug_base, "shot_guide_popup_layout");
+
+ if ((cam_handle->shooting_mode == CAM_SINGLE_MODE)
+ || (cam_handle->shooting_mode == CAM_SELF_SINGLE_MODE))
+ return EXIT_SUCCESS;
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_landscape");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->shot_mode_guide_popup = cam_app_load_edj(ad->ug_base, CAM_UTILS_EDJ_NAME, "shot_guide_potrait");
+ break;
+ default:
+ DEBUG_TRACE("Invalid direction type!!!");
+ }
+
+ cam_retvm_if(ad->shot_mode_guide_popup == NULL, -1, "shot_mode_guide_popup is NULL");
+ elm_object_part_content_set(ad->ug_base, "shot_guide_popup_layout", ad->shot_mode_guide_popup);
+
+ char popup_str[1024 + 1] = { '\0',};
+ snprintf(popup_str, 1024, "%s", dgettext(PACKAGE, "IDS_CAM_POP_PRESS_SHUTTER"));
+ edje_object_part_text_set(_EDJ(ad->shot_mode_guide_popup), "text", popup_str);
+
+ evas_object_show(ad->shot_mode_guide_popup);
+
+ return EXIT_SUCCESS;
+}
+
+int toolbar_shot_guide_popup_destory(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+ UI_TEST_LOG("Guide popup destory");
+
+ if (ad->shot_mode_guide_popup) {
+ evas_object_del(ad->shot_mode_guide_popup);
+ ad->shot_mode_guide_popup = NULL;
+ }
+
+ return 0;
+}
+
+int toolbar_shot_guide_popup_move(struct appdata *ad)
+{
+ cam_retv_if(ad == NULL, -1);
+
+ int x = 0, y = 0;
+
+ if (ad->shot_mode_guide_popup) {
+ Eina_Bool setting_ctxpopup_is_visible = false;
+ ecore_x_window_size_get(ad->main_xid, &x, &y);
+
+ if (ad->setting_ctxpopup)
+ setting_ctxpopup_is_visible = evas_object_visible_get(ad->setting_ctxpopup);
+
+ cam_debug(LOG_UI, "evas_object_visible_get(ad->setting_ctxpopup) =%d", setting_ctxpopup_is_visible);
+
+ if (ad->toolbar_setting_popup) {
+ __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
+ toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
+ } else {
+ __cam_get_shotguide_popup_coord(ad->target_direction, &x, &y);
+ toolbar_move_with_scale(ad->shot_mode_guide_popup, x, y);
+ }
+
+ cam_critical(LOG_UI, "x = %d, y= %d", x, y);
+ }
+
+ return 0;
+}
+
+static const char* __get_icon_image_name(CAM_MENU_ITEM item, ButtonState state)
+{
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, NULL, "camapp is NULL");
+
+ char *icon_name = NULL;
+ int exposure_value = 0;
+
+ switch(item){
+ case CAM_MENU_SCENE_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_AUTO_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_PORTRAIT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_PORTRAIT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_PORTRAIT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_LANDSCAPE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_LANDSCAPE_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_LANDSCAPE_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_NIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_NIGHT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_NIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_SPORTS:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_SPORTS_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_SPORTS_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_PARTY:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_PARTY_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_PARTY_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_BEACHSNOW:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_BEACHSNOW_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_BEACHSNOW_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_SUNSET:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_SUNSET_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_SUNSET_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_DUSKDAWN:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_DUSKDAWN_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_DUSKDAWN_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_FALL:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_FALL_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_FALL_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_FIREWORK:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_FIREWORK_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_FIREWORK_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_TEXT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_TEXT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_TEXT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_CANDLELIGHT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_CANDLELIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SCENE_BACKLIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SCENE_MODE_BACKLIGHT_PRESS_ICON;
+ else
+ icon_name = SCENE_MODE_BACKLIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_SHOOTING_SINGLE:
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = SHOOTING_MODE_SINGLE_PRESS_ICON;
+ else
+ icon_name = SHOOTING_MODE_SINGLE_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_8M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_8M_NORMAL_ICON;
+ break;
+
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W6M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W6M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W5_7M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W5_7M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_5M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_5M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_3_2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_3_2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W2_4M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W2_4M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_2M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_2M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1280x960:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_1_3M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_1_3M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_1280x720:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_W0_9M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_W0_9M_NORMAL_ICON;
+ break;
+ case CAM_MENU_PHOTO_RESOLUTION_640x480:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = CAM_RESOLUTION_0_3M_PRESS_ICON;
+ else
+ icon_name = CAM_RESOLUTION_0_3M_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_FULLHD_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_FULLHD_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_HD:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_HD_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_HD_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_WVGA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_WVGA_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_WVGA_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_VGA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_VGA_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_VGA_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_QVGA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_QVGA_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_QVGA_NORMAL_ICON;
+ break;
+ case CAM_MENU_VIDEO_RESOLUTION_QCIF:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = REC_RESOLUTION_QCIF_PRESS_ICON;
+ else
+ icon_name = REC_RESOLUTION_QCIF_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_AWB:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_AUTO_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_INCANDESCENT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_INCANDESCENT_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_INCANDESCENT_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_FLUORESCENT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_FLUORESCENT_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_FLUORESCENT_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_DAYLIGHT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_DAYLIGHT_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_DAYLIGHT_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_CLOUDY:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_CLOUDY_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_CLOUDY_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_SHADE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_SHADE_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_SHADE_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_HORIZON:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = WHITE_BALANCE_HORIZON_PRESS_ICON;
+ else
+ icon_name = WHITE_BALANCE_HORIZON_NORMAL_ICON;
+ break;
+ case CAM_MENU_WB_FLASH:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_WB_CUSTOM:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_EFFECT_NONE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_NONE_PRESS_ICON;
+ else
+ icon_name = EFFECTS_NONE_NORMAL_ICON;
+ break;
+ case CAM_MENU_EFFECT_NEGATIVE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_NEGATIVE_PRESS_ICON;
+ else
+ icon_name = EFFECTS_NEGATIVE_NORMAL_ICON;
+ break;
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_BLACKANDWHITE_PRESS_ICON;
+ else
+ icon_name = EFFECTS_BLACKANDWHITE_NORMAL_ICON;
+ break;
+ case CAM_MENU_EFFECT_SEPIA:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EFFECTS_SEPIA_PRESS_ICON;
+ else
+ icon_name = EFFECTS_SEPIA_NORMAL_ICON;
+ break;
+ case CAM_MENU_FOCUS_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FOCUS_MODE_AUTO_PRESS_ICON;
+ else
+ icon_name = FOCUS_MODE_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_FOCUS_MACRO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FOCUS_MODE_MACRO_PRESS_ICON;
+ else
+ icon_name = FOCUS_MODE_MACRO_NORMAL_ICON;
+ break;
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FOCUS_MODE_FACE_DETECTION_PRESS_ICON;
+ else
+ icon_name = FOCUS_MODE_FACE_DETECTION_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_NORMAL_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_NORMAL_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_LIMIT_MMS_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_LIMIT_MMS_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_SLOW_MOTION_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_SLOW_MOTION_NORMAL_ICON;
+ break;
+ case CAM_MENU_RECORDING_MODE_FAST:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = RECORDING_MODE_FAST_MOTION_PRESS_ICON;
+ else
+ icon_name = RECORDING_MODE_FAST_MOTION_NORMAL_ICON;
+ break;
+ case CAM_MENU_FLASH_OFF:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FLASH_OFF_PRESS_ICON;
+ else
+ icon_name = FLASH_OFF_NORMAL_ICON;
+ break;
+ case CAM_MENU_FLASH_ON:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FLASH_ON_PRESS_ICON;
+ else
+ icon_name = FLASH_ON_NORMAL_ICON;
+ break;
+ case CAM_MENU_FLASH_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = FLASH_AUTO_PRESS_ICON;
+ else
+ icon_name = FLASH_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_METERING_MATRIX:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = METERING_MATRIX_PRESS_ICON;
+ else
+ icon_name = METERING_MATRIX_NORMAL_ICON;
+ break;
+ case CAM_MENU_METERING_CENTER_WEIGHTED:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = METERING_CENTER_WEIGHTED_PRESS_ICON;
+ else
+ icon_name = METERING_CENTER_WEIGHTED_NORMAL_ICON;
+ break;
+ case CAM_MENU_METERING_SPOT:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = METERING_SPOT_PRESS_ICON;
+ else
+ icon_name = METERING_SPOT_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_AUTO:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_AUTO_PRESS_ICON;
+ else
+ icon_name = ISO_AUTO_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_50:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_50_PRESS_ICON;
+ else
+ icon_name = ISO_50_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_100:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_100_PRESS_ICON;
+ else
+ icon_name = ISO_100_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_200:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_200_PRESS_ICON;
+ else
+ icon_name = ISO_200_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_400:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_400_PRESS_ICON;
+ else
+ icon_name = ISO_400_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_80O:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = ISO_800_PRESS_ICON;
+ else
+ icon_name = ISO_800_NORMAL_ICON;
+ break;
+ case CAM_MENU_ISO_1600:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_ISO_320O:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = NULL;
+ else
+ icon_name = NULL;
+ break;
+ case CAM_MENU_STORAGE_PHONE:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = STORAGE_MYDEVICE_PRESS_ICON;
+ else
+ icon_name = STORAGE_MYDEVICE_NORMAL_ICON;
+ break;
+ case CAM_MENU_STORAGE_MMC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = STORAGE_CARD_PRESS_ICON;
+ else
+ icon_name = STORAGE_CARD_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_OFF:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_OFF_PRESS_ICON;
+ else
+ icon_name = TIMER_OFF_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_2SEC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_2SEC_PRESS_ICON;
+ else
+ icon_name = TIMER_2SEC_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_5SEC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_5SEC_PRESS_ICON;
+ else
+ icon_name = TIMER_5SEC_NORMAL_ICON;
+ break;
+ case CAM_MENU_TIMER_10SEC:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = TIMER_10SEC_PRESS_ICON;
+ else
+ icon_name = TIMER_10SEC_NORMAL_ICON;
+ break;
+ case CAM_MENU_VOLUME_KEY_ZOOM:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = VOLUME_KEY_AS_ZOOM_PRESS_ICON;
+ else
+ icon_name = VOLUME_KEY_AS_ZOOM_NORMAL_ICON;
+ break;
+ case CAM_MENU_VOLUME_KEY_SHUTTER:
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = VOLUME_KEY_AS_SHUTTER_PRESS_ICON;
+ else
+ icon_name = VOLUME_KEY_AS_SHUTTER_NORMAL_ICON;
+ break;
+ case CAM_MENU_EXPLOSURE_VALUE:
+ if (camapp->self_portrait == FALSE)
+ exposure_value = camapp->brightness;
+ else
+ exposure_value = camapp->brightness + 4;
+
+ if (exposure_value == 0) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_2_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_2_0_ICON;
+ } else if (exposure_value == 1) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_1_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_1_5_ICON;
+ } else if (exposure_value == 2) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_1_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_1_0_ICON;
+ } else if (exposure_value == 3) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_MINUS_0_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_MINUS_0_5_ICON;
+ } else if (exposure_value == 4) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_0_ICON;
+ } else if (exposure_value == 5) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_0_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_0_5_ICON;
+ } else if (exposure_value == 6) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_1_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_1_0_ICON;
+ } else if (exposure_value == 7) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_1_5_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_1_5_ICON;
+ } else if (exposure_value == 8) {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_PLUS_2_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_PLUS_2_0_ICON;
+ } else {
+ if (state == BUTTON_STATE_PRESS)
+ icon_name = EXPOSURE_VALUE_0_PRESS_ICON;
+ else
+ icon_name = EXPOSURE_VALUE_0_ICON;
+ }
+ break;
+ default:
+ icon_name = NULL;
+ }
+
+ return icon_name;
+}
+
+static const char* __get_text_name(CAM_MENU_ITEM item)
+{
+ switch(item){
+ case CAM_MENU_SCENE_AUTO:
+ return "IDS_CAM_BODY_NONE";
+ case CAM_MENU_SCENE_PORTRAIT:
+ return "IDS_CAM_OPT_SCENE_PORTRAIT";
+ case CAM_MENU_SCENE_LANDSCAPE:
+ return "IDS_CAM_OPT_SCENE_LANDSCAPE";
+ case CAM_MENU_SCENE_NIGHT:
+ return "IDS_CAM_OPT_SCENEMODE_NIGHT";
+ case CAM_MENU_SCENE_SPORTS:
+ return "IDS_CAM_OPT_SCENE_SPORTS";
+ case CAM_MENU_SCENE_PARTY:
+ return "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR";
+ case CAM_MENU_SCENE_BEACHSNOW:
+ return "IDS_CAM_OPT_BEACH_SNOW";
+ case CAM_MENU_SCENE_SUNSET:
+ return "IDS_CAM_OPT_SCENEMODE_SUNSET";
+ case CAM_MENU_SCENE_DUSKDAWN:
+ return "IDS_CAM_OPT_SCENE_DAWN";
+ case CAM_MENU_SCENE_FALL:
+ return "IDS_CAM_OPT_AUTUMN_COLOUR";
+ case CAM_MENU_SCENE_FIREWORK:
+ return "IDS_CAM_BODY_SCENEMODE_FIREWORK";
+ case CAM_MENU_SCENE_TEXT:
+ return "IDS_CAM_BODY_SCENEMODE_TEXT";
+ case CAM_MENU_SCENE_CANDLELIGHT:
+ return "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT";
+ case CAM_MENU_SCENE_BACKLIGHT:
+ return "IDS_CAM_OPT_SCENE_BACKLIGHT";
+ case CAM_MENU_SHOOTING_SINGLE:
+ case CAM_MENU_SHOOTING_SELF_SINGLE:
+ return "IDS_CAM_BODY_SINGLE";
+ case CAM_MENU_PHOTO_RESOLUTION_3264x2448:
+ return "3264x2448";
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1960:
+ return "3264x1960";
+ case CAM_MENU_PHOTO_RESOLUTION_3264x1836:
+ return "3264x1836";
+ case CAM_MENU_PHOTO_RESOLUTION_2800x1920:
+ return "2800x1920";
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1920:
+ return "2560x1920";
+ case CAM_MENU_PHOTO_RESOLUTION_2560x1440:
+ return "2560x1440";
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1536:
+ return "2048x1536";
+ case CAM_MENU_PHOTO_RESOLUTION_2048x1152:
+ return "2048x1152";
+ case CAM_MENU_PHOTO_RESOLUTION_1920x1080:
+ return "1920x1080";
+ case CAM_MENU_PHOTO_RESOLUTION_1600x1200:
+ return "1600x1200";
+ case CAM_MENU_PHOTO_RESOLUTION_1392x1392:
+ return "1392x1392";
+ case CAM_MENU_PHOTO_RESOLUTION_1280x960:
+ return "1280x960";
+ case CAM_MENU_PHOTO_RESOLUTION_1280x720:
+ return "1280x720";
+ case CAM_MENU_PHOTO_RESOLUTION_640x480:
+ return "640x480";
+ case CAM_MENU_VIDEO_RESOLUTION_FULLHD:
+ return "1920x1080";
+ case CAM_MENU_VIDEO_RESOLUTION_HD:
+ return "1280x720";
+ case CAM_MENU_VIDEO_RESOLUTION_WVGA:
+ return "720X480";
+ case CAM_MENU_VIDEO_RESOLUTION_VGA:
+ return "640x480";
+ case CAM_MENU_VIDEO_RESOLUTION_QVGA:
+ return "320x240";
+ case CAM_MENU_VIDEO_RESOLUTION_QCIF:
+ return "176x144";
+ case CAM_MENU_WB_AWB:
+ return "IDS_CAM_BODY_AUTO";
+ case CAM_MENU_WB_INCANDESCENT:
+ return "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT";
+ case CAM_MENU_WB_FLUORESCENT:
+ return "IDS_CAM_BODY_FLUORESCENT";
+ case CAM_MENU_WB_DAYLIGHT:
+ return "IDS_CAM_BODY_DAYLIGHT";
+ case CAM_MENU_WB_CLOUDY:
+ return "IDS_CAM_BODY_CLOUDY";
+ case CAM_MENU_WB_SHADE:
+ return "IDS_CAM_BODY_SHADE";
+ case CAM_MENU_WB_HORIZON:
+ return "IDS_CAM_BODY_HORIZON";
+ case CAM_MENU_WB_FLASH:
+ return "IDS_CAM_OPT_FLASH";
+ case CAM_MENU_WB_CUSTOM:
+ return "IDS_CAM_BODY_CUSTOM";
+ case CAM_MENU_EFFECT_NONE:
+ return "IDS_CAM_BODY_NONE";
+ case CAM_MENU_EFFECT_NEGATIVE:
+ return "IDS_CAM_BODY_NEGATIVE";
+ case CAM_MENU_EFFECT_BLACKANDWHITE:
+ return "IDS_CAM_BODY_BLACK_AND_WHITE";
+ case CAM_MENU_EFFECT_SEPIA:
+ return "IDS_CAM_BODY_SEPIA";
+ case CAM_MENU_FOCUS_AUTO:
+ return "IDS_CAM_OPT_AUTO_FOCUS";
+ case CAM_MENU_FOCUS_MACRO:
+ return "IDS_CAM_BODY_MACRO";
+ case CAM_MENU_FOCUS_FACE_DETECTION:
+ return "IDS_CAM_OPT_FACE_DETECTION";
+ case CAM_MENU_RECORDING_MODE_NORMAL:
+ return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
+ case CAM_MENU_RECORDING_MODE_LIMIT:
+ return "IDS_CAM_OPT_MESSAGE_LIMIT";
+ case CAM_MENU_RECORDING_MODE_SLOW:
+ return "IDS_CAM_OPT_SLOW_MOTION";
+ case CAM_MENU_RECORDING_MODE_FAST:
+ return "IDS_CAM_BODY_FAST_MOTION";
+ case CAM_MENU_RECORDING_MODE_SELF_NORMAL:
+ return "IDS_CAM_BODY_RECORDINGMODE_NORMAL";
+ case CAM_MENU_RECORDING_MODE_SELF_LIMIT:
+ return "IDS_CAM_OPT_MESSAGE_LIMIT";
+ case CAM_MENU_FLASH_OFF:
+ return "IDS_CAM_BODY_OFF";
+ case CAM_MENU_FLASH_ON:
+ return "IDS_CAM_BODY_ON";
+ case CAM_MENU_FLASH_AUTO:
+ return "IDS_CAM_BODY_AUTO";
+ case CAM_MENU_METERING_MATRIX:
+ return "IDS_CAM_BODY_MATRIX";
+ case CAM_MENU_METERING_CENTER_WEIGHTED:
+ return "IDS_CAM_BODY_CENTER_WEIGHTED";
+ case CAM_MENU_METERING_SPOT:
+ return "IDS_CAM_BODY_SPOT";
+ case CAM_MENU_ISO_AUTO:
+ return "IDS_CAM_BODY_AUTO";
+ case CAM_MENU_ISO_50:
+ return "50";
+ case CAM_MENU_ISO_100:
+ return "100";
+ case CAM_MENU_ISO_200:
+ return "200";
+ case CAM_MENU_ISO_400:
+ return "400";
+ case CAM_MENU_ISO_80O:
+ return "800";
+ case CAM_MENU_ISO_1600:
+ return "1600";
+ case CAM_MENU_ISO_320O:
+ return "3200";
+ case CAM_MENU_STORAGE_PHONE:
+ return "IDS_CAM_OPT_DEVICE_ABB_M_MEMORY";
+ case CAM_MENU_STORAGE_MMC:
+ return "IDS_CAM_OPT_MEMORY_CARD";
+ case CAM_MENU_TIMER_OFF:
+ return "IDS_CAM_BODY_OFF";
+ case CAM_MENU_TIMER_2SEC:
+ return "IDS_CAM_BODY_2_SEC";
+ case CAM_MENU_TIMER_5SEC:
+ return "IDS_CAM_BODY_5_SEC";
+ case CAM_MENU_TIMER_10SEC:
+ return "IDS_CAM_BODY_10_SEC";
+ case CAM_MENU_VOLUME_KEY_ZOOM:
+ return "IDS_CAM_MBODY_THE_ZOOM_KEY";
+ case CAM_MENU_VOLUME_KEY_SHUTTER:
+ return "IDS_CAM_MBODY_THE_CAMERA_KEY";
+ default:
+ return NULL;
+ }
+}
+
+#define SUB_MENU_MAX_COUNT (5)
+#define SUB_MENU_2_COUNT_GAP (35)
+#define SUB_MENU_3_COUNT_GAP (30)
+#define SUB_MENU_4_COUNT_GAP (25)
+#define SUB_MENU_5_COUNT_GAP (15)
+
+static int __get_sub_menu_height(int count)
+{
+ int height = 0;
+ if (count > 5)
+ height = SUB_MENU_POPUP_HEIGHT;
+ else {
+ height = (int)(SUB_MENU_POPUP_HEIGHT * count/SUB_MENU_MAX_COUNT);
+ switch (count) {
+ case 2:
+ height += SUB_MENU_2_COUNT_GAP;
+ break;
+ case 3:
+ height += SUB_MENU_3_COUNT_GAP;
+ break;
+ case 4:
+ height += SUB_MENU_4_COUNT_GAP;
+ break;
+ case 5:
+ height += SUB_MENU_5_COUNT_GAP;
+ break;
+ }
+ }
+ return height;
+}
+
+static void __photo_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ DEBUG_TRACE("");
+
+ int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set resolution value */
+ if (camapp->photo_resolution != resolution) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, resolution);
+ if (!cam_handle_value_set(ad, PROP_PHOTO_RESOLUTION, &value)) {
+ DEBUG_TRACE("set photo resolution failed!");
+ }
+ }
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_PHOTO_RESOLUTION);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+static void __video_resolution_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ cam_retm_if(obj == NULL, "obj is NULL");
+ struct appdata *ad = (struct appdata *)cam_appdata_get();
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp is NULL");
+
+ DEBUG_TRACE("");
+
+ int resolution = cam_convert_menu_item_to_mmfw_value((int)data);
+
+ /* set resolution value */
+ if (camapp->video_resolution != resolution) {
+ GValue value = {0};
+ CAM_GVALUE_SET_INT(value, resolution);
+ if (!cam_handle_value_set(ad, PROP_VIDEO_RESOLUTION, &value)) {
+ DEBUG_TRACE("set video resolution failed!");
+ }
+ }
+
+ __update_menubar_icon_by_index(ad, CAM_MENU_VIDEO_RESOLUTION);
+ if (ad->setting_select_item)
+ elm_genlist_item_update(ad->setting_select_item);
+
+ setting_ctxpopup_destroy(ad);
+ ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
+}
+
+void cam_toolbar_show_cafbutton(struct appdata *ad, gboolean show)
+{
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (show) {
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_NORMAL);
+ }
+ else {
+ __toolbar_cafbutton_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE);
+ }
+}
+
+static void __update_setting_popup(void* data)
+{
+
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ Elm_Object_Item *it = NULL;
+ it = elm_genlist_first_item_get(ad->genlist);
+
+ while (it) {
+ CAM_MENU_ITEM item = (CAM_MENU_ITEM)elm_object_item_data_get(it);
+ gboolean cap_enable = cam_is_enabled_menu(ad,item);
+ gboolean cur_state = elm_object_item_disabled_get(it);
+ DEBUG_TRACE("cap_enable %d", cap_enable);
+ DEBUG_TRACE("cur_state %d", cap_enable);
+ if(cap_enable == cur_state) {
+ DEBUG_TRACE("cur_state|cap_enable %d", cap_enable|cur_state);
+ elm_object_item_disabled_set(it, !cap_enable);
+ elm_genlist_item_update(it);
+ }
+
+ it = elm_genlist_item_next_get(it);
+
+ }
+
+}
+
+static void __set_show_state_preview_obj(void *data, gboolean show)
+{
+ struct appdata *ad = data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (show) {
+ cam_app_focus_guide_update(ad);
+ cam_indicator_set_show_state(ad, TRUE);
+
+ if (ad->guideline_edje)
+ evas_object_show(ad->guideline_edje);
+
+ if (ad->shot_mode_guide_popup)
+ evas_object_show(ad->shot_mode_guide_popup);
+ } else {
+ edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
+ cam_indicator_set_show_state(ad, FALSE);
+
+ if (ad->guideline_edje)
+ evas_object_hide(ad->guideline_edje);
+
+ if (ad->shot_mode_guide_popup)
+ evas_object_hide(ad->shot_mode_guide_popup);
+ }
+}
+
+//end file
diff --git a/src/edc-callback/cam_zoom_edc_callback.c b/src/edc-callback/cam_zoom_edc_callback.c
new file mode 100755
index 0000000..1ba9922
--- /dev/null
+++ b/src/edc-callback/cam_zoom_edc_callback.c
@@ -0,0 +1,418 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "cam.h"
+#include "cam_zoom_edc_callback.h"
+#include "cam_capacity_type.h"
+#include "cam_device_capacity.h"
+
+
+#define ZOOM_DESTROY_TIME 3.0
+
+
+static Evas_Object *slider = NULL;
+static Ecore_Timer *zoom_destroy_timer = NULL;
+static int zoom_value[CAM_ZOOM_VALUE_MAX] = { 0 };
+
+static gboolean __init_zoom_value(struct appdata *ad);
+static Eina_Bool __zoom_destroy_timer_cb(void *data);
+static void __set_zoom_value(struct appdata *data, int zoom_level);
+static void __zoom_slider_stop_cb(void *data, Evas_Object *obj, void *event_info);
+static void __zoom_slider_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __set_gauge_focus(struct appdata *data);
+
+
+static gboolean __init_zoom_value(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ int i = 0;
+ double gap = (double)(camapp->zoom_max - camapp->zoom_min) / (CAM_ZOOM_VALUE_MAX - 2);
+ for (i = 2; i < CAM_ZOOM_VALUE_MAX - 1; i++) {
+ zoom_value[i] = (int)(0.5 + camapp->zoom_min + (i - 1) * gap);
+ DEBUG_TRACE("zoom_value[%d] =%d", i, zoom_value[i]);
+ }
+ zoom_value[1] = camapp->zoom_min;
+ DEBUG_TRACE("zoom_value[%d] =%d", 1, zoom_value[1]);
+ zoom_value[CAM_ZOOM_VALUE_MAX - 1] = camapp->zoom_max;
+ DEBUG_TRACE("zoom_value[%d] =%d", (CAM_ZOOM_VALUE_MAX - 1), zoom_value[CAM_ZOOM_VALUE_MAX - 1]);
+
+ return TRUE;
+}
+
+static Eina_Bool __zoom_destroy_timer_cb(void *data)
+{
+ CAM_UI_LOG();
+
+ struct appdata *ad = (struct appdata *)data;
+ cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ unload_zoom_edje(ad);
+
+ if (zoom_destroy_timer)
+ zoom_destroy_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void __set_zoom_value(struct appdata *data, int zoom_level)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ int zoom = 0;
+ GValue value = { 0, };
+
+ camapp->zoom_mode = zoom_level;
+
+ zoom = zoom_value[camapp->zoom_mode];
+ DEBUG_TRACE("zoom_value =%d", zoom);
+ CAM_GVALUE_SET_INT(value, zoom);
+
+ if (!cam_handle_value_set(ad, PROP_ZOOM, &value)) {
+ cam_critical(LOG_CAM, "cam_handle_value_set failed");
+ }
+}
+
+static void __zoom_slider_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (obj) {
+ DEBUG_TRACE("");
+ Evas_Object *slider = (Evas_Object *)obj;
+ int slider_value = (int)elm_slider_value_get(slider);
+ elm_slider_value_set(slider, slider_value);
+ __set_zoom_value(ad, slider_value);
+ } else {
+ cam_critical(LOG_UI, "Error : slider is NULL");
+ }
+
+ if(zoom_destroy_timer)
+ ecore_timer_reset(zoom_destroy_timer);
+}
+
+static void __zoom_slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (obj) {
+ Evas_Object *slider = (Evas_Object *)obj;
+ int slider_value = (int)elm_slider_value_get(slider);
+ DEBUG_TRACE("slider_value:%d", slider_value);
+ __set_zoom_value(ad, slider_value);
+ } else {
+ cam_critical(LOG_UI, "Error : slider is NULL");
+ }
+
+ if(zoom_destroy_timer)
+ ecore_timer_reset(zoom_destroy_timer);
+}
+
+gboolean load_zoom_edje(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ elm_object_part_content_unset(ad->ug_base, "zoom_layout");
+ if (ad->zoom_edje)
+ cam_zoom_unload_edje(ad);
+
+ /* zoom bg */
+ gboolean portrait = FALSE;
+ gboolean slider_inverse = FALSE;
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ ad->zoom_edje = cam_app_load_edj(ad->ug_base, CAM_ZOOM_EDJ_NAME, GRP_MAIN);
+ portrait = FALSE;
+ slider_inverse = TRUE;
+ break;
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->zoom_edje = cam_app_load_edj(ad->ug_base, CAM_ZOOM_EDJ_INVERSE_NAME, GRP_MAIN);
+ portrait = FALSE;
+ slider_inverse = FALSE;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ ad->zoom_edje = cam_app_load_edj(ad->ug_base, CAM_ZOOM_EDJ_VERTICAL_NAME, GRP_MAIN);
+ portrait = TRUE;
+ slider_inverse = FALSE;
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->zoom_edje = cam_app_load_edj(ad->ug_base, CAM_ZOOM_EDJ_VERTICAL_INVERSE_NAME, GRP_MAIN);
+ slider_inverse = TRUE;
+ portrait = TRUE;
+ break;
+ default:
+ DEBUG_TRACE("wow, reached un-able reached codes");
+ }
+
+ cam_retvm_if(ad->zoom_edje == NULL, FALSE, "zom_edje is NULL");
+ elm_object_part_content_set(ad->ug_base, "zoom_layout", ad->zoom_edje);
+
+ /* zoom text */
+ if (!ad->zoom_text_min_edje) {
+ ad->zoom_text_min_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->zoom_edje), "text_min");
+ }
+ cam_retvm_if(ad->zoom_text_min_edje == NULL, FALSE, "zoom_text_min is NULL");
+
+ if (!ad->zoom_text_max_edje) {
+ ad->zoom_text_max_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->zoom_edje), "text_max");
+ }
+ cam_retvm_if(ad->zoom_text_max_edje == NULL, FALSE, "zoom_text_max is NULL");
+
+ edje_object_part_text_set(_EDJ(ad->zoom_edje), "text_min", "x1");
+ edje_object_part_text_set(_EDJ(ad->zoom_edje), "text_max", "x4");
+
+ /* zoom slider */
+ slider = elm_slider_add(ad->zoom_edje);
+ cam_retvm_if(slider == NULL, FALSE, "slider is NULL");
+
+ elm_object_style_set(slider, "camera");
+ if (portrait) {
+ elm_slider_horizontal_set(slider, EINA_TRUE);
+ } else {
+ elm_slider_horizontal_set(slider, EINA_FALSE);
+ }
+ if (slider_inverse) {
+ elm_slider_inverted_set(slider, EINA_TRUE);
+ } else {
+ elm_slider_inverted_set(slider, EINA_FALSE);
+ }
+ elm_slider_min_max_set(slider, CAM_ZOOM_VALUE_MIN + 1, CAM_ZOOM_VALUE_MAX - 1);
+
+
+ elm_slider_value_set(slider, camapp->zoom_mode);
+
+ int slider_value = (int)elm_slider_value_get(slider);
+ DEBUG_TRACE("slider_value:%d / camapp->zoom_mode:%d", slider_value, camapp->zoom_mode);
+
+ evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_content_set(ad->zoom_edje, "slider", slider);
+
+ evas_object_smart_callback_del(slider, "slider,drag,stop", __zoom_slider_stop_cb);
+ evas_object_smart_callback_add(slider, "slider,drag,stop", __zoom_slider_stop_cb, (void*)ad);
+ evas_object_smart_callback_del(slider, "changed", __zoom_slider_changed_cb);
+ evas_object_smart_callback_add(slider, "changed", __zoom_slider_changed_cb, (void*)ad);
+
+ return TRUE;;
+}
+
+gboolean update_zoom_edje(struct appdata *ad)
+{
+ DEBUG_TRACE("START");
+
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ CamAppData *camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ cam_retvm_if(ad->zoom_edje == NULL, FALSE, "zom_edje is NULL");
+ cam_retvm_if(slider == NULL, FALSE, "zoom slider is NULL");
+
+ elm_slider_value_set(slider, camapp->zoom_mode);
+
+ return TRUE;
+}
+
+gboolean unload_zoom_edje(struct appdata *ad)
+{
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ cam_reset_focus_mode(ad);
+
+ DEL_EVAS_OBJECT(ad->zoom_text_min_edje);
+ DEL_EVAS_OBJECT(ad->zoom_text_max_edje);
+ DEL_EVAS_OBJECT(ad->zoom_edje);
+ REMOVE_TIMER(zoom_destroy_timer);
+
+ return TRUE;
+}
+
+gboolean zoom_in(struct appdata *ad, gboolean is_zoom_in, int zoom_gap)
+{
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ int zoom_value = 0;
+ unsigned int capacity = 0;
+
+ GetCamDevFuncCaps(&capacity, ad);
+ if (!(capacity & CAM_CP_FUNC_ZOOM)) {
+ DEBUG_TRACE("Zoom is not supported");
+ return FALSE;
+ }
+
+ REMOVE_TIMER(zoom_destroy_timer);
+
+ __init_zoom_value(ad);
+
+ /* set zoom value */
+ zoom_value = camapp->zoom_mode;
+
+ if (is_zoom_in) {
+ if (zoom_value < CAM_ZOOM_VALUE_MAX - 1)
+ zoom_value += zoom_gap;
+ } else {
+ if (zoom_value > CAM_ZOOM_VALUE_MIN + 1)
+ zoom_value -= zoom_gap;
+ }
+ DEBUG_TRACE("zoom_value = %d", zoom_value);
+
+ __set_zoom_value(ad, zoom_value);
+
+ if (ad->zoom_edje == NULL)
+ load_zoom_edje(ad);
+ else
+ update_zoom_edje(ad);
+
+ zoom_destroy_timer = ecore_timer_add(ZOOM_DESTROY_TIME, __zoom_destroy_timer_cb, ad);
+
+ return TRUE;
+}
+
+void cam_zoom_create_pinch_edje(struct appdata *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->pinch_edje) {
+ evas_object_del(ad->pinch_edje);
+ ad->pinch_edje = NULL;
+ }
+
+ elm_object_part_content_unset(ad->ug_base, "pinch_layout");
+
+ switch (ad->target_direction) {
+ case CAM_TARGET_DIRECTION_LANDSCAPE:
+ case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
+ ad->pinch_edje = cam_app_load_edj(ad->ug_base, CAM_ZOOM_EDJ_NAME, "pinch");
+ break;
+ case CAM_TARGET_DIRECTION_PORTRAIT:
+ case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
+ ad->pinch_edje = cam_app_load_edj(ad->ug_base, CAM_ZOOM_EDJ_VERTICAL_NAME, "pinch");
+ break;
+ default:
+ DEBUG_TRACE("error target direction!");
+ break;
+ }
+
+ cam_retm_if(ad->pinch_edje == NULL, "pinch_edje is NULL");
+ elm_object_part_content_set(ad->ug_base, "pinch_layout", ad->pinch_edje);
+
+ __set_gauge_focus(ad);
+ __init_zoom_value(ad);
+}
+
+static void __set_gauge_focus(struct appdata *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ CamAppData *camapp = NULL;
+ cam_retm_if(ad == NULL, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retm_if(camapp == NULL, "camapp_handle is NULL");
+
+ DEBUG_TRACE("camapp->zoom_mode %d", camapp->zoom_mode);
+
+ char part_name[CAM_ZOOM_VALUE_MAX + 1][128] = {
+ {"set.pinch.default"},
+ {"set.pinch.default"},
+ {"set.pinch.1.1x"},
+ {"set.pinch.1.2x"},
+ {"set.pinch.1.3x"},
+ {"set.pinch.1.4x"},
+ {"set.pinch.1.5x"},
+ {"set.pinch.1.6x"},
+ {"set.pinch.1.7x"},
+ {"set.pinch.1.8x"},
+ {"set.pinch.1.9x"},
+ {"set.pinch.2.0x"},
+ {"set.pinch.2.1x"},
+ {"set.pinch.2.2x"},
+ {"set.pinch.2.3x"},
+ {"set.pinch.2.4x"},
+ {"set.pinch.2.5x"},
+ {"set.pinch.2.6x"},
+ {"set.pinch.2.7x"},
+ {"set.pinch.2.8x"},
+ {"set.pinch.2.9x"},
+ {"set.pinch.3.0x"},
+ {"set.pinch.3.1x"},
+ {"set.pinch.3.2x"},
+ {"set.pinch.3.3x"},
+ {"set.pinch.3.4x"},
+ {"set.pinch.3.5x"},
+ {"set.pinch.3.6x"},
+ {"set.pinch.3.7x"},
+ {"set.pinch.3.8x"},
+ {"set.pinch.3.9x"},
+ {"set.pinch.4.0x"},
+ {"set.pinch.4.0x"},
+ };
+
+ if ((camapp->zoom_mode >= CAM_ZOOM_VALUE_MIN)
+ &&(camapp->zoom_mode <= CAM_ZOOM_VALUE_MAX)) {
+ elm_object_signal_emit(ad->pinch_edje, part_name[camapp->zoom_mode], "prog");
+ } else {
+ DEBUG_TRACE("NOTE: error zoom mode");
+ }
+
+ evas_object_show(ad->pinch_edje);
+}
+
+gboolean cam_pinch_zoom_in(struct appdata* ad,gboolean is_zoom_in,int zoom_value)
+{
+ CamAppData *camapp = NULL;
+ cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+ camapp = ad->camapp_handle;
+ cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
+
+ unsigned int capacity = 0;
+
+ GetCamDevFuncCaps(&capacity, ad);
+ if (!(capacity & CAM_CP_FUNC_ZOOM)) {
+ DEBUG_TRACE("Zoom is not supported");
+ return FALSE;
+ }
+
+ if (is_zoom_in) {
+ if (camapp->zoom_mode < CAM_ZOOM_VALUE_MAX - 1) {
+ camapp->zoom_mode = camapp->zoom_mode + zoom_value;
+ }
+ } else {
+ if (camapp->zoom_mode > CAM_ZOOM_VALUE_MIN + 1) {
+ camapp->zoom_mode = camapp->zoom_mode - zoom_value;
+ }
+ }
+
+ __set_gauge_focus(ad);
+ __set_zoom_value(ad, camapp->zoom_mode);
+
+ return TRUE;
+}
+//endfile
+
diff --git a/ug-camera-efl.manifest b/ug-camera-efl.manifest
new file mode 100644
index 0000000..5457754
--- /dev/null
+++ b/ug-camera-efl.manifest
@@ -0,0 +1,11 @@
+<manifest>
+ <define>
+ <domain name="ug-camera-efl" policy="shared" />
+ </define>
+ <request>
+ <domain name="_" />
+ </request>
+ <assign>
+ <filesystem path="/opt/ug/bin/camera-efl" label="ug-camera-efl" />
+ </assign>
+</manifest>
diff --git a/ug-camera-efl.png b/ug-camera-efl.png
new file mode 100755
index 0000000..cb5c0de
--- /dev/null
+++ b/ug-camera-efl.png
Binary files differ
diff --git a/ug-camera-efl.xml b/ug-camera-efl.xml
new file mode 100755
index 0000000..d391ca2
--- /dev/null
+++ b/ug-camera-efl.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="ug-camera-efl" version="0.1.0" install-location="internal-only">
+ <label>camera-efl</label>
+ <author email="namjin45.kim@samsung.com" href="www.samsung.com">Namjin Kim</author>
+ <author email="sora.hyun@samsung.com" href="www.samsung.com">Sora Hyun</author>
+ <author email="h2.seo@samsung.com" href="www.samsung.com">Hyunho Seo</author>
+ <description>Camera UI Gadget</description>
+ <ui-application appid="camera-efl" exec="/usr/ug/bin/camera-efl" nodisplay="true" multiple="true" type="capp" taskmanage="false">
+ <label>Camera Appcontrol</label>
+ <icon>ug-camera-efl.png</icon>
+ <label xml:lang="en-us">Camera</label>
+ <label xml:lang="nl-nl">Camera</label>
+ <label xml:lang="de-de">Kamera</label>
+ <label xml:lang="zh-hk">相機</label>
+ <label xml:lang="zh-cn">照相机</label>
+ <label xml:lang="ru-ru">Камера</label>
+ <label xml:lang="zh-tw">照相机</label>
+ <label xml:lang="ja-jp">カメラ</label>
+ <label xml:lang="es-es">Cámara</label>
+ <label xml:lang="el-gr">Κάμερα</label>
+ <label xml:lang="it-it">Fotocamera</label>
+ <label xml:lang="tr-tr">Kamera</label>
+ <label xml:lang="pt-pt">Câmara</label>
+ <label xml:lang="fr-fr">Appareil photo</label>
+ <label xml:lang="ko-kr">카메라</label>
+ <label xml:lang="hy-am">Խցիկ</label>
+ <label xml:lang="az-az">Kamera</label>
+ <label xml:lang="eu-es">Kamera</label>
+ <label xml:lang="bg-bg">Камера</label>
+ <label xml:lang="ca-es">Càmera</label>
+ <label xml:lang="zh-cn">照相机</label>
+ <label xml:lang="hr-hr">Kamera</label>
+ <label xml:lang="cs-cz">Fotoaparát</label>
+ <label xml:lang="da-dk">Kamera</label>
+ <label xml:lang="gl-es">Cámara</label>
+ <label xml:lang="en-gb">Camera</label>
+ <label xml:lang="et-ee">Kaamera</label>
+ <label xml:lang="fi-fi">Kamera</label>
+ <label xml:lang="ka-ge">ფოტოაპარატი</label>
+ <label xml:lang="hu-hu">Fényképező</label>
+ <label xml:lang="is-is">Myndavél</label>
+ <label xml:lang="ga-ie">Ceamara</label>
+ <label xml:lang="kk-kz">Камера</label>
+ <label xml:lang="lv-lv">Kamera</label>
+ <label xml:lang="mk-mk">Камера</label>
+ <label xml:lang="nb-no">Kamera</label>
+ <label xml:lang="pl-pl">Aparat</label>
+ <label xml:lang="pt-br">Câmara</label>
+ <label xml:lang="ro-ro">Cameră foto</label>
+ <label xml:lang="ru-ru">Камера</label>
+ <label xml:lang="sr-rs">Kamera</label>
+ <label xml:lang="sk-sk">Fotoaparát</label>
+ <label xml:lang="sl-si">Fotoaparat</label>
+ <label xml:lang="es-mx">Cámara</label>
+ <label xml:lang="uk-ua">Камера</label>
+ <label xml:lang="uz-uz">Kamera</label>
+ <label xml:lang="ar-ae">الكاميرا</label>
+ <label xml:lang="zh-sg">照相机</label>
+ <label xml:lang="hi-in">कैमरा</label>
+ <label xml:lang="en-ph">Camera</label>
+ <label xml:lang="fr-ca">Appareil photo</label>
+ <application-service>
+ <operation name="http://tizen.org/appcontrol/operation/create_content" />
+ <mime name="image/jpg" />
+ <mime name="image/jpeg" />
+ <mime name="video/3gp" />
+ <mime name="video/3gpp" />
+ </application-service>
+ </ui-application>
+</manifest>