summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSehong Na <sehong.na@samsung.com>2014-05-31 13:02:05 +0900
committerSehong Na <sehong.na@samsung.com>2014-05-31 13:02:05 +0900
commit6399fe29ef43aa78432c89eef8815e6288cfdd6c (patch)
treea9a6690db1cd55021bb242ab9fc8aeeb4d6b2c20
downloadug-camera-efl-tizen_2.3.tar.gz
ug-camera-efl-tizen_2.3.tar.bz2
ug-camera-efl-tizen_2.3.zip
-rw-r--r--.camera.ini39
-rw-r--r--.gitignore2
-rwxr-xr-xCMakeLists.txt196
-rwxr-xr-xLICENSE.Flora206
-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
-rwxr-xr-xedc/cam_funcs.edc163
-rwxr-xr-xedc/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
-rwxr-xr-xedc/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
-rwxr-xr-xedc/style_button_camera.edc490
-rwxr-xr-xedc/style_ctxpopup_camera_with_radio.edc1732
-rwxr-xr-xedc/style_genlist_macro.edc847
-rwxr-xr-xedc/style_genlist_normal.edc866
-rwxr-xr-xedc/style_label_camera.edc634
-rwxr-xr-xedc/style_slider_camera.edc488
-rwxr-xr-xedc/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
-rwxr-xr-xinclude/CamDeviceCapacity.h118
-rwxr-xr-xinclude/CamTypeConverter.h48
-rwxr-xr-xinclude/cam.h394
-rwxr-xr-xinclude/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
-rwxr-xr-xinclude/cam_exif_info.h35
-rwxr-xr-xinclude/cam_face_detection_focus.h70
-rwxr-xr-xinclude/cam_file.h87
-rwxr-xr-xinclude/cam_lbs.h46
-rwxr-xr-xinclude/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.h955
-rwxr-xr-xinclude/cam_rec.h45
-rwxr-xr-xinclude/cam_sound.h55
-rwxr-xr-xinclude/cam_ta.h112
-rwxr-xr-xinclude/cam_typeconverter.h55
-rwxr-xr-xinclude/cam_ui_effect_utils.h86
-rwxr-xr-xinclude/cam_ui_rotate_utils.h101
-rwxr-xr-xinclude/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
-rwxr-xr-xpackaging/ug-camera-efl.spec80
-rw-r--r--po/CMakeLists.txt25
-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.c8669
-rwxr-xr-xsrc/cam_config.c361
-rwxr-xr-xsrc/cam_continuous_shot.c621
-rwxr-xr-xsrc/cam_debug.c291
-rwxr-xr-xsrc/cam_device_capacity.cpp108
-rwxr-xr-xsrc/cam_exif_info.c264
-rwxr-xr-xsrc/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.c1254
-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
-rwxr-xr-xsrc/cam_typeconverter.cpp109
-rwxr-xr-xsrc/cam_ui_effect_utils.c199
-rwxr-xr-xsrc/cam_ui_rotate_utils.c589
-rwxr-xr-xsrc/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.c8327
-rwxr-xr-xsrc/edc-callback/cam_zoom_edc_callback.c418
-rw-r--r--ug-camera-efl.manifest13
-rwxr-xr-xug-camera-efl.pngbin0 -> 57662 bytes
-rwxr-xr-xug-camera-efl.xml70
-rwxr-xr-xug.camera-efl.include26
515 files changed, 72085 insertions, 0 deletions
diff --git a/.camera.ini b/.camera.ini
new file mode 100644
index 0000000..aae96f8
--- /dev/null
+++ b/.camera.ini
@@ -0,0 +1,39 @@
+
+[common]
+mode=1
+[still]
+storage=0
+ahs=0
+scene_mode=0
+iso=0
+flash=2
+wdr=0
+metering=2
+resolution=167774080
+review=false
+guideline=false
+af_mode=1
+wb=1
+toolbar_0 =-1
+toolbar_1 =-1
+toolbar_2 =-1
+toolbar_3 =3
+toolbar_4 =4
+[video]
+ahs=0
+scene_mode=0
+iso=0
+flash=0
+guideline=false
+wdr=0
+metering=2
+resolution=41943520
+review=false
+toolbar_0 =-1
+toolbar_1 =6
+toolbar_2 =-1
+toolbar_3 =3
+toolbar_4 =4
+[shortcuts]
+pop_tip=1
+init_part_index=false
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2c4290f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*~
+*.orig
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 100755
index 0000000..571fe79
--- /dev/null
+++ b/LICENSE.Flora
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+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 Tizen Compliance Specification
+and passes the Tizen Compliance Tests 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
+ and your own copyright statement or terms and conditions do not conflict
+ the conditions stated in the License including section 3.
+
+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.1 (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..a5964ea
--- /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.1.
+Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions.
diff --git a/edc/cam_ctxpopup_shortcuts.edc b/edc/cam_ctxpopup_shortcuts.edc
new file mode 100755
index 0000000..8de32fc
--- /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.1 (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..8889e36
--- /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.1 (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..45662d6
--- /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.1 (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..c2c77f7
--- /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.1 (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..395b6ca
--- /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.1 (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..8aff53c
--- /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.1 (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 100755
index 0000000..06bc800
--- /dev/null
+++ b/edc/cam_funcs.edc
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..20c9f57
--- /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.1 (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..a51397a
--- /dev/null
+++ b/edc/cam_images.edc
@@ -0,0 +1,332 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..debe3d7
--- /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.1 (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..b555771
--- /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.1 (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..5af9fd3
--- /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.1 (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..727c92f
--- /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.1 (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..3b7269b
--- /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.1 (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..a910913
--- /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.1 (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..1234ac9
--- /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.1 (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..1a450ee
--- /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.1 (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..98e958a
--- /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.1 (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..446acea
--- /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.1 (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 100755
index 0000000..21b22b1
--- /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.1 (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..d32da91
--- /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.1 (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..5be5582
--- /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.1 (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..ae6e1c8
--- /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.1 (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..5dd92d1
--- /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.1 (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..448631c
--- /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.1 (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..1b21d76
--- /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.1 (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..f5099ff
--- /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.1 (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..c84ee63
--- /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.1 (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..827ee9c
--- /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.1 (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..3a213db
--- /dev/null
+++ b/edc/cam_utils.edc
@@ -0,0 +1,436 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..06edd50
--- /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.1 (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..8eefd89
--- /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.1 (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..68df3a1
--- /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.1 (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..2b07bc0
--- /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.1 (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 100755
index 0000000..fe51a1a
--- /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.1 (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..baa3ac6
--- /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.1 (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..72b46db
--- /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.1 (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 100755
index 0000000..7d0eeb2
--- /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.1 (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 100755
index 0000000..c7fb7be
--- /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.1 (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..0d2bd99
--- /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.1 (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 100755
index 0000000..a1c2d57
--- /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.1 (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 100755
index 0000000..72fb09d
--- /dev/null
+++ b/include/CamDeviceCapacity.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..699fee5
--- /dev/null
+++ b/include/CamTypeConverter.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..cb1aba9
--- /dev/null
+++ b/include/cam.h
@@ -0,0 +1,394 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 SERVICE_OPTIONAL_KEY_ALLOW_SWITCH "http://tizen.org/appcontrol/data/camera/allow_switch"
+
+
+#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 100755
index 0000000..013b938
--- /dev/null
+++ b/include/cam_animation.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..edc040d
--- /dev/null
+++ b/include/cam_app.h
@@ -0,0 +1,498 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..2635c5f
--- /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.1 (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..23278cc
--- /dev/null
+++ b/include/cam_config.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..941942d
--- /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.1 (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..007663c
--- /dev/null
+++ b/include/cam_debug.h
@@ -0,0 +1,296 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..eaacb23
--- /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.1 (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..cd8ae97
--- /dev/null
+++ b/include/cam_error.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..98657ea
--- /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.1 (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 100755
index 0000000..96fc581
--- /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.1 (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..00593ab
--- /dev/null
+++ b/include/cam_file.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..afe27a8
--- /dev/null
+++ b/include/cam_lbs.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..f2f8666
--- /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.1 (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..d897dcd
--- /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.1 (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..694390b
--- /dev/null
+++ b/include/cam_mm.h
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..7da6fec
--- /dev/null
+++ b/include/cam_popup.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..c2ffd35
--- /dev/null
+++ b/include/cam_property.h
@@ -0,0 +1,955 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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;
+ gboolean allow_switch;
+ 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..81de3bd
--- /dev/null
+++ b/include/cam_rec.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..89f11af
--- /dev/null
+++ b/include/cam_sound.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..d89411d
--- /dev/null
+++ b/include/cam_ta.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..ffdc4f6
--- /dev/null
+++ b/include/cam_typeconverter.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..a3d4f94
--- /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.1 (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 100755
index 0000000..2c683f9
--- /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.1 (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 100755
index 0000000..5c831b8
--- /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.1 (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..98ae2a3
--- /dev/null
+++ b/include/camera_utils.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..e809d0e
--- /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.1 (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..f4c4a60
--- /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.1 (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..b9de17b
--- /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.1 (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..c30a4d4
--- /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.1 (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..b07facc
--- /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.1 (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..4af204b
--- /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.1 (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..683ce07
--- /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.1 (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..ef18f14
--- /dev/null
+++ b/include/edc_string.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..57b7d98
--- /dev/null
+++ b/packaging/ug-camera-efl.spec
@@ -0,0 +1,80 @@
+%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.114
+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}
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE.Flora %{buildroot}/usr/share/license/%{name}
+
+%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
+/usr/share/license/%{name}
+
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/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..55158d3
--- /dev/null
+++ b/src/CamDeviceCapacity.cpp
@@ -0,0 +1,715 @@
+
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..b403a8a
--- /dev/null
+++ b/src/CamTypeConverter.cpp
@@ -0,0 +1,672 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..15cd62a
--- /dev/null
+++ b/src/cam.c
@@ -0,0 +1,924 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..f20517c
--- /dev/null
+++ b/src/cam_animation.c
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..a8f8161
--- /dev/null
+++ b/src/cam_app.c
@@ -0,0 +1,8669 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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;
+ }
+
+ /* mime type */
+ if (ad->service_mime != NULL) {
+ if ((strcmp(ad->service_mime, SERVICE_MIME_TYPE_IMAGE_1) == 0)
+ || (strcmp(ad->service_mime, SERVICE_MIME_TYPE_IMAGE_2) == 0)) {
+ 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)) {
+ args->cam_mode = CAM_CAMCORDER_MODE;
+ } else {
+ cam_critical(LOG_UI, "invalid mime type");
+ args->cam_mode = CAM_CAMERA_MODE;
+ }
+ } else {
+ cam_critical(LOG_UI, "service mime is NULL");
+ args->cam_mode = CAM_CAMERA_MODE;
+ }
+
+ /* allow switch */
+ const char *val = NULL;
+ service_get_extra_data(service, SERVICE_OPTIONAL_KEY_ALLOW_SWITCH, (char **)&val);
+ if (val) {
+ if (0 == strcmp(val, "true")) {
+ args->allow_switch = TRUE;
+ args->cam_mode = CAM_CAMERA_MODE;
+ } else {
+ args->allow_switch = FALSE;
+ }
+ } else {
+ args->allow_switch = FALSE;
+ }
+
+ /* get caller appl. */
+ val = NULL;
+ 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 = REC_SIZE_LIMIT_DEFAULT;
+ }
+
+ 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, "allow_switch =%d", args->allow_switch);
+ 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 100755
index 0000000..c929864
--- /dev/null
+++ b/src/cam_config.c
@@ -0,0 +1,361 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..9056983
--- /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.1 (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..6ec53fa
--- /dev/null
+++ b/src/cam_debug.c
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..6bbced2
--- /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.1 (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 100755
index 0000000..ebad409
--- /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.1 (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 100755
index 0000000..1b1665d
--- /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.1 (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..5f965a0
--- /dev/null
+++ b/src/cam_file.c
@@ -0,0 +1,489 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..453fd94
--- /dev/null
+++ b/src/cam_lbs.c
@@ -0,0 +1,304 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..efdb0ec
--- /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.1 (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..ae3045c
--- /dev/null
+++ b/src/cam_menu_composer.c
@@ -0,0 +1,1254 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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;
+
+ if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL
+ && ad->exe_args->allow_switch == FALSE
+ && camapp->camera_mode == CAM_CAMCORDER_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
+ && ad->exe_args->allow_switch == FALSE
+ && 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
+ && ad->exe_args->allow_switch == FALSE
+ && 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
+ && ad->exe_args->allow_switch == FALSE
+ && 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
+ && ad->exe_args->allow_switch == FALSE
+ && 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..5d799ad
--- /dev/null
+++ b/src/cam_mm.c
@@ -0,0 +1,2431 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..17cf9e6
--- /dev/null
+++ b/src/cam_popup.c
@@ -0,0 +1,392 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..6a58ecb
--- /dev/null
+++ b/src/cam_rec.c
@@ -0,0 +1,495 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..6cb88c9
--- /dev/null
+++ b/src/cam_sound.c
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..fc6851a
--- /dev/null
+++ b/src/cam_ta.c
@@ -0,0 +1,620 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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 100755
index 0000000..49102c7
--- /dev/null
+++ b/src/cam_typeconverter.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..f817810
--- /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.1 (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..d37ea4e
--- /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.1 (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 100755
index 0000000..eb8491f
--- /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.1 (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..6dbc292
--- /dev/null
+++ b/src/camera_utils.c
@@ -0,0 +1,1461 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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..07235bd
--- /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.1 (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..1f76c1e
--- /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.1 (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..a79b75e
--- /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.1 (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..76b92d8
--- /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.1 (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..94d585d
--- /dev/null
+++ b/src/edc-callback/cam_toolbar_edc_callback.c
@@ -0,0 +1,8327 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (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
+
+#define EDIT_SHOTCUTS_CONTIAIN_CORRECT_W 10
+#define EDIT_SHOTCUTS_CONTIAIN_CORRECT_H 10
+
+
+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 (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) && (ad->exe_args->allow_switch == FALSE)){
+ __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) && (ad->exe_args->allow_switch == FALSE)){
+ __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;
+ if (parent_shortcuts.w * parent_shortcuts.h < sub_shortcuts.w * sub_shortcuts.h) {
+ swap_rel1_x = sub_shortcuts.x;
+ swap_rel1_y = sub_shortcuts.y;
+ swap_w = sub_shortcuts.w;
+ swap_h = sub_shortcuts.h;
+
+ cur_rel1_x = parent_shortcuts.x;
+ cur_rel1_y = parent_shortcuts.y;
+ cur_w = parent_shortcuts.w;
+ cur_h = parent_shortcuts.h;
+
+ } else {
+ 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,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_W,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_H);
+ 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,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_W,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_H);
+ 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,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_W,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_H);
+ 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("==%d==", i);
+ DEBUG_TRACE("x y w h%d %d %d %d", parent_rect.x, parent_rect.y, parent_rect.w, parent_rect.h);
+ DEBUG_TRACE("x y w h%d %d %d %d", sub_rect.x, sub_rect.y, sub_rect.w, sub_rect.h);
+ gboolean sub_in_parent = FALSE;
+ sub_in_parent = __cam_toolbar_shortcuts_rect_contain_check(sub_rect,
+ parent_rect,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_W,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_H);
+ if (sub_in_parent) {
+ DEBUG_TRACE("%d", i);
+ 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,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_W,
+ EDIT_SHOTCUTS_CONTIAIN_CORRECT_H);
+ 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) {
+ if (ad->swap_data) {
+ if (ad->swap_data->is_on_menu_bar) {
+ if (ad->swap_data->menu_bar_no != swap_ele->menu_bar_no) {
+ 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[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);
+ }
+ }
+ }
+ }
+ 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..410876f
--- /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.1 (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..8051632
--- /dev/null
+++ b/ug-camera-efl.manifest
@@ -0,0 +1,13 @@
+<manifest>
+ <define>
+ <domain name="ug-camera-efl" />
+ </define>
+ <assign>
+ <filesystem path="/usr/ug/res/icons/ug-camera-efl/ug-camera-efl.png" label="_" />
+ <filesystem path="/opt/usr/ug/data/ug-camera-efl/.camera.ini" label="ug-camera-efl" />
+ <filesystem path="/opt/usr/ug/data/ug-camera-efl" label="ug-camera-efl" type="transmutable" />
+ </assign>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
diff --git a/ug-camera-efl.png b/ug-camera-efl.png
new file mode 100755
index 0000000..a8a2871
--- /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>
diff --git a/ug.camera-efl.include b/ug.camera-efl.include
new file mode 100755
index 0000000..7511392
--- /dev/null
+++ b/ug.camera-efl.include
@@ -0,0 +1,26 @@
+$1 ail::db rw
+$1 cbhm r
+$1 dbus rx
+$1 deviced w
+$1 device::camera rw
+$1 device::hwcodec r
+$1 device::mdnie rw
+$1 device::video rw
+$1 isf rx
+$1 mdm-server w
+$1 media-data::db rw
+$1 media-server rwx
+$1 pkgmer::db r
+$1 power_manager w
+$1 sound_server rw
+$1 stt-server rx
+$1 system::use_internet r
+$1 tts-server x
+$1 ug-image-viewer-efl wx
+$1 ug-camera-efl rwxat
+$1 vcs-server rwx
+$1 xorg rw
+$1 image-filter-d::db rw
+$1 ug.image-viewer-efl include
+$1 ug.setting-location-efl include
+$1 ug.setting-voice-efl include